找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2676|回复: 5
收起左侧

单片机多位数码管高位为零时不显示的程序该如何写?求思路

[复制链接]
ID:45973 发表于 2020-12-9 09:24 | 显示全部楼层 |阅读模式
各位大神,请问计数器程序,高位为零时不要显示的程序怎么写?谢谢!
回复

使用道具 举报

ID:824490 发表于 2020-12-9 16:15 | 显示全部楼层
以下是伪代码。希望你能看懂

显示函数()
{

//置首位0标志
//第一位消隐
//送第一位位码
//读第一位段值
// 如要 段值 =0 且首位0标志置位 则 跳过第一位
// 如要 段值 不等于0 则
   //读第一位段码
   //送第一位段码
   //清首位0标志
//第二位消隐
.
.
.
.
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:517466 发表于 2020-12-9 23:54 | 显示全部楼层
通常不是在向显示缓冲单元赋值的时候处理的吗?你要显示的数据,个位在最后,十位在前。在设置的时候,先清除所有位为不显示的段位码。然后从个位依次向十位、百位赋值。显示程序里,是不需要做任何判断的,直接把各个位置的笔段数码数据送出去,逐个显示就行。编程的一个原则是,代码越简单越好。搞的太复杂,不容易懂,维护起来也麻烦啊。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:716656 发表于 2020-12-9 15:46 | 显示全部楼层
大概参考下,16为
  1. void main()
  2. {        while(1)
  3.         {
  4.         keyscan();
  5.         if(num<10)
  6.         {
  7.                 a0=num;b0=16;c0=16;d0=16;e0=16;f0=16;
  8.         }
  9.         else
  10.         {
  11.                 if(num<100)
  12.                 {a0=num/10;b0=num%10;c0=16;d0=16;e0=16;f0=16;}
  13.                 else
  14.                 {
  15.                         if(num<1000)
  16.                         {a0=num/100;b0=num%100/10;c0=num%10;d0=16;e0=16;f0=16;}
  17.                         else
  18.                         {
  19.                                 if(num<10000)
  20.                                 {a0=num/1000;b0=num%1000/100;c0=num%100/10;d0=num%10;e0=16;f0=16;}
  21.                                 else
  22.                                 {
  23.                                         if(num<100000)
  24.                                         {a0=num/10000;b0=num%10000/1000;c0=num%1000/100;d0=num%100/10;e0=num%10;f0=16;}
  25.                                         else
  26.                                         {
  27.                                                 if(num<1000000)
  28.                                                 {a0=num/100000;b0=num%100000/10000;c0=num%10000/1000;d0=num%1000/100;e0=num%100/10;f0=num%10;}
  29.                                         }
  30.                                 }
  31.                         }
  32.                 }
  33.         }
  34.         display(a0,b0,c0,d0,e0,f0);
  35.         }
  36. }
复制代码
全灭

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:716656 发表于 2020-12-9 15:47 | 显示全部楼层
  1. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  2.                         0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
复制代码
回复

使用道具 举报

ID:213173 发表于 2020-12-10 11:22 | 显示全部楼层
给你一个示例,有你需要的多位数码管高位为零不显示的代码。
ds18b20温度报警4位数码管显示 仿真.zip (153.36 KB, 下载次数: 27)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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