新聞中心

        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ū)的值進行掃描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)閉
        主站蜘蛛池模板: 山阳县| 高雄市| 黑龙江省| 阳城县| 平陆县| 集安市| 宜州市| 山西省| 阿坝县| 日喀则市| 鹿泉市| 海淀区| 涟水县| 天台县| 河曲县| 稷山县| 潞城市| 石景山区| 汉沽区| 红桥区| 安西县| 田东县| 盐城市| 恭城| 大埔县| 江源县| 天柱县| 博爱县| 莎车县| 竹溪县| 昭苏县| 南靖县| 巧家县| 库尔勒市| 珠海市| 长顺县| 海淀区| 赞皇县| 东乌珠穆沁旗| 富裕县| 衡水市|