è¿æ¯æåå¦æ¶åçï¼å好ä¹æ¯æ°ç 管 /*ä½éæ¥P2å£ï¼ä¸ä¸ªæé®åå«æ¥P25~P27ã段ç æ¥P1ï¼T0计æ°
*/
#include<reg51.h>
#define DOU 1818//æé®æ¶ææ¶é´sbit led_1=P2^0;
sbit led_2=P2^1;
sbit led_3=P2^2;
sbit led_4=P2^3;
sbit led_5=P2^4;
sbit dp=P1^7;sbit an_mod=P2^5;
sbit an_movright=P2^6;
sbit an_up=P2^7;unsigned char code tab[]={0x90,0xd7,0xa2,0x86,0xc5,0x8c,0x88,0xd6,0x80,0x84};unsigned char num=0,hour=0,minute=0,secon=0,week=1;//20个numæ¯ä¸ç§
unsigned char hour_1=0,hour_2=0,minute_1=0,minute_2=0,week_1=1;
bit first_flag=0,adj=0;
unsigned char mod=0;
unsigned char led_mov=0;/*以ä¸æ¯å
¨å±åé*/void init()
{
P1=0XFF;
P2=0xff;
EA=1;//å¼æ¾ä¸æ
ET0=1;
PT0=1;//设T0ä¼çº§
TMOD=0X01;//T0以16ä½è®¡æ¶æ¹å¼å·¥ä½
TH0=0x3c;//49996us
TL0=0xb7;
TR0=1;
}void delay(unsigned int us)
{
while(--us);
}void led_show()
{
if((hour/10)<=0)//æ¶ç¬¬ä¸ä½å°äº10ï¼åå
³é第ä¸ä½æ¾ç¤º
{
led_1=1;
}else
{
P1=tab[hour/10];
led_1=0;//å¼1
delay(250);
led_1=1;
} P1=tab[hour%10];
if(num<10){dp=1;}//ç§ç¹çç
else{dp=0;}//ç§ç¹ç¹äº®
led_2=0;//å¼2
delay(230);
led_2=1;
P1=tab[minute/10];
led_3=0;//å¼3
delay(290);
led_3=1;
P1=tab[minute%10];
led_4=0;//å¼4
delay(290);
led_4=1;
P1=tab[week];
led_5=0;//å¼5
delay(80);
led_5=1;
}void led_adj()
{
P1=tab[hour_1];
led_1=0;//å¼1
if(led_mov==0){delay(200);}else{
delay(2);}
led_1=1; P1=tab[hour_2];
led_2=0;//å¼2
if(led_mov==1){delay(200);}else{
delay(2);}
led_2=1; P1=tab[minute_1];
led_3=0;//å¼3
if(led_mov==2){delay(200);}else{
delay(2);}
led_3=1; P1=tab[minute_2];
led_4=0;//å¼4
if(led_mov==3){delay(200);}else{
delay(2);}
led_4=1; P1=tab[week_1];
led_5=0;//å¼5
if(led_mov==4){delay(50);}else{
delay(1);}
led_5=1;
}void keyscan()
{
switch(mod)
{
case 0:
if(an_mod==0)
{
delay(DOU);
if(an_mod==0){
mod=1;
}
while(!an_mod);
}
if(an_up==0)
{
delay(DOU);
if(an_up==0){
mod=2;
}
while(!an_up);
}
break;
case 1:
if(first_flag==0)//first_flag=0代表第ä¸æ¬¡æ«æï¼æå½åæ¶é´èµå¼ç»è°æ´æ¶é´
{
led_mov=0;
hour_1=hour/10;
hour_2=hour%10;
minute_1=minute/10;
minute_2=minute%10;
week_1=week;
first_flag=1;//å°first_flagç½®ä½
}else{
if(an_mod==0&&adj==0)//æ模å¼é® adj=0代表没æè°æ´è¿æ°å¼ï¼å°ä¸æ¹åä»»ä½è®¾ç½®ç´æ¥éåº
{
delay(DOU);
if(an_mod==0){
mod=0;
first_flag=0;
}
while(!an_mod);
}
if(an_movright==0)//å³ç§»é®
{
delay(DOU);
if(an_movright==0){
led_mov++;
}
while(!an_movright);
}
if(an_up==0)//åä¸è°æ´æ¶é´
{
delay(DOU);
if(an_up==0)
{
switch(led_mov)
{
case 0:hour_1++;
break;
case 1:hour_2++;
break;
case 2:minute_1++;
break;
case 3:minute_2++;
break;
case 4:week_1++;
break;
}
adj=1;
}
while(!an_up);
}
if(an_mod==0&&adj==1)//ç»è¿è°æ´åæmodé®åå
¥æ°æ®
{
delay(DOU);
if(an_mod==0)
{
first_flag=0;//ç¡®å®åéæ°ç½®ä½
adj=0;
mod=0;
hour=hour_1*10+hour_2;
minute=minute_1*10+minute_2;
secon=0;
week=week_1;
num=0;
}
while(!an_mod);
}
}
break;
case 2:
if(an_up==0)
{
delay(DOU);
if(an_up==0){mod=0;}
while(!an_up);
}
}
}void check_num()
{
if(week>=8){week=1;} if((hour_1*10+hour_2)>=24){hour_1=0;hour_2=0;}
if(minute_1>=7){minute_1=0;}
if(minute_2>=10){minute_2=0;}
if(week_1>=8){week_1=1;} if(led_mov>=5){led_mov=0;}
}void conver()
{
if(num>=20)
{
secon++;
num=0;
if(secon>=60){minute++;secon=0;}
if(minute>=60){hour++;minute=0;}
if(hour>=24){week++;hour=0;}
// if(hour==23&&minute==55&&secon==0){secon=secon+1;}//æ¯å¤©ç23æ¶55å0ç§èªå¨æ ¡åæ¶é´
}
}
void main()
{
init();
while(1)
{
keyscan();
switch(mod)
{
case 0:led_show();
break;
case 1:led_adj();
break;
case 2:P1=0xff;P2=0xff;
}
conver();
check_num();
}
}void zd() interrupt 1
{
TH0=0x3c;//49996us
TL0=0xb7;
num++;
}
温馨提示:答案为网友推荐,仅供参考