Proteus C51仿真学习板2——数码管

数码管,顾名思义就是用于显示数字的,无论是小型的闹钟、门牌指示等,还是大型的红绿灯、显示屏等,都是由最基础的LED拼凑而成。

数码管分为共阳极(+极接一起图b)和共阴极(-极接一起图c),将8个LED按照一定字符形状摆放即可显示不同数字。

单个数码管使用如上图,可发现要想显示数字0,那么abcdef亮,g和dp灭,如果是共阳极,那么abcdefg=0,对应的LED亮,编码后位dpgfedcba =11000000’b=0xC0,相反如果是共阴极,那么abcdefg=1,与共阳极相反,编码后段码位:0x3F,可以反向2者是取反的,即0x3F+0xC0=0xFF (或0x3F = ~ 0xC0)。

当2个数码管并排如上图,可发现有5和10引脚作为共阴极公共引脚,例如3 号引脚=1,如果P5=0,P10=1,那么第一个数码管的A灭,第二数码管的A亮;如果如果P5=0,P10=0,那么2个数码管的A都亮。这样就可以想亮哪个LED就亮哪个LED。

显示0-9那么就需要对数码管进行编码,共阴极和共阳极编码是相反的。

0——00111111——0x3F

1——00000110——0x06

2——01011011——0x5B

3——01001111——0x4F

4——01100110——0x66

5——01101101——0x6D

6——01111101——0x7D

7——00000111——0x07

8——01111111——0x7F

9——01101111——0x6F

74HC373驱动芯片的使用详情请见LED点灯部分。
那么8位数码管是如何显示的呢?

 肉眼看到的是0-7是“静止”显示的,但实际上是一个个扫描动态显示的,当刷新频率较高时,就相当于是“静止”的。人眼能看到的动态刷新是50Hz,如灯泡的频率就是220V/50Hz。
那么8位数码管“静止”显示就需要至少400Hz。例程中是直接放在主函数中一直循环,而时钟是11.0592MHz,算上程序执行的延时,显示8位数码管绰绰有余。

 肉眼看到的是0-7是“静止”显示的,但实际上是一个个扫描动态显示的,当刷新频率较高时,就相当于是“静止”的。当动态刷新>=50Hz时,人眼就会看到显示是“静态的”,如灯泡的频率就是220V/50Hz。

那么8位数码管“静止”显示就需要至少400Hz。例程中是直接放在主函数中一直循环,而时钟是11.0592MHz,算上程序执行的延时,显示8位数码管绰绰有余。

还有一个问题:残影。当数码管扫描时,如果扫描过快,上一次显示还没有结束,下一次显示就到来,那么会看到数码管上有多余的残影。因此在编程中会加上消影的小段程序。

程序解读:
首先位选,显示哪一个数码管;
然后段选,选择显示的数字;
最后进行消隐,并循环8次进行。

#include <main.h>
​
void main(void)
{
  static uint8_t i = 0;
  SEG.Init();          //SEG初始化
​
  while(1)
  {  
    for(i = 0;i < 8;i++)  //动态显示0-7
    {
      SEG.Display(i,i);
    }  
  }
}

例程详情请见:C51 Proteus仿真板TB链接

https://item.taobao.com/item.htm?ft=t&id=659157293088

如需Proteus和Keil安装包,请关注公众号:

Proteus仿真店子

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值