2.9

#include<reg52.h>


sbit BUZZ = P2^7;


extern void InitLcd1602();
extern void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str);
void ShowBcdByte(unsigned char x,unsigned char y,unsigned char bcd);
extern void E2Read(unsigned char *buf,unsigned char addr,unsigned char len);
extern void E2Write(unsigned char *buf,unsigned char addr,unsigned char len);
extern unsigned char KeyPro();
void ShowTime();
void SetClock();
 
unsigned char sec=0;
unsigned char min=0;
unsigned char hour=12 ;
unsigned char str[2];


bit flag = 0;
bit Set_c = 0;
bit buzzflag = 0;


void main()
{


EA = 1;
     TMOD = 0x01;
TH0 = 0xFC;
TL0 = 0x67;
ET0 = 1;
     TR0 = 1; 


InitLcd1602();
LcdShowStr(0,0,"clock:  :  ");
LcdShowStr(4,1,"  :  :  ");
 


while(1)
{
     if((KeyPro() == '=')&&(Set_c == 0))
 {
     EA = 0;
 Set_c = 1;
 }
 if(Set_c == 1)
 {
 SetClock();
     }
 ShowTime();
 if((str[0] == min)&&(str[1] == hour))
 {
      buzzflag = 1;
 }  
}
}


void SetClock()
{
     unsigned char num;
static unsigned char C_hour = 0,C_min = 0;


num = KeyPro();
if(num == 1)
{
    C_min++;
}
else if(num == 4)

    C_min--;
}
else if(num == 2)
{
    C_hour++;
}
else if(num == 5)

    C_hour--;
}
else if(num == '=')
{
    Set_c = 0;
EA = 1;
str[0] = C_min;
str[1] = C_hour;
}
ShowBcdByte(6,0,C_hour);
ShowBcdByte(9,0,C_min);



void ShowTime()
{
     unsigned char buf[3];


      E2Read(buf,0x20,sizeof(buf));


   if(flag == 1)
{
flag = 0;
sec++;
if(sec >= 60)
{
   sec = 0;
min++;
if(min >= 60)
{
   min = 0;
   hour++;
if(hour >= 24)
{
   hour = 0;
}
}
}
buf[0] = sec;
buf[1] = min;
buf[2] = hour;
E2Write(buf,0x20,sizeof(buf));
   }


sec = buf[0];
min = buf[1];
hour = buf[2];
ShowBcdByte(4,1,hour);
   ShowBcdByte(7,1,min);
   ShowBcdByte(10,1,sec);
}


void ShowBcdByte(unsigned char x,unsigned char y,unsigned char bcd)
{
     unsigned char str[3];
 
str[0] = (bcd/10)+'0';
str[1] = (bcd%10)+'0';
str[2] = '\0';
LcdShowStr(x,y,str);
}


void InterruptTimer0() interrupt 1
{
static unsigned int cnt = 0;


     TH0 = 0xFC;
TL0 = 0x67;
cnt++;
if(cnt >= 1000)
{
    cnt = 0;
flag = 1;
}
if(buzzflag == 1)
{
    BUZZ=~BUZZ;

}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值