新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 八位數碼管動態顯示程序

        八位數碼管動態顯示程序

        作者: 時間:2012-10-27 來源:網絡 收藏

        這個是51hei開發板專區里轉來的一個程序,注釋很詳細,運行也沒有問題,原文地址:http://www.51hei.com/bbs/dispbbs.asp?boardid=10id=4140

        /*動態數顯的設計思路,首先是我們要先知道怎樣才能使哪個位亮,顯示的段是什么數值,接下來就是中斷時間
        的問題了,設計步驟如下,如果要讓八個數碼管1到8,我們可以修改中斷時間,如把50000改成100或更低*/

        #includereg52.h>
        #includeintrins.h>
        #define uint unsigned int
        #define uchar unsigned char
        sbit duan=P2^6;
        sbit wei=P2^7;

        uchar a,numw,numd;
        uchar code tabled[]={
        0x3f,0x06,0x5b,0x4f,0x66,
        0x6d,0x7d,0x07,0x7f,0x6f}; /*第二步驟,創建段顯數值的對碼表0~9數值.如果要顯示1~8數值,最好多加前后兩位數0跟9,
        因為后面++移位時就能按我們常規順序亮下去,至于如何顯示對應數值請先看數碼顯示電路圖*/
        uchar code tablew[]={
        0xfe,0xfd,0xfb,0xf7,
        0xef,0xdf,0xbf,0x7f}; //第二步驟,創建位顯,就是顯示的位置,這個碼表相對簡單,用二進制表示11111110~01111111,是0的為八位數顯管的位置
        void main()
        {
        a=0; //定義個時間函數
        numw=0; //附位顯初值為0位
        numd=0; //附段顯初值為0位

        TMOD=0X01; //第四步驟,附中斷暫存器初值
        TH0=(65535-50000)/256; //附中斷請求時間初值,高8位
        TL0=(65536-50000)%256; //附中斷請求時間初值,低8位
        EA=1; //開啟總中斷
        ET0=1; //開啟定時中斷
        TR0=1; //啟動定時中斷
        while(1)
        {
        if(a==10) //第三步驟,執行速度,如果等20差不多是1秒,則往下執行,相當于單位數值亮的時間
        {
        a=0; //重新附值初值0
        numd++; //段顯值++
        if(numd==9) //如果段值在對碼表第9位則轉下執行
        numd=1; /*重新附值段顯值對應對碼表第1位,因為++所以0位并不在數碼管中顯示.
        如果要顯示,也會因為++而在第二輪中顯示出*/
        duan=1; //開啟段顯端
        P0=tabled[numd];//附段顯P0值對應段顯值對碼表
        duan=0; //鎖存
        wei=1; //開啟位顯端
        P0=tablew[numw];//附位顯P0值對應位顯值對碼表
        wei=0; //鎖存
        numw++; //相當于位顯移位
        if(numw==8) //如果位顯值到對應位顯對碼表第八位則轉下執行
        numw=0; //重新附值位顯值對應對碼表第0位起
        /*

        下面是簡單的單個數碼管顯示例證 第一驟, 修改后在第三步驟內
        #include"reg52.h"
        #include"intrins.h"

        sbit duan=P2^6; //段顯端口
        sbit wei=P2^7; //位顯端口

        void main()
        {
        //P0=0xff; 數碼管不顯示任何信號,默認情況下通電本身就不顯示,可以不寫
        duan=1; //開啟段顯端口
        P0=0x06; //附值段顯數值為1,可以查閱數碼管電路圖相對應顯示的對碼表
        duan=0; //鎖存,保持上一步段顯狀態,硬件說明請查閱74HC573功能
        wei=1; //開啟位顯端口
        P0=0xfe; //附值位顯位置,01111111,左邊第一位,為0的顯示
        wei=0; //鎖存,保持上一步位顯狀態,硬件說明請查閱74HC573功能
        }
        */

        }
        }
        }

        void timer0() interrupt 1 /*第四步驟,中斷時間函數這個相當于移位數顯的速度,速度夠快,人眼就會有余輝效應,
        感覺8位數顯一直在亮著,相當于正在播放的電影膠卷*/

        {
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        a++;
        }

        /*

        以上有什么地方還需要改進的還請老師明示

        */

        紅外遙控器相關文章:紅外遙控器原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 长宁县| 西吉县| 娄烦县| 渑池县| 连城县| 陵水| 上蔡县| 甘孜| 进贤县| 井研县| 江安县| 乌鲁木齐县| 遵义县| 阆中市| 苍梧县| 金昌市| 克拉玛依市| 吴桥县| 佛教| 措美县| 班戈县| 卢氏县| 福建省| 灵寿县| 柯坪县| 广饶县| 淳安县| 隆子县| 南昌市| 蓝田县| 衡阳县| 乌恰县| 霞浦县| 呈贡县| 藁城市| 孟津县| 宜章县| 府谷县| 南宫市| 西青区| 九江县|