51动态数码管显示时间
时间: 2023-09-15 16:22:35 浏览: 97
您好,以下是51单片机使用动态数码管显示时间的示例代码:
```
#include<reg52.h> //头文件
sbit D1 = P2^2; //定义数码管位选引脚
sbit D2 = P2^3;
sbit D3 = P2^4;
sbit D4 = P2^5;
unsigned char code table[] = { //数码管显示0~9的编码表
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
void delay(unsigned int i){ //延时函数
while(i--);
}
void main(){
unsigned char h = 10, m = 10, s = 10; //初始时间为10:10:10
while(1){
D1 = 1; D2 = D3 = D4 = 0; //显示小时的十位数
P0 = table[h/10];
delay(1000);
D2 = 1; D1 = D3 = D4 = 0; //显示小时的个位数
P0 = table[h%10];
delay(1000);
D3 = 1; D1 = D2 = D4 = 0; //显示分钟的十位数
P0 = table[m/10];
delay(1000);
D4 = 1; D1 = D2 = D3 = 0; //显示分钟的个位数
P0 = table[m%10];
delay(1000);
s++; //秒钟加1
if(s == 60){ //如果秒钟达到60秒
s = 0; //秒钟清零
m++; //分钟加1
if(m == 60){ //如果分钟达到60分钟
m = 0; //分钟清零
h++; //小时加1
if(h == 24){ //如果小时达到24小时
h = 0; //小时清零
}
}
}
}
}
```
这段代码使用了动态数码管进行时间的显示,每个数码管依次显示小时的十位数、小时的个位数、分钟的十位数、分钟的个位数,每隔1秒钟进行一次更新。其中,通过s、m、h三个变量来记录秒、分、时的数值,通过if语句进行时间的进位和清零。