1.头文件和定义,代码还使用了 sbit 定义来声明了两个变量 duan 和 wei,它们实际上是 P2.6 和 P2.7 端口的别名,用于控制数码管的段选和位选信号。这种方法可以使代码更具可读性,并提高代码的可维护性。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit duan=P2^6; //段选信号的锁存器控制
sbit wei=P2^7; //位选信号的锁存器控制
2.使用一个 16 个元素的数组 table,该数组包含了 0-15 的数字在数码管中对应的段码值。
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0-F的码表
3.延时函数部分
(数码管的显示主要依靠于人的视觉暂存和数码管的余辉),前面亮灯灭灯里面提到过链接: link
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
{
for(j=0;j<113;j++)
{
;
}
}
}
4.主函数部分
在主函数 main() 中,通过一个 while 循环,不断地执行以下操作:
使用 for 循环遍历 table 数组,将当前数字的段码值写入到 P0 口,这个数字的范围是 0-15。
使 duan 信号为高电平,将当前数字的段码值锁存到数码管中。
将 duan 信号置为低电平,使段选信号锁存器不再控制数码管。
将 P0 置为 0xdf,使所有位选信号都为低电平,让所有数码管都处于被选中状态。
使 wei 信号为高电平,选中当前的数码管。
将 wei 信号置为低电平,取消对数码管的选择,完成一次数码管的显示。
使用 delay() 函数延时一秒钟,然后继续循环显示下一个数字。
main()
{
uchar num;
while(1)
{
for(num=0;num<16;num++)
{
P0=table[num];
duan=1;
duan=0;
P0=0xdf;
wei=1;
wei=0;
delay(1000);
}
}
}