新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 定時(shí)器控制數(shù)碼管掃描顯示

        定時(shí)器控制數(shù)碼管掃描顯示

        作者: 時(shí)間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
        ************************************************************************************

        功能:定時(shí)器控制兩位數(shù)碼管掃描顯示
        器件:STC12C5A32S2兩個(gè)數(shù)碼管
        ************************************************************************************/
        #include "config.h "

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

        #defineuintunsigned int
        #defineucharunsignedchar
        #defineulongunsignedlong

        int num;//顯示數(shù)據(jù)
        int FrontDot = 0;//個(gè)位顯示
        int BehindDot = 0;//小數(shù)顯示
        uint xms = 0;//毫秒數(shù)

        uint LEDDATA0[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
        uint LEDDATA1[10] = {0xbf, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd, 0x87, 0xff, 0xef};

        // 延時(shí)約(0.001 * n)秒
        void delay(unsigned int n)
        {
        int i;
        ulong msNum = 923;//指令循環(huán)923次為一秒
        for(i = 0; i < n; i++){
        while(msNum--);
        }
        }


        void timer0() interrupt 1
        {
        TH0 = 0xfc;//重要!!第一次計(jì)數(shù)滿后會(huì)從0開始計(jì)數(shù),應(yīng)該在中斷程序中重設(shè)計(jì)數(shù)初值
        TL0 = 0x65;
        xms++;
        if(xms == 1000){
        num++;
        if(num > 99)num = 0;
        FrontDot = num / 10;
        BehindDot = num % 10;
        xms = 0;
        }
        }

        // 定時(shí)器0初始化
        void timer0_init()
        {
        TMOD = 0x01;//設(shè)定定時(shí)器0為工作方式1,中斷只需一次設(shè)定
        TH0 = 0xfc;//設(shè)定計(jì)數(shù)初值
        TL0 = 0x65;
        EA = 1;//開總中斷
        ET0 = 1;//開定時(shí)中斷0
        TR0 = 1;//啟動(dòng)定時(shí)器0,計(jì)數(shù)滿后執(zhí)行中斷服務(wù)程序timer0()
        }

        //主函數(shù)
        void main(void)
        {
        int x=0;
        num = 0;
        P0_0 = 0;
        P0_1 = 0;
        P0_2 = 0;
        P0_3 = 0;
        P0_4 = 0;

        timer0_init();

        for(;;){
        if(x++ > 100)x=0;
        switch(x%2)
        {
        delay(100);
        case 0:
        P0_4 = 0; // 關(guān)閉
        P2 = LEDDATA0[BehindDot]; //設(shè)置數(shù)字
        P0_3 = 1; // 開啟
        break;
        case 1:
        P0_3 = 0;
        P2 = LEDDATA1[FrontDot];
        P0_4 = 1;
        break;
        }
        }
        }

        數(shù)碼管掃描顯示先關(guān)閉不需要顯示的數(shù)碼管,再設(shè)置要顯示的數(shù)碼管的數(shù)字,最后開啟要顯示的數(shù)碼管,不然數(shù)碼管會(huì)顯示有問題

        因?yàn)橄乳_啟要顯示的數(shù)碼管它會(huì)顯示上一次設(shè)置的數(shù)字,在設(shè)置數(shù)字的話,會(huì)有上次的余輝。



        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 璧山县| 南溪县| 广水市| 凌源市| 开化县| 昌黎县| 潼关县| 喀喇沁旗| 阿克陶县| 历史| 海林市| 伊川县| 晴隆县| 贵定县| 临沧市| 北辰区| 博野县| 屏边| 德惠市| 出国| 麟游县| 酒泉市| 沾益县| 平阴县| 黎城县| 德阳市| 项城市| 公主岭市| 文化| 康定县| 含山县| 蒲城县| 肇源县| 大英县| 泽州县| 龙泉市| 桐乡市| 大冶市| 革吉县| 连山| 海安县|