?? 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 + -