📄 wahaha.txt
字号:
#include<at89x52.h>
#define uchar unsigned char
#define uint unsigned int
uchar led_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar key1_flag,key2_flag,glitter_flag=0; /*key1_flag用来存放按键1状态,key2_flag用来存放按键2状态*/
uchar disp[6]=0; /*存放要显示字符*/
uchar second,minute,hour;
uchar day=1;
uchar month=6;
uchar year=5;
uchar daynum(void) /*判断每月天数*/
{
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return(31);
else if(month==4||month==6||month==9||month==11)
return(30);
else if(((year+2000)%4==0)&&((year+2000)%100!=0)) /*判断是否闰年*/
return(29);
else
return(28);
}
void delayXms(uint x) /*软件延时程序,用于精度不高延时*/
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<100;j++);
}
void display() /*显示程序,用六个数码管分别显示disp[6]数组里的数字*/
{
uint i;
uchar temp;
temp=0x01;
for(i=0;i<6;i++)
{
P0=0xff;
P2=~temp;
P0=led_code[disp[i]];
delayXms(2);
temp=temp<<1;
}
}
void process() /*处理放置所需显示数字*/
{
if(key1_flag==0)
{
disp[5]=hour/10;
disp[4]=hour%10;
disp[3]=minute/10;
disp[2]=minute%10;
disp[1]=second/10;
disp[0]=second%10;
}
else if(key1_flag==1)
{
disp[5]=year/10;
disp[4]=year%10;
disp[3]=month/10;
disp[2]=month%10;
disp[1]=day/10;
disp[0]=day%10;
}
}
void keyscan() /*键盘扫描程序,根据相应按键置相应标志位*/
{
uint i;
if((P1&0x0f)!=0x0f)
{
delayXms(10); /*消抖*/
if((P1&0x04)!=0x04) /*按键1按下,用于转换年/月/日及时/分/秒*/
{
key2_flag=0;
TR0=1;
if(++key1_flag==2)
key1_flag=0;
}
else if((P1&0x01)!=0x01) /*按键2按下,用于校准时间*/
{
if(++key2_flag==4)
{
key2_flag=0;
TR0=1;
}
else
{
TR0=0;
glitter_flag=0;
}
}
else if((P1&0x08)!=0x08) /*按键3按下,校准时间时增加数字量*/
{
for(i=0;i<10;i++)
display();
while((P1&0x08)!=0x08) /*如果按键3出现持续按下,则快速增加数字量*/
{
if(key1_flag==0&&key2_flag==1) /*快增调节时*/
{
if(++hour==24)
hour=0;
process();
display();
}
if(key1_flag==0&&key2_flag==2) /*快增调节分*/
{
if(++minute==60)
minute=0;
process();
display();
}
if(key1_flag==0&&key2_flag==3) /*快增调节秒*/
{
if(++second==60)
second=0;
process();
display();
}
if(key1_flag==1&&key2_flag==1) /*快增调节年*/
{
if(++year==100)
year=0;
process();
display();
}
if(key1_flag==1&&key2_flag==2) /*快增调节月*/
{
if(++month==13)
month=1;
process();
display();
}
if(key1_flag==1&&key2_flag==3) /*快增调节日*/
{
if(++day==(daynum()+1))
day=1;
process();
display();
}
display();
}
if(key1_flag==0&&key2_flag==1) /*慢增调节时*/
{
if(++hour==24)
hour=0;
}
else if(key1_flag==0&&key2_flag==2) /*慢增调节分*/
{
if(++minute==60)
minute=0;
}
else if(key1_flag==0&&key2_flag==3) /*慢增调节秒*/
{
if(++second==60)
second=0;
}
else if(key1_flag==1&&key2_flag==1) /*慢调节年*/
{
if(++year==100)
year=0;
}
else if(key1_flag==1&&key2_flag==2) /*慢增调节月*/
{
if(++month==13)
month=1;
}
else if(key1_flag==1&&key2_flag==3) /*慢增调节日*/
{
if(++day==daynum()+1)
day=1;
}
}
else if((P1&0x02)!=0x02) /*按键4按下,校准时间时减少数字量*/
{
for(i=0;i<10;i++)
display();
while((P1&0x02)!=0x02) /*如果按键4出现持续按下,则快速减少数字量*/
{
if(key1_flag==0&&key2_flag==1) /*快减调节时*/
{
if(hour==0)
hour=23;
else
hour--;
process();
display();
}
if(key1_flag==0&&key2_flag==2) /*快减调节分*/
{
if(minute==0)
minute=59;
else
minute--;
process();
display();
}
if(key1_flag==0&&key2_flag==3) /*快减调节秒*/
{
if(second==0)
second=59;
else
second--;
process();
display();
}
if(key1_flag==1&&key2_flag==1) /*快减调节年*/
{
if(year==0)
year=99;
else
year--;
process();
display();
}
if(key1_flag==1&&key2_flag==2) /*快减调节月*/
{
if(--month==0)
month=12;
process();
display();
}
if(key1_flag==1&&key2_flag==3) /*快减调节日*/
{
if(--day==0)
day=daynum();
process();
display();
}
display();
}
if(key1_flag==0&&key2_flag==1) /*慢减调节时*/
{
if(hour==0)
hour=23;
else
hour--;
}
else if(key1_flag==0&&key2_flag==2) /*慢减调节分*/
{
if(minute==0)
minute=59;
else
minute--;
}
else if(key1_flag==0&&key2_flag==3) /*慢减调节秒*/
{
if(second==0)
second=59;
else
second--;
}
else if(key1_flag==1&&key2_flag==1) /*慢减调节年*/
{
if(year==0)
year=99;
else
year--;
}
else if(key1_flag==1&&key2_flag==2) /*慢减调节月*/
{
if(--month==0)
month=12;
}
else if(key1_flag==1&&key2_flag==3) /*慢减调节日*/
{
if(--day==0)
day=daynum();
}
}
while((P1&0x0f)!=0x0f)
display();
}
}
void onems()interrupt 1 /**/
{
P3_5=0;
P3_5=1;
TH0=0xfc;
TL0=0x18;
}
void onesecond()interrupt 3
{
second++;
TH1=0xfc;
TL1=0x18;
}
void main(void)
{
TMOD=0x51;
TH0=0xfc;
TL0=0x18;
TH1=0xfc;
TL1=0x18;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1)
{
keyscan();
if(second==60)
{
minute++;
second=0;
if(minute==60)
{
hour++;
minute=0;
if(hour==24)
{
day++;
hour=0;
if(day=daynum()+1)
{
month++;
day=1;
if(month==13)
{
year++;
month=1;
if(year==100)
year=0;
}
}
}
}
}
process();
glitter_flag++;
glitter_flag=glitter_flag%30;
if((key2_flag==1)&&(glitter_flag>15)&&(glitter_flag<30))
{
disp[5]=10;
disp[4]=10;
}
if((key2_flag==2)&&(glitter_flag>15)&&(glitter_flag<30))
{
disp[3]=10;
disp[2]=10;
}
if((key2_flag==3)&&(glitter_flag>15)&&(glitter_flag<30))
{
disp[1]=10;
disp[0]=10;
}
display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -