📄 clock.c
字号:
#include<reg51.h>
#define uchar unsigned char
int j,k,i,a,h,m,A1,A2,A3,A4,A5,A6,second,min,hour;
sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
sbit key3=P1^3;
sbit key4=P1^4;
sbit P2_7=P2^7;
bit L=0;//长溢出标志位
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0X88,0XC6,0XC7,0XFF};//编码0~9,A,C,L,全黑
int code select[]={0x01,0x02,0x04,0x08,0x10,0x20};//位选通
int time[3];
int alarm1,alarm2;
int con=0;con1=0;
void delay(int i)//延时
{ for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void t0(void) interrupt 1//1S延时
{ static int t;
TF0=0;
t++;
if(t==15)
{t=0;L=1;
}
}
void display(uchar sh_c,uchar g_c,uchar sh_b,uchar g_b,uchar sh_a,uchar g_a)//显示部分
{ P0=table[sh_c];
P3=select[0];
delay(5);
P3=0;
P0=table[g_c];
P3=select[1];
delay(5);
P3=0;
P0=table[sh_b];
P3=select[2];
delay(5);
P3=0;
P0=table[g_b];
P3=select[3];
delay(5);
P3=0;
P0=table[sh_a];
P3=select[4];
delay(5);
P3=0;
P0=table[g_a];
P3=select[5];
delay(5);
P3=0;
}
void timing (void)//数字调整
{ EA=0;
if(!key1)
{delay(10);
while(!key1);
con1++;TR0=0;ET0=0;
}
if(con1>=2)
con1=0;TR0=1;ET0=1;
if(con1==0) //分钟调整
{ if(!key2)
{delay(10);
while(!key2);
{ m++;
if(m>=60) m=0;
}
}
if(!key3)
{delay(10);
while(!key3);
{ m--;
if(m<0) m=59;
}
}
A3=m/10;A4=m%10; //闪动
delay(10);
A3=13;A4=13;
display(A1,A2,A3,A4,A5,A6);
delay(10);
A3=m/10;A4=m%10;
}
if(con1==1) //小时调整
{ if(!key2)
{delay(10);
while(!key2);
{ h++;
if(h>=24) h=0;
}
}
if(!key3)
{delay(10);
while(!key3);
{ h--;
if(h<0) h=23;
}
}
A5=h/10;A6=h%10; //闪动
delay(10);
A5=13;A6=13;
display(A1,A2,A3,A4,A5,A6);
delay(10);
A5=h/10;A6=h%10;
}
EA=1;
}
void function(void)//功能设置
{ if(!key0)
{ delay(10);
while(!key0);
con++;
if(con>=3) con=0;
}
if(con==0)
{ A1=time[0]/10;
A2=time[0]%10;
A3=time[1]/10;
A4=time[1]%10;
A5=time[2]/10;
A6=time[2]%10;
}
if(con==1)//设置时间
{ m=time[1];h=time[2];
timing ();
time[1]=m;time[2]=h;
A1=11;
A2=12;
A3=time[1]/10;
A4=time[1]%10;
A5=time[2]/10;
A6=time[2]%10;
}
if(con==2)//设置闹钟
{ m=alarm1;h=alarm2;
timing ();
alarm1=m;alarm2=h;
A1=10;
A2=12;
A3=alarm1/10;
A4=alarm1%10;
A5=alarm2/10;
A6=alarm2%10;
}
}
void alarm(void)//闹钟开关
{ if(key4==0)
{if(time[1]==alarm1 && time[2]==alarm2)
{ P2_7=0;
delay(10);
display(A1,A2,A3,A4,A5,A6);//消除LED闪动
P2_7=1;
delay(10);
display(A1,A2,A3,A4,A5,A6);//消除LED闪动
}
else P2_7=1;
}
else P2_7=1;
}
void main()
{ TMOD=0x01;TH0=0x01;TL0=0x6b;
TR0=1;ET0=1;EA=1;
while(1)
{ if(L)
{ L=0;time[0]++;
if(time[0]==60)
{ time[0]=0;time[1]++;}
if(time[1]==60)
{ time[1]=0;time[2]++;}
if(time[2]==24) time[2]=0;
}
function();
alarm();
display(A1,A2,A3,A4,A5,A6);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -