设计一个基于AT89C51单片机的电子钟
答案:1 悬赏:10 手机版
解决时间 2021-02-09 07:41
- 提问者网友:两耳就是菩提
- 2021-02-08 12:42
设计一个基于AT89C51单片机的电子钟
最佳答案
- 五星知识达人网友:煞尾
- 2021-02-08 13:02
#include
#define uchar unsigned char
sbit k1=P1^0;
sbit k2=P1^1;
sbit sounder=P3^7;
uchar h=12,m=0,s=58,c=0;
//延时子程序
void delay(unsigned int a){
while(--a);
}
//数码管显示(共阳): 0 1 2 3 4 5 6 7 8 9
uchar code dArr[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
// 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
// 黑 全亮 点 - A P
0xFF,0x00,0x7f,0xbf,0x88,0x8c};
uchar dBuf[6]; //显示缓冲区
//显示子程序
void display(void)
{ uchar i,ik;
ik=0x01;
for(i=0;i<6;i++){
P0=dArr[dBuf[i]];
P2=ik;
delay(200); //延时
P2=0x00; //关闭显示
ik<<=1;
}
}
//主函数
void main(void)
{
TMOD=0x01;
EA=ET0=TR0=1;
while(1){
if(k1==0|k2==0){
delay(200);
if(k1==0){
while(k1==0)display();
h=(h+1)%12;//时加1,除以24可以改为24小时制。
}
if(k2==0){
while(k2==0)display();
m=(m+1)%60;//分加1
s=0; //秒清零
}
}
dBuf[0]=h/10;
dBuf[1]=h%10+10;
dBuf[2]=m/10;
dBuf[3]=m%10+10;
dBuf[4]=s/10;
dBuf[5]=((c)<100)?(s%10):(s%10+10);//秒,秒点闪效果
display();
}
}
tim0()interrupt 1 using 1
{
TL0=(65536-5000)%0x100;
TH0=(65536-5000)/0x100;
c++;
if(c==200){
c=0;s++;
if(s==60){
s=0;m++;
if(m==60){
m=0;h=(h+1)%12;
}
}
}
if(m==0){sounder=!sounder;} //整点响铃
else{sounder=0;}
}
追问你这是C语言
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯