新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于AT89C2051的電子鐘設計

        基于AT89C2051的電子鐘設計

        作者: 時間:2014-05-07 來源:網絡 收藏

        }

        本文引用地址:http://www.104case.com/article/246452.htm

        /*定時器T0 5mS初始化*/

        void init_timer()

        {

        TMOD=0x01;

        TH0=-(4800/256);

        TL0=-(4800%256);

        IE=0x82;

        TR0=1;

        }

        /*掃描按鍵子函數*/

        void sCAN_key()

        {

        delay(1);

        if(P3_4==0)set++;

        if(set>=4)set=0;

        if(set==1)flag=0x55;

        F0:if(P3_4==0)goto F0; /*按鍵未釋放,在此等候*/

        }

        /*延時子函數*/

        void delay(uint k)

        {

        uint i,j;

        for(i=0;i

        for(j=0;j<121;j++)

        {;}}

        }

        /*5mS定時中斷服務子函數*/

        void zd(void) interrupt 1

        {

        TH0=-(4800/256);

        TL0=-(4800%256);

        deda++;

        }

        /*調整走時時間*/

        void time_adj()

        {uchar m;

        if(P3_5==0)delay(1);

        if(P3_5==0)hour++;

        if(hour==24)hour=0;

        for(m=0;m<30;m++)

        {

        dirve();

        if(P3_2==0)P1_7=0;

        else P1_7=1;

        delay(1);

        }

        if(P3_7==0)delay(1);

        if(P3_7==0)min++;

        if(min==60)min=0;

        for(m=0;m<30;m++)

        dirve();

        if(P3_2==0)P1_7=0;

        else P1_7=1;

        delay(1);

        }

        }

        /*調整鬧時時間*/

        void time1_adj()

        {uchar m;

        if(P3_5==0)delay(1);

        if(P3_5==0)t_hour++;

        if(t_hour==24)t_hour=0;

        for(m=0;m<30;m++)

        {

        t_dirve();

        }

        if(P3_7==0)delay(1);

        if(P3_7==0)t_min++;

        if(t_min==60)t_min=0;

        for(m=0;m<30;m++)

        {

        t_dirve();

        }

        }

        /*時、分、秒單元及走時單元轉換*/

        void conv()

        {

        if(deda<=100)d_05s=0;

        else d_05s=1;

        if(deda>=200){sec++;deda=0;}

        if(sec==60){min++;sec=0;}

        if(min==60){hour++;min=0;}

        if(hour==24){hour=0;}

        }

        /*走時時間輸出驅動子函數*/

        void dirve()

        {

        P1=DATA_7SEG[hour/10];P3=0xf7;delay(1);

        P1=DATA_7SEG[hour%10];P3=0xfb;delay(1);

        if(d_05s==1){if(P3_2==0)P1_7=0;else P1_7=1;}

        delay(1);

        P1=DATA_7SEG[min/10];P3=0xfd;delay(1);

        if(o_f==1){if(P3_1==0)P1_7=0;else P1_7=1;delay(1);}

        P1=DATA_7SEG[min%10];P3=0xfe;delay(1);

        }

        /*鬧時時間輸出驅動子函數*/

        void t_dirve()

        {

        P1=DATA_7SEG[t_hour/10];P3=0xf7;delay(1);

        if(P3_3==0)P1_7=0;else P1_7=1;

        delay(1);

        P1=DATA_7SEG[t_hour%10];P3=0xfb;delay(1);

        P1=DATA_7SEG[t_min/10];P3=0xfd;delay(1);

        P1=DATA_7SEG[t_min%10];P3=0xfe;delay(1);

        }

        /*判別鬧時到否子函數*/

        void p_out()

        {

        if(o_f==1){

        if(t_hour==hour){if(t_min==min)

        if(P3_0==0){P1_7=0;delay(1);}

        else P1_7=1;

        }

        }

        }

        /*主函數*/

        void main()

        {

        init_timer(); /*定時器T0初始化*/

        while(1) /*無限循環*/

        {

        if(P3_4==0)scan_key(); /*有按鍵,調用

        鍵掃描子函數*/

        switch(set) /*根據set鍵值散轉*/

        {

        case 0:time();break; /*走時時間程序*/

        case 1:time1_adj();break; /*鬧時時間調整*/

        case 2:time_adj();break; /*走時時間調整*/

        case 3:time1_of();break; /*啟/停鬧時*/

        default:break; /*其它退出*/

        }

        if(flag!=0x55) /*判斷掉電標志*/

        {for(m=0;m<100;m++) /*點亮四個8字400mS*/

        {

        P1=0x80;P3=0xf7;delay(1);

        P1=0x80;P3=0xfb;delay(1);

        P1=0x80;P3=0xfd;delay(1);

        P1=0x80;P3=0xfe;delay(1);

        }

        P1=0xff;P3=0xff;delay(400); /*熄滅四個8字400mS*/

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

        上一頁 1 2 下一頁

        關鍵詞: AT89C2051 電子鐘

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 甘肃省| 洞头县| 扶沟县| 淄博市| 百色市| 张家口市| 启东市| 漳浦县| 凤台县| 都昌县| 大余县| 文水县| 旬邑县| 县级市| 山西省| 芮城县| 南宁市| 长葛市| 玛曲县| 义马市| 南皮县| 玛多县| 祁门县| 德保县| 乐亭县| 宜章县| 迁西县| 溧阳市| 田林县| 玛沁县| 阿拉善左旗| 怀柔区| 西乌| 祁门县| 兴化市| 建德市| 奉贤区| 富裕县| 霍林郭勒市| 闽清县| 桦甸市|