永发信息网

设计一个基于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语言
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯