欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1000|回復: 0
打印 上一主題 下一主題
收起左側

基于匯編語言實現的LCD顯示矩陣鍵盤鍵值

[復制鏈接]
跳轉到指定樓層
樓主
ID:1140098 發表于 2024-12-17 10:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
實現矩陣鍵盤按鍵鍵值在LCD1602上顯示出來,基于普中51單片機開發板

代碼如下:
        RS        EQU        P1.0
        RW        EQU        P1.1
        E        EQU        P2.5
        LCDDATA EQU        P0
        
dula bit P2.0;         
wela bit P2.1;
CS88        EQU        P2.2

ORG        0000H
        AJMP        START
        ORG        0033H
KEYBUF      EQU 30H
SETB        CS88
START:      MOV KEYBUF,#2
MOV        SP,#60H
LCALL        DELAY                ;延時一段時間
        MOV        LCDDATA,#01H                ;寫指令01H,清屏
        LCALL        ENABLE
        MOV        LCDDATA,#38H                ;寫指令38H,設定LCD為16*2顯示,5*7 點陣,8位數據接口
        LCALL        ENABLE
        MOV        LCDDATA,#0FH                ;寫指令0FH,顯示ON,光標ON,閃爍ON
        LCALL        ENABLE
        MOV        LCDDATA,#06H                ;寫指令06H,光標輸入方式增量移位
        LCALL        ENABLE

        MOV        LCDDATA,#80H                ;第一行起始字符地址
        MOV        R1,#14
        ;LCALL        ENABLE
        ;MOV        DPTR,#TABLE1        ;第一行顯示字符表頭地址
        ;LCALL        DISP                ;顯示第一行數據
        ;MOV        R1,#5
        ;MOV        LCDDATA,#0C0H        ;第二行起始字符地址
        ;LCALL        ENABLE
        ;MOV        DPTR,#TABLE2        ;第二行顯示字符表頭地址
        ;LCALL        DISP                ;顯示第二行數據
WAIT:
            MOV P3,#0FFH
            CLR P3.4
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY1
            LCALL DELY10MS
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY1
            MOV A,P3
            ANL A,#0FH
            CJNE A,#0EH,NK1
            MOV KEYBUF,#0
            mov p1,#11111110b
            LJMP DK1
NK1:        CJNE A,#0DH,NK2
            MOV KEYBUF,#4
            mov p1,#11111100b
            LJMP DK1
NK2:        CJNE A,#0BH,NK3
            MOV KEYBUF,#8
            mov p1,#11111000b
            LJMP DK1
NK3:        CJNE A,#07H,NK4
            MOV KEYBUF,#12
            mov p1,#11110000b
            LJMP DK1
NK4:        NOP
DK1:
            call display

DK1A:       MOV A,P3      ;等待釋放
            ANL A,#0FH
            XRL A,#0FH
            JNZ DK1A
NOKEY1:
            MOV P3,#0FFH
            CLR P3.5
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY2
            LCALL DELY10MS
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY2
            MOV A,P3
            ANL A,#0FH
            CJNE A,#0EH,NK5
            MOV KEYBUF,#1
            mov p1,#11111110b
            LJMP DK2
NK5:        CJNE A,#0DH,NK6
            MOV KEYBUF,#5
            mov p1,#11111100b
            LJMP DK2
NK6:        CJNE A,#0BH,NK7
            MOV KEYBUF,#9
            mov p1,#11111000b
            LJMP DK2
NK7:        CJNE A,#07H,NK8
            MOV KEYBUF,#13
            mov p1,#11110000b
            LJMP DK2
NK8:        NOP
DK2:
            call display
DK2A:       MOV A,P3           ;釋放
            ANL A,#0FH
            XRL A,#0FH
            JNZ DK2A
NOKEY2:
            MOV P3,#0FFH
            CLR P3.6
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY3
            LCALL DELY10MS
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY3
            MOV A,P3
            ANL A,#0FH
            CJNE A,#0EH,NK9
            MOV KEYBUF,#2
            mov p1,#11111110b
            LJMP DK3
NK9:        CJNE A,#0DH,NK10
            MOV KEYBUF,#6
            mov p1,#11111100b
            LJMP DK3
NK10:       CJNE A,#0BH,NK11
            MOV KEYBUF,#10
            mov p1,#11111000b
            LJMP DK3
NK11:       CJNE A,#07H,NK12
            MOV KEYBUF,#14
            mov p1,#11110000b
            LJMP DK3
NK12:       NOP
DK3:
            call display
DK3A:       MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JNZ DK3A
NOKEY3:
            MOV P3,#0FFH
            CLR P3.7
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY4
            LCALL DELY10MS
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY4
            MOV A,P3
            ANL A,#0FH
            CJNE A,#0EH,NK13
            MOV KEYBUF,#3
            mov p1,#11111110b
            LJMP DK4
NK13:       CJNE A,#0DH,NK14
            MOV KEYBUF,#7
             mov p1,#11111100b
            LJMP DK4
NK14:       CJNE A,#0BH,NK15
            MOV KEYBUF,#11
             mov p1,#11111000b
            LJMP DK4
NK15:       CJNE A,#07H,NK16
            mov p1,#11110000b
            MOV KEYBUF,#15
            LJMP DK4
NK16:       NOP
DK4:
            call display
DK4A:       MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JNZ DK4A
NOKEY4:
            LJMP WAIT
DELY10MS:            ;@12.000MHz
        PUSH        30H
        PUSH        31H
        MOV                30H,#20
        MOV                31H,#108
NEXT:
        DJNZ        31H,NEXT
        DJNZ        30H,NEXT
        POP                31H
        POP                30H
        RET


display:   
       MOV        LCDDATA,#01H                ;寫指令01H,清屏
        LCALL        ENABLE
       MOV        LCDDATA,#80H                ;第一行起始字符地址
       LCALL        ENABLE
MOV A,KEYBUF
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
LCALL DISP1

ds1ms: mov r1,#1
ds1lo: mov r2,#200
ds2lo: mov r3,#200
       djnz r3,$
       djnz r2,ds2lo
       djnz r1,ds1lo
       ret ;延時返回

;-----------------
ENABLE:        CLR        RS        ;寫指令子程序(請參照1602LCD使用說 明書)
        CLR        RW
        CLR        E
        LCALL        DELAY
        SETB        E
        RET
;-----------------
;DISP:        MOV        R1,#16                ;準備顯示一行16個字符
DISP:        MOV        A,#00H                ;將ACC清零
        MOVC        A,@A+DPTR        ;查表取得要顯示的數據
        LCALL        DISP1                ;寫入一個數據
        INC        DPTR                ;數據表指針加1,準備取下一個數據
        DJNZ        R1,DISP                ;一行沒有顯示完就繼續
        RET
;-----------------
DISP1:        MOV        LCDDATA,#01H                ;寫指令01H,清屏
       MOV        LCDDATA,#80H                ;第一行起始字符地址
       MOV        LCDDATA,A                ;寫1字節數據到顯示端口
        SETB        RS        ;寫數據時序(請參照1602LCD使用說明 書)
        CLR        RW
        CLR        E
        LCALL        DELAY
        SETB        E
        RET
;-----------------



;;-----------------
DELAY:        MOV        R7,#255        ;延時子程序
D1:        MOV        R6,#255
D2:        DJNZ        R6,D2
        DJNZ        R7,D1
        RET
TABLE1: DB   "0123456789ABCDEF"   



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表