📄 clock.txt
字号:
//***********************************************************************************
//设计时间:2006年7月
//设计者:沈飞
//程序功能:电子时钟,有年月日,时分秒 分屏显示,具有调整时间的功能
//***********************************************************************************
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar se,sec,min,hour,day,mon;
uint year,yea,round;
uchar code LEDValue[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//共阳0~9译码显示
uchar code LEDValue_p[10]={0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};//共阳0~9带点译码显示
uchar i,j,k,l,m,n,r,q;
sbit cho=P1^0; //分屏切换键
sbit cho1=P1^1; //选择显示键cho1
sbit cho2=P1^2; //选择显示键cho2
sbit count=P1^3; //计数加一键
sbit sub=P1^4; //计数减一键(只对年有效)
sbit t=P1^5; //定点报时输出
bit co;
bit su;
//*****************************************
//延时:round=1,延时1毫秒
//*****************************************
delay(uint round)
{
while(round--)
{ for(r=0;r<125;r++)
{;}
}
}
//*****************************************
//显示,P0口作为SEGB口,P2口作为COMB口
//*****************************************
void display(uchar mean,uchar q)
{
P0=0xff;
P2=q;
i=mean%10;
P0=LEDValue_p[i];
delay(4);
P0=0xff;
q=q<<1;
P2=q;
j=mean/10;
P0=LEDValue[j];
delay(4);
q=0;
}
//*****************************************
//显示年,P0口作为SEGB口,P2口作为COMB口
//*****************************************
void display_year()
{
P0=0xff;
P2=16;
k=year%10;
P0=LEDValue_p[k];
delay(4);
P0=0xff;
P2=32;
yea=year/10;
l=yea%10;
P0=LEDValue[l];
delay(4);
P0=0xff;
P2=64;
yea=yea/10;
m=yea%10;
P0=LEDValue[m];
delay(4);
P0=0xff;
P2=128;
n=yea/10;
P0=LEDValue[l];
delay(4);
}
//*****************************************
//中断:年月日 时分秒计时
//*****************************************
time() interrupt 1{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
if(++se==100) //计数到秒
{ se=0;
if(P1&0x07!=3)
{
if(++sec==60) //秒计数
{ sec=0;
if(++min==60) //分计数
{ min=0;
if(++hour==24) //时计数
{ hour=0;
day++;
switch(mon)
{ case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:{if(day==32){day=1;mon++;}} break;
case 4:
case 6:
case 9:
case 11:{if(day==31){day=1;mon++;}} break;
case 2:{ if(mon%4==0&&day==30)
{day=1;mon++;}
else if(mon%4!=0&&day==29)
{day=1;mon++;}
} break;
}
if(mon==13)
{ mon=1;
year++;
}
}
}
}
}
}
main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
se=0;
sec=0;
min=0;
hour=0;
day=1;
mon=1;
year=2000;
co=count;
su=sub;
while(1)
{ if(cho==1&&cho1==1&&cho2==1) // 显示 时分秒
{
display(sec,1);
display(min,4);
display(hour,16);
}
else if(cho==0&&cho1==1&&cho2==1) // 显示 年月日
{
display(day,1);
display(mon,4);
display_year();
}
else if(cho==1&&cho1==1&&cho2==0) // 显示秒:cho1cho2:10
display(sec,1);
else if(cho==1&&cho1==0&&cho2==0) // 显示分调整:cho1cho2:00
{
display(min,4);
if(count!=co)
{ delay(4);
if(count!=co)
{ if(++min==60)
min=0;
co=count;
}
}
}
else if(cho==1&&cho1==0&&cho2==1) // 显示时调整:cho1cho2:01
{
display(hour,16);
if(count!=co)
{ delay(4);
if(count!=co)
{ if(++hour==24)
hour=0;
co=count;
}
}
}
else if(cho==0&&cho1==1&&cho2==0) // 显示日调整:cho1cho2:10
{
display(day,1);
if(count!=co)
{ delay(4);
if(count!=co)
{ if(++day==32)
day=1;
co=count;
}
}
}
else if(cho==0&&cho1==0&&cho2==0) // 显示月调整:cho1cho2:00
{
display(mon,4);
if(count!=co)
{ delay(4);
if(count!=co)
{ if(++mon==13)
mon=1;
co=count;
}
}
}
else if(cho==0&&cho1==0&&cho2==1) // 显示年调整:cho1cho2:01
{
display_year();
if(count!=co)
{ delay(4);
if(count!=co)
{ if(++year==9999)
year=2000;
co=count;
}
}
else if(sub!=su)
{ delay(4);
if(sub!=su)
{ if(--year==1999)
year=2000;
su=sub;
}
}
}
}
do{}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -