新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機制作的時鐘程序

        單片機制作的時鐘程序

        作者: 時間:2016-11-30 來源:網絡 收藏
        今天完成的一個用單片機制作的時鐘程序
        /****************************************************************
        *工程名:帶秒顯示時鐘單片機程序 *
        *單片機:STC89C52 *
        *電路板:http://www.51hei.com/150a.htm *
        *目 的:學習單片機編程 *
        *是 間:2012-11-25星期五 *
        *作 者:張杉峰 *
        *修 訂:功能有待完善,下邊我還加上調整時間的功能 *
        *****************************************************************/
        #include
        #define uint unsigned int
        #define uchar unsigned char
        sbit wei=P2^7; //位鎖存器使能端定義
        sbit duan=P2^6; //段鎖存器使能端定義
        sbit led=P1^4; //這個是我買的實驗板上的led使能端控制位
        //定義需要的為變量...
        uchar code duan_table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71,0x00
        };//數碼管從1——F顯示編碼表,記得最后一個分號哦...
        uchar a,xiaoshi,fenzhong,miao,miao1,miao2,xiao1,xiao2,fen1,fen2; //定義要用到的變量,記得一個字符都不要寫錯哦...
        void dispay(uchar miao1,uchar miao2,uchar fen1,uchar fen2,uchar xiao1,uchar xiao2); //顯示函數什么,一定要記得什么哦...
        void delay(uchar x);
        void init()//初始化函數
        {
        TMOD=0X01; //定時計數器工作模式,工作于16位定時器計數器模式
        TH0=(65536-50000)/256; //十六位寄存器高八位賦初值
        TL0=(65536-50000)%256; //............低八位賦初值
        EA=1; //開總中斷
        ET0=1; //開定時器計數器0中斷
        TR0=1; //啟動定時器/計數器0
        }
        void main()
        {
        init(); //調用初始化函數
        while(1)
        {
        if(a==20) //判斷是否定時到1秒鐘
        {
        a=0; //到一秒a清零
        miao++; //讓秒加1
        if(miao==60) //判斷秒是否到60
        {
        miao=0; //秒到60,讓"miao"清零
        fenzhong++; //讓分鐘自加1
        if(fenzhong==60) //判斷分鐘是否到60
        {
        fenzhong=0; //分鐘到60,讓"fenzhong"清零
        xiaoshi++; //讓小時加1
        if(xiaoshi==24) //判斷小時是否到24
        {xiaoshi=0;} //到24,讓"xiaoshi"清零,從零點從新走動...
        }
        }
        xiao1=xiaoshi/10;
        xiao2=xiaoshi%10; //上面一行和這一行是把小時的兩位分離出來,比如23,分解成2和3;下面幾行一樣就不解釋了
        fen1=fenzhong/10;
        fen2=fenzhong%10;
        miao1=miao/10;
        miao2=miao%10;
        }
        dispay(miao1,miao2,fen1,fen2,xiao1,xiao2);
        }
        }
        void dispay(uchar miao1,uchar miao2,uchar fen1,uchar fen2,uchar xiao1,uchar xiao2)
        {
        duan=1;
        P0=duan_table[xiao1];
        duan=0;
        P0=0xff;
        wei=1;
        P0=0xfb;//第三個LED亮,小時高位
        wei=0;
        delay(2);
        duan=1;
        P0=duan_table[xiao2];
        duan=0;
        P0=0xff;
        wei=1;
        P0=0xf7; //第四個LED亮,小時低位
        wei=0;
        delay(2);
        duan=1;
        P0=duan_table[fen1];
        duan=0;
        P0=0xff;
        wei=1;
        P0=0xef; //第五個LED亮,分鐘高位
        wei=0;
        delay(2);
        duan=1;
        P0=duan_table[fen2];
        duan=0;
        P0=0xff;
        wei=1;
        P0=0xdf; //第六個LED亮,分鐘低位
        wei=0;
        delay(2);
        duan=1;
        P0=duan_table[miao1];
        duan=0;
        P0=0xff;
        wei=1;
        P0=0xbf; //第七個LED亮,秒高位
        wei=0;
        delay(2);
        duan=1;
        P0=duan_table[miao2];
        duan=0;
        P0=0xff;
        wei=1;
        P0=0x7f;
        wei=0;
        delay(2);
        }
        void delay(uchar x)
        {
        uchar bb,dd;
        for(bb=x;bb>0;bb--)
        for(dd=110;dd>0;dd--);
        }
        void timer0() interrupt 1
        {
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        a++;
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 保定市| 黔东| 应用必备| 时尚| 揭东县| 敦煌市| 江油市| 濉溪县| 雅安市| 礼泉县| 江川县| 白山市| 龙江县| 星子县| 龙井市| 广丰县| 盘山县| 新河县| 盈江县| 兰坪| 神池县| 罗平县| 丰都县| 诸城市| 凌源市| 赫章县| 南昌县| 农安县| 隆昌县| 佛教| 通城县| 鄯善县| 郓城县| 台安县| 广汉市| 贡嘎县| 屏东市| 武安市| 海盐县| 呼伦贝尔市| 云梦县|