新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一個鬧鐘的單片機程序

        一個鬧鐘的單片機程序

        作者: 時間:2012-08-13 來源:網絡 收藏

        代碼如下:

        //File: Clock.c
        #include REGX52.H>
        const unsigned char LED7Code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
        unsigned int hour,minute,second,cHour,cMinute;
        bit isClick = 0;
        unsigned char modify =0x00;//是否處于時間編輯狀態
        bit isClock =0;//是否開啟

        unsigned char timercount;
        void timer0() interrupt 1
        {
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        timercount++;
        if(timercount==20)
        {
        timercount=0;
        second++;
        if(second==60)
        {
        minute++;
        second=0;
        }
        if(minute==60)
        {
        hour++;
        minute=0;
        }
        if(hour==24)
        {
        hour=0;
        }
        }
        }
        //延遲
        void Delay(unsigned int time)
        {
        unsigned char a,b;
        for(a=0;atime;a++)
        for(b=0;b120;b++);
        }

        //用于顯示時間
        void ShowTime(void)
        {
        unsigned int a,b, tempH,tempM;
        unsigned char showChar;
        if(modify==0x00 || modify ==0x01 || modify ==0x02)
        {
        tempH=hour;
        tempM=minute;
        }
        else
        {
        tempH=cHour;
        tempM=cMinute;
        }

        if(modify==0x00 || modify ==0x01 || modify ==0x03)
        {
        //顯示第4個數碼管
        P0=0xFF;
        P2=0xFF;
        a=tempH/10;
        showChar=LED7Code[a];
        P0=showChar;
        P2_3=0x00;
        Delay(1);//延遲很短

        //顯示第3個數碼管
        P0=0xFF;
        P2=0xFF;
        b=tempH%10;
        showChar=LED7Code[b];
        P2_2=0x00;
        P0=showChar;
        Delay(1);//延遲很短
        }

        if(modify==0x00 || modify ==0x02 || modify ==0x04)
        {
        //顯示第2個數碼管
        P0=0xFF;
        P2=0xFF;
        a=tempM/10;
        showChar=LED7Code[a];
        P0=showChar;
        P2_1=0x00;
        Delay(1);//延遲很短

        //顯示第1個數碼管
        P0=0xFF;
        P2=0xFF;
        b=tempM%10;
        showChar=LED7Code[b];
        P2_0=0x00;
        P0=showChar;
        Delay(1);//延遲很短
        }
        }

        //蜂鳴器響
        void Beep()
        {
        unsigned char i ;
        for (i=0 ;i100 ;i++)
        {
        Delay(100) ;
        P3_7=!P3_7 ; //Beep取反
        }
        P3_7=1 ; //關閉蜂鳴器
        Delay(100);
        }

        void main(void)
        {
        unsigned int i;
        hour=12;
        minute=30;
        second=0;
        cHour=7;
        cMinute=0;

        TMOD=0x01;
        ET0=0x01;//定時器T0可以中斷
        EA=0x01;//表示允許所有的中斷
        TR0=0x01;//開始T0計時

        while(1)
        {
        if(P1_4==0x00)//按下了K1鍵,增加小時或分鐘
        {
        if(!isClick)
        {
        switch(modify)
        {
        case 0x01://調整小時
        hour++;
        if(hour==24)
        hour=0;
        break;
        case 0x02://調整分鐘
        minute++;
        if(minute==60)
        minute=0;
        break;
        case 0x03://調整的小時
        cHour++;
        if(cHour==24)
        cHour=0;
        break;
        case 0x04://調整的分鐘
        cMinute++;
        if(cMinute==60)
        cMinute=0;
        break;
        default:
        break;
        }
        isClick=1;
        }
        }
        else if(P1_5==0x00)//按下了K2鍵,減少小時或分鐘
        {
        if(!isClick)
        {
        switch(modify)
        {
        case 0x01://調整時間的小時
        if(hour==0)
        hour=23;
        else
        hour--;
        break;
        case 0x02://調整時間的分鐘
        if(minute==0)
        minute=59;
        else
        minute--;
        break;
        case 0x03://調整鬧鐘的小時
        if(cHour==0)
        cHour=23;
        else
        cHour--;
        break;
        case 0x04://調整鬧鐘的分鐘
        if(cMinute==0)
        cMinute=59;
        else
        cMinute--;
        break;
        default:
        break;
        }
        isClick=1;
        }
        }
        else if(P1_6==0x00)//按下了K3鍵,更改模式,第一次修改小時,第二次修改分鐘,第三次恢復
        {
        if(!isClick)
        {
        switch(modify)
        {
        case 0x00://不是修改狀態,調整小時
        modify=0x01;
        break;
        case 0x01://調整分鐘
        modify=0x02;
        break;
        case 0x02://調整鬧鐘的小時
        modify=0x03;
        break;
        case 0x03://調整鬧鐘的分鐘
        modify=0x04;
        break;
        case 0x04://不修改
        modify=0x00;
        break;
        default:
        break;
        }
        isClick=1;
        }
        }
        else if(P1_7==0x00)//按下了K4鍵,開啟或關閉鬧鐘
        {
        if(!isClick)
        {
        isClock=~isClock;
        isClick=1;
        }
        }
        else
        isClick=0;

        //鬧鐘是否響了
        if(isClock)
        {
        if(hour==cHour minute == cMinute)
        {
        Beep();//響
        }
        }
        ShowTime();
        }
        }

        蜂鳴器相關文章:蜂鳴器原理

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 华蓥市| 长丰县| 电白县| 彩票| 莎车县| 禹城市| 马龙县| 佛学| 金堂县| 宁陵县| 惠安县| 扎鲁特旗| 故城县| 弥勒县| 新乡县| 邯郸县| 华坪县| 金华市| 高尔夫| 灌阳县| 乌拉特中旗| 昌都县| 盱眙县| 双牌县| 贺兰县| 伊金霍洛旗| 柞水县| 台北县| 休宁县| 桂平市| 青川县| 恩平市| 东兴市| 陆川县| 武穴市| 洪泽县| 辛集市| 永和县| 图片| 德江县| 青岛市|