æè¿æ个æ°ç 管æ¾ç¤ºçç¨åº
以ååçï¼ãã
ä½ å¯ä»¥å¨æè¿ä¸ªç¨åºä¸ä¿®æ¹ä¿®æ¹
å
æ¬é®çæ«æï¼è¿æå¨ææ¾ç¤º
ã
ã
ããããã
#include <REG51.H>
//常éåæ°
#define TMODW 0x01;
#define SCONW 0x00;
#define xplay 0x04;//æ¾ç¤ºåé¢ç³»æ°
//æ¾ç¤ºä½é
unsigned char data stb;
//é®å¼ç¼å,0xFFæ é®å½ä»¤
unsigned char data keynum;
//æ¾ç¤ºåååé
unsigned char data play[8];
//å·¥ä½åæ°
unsigned char data l,m;
//ååç
unsigned char code BCDPC[10]=
{0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F};
//åä½ç
unsigned char code STBCODE[8]=
{0x01,0x02,0x04,0x08,
0x10,0x20,0x40,0x80 };
//400Hz xplayåé¢è®¡æ°
unsigned char data cttime;
//æ¶éåæ°
unsigned char data hr,min,sec,sec100;
//è°æ´æ¶éåæ°ï¼æ¶éâèµ°âï¼
void ct1()
{sec100++;
if (sec100==100)
{sec100=0;sec++;
if (sec==60)
{sec=0;min++;
if (min==60)
{min=0;hr++;
if (hr==24) hr=0;
}
}
}
}
//æ¶éåæ°âLED æ¾ç¤ºç¼å7段åæ°è½¬æ¢å½æ°ï¼
void xcplay()
{play[0]=BCDPC[hr/10];
play[1]=BCDPC[hr%10];
play[2]=BCDPC[min/10];
play[3]=BCDPC[min%10];
play[4]=BCDPC[sec/10];
play[5]=BCDPC[sec%10];
play[6]=BCDPC[sec100/10];
play[7]=BCDPC[sec100%10];
}
//æ¾ç¤ºæ«æ
void cplay()
{T0=1;//T0ï¼é«çµå¹³æ¶é
T1=0;//T1ï¼ä½çµå¹³åå¤åèå²å沿
TI=0;//ï¼
P1=0;//ï¼
SBUF=STBCODE[stb];
while (TI==0)
{
};
TI=0;
SBUF=play[stb];
while (TI==0)
{
};
T1=1;
T0=0;
stb=++stb&0x07;
}
extern void cthl0();
//å®æ¶å¨0ä¸æå¤çç¨åº
void ct0(void) interrupt 1 using 1
{cthl0();
cttime--;
if (cttime==0)
{cttime=xplay;
ct1();//è°ç¨æ¶éâèµ°âå½æ°
xcplay();//è°ç¨æ¶éåæ°âLedæ¾ç¤ºç¼å转æ¢å½æ°
};
cplay();
}
void w20ms()
{for (l=0;l<41;l++)
{for (m=0;m<81;m++)
{
}
}
}
void tkey()
{P1=0xF0;
keynum=0xFF;
if (P1!=0xF0)
{w20ms();
P1=0xF0;
if (P1!=0xF0)
{P1=0xFE;
switch (P1)
{case 0xEE:keynum=0;break;
case 0xDE:keynum=1;break;
case 0xBE:keynum=2;break;
case 0x7E:keynum=3;break;
}
P1=0xFD;
switch (P1)
{case 0xED:keynum=4;break;
case 0xDD:keynum=5;break;
case 0xBD:keynum=6;break;
case 0x7B:keynum=7;break;
}
P1=0xFB;
switch (P1)
{
case 0xEB:keynum=8;break;
}
};
};
P1=0x00;
}
void command()
{switch (keynum)
{
case 0:{hr=hr+1;
if (hr==24)
hr=0;
}
break;
case 1:{min=min+1;
if (min==60)
min=0;
}
break;
case 2:{sec=sec+1;
if (sec==60)
sec=0;
}
break;
case 3:{sec100=0;
}
break;
case 4:{
while(!(P1=0xED))
{
hr=0;
min=0;
sec=0;
}
}
break;
case 5:{hr=hr-1;
if (hr==00)
hr=24;
}
break;
case 6:{min=min-1;
if (min==00)
min=59;
}
break;
case 7:{sec=sec-1;
if (sec==00)
sec=0;
}
break;
case 0xFF:break;
}
keynum=0xFF;
}
main ()
{ hr=8;
min=5;
sec=8;
sec100=0;
TMOD=TMODW;
SCON=SCONW;
ET0=1;
TR0=1;
EA=1;
cttime=xplay;
while (1)
{w20ms();
tkey();
command();
};
}
温馨提示:答案为网友推荐,仅供参考