#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;
}
}
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;
}
}
627

被折叠的 条评论
为什么被折叠?



