新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機+數碼管簡單秒表程序,帶停止啟動復位

        單片機+數碼管簡單秒表程序,帶停止啟動復位

        作者: 時間:2016-11-30 來源:網絡 收藏
        p0口是數碼管的位選入口,P2口是數碼管的段選用4位一體的數碼管,P3.0 P3.1 P3.2分別是啟動停止和復位按鈕

        本文引用地址:http://www.104case.com/article/201611/323949.htm
        #include
        #define uchar unsigned char
        #define uint unsigned int

        #define DATA P2
        sbit start=P3^0;
        sbit stop=P3^1;
        sbit reset=P3^2;

        //---------啟停標志-----
        bit SAT=0;

        bit RST=0;

        //------------數碼管碼表----------
        uchar tab[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};

        //------------
        uint time=0; //時間
        uint cnt=0; //計數


        //-------------


        void delay(int k)
        {
        while(k--);
        }



        void startkey()
        {
        static uchar i,j;
        if(start==0)
        {
        if(i==0)
        {
        j++;
        if(j>3)
        {
        if(start==0)
        {
        i=1;j=0; SAT=1;
        }
        }
        }
        }
        else
        {
        i=j=0;
        }
        }


        void stopkey()
        {
        static uchar i,j;
        if(stop==0)
        {
        if(i==0)
        {
        j++;
        if(j>3)
        {
        if(stop==0)
        {
        i=1;j=0; SAT=0;
        }
        }
        }
        }
        else
        {
        i=j=0;
        }
        }


        void resetkey()
        {
        static uchar i,j;
        if(reset==0)
        {
        if(i==0)
        {
        j++;
        if(j>3)
        {
        if(reset==0)
        {
        i=1;j=0; RST=1;
        }
        }
        }
        }
        else
        {
        i=j=0;RST=0;
        }
        }

        //---------數碼管顯示 00.0-------
        void shownumber(int num)
        {
        DATA=tab[num%10];
        P0=7;
        delay(100);
        DATA=0x80;
        P0=6;
        delay(100);
        DATA=tab[num%100/10];
        P0=5;
        delay(100);
        DATA=tab[num/100];
        P0=4;
        delay(100);
        }

        //---------定時器初始化ˉ---------
        void time0_init()
        {
        TMOD=0x01;
        TH0=(65536-18348)/256;
        TL0=(65536-18348)%256;
        EA=1;
        ET0=1;
        }

        void T0_time()interrupt 1
        {
        TH0=(65536-18348)/256;
        TL0=(65536-18348)%256;
        cnt++;
        if(cnt==5)
        {
        time++;cnt=0;
        }
        }


        void main(void)
        {
        delay(50000);
        time0_init();
        while(1)
        {
        shownumber(time);
        if(SAT==1)TR0=1;
        if(SAT==0)TR0=0;
        if(RST==1){TR0=0;SAT=0;time=0;}
        startkey();
        stopkey();
        resetkey();
        }
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 武夷山市| 宝应县| 宜黄县| 临汾市| 甘谷县| 兴业县| 新蔡县| 安多县| 台南市| 龙游县| 冷水江市| 教育| 大丰市| 南岸区| 海晏县| 扎囊县| 涟源市| 蓝山县| 凤凰县| 长岛县| 太仆寺旗| 贵南县| 神农架林区| 额敏县| 合山市| 闽清县| 民勤县| 嘉禾县| 开江县| 沁源县| 弥渡县| 五大连池市| 博野县| 扶沟县| 时尚| 都昌县| 五指山市| 哈巴河县| 平顶山市| 吉木萨尔县| 武川县|