数字时钟

来源:互联网 发布:养老统筹怎么算法 编辑:程序博客网 时间:2024/04/30 02:16
#include<reg52.h> #define KeyPort P3 #define DataPort P0 sbit LATCH1=P2^2;sbit LATCH2=P2^3;//                 unsigned char hour,minute,second;bit UpdateTimeFlag;unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// ?????0~9unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//????????????,???unsigned char TempData[8]; //??????????void DelayUs2x(unsigned char t);//us??????? void DelayMs(unsigned char t); //ms???void Display(unsigned char FirstBit,unsigned char Num);//???????unsigned char KeyScan(void);//????void Init_Timer0(void);//??????/*------------------------------------------------                    ???------------------------------------------------*/void main (void){unsigned char num;                  Init_Timer0();while (1)         //???  {num=KeyScan();switch(num)  {        case 1:hour++;if(hour==24)hour=0;     //???? ?? ?1             break;        case 2:hour--;if(hour==255)hour=23;   //???? ???1             break;        case 3:minute++;if(minute==60)minute=0;     //???1             break;        case 4:minute--;if(minute==255)minute=59;   //???1             break;        default:break;  }if(UpdateTimeFlag==1) {  UpdateTimeFlag=0; TempData[0]=dofly_DuanMa[hour/10]; //?         //?????,????????0~9???,????? TempData[1]=dofly_DuanMa[hour%10]; TempData[2]=0x40;                                  //??"-" TempData[3]=dofly_DuanMa[minute/10];//? TempData[4]=dofly_DuanMa[minute%10]; TempData[5]=0x40; TempData[6]=dofly_DuanMa[second/10];//? TempData[7]=dofly_DuanMa[second%10];     }  }}/*------------------------------------------------ uS????,?????? unsigned char t,???? unsigned char ??????????,?????? 0~255 ??????12M,?????????,???? ???? T=tx2+5 uS ------------------------------------------------*/void DelayUs2x(unsigned char t){    while(--t);}/*------------------------------------------------ mS????,?????? unsigned char t,???? unsigned char ??????????,?????? 0~255 ??????12M,?????????------------------------------------------------*/void DelayMs(unsigned char t){ while(t--) {     //????1mS     DelayUs2x(245);     DelayUs2x(245); }}/*------------------------------------------------ ????,????????? ???? FirstBit ??????????,???2????????????? ???0????????? Num?????????,?????99?????????2------------------------------------------------*/void Display(unsigned char FirstBit,unsigned char Num){      static unsigned char i=0;       DataPort=0;   //????,???????       LATCH1=1;     //???       LATCH1=0;       DataPort=dofly_WeiMa[i+FirstBit]; //???        LATCH2=1;     //???       LATCH2=0;       DataPort=TempData[i]; //?????,??       LATCH1=1;     //???       LATCH1=0;       i++;       if(i==Num)          i=0;}/*------------------------------------------------                    ?????????------------------------------------------------*/void Init_Timer0(void){ TMOD |= 0x01;    //????1,16????,??"|"?????????????????           //TH0=0x00;          //???? //TL0=0x00; EA=1;            //????? ET0=1;           //??????? TR0=1;           //???????}/*------------------------------------------------                 ????????------------------------------------------------*/void Timer0_isr(void) interrupt 1 { static unsigned int num,i; TH0=(65536-2000)/256;//???? 2ms TL0=(65536-2000)%256; Display(0,8);       // ??????? i++; if(i==10)          //20ms????    {    i=0;    UpdateTimeFlag=1; //???????1    } num++; if(num==500)        //??1s   {    num=0;    second++;    if(second==60)  //??60,???1     {      second=0;         minute++;      if(minute==60)//???60,???1        {         minute=0;         hour++;         if(hour==24)//???24,??           hour=0;        }     }  }}/*------------------------------------------------??????,??????------------------------------------------------*/unsigned char KeyScan(void){ unsigned char keyvalue; if(KeyPort!=0xff)   {    DelayMs(10);    if(KeyPort!=0xff)       {        keyvalue=KeyPort;        while(KeyPort!=0xff);        switch(keyvalue)        {         case 0xfe:return 1;break;         case 0xfd:return 2;break;         case 0xfb:return 3;break;         case 0xf7:return 4;break;         case 0xef:return 5;break;         case 0xdf:return 6;break;         case 0xbf:return 7;break;         case 0x7f:return 8;break;         default:return 0;break;        }      }   }   return 0;}
0 0
原创粉丝点击