新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機驅動16×16LED點陣顯示動畫漢字匯編程序

        51單片機驅動16×16LED點陣顯示動畫漢字匯編程序

        作者: 時間:2012-12-05 來源:網絡 收藏

        電路圖就不貼出來了16×的典型接法。這里提供一個完整的AT89S驅動驅動led點陣顯示具有動畫效果的漢字的匯編程序列子.

        ORG 0000H
        ST: MOV A,#0FFH ;初始化
        MOV P1,A
        MOV P2,A
        MOV P3,A
        MOV P0,A
        CLR A
        MOV R0,#50H ;顯示緩存清0
        MOV R1,#20H ;控制清0的次數
        ST0: MOV @R0,A
        INC R0
        DJNZ R1,ST0

        ;正文顯示
        CHINESE: MOV DPTR,#TAB1 ;查表指針指向TAB1
        LCALL HZ
        ;結束動畫
        SCREE:
        MOV DPTR,#TAB2;查表指針指向TAB2
        ACALL DD
        MOV DPTR,#TAB3;查表指針指向TAB3
        ACALL DD
        MOV DPTR,#TAB4;查表指針指向TAB4
        ACALL DD
        LJMP CHINESE
        ;顯示8幅畫面子程序,SCREE專用,用字模軟件字要倒置(表必須深256字節)
        DD: MOV B,#00H
        MOV R0,#08H ;顯示8幅畫面
        AJMP CC
        CC0: MOV A,B
        ADD A,#20H ;指向下一幅畫面
        MOV B,A
        CC: MOV R7,#08H ;畫面停留時間
        MOV R3,B
        MOV 37H,R0
        LCALL ENTER
        DIS00: LCALL DISPLAY
        DJNZ R7,DIS00
        MOV R0,37H
        DJNZ R0,CC0
        RET
        ;漢字上移子程序,可顯示8個漢字,(表必須深256字節)
        HZ: MOV R3,#00H ;查表偏移量
        MOV R5,#81H ;查表128次
        MOVBACK: MOV R4,#10H ;使顯示完一個漢字
        MOVBACK0: MOV R7,#02H ;一楨畫面顯示時間
        MOV R0,#6DH ;低8位R0指向顯示緩存倒數第3個字節,以備與最后1個字節交換
        MOV R1,#6CH ;高8位R1指向顯示緩存倒數第4個字節,以備與倒數第2個字節交換
        MOV R2,#10H ;內存后移的次數
        DJNZ R5,MOVBACK1
        RET ;顯示完該表,返回
        MOVBACK1: MOV A,@R0 ;低8位被后移的內存單元數據暫存入A
        INC R0 ;后移兩字節
        INC R0
        MOV @R0,A ;放入要移的低8位數據
        MOV A,R0 ;R0指向下一個要后移的內存單元
        SUBB A,#04H
        MOV R0,A
        MOV A,@R1 ;高8位被后移的內存單元數據暫存入A
        INC R1 ;后移兩字節
        INC R1
        MOV @R1,A ;放入要移高8位的數據
        MOV A,R1 ;R1指向下一個要后移的內存單元
        SUBB A,#04H
        MOV R1,A ;R1指向下一個要后移的內存單元
        DJNZ R2,MOVBACK1 ;顯示緩存數據依次后移
        MOV A,R3 ;從表TAB1讀入要移進50H,51H的數據
        MOVC A,@A+DPTR;先給50H讀數據
        MOV 50H,A
        MOV A,R3 ;指向下一字節
        INC A
        MOV R3,A
        MOVC A,@A+DPTR;再給51H讀數據
        MOV 51H,A
        MOV A,R3 ;指向下一字節
        INC A
        MOV R3,A
        MOV 30H,R3 ;保護數據
        MOV 31H,R4
        MOV 32H,R5
        DISMOV: LCALL DISPLAY ;顯示當前數據
        DJNZ R7,DISMOV
        MOV R3,30H
        MOV R4,31H
        MOV R5,32H
        DJNZ R4,MOVBACK0
        MOV 30H,R3 ;保護數據
        MOV 32H,R5
        MOV R7,#24H ;顯示當前數據延時
        DISMOV0: LCALL DISPLAY
        DJNZ R7,DISMOV0
        MOV R3,30H
        MOV R5,32H
        LJMP MOVBACK
        ;放進一幅顯示數據到顯示緩存子程序,要先設好指針DPTR和R3,影響R1,R2,R3
        ENTER: MOV R1,#50H ;從50H單元起把表存入
        MOV R2,#20H ;查表次數
        MOV A,R3
        CLLOOP_: MOVC A,@A+DPTR ;查表
        MOV @R1,A ;將表放進5X,6X單元
        INC R1 ;R1指向下一個地址空間
        MOV A,R3 ;查表指針后移
        INC A
        MOV R3,A ;將指針修改結果存入R3
        DJNZ R2,CLLOOP_;沒查完轉CLLOOP_
        RET
        ;15MS,顯示子程序,一楨32個字節,影響A,R0,R1,R3,R4,R5,R6;
        ;http://www.51hei.com單片機網提供漢字取模工具,可顯示任意漢字
        DISPLAY: MOV A,#0FFH
        MOV P0,A
        MOV P1,A
        MOV P2,A
        MOV P3,A
        SETB C
        MOV R6,#7FH ;賦掃描字初值,左移后初值為0FEH
        MOV R5,#00H ;列掃描低8位控制
        MOV R0,#50H ;行的高8(p1)位要顯示的數據起始地址
        MOV R1,#10H ;掃描次數
        DISLOOP: MOV A,@R0 ;從內存讀數據
        MOV P2,#0FFH ;裝入數據時不顯示任何東西
        MOV P3,#0FFH
        CPL A ;數據取反以適合顯示
        MOV P1,A ;送入行的高8(p1)位要顯示的數據
        INC R0 ;修改R0指向低8位要顯示的數據
        MOV A,@R0 ;讀低8位要顯示的數據
        CPL A ;數據取反以適合顯示
        MOV P0,A ;送入行的低8(p0)位要顯示的數據
        INC R0 ;R0指向下一個高8(p0)位要顯示的數據
        LCALL NEXT ;調用列掃描程序
        LCALL DELAY1MS ;顯示延時
        DJNZ R1,DISLOOP;一楨顯示完返回
        MOV P3,#0FFH ;全滅
        RET
        ;列掃描子程序DISLOOP專用
        NEXT: JNC NEXT1 ;C=0轉掃描高8(p3)位行
        MOV A,R6 ;修改掃描字
        RL A
        MOV R6,A
        INC R5
        CJNE R5,#09H,NEXT0 ;R6=#0FEH時C=0
        AJMP NEXT1
        BACK: RET
        NEXT0: MOV P2,R6 ;掃描低8(p2)位行
        AJMP BACK
        NEXT1: MOV P2,#0FFH
        MOV P3,R6 ;掃描高8(p3)位行
        MOV A,R6 ;修改掃描字
        RL A
        MOV R6,A
        AJMP BACK
        ;延時1MS子程序
        DELAY1MS: MOV R3,#10
        D0: MOV R4,#50
        D1: DJNZ R4,D1
        DJNZ R3,D0
        RET

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


        雙控開關相關文章:雙控開關原理

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 常德市| 竹山县| 佛学| 安远县| 饶平县| 油尖旺区| 吕梁市| 江安县| 大冶市| 保靖县| 永吉县| 田阳县| 满城县| 原平市| 南溪县| 宿松县| 淳化县| 峡江县| 南木林县| 南通市| 秦皇岛市| 平度市| 溧阳市| 江北区| 睢宁县| 开原市| 宁都县| 明光市| 维西| 汾西县| 富阳市| 瓮安县| 保亭| 雅江县| 卫辉市| 竹溪县| 民和| 务川| 隆昌县| 常熟市| 新巴尔虎右旗|