51数码管动态显示程序 (51数码管动态显示)

51数码管动态显示程序

本程序展示了使用51单片机动态显示数码管。该程序可以显示0-999的数字,并可以根据需要设定显示速度。

程序原理

该程序采用中断定时器来控制数码管的显示。中断定时器每隔一段时间产生一次中断,中断服务程序将数字转换成数码管的显示码,并输出到数码管的驱动电路。

数码管的显示码是一个8位的二进制数,每一位对应一个数码管的段。当某一位为1时,表示该段点亮;当某一位为0时,表示该段熄灭。

下面是数码管显示码与数字的对应关系表:

| 数字 | 显示码(十六进制) | |---|---| | 0 | 0x3F | | 1 | 0x06 | | 2 | 0x5B | | 3 | 0x4F | | 4 | 0x66 | | 5 | 0x6D | | 6 | 0x7D | | 7 | 0x07 | | 8 | 0x7F | | 9 | 0x6F |

程序代码

c include typedef unsigned char u8;// 数码管显示码 u8 code DisplayCode[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F };// 数码管驱动端口 define TUBE1 P1 define TUBE2 P0// 中断定时器中断服务程序 void Timer0_ISR() interrupt 1 {static u8 cnt = 0;static u8 num = 0;TH0 = 0xFC; // 计数器的初值TL0 = 0x66; // 计数器的初值// 显示数字if (cnt == 0) {TUBE1 = DisplayCode[num / 100];} else if (cnt == 1) {TUBE1 = DisplayCode[(num % 100) / 10];} else if (cnt == 2) {TUBE1 = DisplayCode[num % 10];}cnt++;cnt %= 3; }// 主函数 void main() {// 设置中断定时器TMOD = 0x01; // 定时器0模式控制寄存器TH0 = 0xFC; // 计数器的初值TL0 = 0x66; // 计数器的初值TR0 = 1; // 启动定时器0ET0 = 1; // 中断定时器0中断允许位// 主循环while (1) {} }

实验结果

程序下载到51单片机后,数码管会动态显示0-999的数字。数字显示速度可以通过调整中断定时器的计数初值来设定。

本程序可以应用于各种需要动态显示数字的场合,如数字时钟、计步器等。


51单片机如何利用4个七段数码管采用动态显示显示4位数字,如2035?

不停地利用人的视觉暂留,在一个合适的速度下依次显示1个2,1个0,1个3,1个5.

当显示一个“2”的时候,其他三位都是空的,以此类推。

但人眼是看不到短时间内这些变化的,假如这个行为不断循环,那么人看到的就是“2035”,而不是单个的数字。

比如说吧:

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论