• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 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];        //定義緩沖區(qū)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用于動態(tài)掃描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用來動態(tài)掃描{static unsigned char num;TH1=0xF8;        //重入初值TL1=0xf0;switch (num){case 0:P2=0;P0=StrTab[num];break;  //分別調用緩沖區(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;        //定義內部局部變量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;}  }} }


    評論


    相關推薦

    技術專區(qū)

    關閉
    主站蜘蛛池模板: 柘城县| 武隆县| 西乌珠穆沁旗| 焉耆| 砀山县| 宝应县| 福安市| 德钦县| 郎溪县| 株洲县| 阳东县| 嘉黎县| 洛隆县| 邵东县| 博湖县| 会理县| 凤阳县| 通榆县| 大安市| 简阳市| 东乌珠穆沁旗| 蓬安县| 闽清县| 隆安县| 民乐县| 康定县| 达日县| 盘锦市| 建阳市| 明光市| 大同市| 固阳县| 高要市| 罗定市| 五峰| 鄂州市| 宁国市| 罗定市| 克什克腾旗| 图片| 酒泉市|