数码管显示时间7秒后切换日期,日期显示3秒后切换时间显示
时间: 2024-03-27 13:35:03 浏览: 27
好的,以下是51单片机使用动态数码管显示时间和日期的示例代码,时间和日期之间每隔7秒进行切换,每个数码管显示时间和日期的不同位数,每个数字之间用冒号隔开,时间和日期显示时间均为3秒:
```
#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 display_time(unsigned char h, unsigned char m, unsigned char s){ //显示时间函数
D1 = 1; D2 = D3 = D4 = 0; //显示小时的十位数
P0 = table[h/10];
delay(500);
D2 = 1; D1 = D3 = D4 = 0; //显示小时的个位数
P0 = table[h%10];
delay(500);
P0 = 0x39; //显示冒号
delay(500);
D3 = 1; D1 = D2 = D4 = 0; //显示分钟的十位数
P0 = table[m/10];
delay(500);
D4 = 1; D1 = D2 = D3 = 0; //显示分钟的个位数
P0 = table[m%10];
delay(500);
P0 = 0x39; //显示冒号
delay(500);
D1 = 1; D2 = D3 = D4 = 0; //显示秒钟的十位数
P0 = table[s/10];
delay(500);
D2 = 1; D1 = D3 = D4 = 0; //显示秒钟的个位数
P0 = table[s%10];
delay(500);
}
void display_date(unsigned char year, unsigned char month, unsigned char day){ //显示日期函数
D1 = 1; D2 = D3 = D4 = 0; //显示年份的千位数
P0 = table[year/1000];
delay(500);
D2 = 1; D1 = D3 = D4 = 0; //显示年份的百位数
P0 = table[year%1000/100];
delay(500);
D3 = 1; D1 = D2 = D4 = 0; //显示年份的十位数
P0 = table[year%100/10];
delay(500);
D4 = 1; D1 = D2 = D3 = 0; //显示年份的个位数
P0 = table[year%10];
delay(500);
P0 = 0x39; //显示斜杠
delay(500);
D1 = 1; D2 = D3 = D4 = 0; //显示月份的十位数
P0 = table[month/10];
delay(500);
D2 = 1; D1 = D3 = D4 = 0; //显示月份的个位数
P0 = table[month%10];
delay(500);
P0 = 0x39; //显示斜杠
delay(500);
D3 = 1; D1 = D2 = D4 = 0; //显示日期的十位数
P0 = table[day/10];
delay(500);
D4 = 1; D1 = D2 = D3 = 0; //显示日期的个位数
P0 = table[day%10];
delay(500);
}
void main(){
unsigned char h = 10, m = 10, s = 0; //初始时间为10:10:00
unsigned char year = 21, month = 4, day = 16; //初始日期为2021年4月16日
unsigned int i = 0;
while(1){
i++;
if(i == 7000){ //时间和日期之间每隔7秒进行切换
i = 0;
s = 0; //时间切换时,秒钟清零
D1 = D2 = D3 = D4 = 0; //数码管全部关闭
delay(500);
display_date(year, month, day); //显示日期
delay(3000); //日期显示时间为3秒
}
else{
display_time(h, m, s); //显示时间
s++; //秒钟加1
if(s == 60){ //如果秒钟达到60秒
s = 0; //秒钟清零
m++; //分钟加1
if(m == 60){ //如果分钟达到60分钟
m = 0; //分钟清零
h++; //小时加1
if(h == 24){ //如果小时达到24小时
h = 0; //小时清零
}
}
}
}
}
}
```
这段代码在原有的时间显示基础上,增加了显示日期的功能。通过i变量来记录时间和日期的切换,每隔7秒进行一次切换。在时间切换为日期时,将秒钟清零,数码管全部关闭,显示日期,时间显示时间为3秒。在时间和日期切换之间,通过s、m、h三个变量来记录秒、分、时的数值,通过if语句进行时间的进位和清零。