¸½Â¼Ò»£º³ÌÐò£¨·½°¸Ò»£©
#include
#define PA XBYTE[0xD1FF] #define PB XBYTE[0xD2FF] #define PC XBYTE[0xD5FF] #define PCON XBYTE[0xD7FF] sbit buzzer=P3^3;//·äÃùÆ÷¶Ë¿Ú //ÊýÂë¹Ü0-9µÄ¶ÎÑ¡±àÂë uchar code tabledu[]={ 0xA0,0xBB,0x62,0x2A, 0x39,0x2C,0x24,0xBA, 0x20,0x28};
//ÊýÂë¹Ü¸÷λѡ±àÂë uchar code tablewe[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //È«¾Ö±äÁ¿¶¨Òå
unsigned long num1,num2;
uchar shi0,shi1,fen0,fen1,m0,m1,num,
num3,aa,bb,cc,count,temp,count,S,flag,flag1; char hour,min,second,h0,h1,mi0,mi1,s0,s1; void init();//³õʼ»¯º¯ÊýÉùÃ÷
void display(uchar,uchar,uchar,uchar,uchar,uchar );//ÏÔʾº¯ÊýÉùÃ÷void delay(uint);//´ø²ÎÊýÑÓʱº¯ÊýÉùÃ÷ 1ºÁÃë void keyscan();//¼üÅÌɨÃ躯Êý void main() { PCON=0x80; init(); while(1)//Ö÷ÌåÑ»· { keyscan(); //ʱÖÓ·ÖÀ벿·Ö m1=aa; m0=aa/10; fen1=bb; fen0=bb/10; shi1=cc; shi0=cc/10; //clock·ÖÀ벿·Ö
17
s1=second; s0=second/10; mi1=min; mi0=min/10; h1=hour; h0=hour/10; //ʱÖÓÏÔʾºÍclockÏÔʾ²¿·Ö if(num3>=1&&num3<=4||count==0) display(shi0,shi1,fen0,fen1,m0,m1); else display(h0,h1,mi0,mi1,s0,s1); //************Õûµã±¨Ê±***********// if(aa==0&&bb==0) //±¨Ê±10Ãë { TR1=1; //¿ªÆô¶¨Ê±Æ÷1 flag=1; //¿ØÖÆÕûµã±¨Ê±¼ÆÊýnum1++ }
//********ÄÖÖÓ±¨Ê± *********// if(aa==second&&bb==min&&cc==hour)//ÄÖʱһ·ÖÖÓ { TR1=1; //¿ªÆô¶¨Ê±Æ÷1 flag1=1; //¿ØÖÆÄÖÖÓ¼ÆÊýnum2++ } } }
//************³õʼ»¯º¯Êý**************// void init() { //********¶¨Ê±Æ÷0£¬1³õʼ»¯********// TMOD=0x11; EA=1; ET0=1; ET1=1; TH0=(65536-50000)/256; TL0=(65536-50000)%6; TH1=(65536-1000)/256; TL1=(65536-1000)%6; TR0=1; }
void time0() interrupt 1 //¶¨Ê±0ʱÖÓº¯Êý£¨¿ØÖÆÊýÂëʱÖÓ£© { TH0=(65536-50000)/256; TL0=(65536-50000)%6; num++;
18
if(num==20) { num=0; aa++; if(aa==60) { aa=0; bb++; if(bb==60) { bb=0; cc++; if(cc==24) cc=0; } } } }
void time1() interrupt 3 //¶¨Ê±1ʱÖÓº¯Êý£¨¿ØÖÆÕûµã±¨Ê±Ê±¼ä£© { TH1=(65536-1000)/256; TL1=(65536-1000)%6; if(flag==1) num1++; if(flag1==1) num2++; buzzer=~buzzer; if(num1==10000||num2==60000) { num1=0; num2=0; buzzer=1; TR1=0; flag=0; flag1=0; } }
//************ÊýÂë¹ÜÏÔʾº¯Êý******************//
void display(uchar shi0,uchar shi1,uchar fen0,uchar fen1,uchar m0,uchar m1) { PA=tablewe[0]; PB=tabledu[shi0]; delay(1); PA=0XFF;
19
PB=0XFF; PA=tablewe[1]; PB=tabledu[shi1]; delay(1); PA=0XFF; PB=0XFF; PA=tablewe[2]; PB=tabledu[fen0]; delay(1); PA=0XFF; PB=0XFF; PA=tablewe[3]; PB=tabledu[fen1]; delay(1); PA=0XFF; PB=0XFF; PA=tablewe[4]; PB=tabledu[m0]; delay(1); PA=0XFF; PB=0XFF; PA=tablewe[5]; PB=tabledu[m1]; delay(1); PA=0XFF; PB=0XFF; }
//************ºÁÃ뺯Êý******************// void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=124;y>0;y--) ; }
//************¼üÅ̺¯Êýº¯Êý******************// void keyscan() { PC=0xfe; temp=PC; temp=temp&0xf0; if(temp!=0xf0) { delay(5);
20
temp=PC;
temp=temp&0xf0; if(temp!=0xf0) { temp=PC; switch(temp) { case 0xee:num3=1; //ÃëÖÓ¼ÓÒ»°´¼ü break; case 0xde:num3=2; //·ÖÖÓ¼ÓÒ»°´¼ü break; case 0xbe:num3=3; //ʱÖÓ¼ÓÒ»°´¼ü break; case 0x7e:num3=4; //ÇåÁã°´¼ü break; } while(temp!=0xf0) //ËÉÊÖ¼ì²â { temp=PC; temp=temp&0xf0; display(shi0,shi1,fen0,fen1,m0,m1); } switch(num3) { case 1: aa++; if(aa>59) aa=0; break; case 2: bb++; if(bb>59) bb=0; break; case 3: cc++; if(cc>23) cc=0; break; case 4: aa=0,bb=0,cc=0; break; } }
21