新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機驅動數碼管顯示設計

        單片機驅動數碼管顯示設計

        作者: 時間:2013-01-15 來源:網絡 收藏


        看看修改后的程序將變得更加簡潔,直觀了,程序代碼從原來的15行減少到僅4行,一樣實現了相同的功能。這也就是我們要學習的編程技巧哦!在編程中盡量用最少的代碼實現相同的功能。程序第1行的功能是將要顯示的數字“6”的十六進制段碼"82H"送到P0口,程序第2行的功能就是將數碼管的選通代碼#0FEH(即二進制"11111110")送到P2口,從而控制第一位,其它數碼管熄滅。把修改過的程序編譯后的目標文件寫到上看到顯示效果是一樣的。程序中用一行代碼 MOVP0,#82H 就輸出了字形,因此我們要顯示其它字形時只要從上面的數碼管段碼表中查出對應的十六進制字形碼,用同樣的方法把段碼輸出到P0口就可以了。比如我們要顯示一個數字“8”, 只需將程序中的 MOVP0,#82H 語句改成 MOVP0,#80H 即可,至此,我們終于可以隨心所欲地控制數碼管要顯示的字形了,是不是很簡單呀 :) 。
        
        另外,如果想讓第二位數碼管DG2顯示,其它熄滅怎么辦呢?其實很簡單,只要把對應數碼管的選通端口輸出低電平就可以使該位了,如指令 CLRP2.1 就可以讓第二個。。。程序中如果使P2.0~P2.4都輸出低電平,那么實驗板上的5個數碼管都會被選通,顯示出相同的字形,即顯示“66666”。下面就是5位數碼管顯示出“66666”的程序,初學者可以實驗一下,以加深對數碼管顯示位選通(使能)控制的理解。

        MAIN:MOV P0,#82H ;將數字"6"的段碼輸出到P0口
         MOV P2,#0E0H;從P2口輸出數碼管選通代碼,使5位數碼管均選通,即輸出二進制“11100000”
         AJMPMAIN;跳轉到開始重新進行
         END ;程序結束

        驅動數碼管的動態顯示編程

        上面我們已經學習了數碼管靜態顯示,接下來我們就學習數碼管動態顯示編程,編程讓實驗板上的數碼管顯示“89C51”。從原理圖中(圖5)我們可以看到,5個數碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端是2連在一起的,那么當程序從P0口輸出字形碼時,在同一個時間所有數碼管都會接收到相同的字形碼。你一定會問,這樣不是5個數碼管都顯示相同的數字了嗎?如何顯示出5個不同的字符“89C51”呢?因此,就要使用動態掃描了,在程序中,首先顯示一個數,然后關掉;然后顯示第二個數,又關掉,顯示第三個數,又關掉。。。直到所有要顯示的5個數完成,再從頭開始掃描。輪流點亮掃描過程中,每位顯示器的點亮時間是極為短暫的(約1ms),由于人的視覺暫留現象及發光二極管的余輝效應,盡管實際上各位顯示器并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩定的顯示數據,不會有閃爍感。

        數碼管顯示“89C51”的具體編程思路如下:第一位數碼管顯示“8” → 延時1ms → 關閉所有數碼管顯示 → 第二位數碼管顯示“9” → 延時1ms → 關閉所有數碼管顯示 → 第三位數碼管顯示“C” → 延時1ms → 關閉所有數碼管顯示 → 第四位數碼管顯示“5” → 延時1ms → 關閉所有數碼管顯示 → 第五位數碼管顯示“1” → 延時1ms → 關閉所有數碼管顯示 → 返回到第一步重新進行新一輪掃描過程。下面就是根據該思路編出來的源程序,初學者可以把該程序粘貼到Keil工程中,編譯得到目標文件,然后燒寫到驗證一下。

        ; *********** 在數碼管上動態顯示"89C51" *************
        MAIN: MOV P0,#80H;第1位數碼管顯示“8”
        CLR P2.0 ;允許第1位數碼管顯示
        ACALL DELAY;顯示延時一段時間
        MOV P0,#0FFH ;清除P0口字形碼
        MOV P2,#0FFH ;停止所有數碼管顯示選通,關閉所有顯示

        MOV P0,#90H;第2位數碼管顯示“9”
        CLR P2.1 ;允許第2位數碼管顯示
        ACALL DELAY;顯示延時一段時間
        MOV P0,#0FFH ;清除P0口字形碼
        MOV P2,#0FFH ;停止所有數碼管顯示選通,關閉所有顯示

        MOV P0,#0C6H ;第3位數碼管顯示“C”
        CLR P2.2 ;允許第3位數碼管顯示
        ACALL DELAY;顯示延時一段時間
        MOV P0,#0FFH ;清除P0口字形碼
        MOV P2,#0FFH ;停止所有數碼管顯示選通,關閉所有顯示

        MOV P0,#92H;第4位數碼管顯示“5”
        CLR P2.3 ;允許第4位數碼管顯示
        ACALL DELAY;顯示延時一段時間
        MOV P0,#0FFH ;清除P0口字形碼
        MOV P2,#0FFH ;停止所有數碼管顯示選通,關閉所有顯示

        MOV P0,#0F9H ;第5位數碼管顯示“1”
        CLR P2.4 ;允許第5位數碼管顯示
        ACALL DELAY;顯示延時一段時間
        MOV P0,#0FFH ;清除P0口字形碼
        MOV P2,#0FFH ;停止所有數碼管顯示選通,關閉所有顯示

        AJMPMAIN ;跳轉到開始重新進行

        ;******** 延時子程序 ********
        DELAY:MOV R1,#10
        Y1: MOV R2,#100
        DJNZR2,$
        DJNZR1,Y1
        RET

        END

        【總結】 至此,我們已經較全面地學習了數碼管的工作原理和使用方法,相信你對數碼管的靜態顯示、動態顯示有了新的認識,掌握了數碼管的這兩種使用方法,你就可以根據你自己的意愿及要求來編寫各種各樣的數字顯示程序了,如電子溫度計、時鐘、秒表、頻率計、計數器的制作等等,可以充分發揮你的想象達到你所需要的各種顯示效果。我們附帶的配套軟件資料光盤配有相關的實驗例程、實驗視頻錄像、單片機多媒體教程、實用電子圖書資料、單片機開發軟件及編程器、仿真器的全部驅動程序,供大家學習使用,以幫助初學者快速入門。

        手機電池相關文章:手機電池修復


        單片機相關文章:單片機教程


        單片機相關文章:單片機視頻教程


        單片機相關文章:單片機工作原理



        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 孟州市| 旺苍县| 怀柔区| 肃宁县| 南宫市| 五华县| 扬州市| 汶上县| 灌阳县| 邮箱| 大宁县| 齐齐哈尔市| 福州市| 樟树市| 陵水| 肃宁县| 台北县| 玉溪市| 乐都县| 大竹县| 龙口市| 丹阳市| 久治县| 米易县| 乐清市| 汉阴县| 广丰县| 宝坻区| 甘孜县| 安泽县| 沂源县| 镇原县| 宁晋县| 句容市| 武鸣县| 赤水市| 夏河县| 师宗县| 托里县| 兰州市| 延边|