久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 8位數碼管顯示電子時鐘c51程序

8位數碼管顯示電子時鐘c51程序

作者: 時間:2012-09-08 來源:網絡 收藏
/*8位顯示  時間格式     05—50—00   標示05點50分00秒S1 用于小時加1操作S2 用于小時減1操作S3 用于分鐘加1操作S4 用于分鐘減1操作*/#includereg52.h>sbit KEY1=P3^0;        //定義端口參數sbit KEY2=P3^1;sbit KEY3=P3^2;sbit KEY4=P3^3;sbit LED=P1^2;        //定義指示燈參數code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};        //共陰極0—9unsigned char StrTab[8];        //定義緩沖區unsigned char minute=19,hour=23,second;        //定義并初始化為 12:30:00void delay(unsigned int cnt){while(--cnt);}/******************************************************************//*                                顯示處理函數                                      *//******************************************************************/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用于動態掃描TH1=0xF8;        //初值TL1=0xf0;ET1=1;TR1=1;EA =1;Displaypro();        //調用顯示處理函數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用來動態掃描{static unsigned char num;TH1=0xF8;        //重入初值TL1=0xf0;switch (num){case 0:P2=0;P0=StrTab[num];break;  //分別調用緩沖區的值進行掃描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;        //定義內部局部變量TH0=0xd8;        //重新賦值TL0=0xf0;count++;switch (count){case 0:case 20:case 40:case 60:case 80:Displaypro();break;        //隔一定時間調用顯示處理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;}  }} }


評論


相關推薦

技術專區

關閉