新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)學(xué)習(xí)之動(dòng)態(tài)數(shù)碼管

        單片機(jī)學(xué)習(xí)之動(dòng)態(tài)數(shù)碼管

        作者: 時(shí)間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
        在這里簡單的談?wù)?strong>動(dòng)態(tài)數(shù)碼管的動(dòng)態(tài)顯示。數(shù)碼管的動(dòng)態(tài)顯示其實(shí)就是利用了人眼的余輝效應(yīng),也就是視覺暫留的效果,在每一個(gè)時(shí)刻數(shù)碼管是獨(dú)立顯示。當(dāng)我們把數(shù)碼管每一時(shí)刻的顯示效果連續(xù)播放的時(shí)候,所呈現(xiàn)給我們的就是一種動(dòng)態(tài)的顯示效果。

        下敘的一段程序主要實(shí)現(xiàn)數(shù)碼管基于STC89C52RD單片機(jī)(一下簡稱51單片機(jī))中定時(shí)器0方式一的動(dòng)態(tài)顯示,同時(shí)也是做電子時(shí)鐘的基礎(chǔ)程序之一。

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

        51單片機(jī)中的定時(shí)器0方式一為16位定時(shí)器,定時(shí)時(shí)間=(2^16-T0初值)X 時(shí)鐘周期 X 12。單片機(jī)的時(shí)鐘周期為晶振的12分頻,也就是晶振 X 1/12 。

        我們采用12MHz晶振,定時(shí)50ms,也就是50000us,50000=(65536-T0)X (1/12)X 12。 T0=15536。則TH0=0x3c,TL0=0xb0;

        程序如下




        //共陰極數(shù)碼管
        #include
        #include //_nop_();頭文件
        #define uchar unsigned char
        #define uint unsigned int

        ucharsecond,minute,T_counter;

        sbitw1=P2^0; //數(shù)碼管 3
        sbitw2=P2^1; //數(shù)碼管 2
        sbitw3=P2^2; //數(shù)碼管 1
        sbitw4=P2^3; //數(shù)碼管 0

        uchar code DAT[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

        void delayms(uchar x)
        {
        uchar ms;
        while(x--)
        for(ms=0;ms<250;ms++);
        {
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        }
        }

        voidinitimer()
        {
        EA=1;//開啟總中斷
        TR0=0; //關(guān)閉定時(shí)器
        TMOD=0x01; //選擇方式一
        TH0=0x3c; //定時(shí)50ms
        TL0=0xb0;
        second=0;
        minute=0;
        IE=0x82; //開啟總中斷,定時(shí)器0允許
        TR0=1; //開啟定時(shí)器
        }

        voiddisplay(uchartemp1,uchartemp2)
        {
        w1=0;
        w2=1;
        w3=1;
        w4=1;
        P0=DAT[temp1];
        delayms(5);

        w1=1;
        w2=0;
        w3=1;
        w4=1;
        P0=DAT[temp1/10];
        delayms(5);

        w1=1;
        w2=1;
        w3=0;
        w4=1;
        P0=DAT[temp2];
        delayms(5);

        w1=1;
        w2=1;
        w3=1;
        w4=0;
        P0=DAT[temp2/10];
        delayms(5);

        }
        void main()
        {
        initimer();
        while(1)
        {
        display(second,minute);
        }
        }

        voidtimer0() interrupt 1 using0
        {
        if(T_counter>20)
        {
        T_counter=0;
        second++;
        if(second==60)
        {
        second=0;
        minute++;
        if(minute==60)
        {
        second=0;
        minute=0;
        }
        }
        }
        elseT_counter++;
        TH0=0x3c;
        TL0=0xB0;
        }



        評論


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

        關(guān)閉
        主站蜘蛛池模板: 青铜峡市| 江源县| 柯坪县| 天全县| 桐庐县| 铜鼓县| 县级市| 洛浦县| 梅河口市| 垦利县| 永仁县| 双柏县| 祥云县| 河源市| 博罗县| 宝应县| 克东县| 嘉善县| 霸州市| 云南省| 郴州市| 黄浦区| 汾阳市| 伽师县| 绍兴县| 乌鲁木齐县| 玉树县| 陆丰市| 唐山市| 兴化市| 安宁市| 运城市| 英德市| 留坝县| 北辰区| 西青区| 密山市| 泊头市| 南涧| 韩城市| 神木县|