标题: 请教单片机代码编写 功能是读取时间,并在屏幕中绘制一个数字 [打印本页]

作者: mengsiu    时间: 2024-2-17 00:19
标题: 请教单片机代码编写 功能是读取时间,并在屏幕中绘制一个数字
现在有一段代码如下,可以运行,功能是读取时间,并在屏幕中绘制一个数字:
  1.       switch (hour() / 10) {
  2.         case 0:
  3.           {
  4.             display.drawBitmap(0, 16, Number_0, 36, 72, GxEPD_BLACK);
  5.             break;
  6.           }
  7.         case 1:
  8.           {
  9.             display.drawBitmap(0, 16, Number_1, 36, 72, GxEPD_BLACK);
  10.             break;
  11.           }
  12.         case 2:
  13.           {
  14.             display.drawBitmap(0, 16, Number_2, 36, 72, GxEPD_BLACK);
  15.             break;
  16.           }
  17.         case 3:
  18.           {
  19.             display.drawBitmap(0, 16, Number_3, 36, 72, GxEPD_BLACK);
  20.             break;
  21.           }
  22.         case 4:
  23.           {
  24.             display.drawBitmap(0, 16, Number_4, 36, 72, GxEPD_BLACK);
  25.             break;
  26.           }
  27.         case 5:
  28.           {
  29.             display.drawBitmap(0, 16, Number_5, 36, 72, GxEPD_BLACK);
  30.             break;
  31.           }
  32.         case 6:
  33.           {
  34.             display.drawBitmap(0, 16, Number_6, 36, 72, GxEPD_BLACK);
  35.             break;
  36.           }
  37.         case 7:
  38.           {
  39.             display.drawBitmap(0, 16, Number_7, 36, 72, GxEPD_BLACK);
  40.             break;
  41.           }
  42.         case 8:
  43.           {
  44.             display.drawBitmap(0, 16, Number_8, 36, 72, GxEPD_BLACK);
  45.             break;
  46.           }
  47.         case 9:
  48.           {
  49.             display.drawBitmap(0, 16, Number_9, 36, 72, GxEPD_BLACK);
  50.             break;
  51.           }
  52.       }
复制代码
这当中使用到switch语句,而且每个条件触发的命令都类似。但这一大串代码看起来很臃肿,我想将其改成以下形式:
  1. //建立一个数组
  2. NUM_NAMES[] = { Number_0, Number_1, Number_2, Number_3, Number_4, Number_5, Number_6, Number_7, Number_8, Number_9 };
  3. display.drawBitmap(0, 16, NUM_NAMES[(hour() / 10)], 36, 72, GxEPD_BLACK);
复制代码
上方代码并不能正常运行,NUM_NAMES数组不能被正确调用。
现在问题是,这一个数组要怎么建立才合理呢?

作者: xiaobendan001    时间: 2024-2-17 07:56
要不试试用一个变量先接收了hour()的值?
作者: bailu0216    时间: 2024-2-17 10:52
      好多年不做这个了,回答可能会怡笑方家。请看看建立数组的NUM_NAMES[]数据类型和display.drawBitmap的中 Number_X的数据类型是否一致?
      这里还有一个变量 hour() / 10   这个变量是否和NUM_NAMES[]匹配?  建议这个变量随便设置
      i = hour() / 10    之后再写入NUM_NAMES[i]试试呢
作者: mengsiu    时间: 2024-2-17 15:49
bailu0216 发表于 2024-2-17 10:52
好多年不做这个了,回答可能会怡笑方家。请看看建立数组的NUM_NAMES[]数据类型和display.drawBitmap ...

hour返回的是数值,除以10是取其十位,与其对应的还有一个除余10,取个位。现在调用NUM_NAMES是能返回Number_X的,只是怎么样将这个返回的Number_X应用到display.drawBitmap函数里去?
作者: zhuls    时间: 2024-2-17 16:57
mengsiu 发表于 2024-2-17 15:49
hour返回的是数值,除以10是取其十位,与其对应的还有一个除余10,取个位。现在调用NUM_NAMES是能返回Num ...

了解一下二维数组。
作者: cedtek    时间: 2024-2-17 18:00
Number_X 是什么类型的数据呢?
作者: 人中狼    时间: 2024-2-17 18:18
看调用的显示函数,number明显应该是个指针
作者: man1234567    时间: 2024-2-17 20:13
hour()后面貌似应该有;
或者改成下面的试试:
unsigned char xx;xx=hour();xx=xx/10;
NUM_NAMES[] = { Number_0, Number_1, Number_2, Number_3, Number_4, Number_5, Number_6, Number_7, Number_8, Number_9 };
display.drawBitmap(0, 16, NUM_NAMES[xx], 36, 72, GxEPD_BLACK);




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1