找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 393|回复: 7
收起左侧

请教单片机代码编写 功能是读取时间,并在屏幕中绘制一个数字

[复制链接]
ID:16255 发表于 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数组不能被正确调用。
现在问题是,这一个数组要怎么建立才合理呢?
回复

使用道具 举报

ID:1109793 发表于 2024-2-17 07:56 | 显示全部楼层
要不试试用一个变量先接收了hour()的值?
回复

使用道具 举报

ID:1111026 发表于 2024-2-17 10:52 | 显示全部楼层
      好多年不做这个了,回答可能会怡笑方家。请看看建立数组的NUM_NAMES[]数据类型和display.drawBitmap的中 Number_X的数据类型是否一致?
      这里还有一个变量 hour() / 10   这个变量是否和NUM_NAMES[]匹配?  建议这个变量随便设置
      i = hour() / 10    之后再写入NUM_NAMES[i]试试呢
回复

使用道具 举报

ID:16255 发表于 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函数里去?
回复

使用道具 举报

ID:69038 发表于 2024-2-17 16:57 | 显示全部楼层
mengsiu 发表于 2024-2-17 15:49
hour返回的是数值,除以10是取其十位,与其对应的还有一个除余10,取个位。现在调用NUM_NAMES是能返回Num ...

了解一下二维数组。
回复

使用道具 举报

ID:866313 发表于 2024-2-17 18:00 | 显示全部楼层
Number_X 是什么类型的数据呢?
回复

使用道具 举报

ID:384109 发表于 2024-2-17 18:18 | 显示全部楼层
看调用的显示函数,number明显应该是个指针
回复

使用道具 举报

ID:584814 发表于 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);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表