新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 8位數(shù)碼管顯示電子時鐘c51程序

8位數(shù)碼管顯示電子時鐘c51程序

作者: 時間:2012-09-08 來源:網(wǎng)絡(luò) 收藏
/*8位顯示  時間格式     05—50—00   標(biāo)示05點50分00秒S1 用于小時加1操作S2 用于小時減1操作S3 用于分鐘加1操作S4 用于分鐘減1操作*/#includereg52.h>sbit KEY1=P3^0;        //定義端口參數(shù)sbit KEY2=P3^1;sbit KEY3=P3^2;sbit KEY4=P3^3;sbit LED=P1^2;        //定義指示燈參數(shù)code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};        //共陰極0—9unsigned char StrTab[8];        //定義緩沖區(qū)unsigned char minute=19,hour=23,second;        //定義并初始化為 12:30:00void delay(unsigned int cnt){while(--cnt);}/******************************************************************//*                                顯示處理函數(shù)                                      *//******************************************************************/void Displaypro(void){StrTab[0]=tab[hour/10];        //顯示小時StrTab[1]=tab[hour%10];StrTab[2]=0x40;        //顯示"-"StrTab[3]=tab[minute/10];        //顯示分鐘StrTab[4]=tab[minute%10];StrTab[5]=0x40;        //顯示"-"StrTab[6]=tab[second/10];        //顯示秒StrTab[7]=tab[second%10];}main(){TMOD |=0x01;        //定時器0  10ms  inM  crystal  用于計時TH0=0xd8;           //初值TL0=0xf0;ET0=1;TR0=1;TMOD |=0x10;        //定時器1用于動態(tài)掃描TH1=0xF8;        //初值TL1=0xf0;ET1=1;TR1=1;EA =1;Displaypro();        //調(diào)用顯示處理函數(shù)while(1){if(!KEY1)        //按鍵1去抖以及動作{delay(10000);if(!KEY1){          hour++;if(hour==24)hour=0;        //正常時間 小時 加1Displaypro();}}if(!KEY2)        //按鍵2去抖以及動作{delay(10000);if(!KEY2){hour--;if(hour==255)hour=23;        //正常時間 小時減1Displaypro();}}if(!KEY3)        //按鍵去抖以及動作{delay(10000);if(!KEY3){minute++;if(minute==60)minute=0;        //分加1Displaypro();}}       if(!KEY4)        //按鍵去抖以及動作{delay(10000);if(!KEY4){minute--;if(minute==255)minute=59;        //分減1Displaypro();}}}}/******************************************************************//*                           定時器1中斷                                   *//******************************************************************/void time1_isr(void) interrupt 3 using 0        //定時器1用來動態(tài)掃描{static unsigned char num;TH1=0xF8;        //重入初值TL1=0xf0;switch (num){case 0:P2=0;P0=StrTab[num];break;  //分別調(diào)用緩沖區(qū)的值進(jìn)行掃描case 1:P2=1;P0=StrTab[num];break;case 2:P2=2;P0=StrTab[num];break;case 3:P2=3;P0=StrTab[num];break;case 4:P2=4;P0=StrTab[num];break;case 5:P2=5;P0=StrTab[num];break;case 6:P2=6;P0=StrTab[num];break;case 7:P2=7;P0=StrTab[num];break;default:break;}num++;        //掃描8次,使用8個if(num==8)num=0;}/******************************************************************//*                              定時器0中斷                                 *//******************************************************************/void tim(void) interrupt 1 using 1{static unsigned char count;        //定義內(nèi)部局部變量TH0=0xd8;        //重新賦值TL0=0xf0;count++;switch (count){case 0:case 20:case 40:case 60:case 80:Displaypro();break;        //隔一定時間調(diào)用顯示處理case 50:P1=~P1;break;        //半秒 LED 閃爍default:break;}if (count==100){count=0;second++;        //秒加1if(second==60){second=0;minute++;        //分加1if(minute==60){minute=0;hour++;        //時加1if(hour==24)hour=0;}  }} }


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉