📄 clock.c
字号:
#include <AT89X51.h>
#include <intrins.h>
unsigned char second,mininute,hour;
unsigned char s_second,s_mininute,s_hour;
unsigned char t_second,t_mininute,t_hour;
unsigned char a_second,a_mininute,a_hour;
unsigned char setw = 0;
unsigned char count_num=0;
unsigned char show_count=0;
bit rset_flag=0;
bit aset_flag=0;
bit atime =0;
unsigned char dis_dc[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
unsigned char dis[8]={0,0,15,0,0,15,0,0};
unsigned char get_key();
unsigned char key_is();
void key_deal(unsigned char k);
void show();
void main()
{
unsigned char t_key;
second =0; mininute = 0; hour=0;
P1 =0x00;
TMOD = 0x01;
TL0 = 0xb0;
TH0 = 0x3c;
TR0 =1;
ET0 =1;
EA =1;
while(1)
{
t_key = get_key();
key_deal(t_key);
if(aset_flag==1&&rset_flag==0)
{
if(a_second==second&&a_mininute==mininute&&a_hour==hour)
atime =1;
}
if(atime ==1)
P3_0=1;
else
P3_0=0;
show();
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void delay1()
{
unsigned char i,j;
for(i=0;i<0x02;i++)
for(j=0;j<0xff;j++)
;
}
void show()
{
unsigned char shreg = 0x70;
unsigned char shi;
if(rset_flag==1)
{
dis[0]=t_second%10;
dis[1]=t_second/10;
dis[3]=t_mininute%10;
dis[4]=t_mininute/10;
dis[6]=t_hour%10;
dis[7]=t_hour/10;
}
else
{
dis[0]=second%10;
dis[1]=second/10;
dis[3]=mininute%10;
dis[4]=mininute/10;
dis[6]=hour%10;
dis[7]=hour/10;
}
if(rset_flag==1)
{
if(show_count<30)
{
switch(setw)
{
case 0:
dis[0]=0x0a;
dis[1]=0x0a;
break;
case 1:
dis[3]=0x0a;
dis[4]=0x0a;
break;
case 2:
dis[6]=0x0a;
dis[7]=0x0a;
break;
}
}
if(show_count>=60)
show_count =0;
else
show_count++;
}
if(atime==1)
{
unsigned char i;
if(show_count<30)
for(i=0;i<8;i++)
dis[i]=0x0a;
if(show_count>60)
show_count=0;
else
show_count++;
}
for (shi=0;shi<8;shi++)
{
P2 = shreg + dis[shi];
delay1();
shreg-=0x10;
}
return;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
void t0 (void)interrupt 1 using 0
{
TL0 = 0xb0;
TH0 = 0x3c;
if(count_num==19)
{
count_num = 0;
second++;
if(second>59)
{
second =0;
mininute++;
if(mininute>59)
{
mininute = 0;
hour++;
if(hour>23)
hour =0;
}
}
}
else
count_num++;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char get_key()
{
unsigned char tm_key;
if(tm_key=key_is())
{
while(key_is())
show();
return tm_key ;
}
return 0;
}
void delay10()
{
unsigned char i,j;
for(i=0;i<0x0a;i++)
for(j=0;j<0xff;j++)
;
}
unsigned char key_is()
{
unsigned char tem_key,tem_key0;
tem_key = P1;
tem_key &= 0x1f;
switch (tem_key)
{
case 0x01:
case 0x02:
case 0x04:
case 0x08:
case 0x10:
delay10();
tem_key0 = P1;
tem_key &= 0x1f;
if(tem_key==tem_key0)
return tem_key;
else
return 0;
default:
return 0;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void key_deal( unsigned char k)
{
switch(k)
{
case 0x01:
if(rset_flag==0)
{
t_second = second;
t_mininute = mininute;
t_hour = hour;
rset_flag=1;
}
else if (rset_flag==1)
{
if(aset_flag ==0)
{
second = t_second;
mininute= t_mininute;
hour = t_hour;
}
else if(aset_flag ==1)
{
a_second = t_second;
a_mininute= t_mininute;
a_hour = t_hour;
}
rset_flag = 0;
}
break;
case 0x02:
setw++;
if(setw>3)
setw =0;
break;
case 0x04:
switch(setw)
{
case 0:
t_second++;
if(t_second>59)
t_second = 0;
break;
case 1:
t_mininute++;
if(t_mininute>59)
t_mininute = 0;
break;
case 2:
t_hour++;
if(t_hour>23)
t_hour =0;
break;
default:
break;
}
break;
case 0x08:
switch(setw)
{
case 0:
t_second--;
if(t_second==255)
t_second = 59;
break;
case 1:
t_mininute--;
if(t_mininute==255)
t_mininute =59;
break;
case 2:
t_hour--;
if(t_hour==255)
t_hour =23;
break;
default:
break;
}
break;
case 0x10:
if(aset_flag==0)
aset_flag=1;
else
{
aset_flag =0;
if(atime==1)
atime =0;
}
break;
default:
break;
}
}
////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -