⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 he26.asm

📁 51系列单片机的汇编程序包
💻 ASM
字号:
;=============硬件实验二十六 2×16LCD液晶显示接口实验=========
         org 0000h
         LJMP LCDGD
         ;8155命令口 0ffe8h
         ORG 1000H
;==========2X16字符式液晶显示================
         ;R/W=8155_PA7
         ;RS=8155_PB3
         ;LCD_E=/0FFECH与/RD或/WR的乘积项
         ;DB0_DB7=数握据总线
;============写命命============
LC_WMB:  PUSH 0E0H
         CALL LC_RBF
         MOV DPTR,#0FFE9H   ;令R/W=0
         MOV A,#7FH
LC_WRS:  MOVX @DPTR,A
         MOV DPTR,#0FFECH
         POP 0E0H
         MOVX @DPTR,A
         RET
;==========写数据=============
LC_WDB:  PUSH 0E0H
         CALL LC_RBF
         CJNE A,#50H,LCW_0
LCW_0:   JC LCW_1
         MOV A,#0C0H
         CALL LC_WMB
         CALL LC_RBF
LCW_1:   MOV DPTR,#0FFE9H   ;令R/W=0
         MOV A,#7FH
         MOVX @DPTR,A
         INC DPTR
         MOV A,#0FFH        ;令RS=1
         SJMP LC_WRS
;============  读数据  =========
LC_RDB:  CALL LC_RBF
         MOV DPTR,#0FFEAH
         MOV A,#0FFH        ;令RS=1
         MOVX @DPTR,A
         MOV DPTR,#0FFECH
         MOVX A,@DPTR
         RET
;===========读状态及AC地址=========
LC_RBF:  MOV DPTR,#0FFE9H   ;令R/W=1
         MOV A,#0FFH
         MOVX @DPTR,A
         INC DPTR
         MOV A,#0F7H        ;令RS=0
         MOVX @DPTR,A
lC_BRN:  MOV DPTR,#0FFECH   ;读状态
         MOVX A,@DPTR
         JB ACC.7,lC_BRN
         RET
;==================================
LCDGD:   MOV SP,#60H
         MOV DPTR,#0FFE8H ;写8155控制字
         MOV A,#43H
         MOVX @DPTR,A     ;令A、B 口为输出口
                          ;C口为输入口
lcd_t:   mov dptr,#0ffe9h
         MOV A,#7FH       ;令LCD_R/W为零
         MOVX @DPTR,A
         INC DPTR
         MOV A,#0F7H      ;令LCD_RS为零
         MOVX @DPTR,A
;=========== 启动 LCD =============
         MOV DPTR,#0FFECH
         MOV A,#30H        ;启动lcd
         MOVX @DPTR,A
         mov r2,#30h       ;等待500m秒
lce_wa:  djnz r3,lce_wa
         djnz r2,lce_wa
         MOV A,#30H        ;第二次启动
         MOVX @DPTR,A
         djnz r3,$         ;等待500u秒
         MOV A,#30H        ;第三次启动
         MOVX @DPTR,A
         djnz r3,$         ;等待500u秒
         MOV A,#38H        ;设定lcd当前工作模式
         MOVX @DPTR,A      ;汇流、两行、5X7字型
         djnz r3,$          ;等待500u秒
         MOV A,#08H        ;关显示
         MOVX @DPTR,A
         djnz r3,$          ;等待500u秒
         MOV A,#01H         ;LCD清屏
         MOVX @DPTR,A
         djnz r3,$          ;等待500u秒
         MOV A,#0EH         ;开显示、光标不闪烁
         MOVX @DPTR,A
         djnz r3,$          ;等待500u秒
         CALL LC_RBF        ;检测LCD状态
LCD_P:   MOV A,#06H         ;光标右移且地址加1
         CALL LC_WMB
         MOV A,#02H         ;光标归位
         CALL LC_WMB
;=========送Dais-8052H+ good==============
         MOV A,#44H         ;写入“D”
         CALL LC_WDB
         MOV A,#61H         ;写入“a”
         CALL LC_WDB
         MOV A,#69H         ;写入“i”
         CALL LC_WDB
         mov a,#73h         ;写入“s”
         CALL LC_WDB
         mov a,#0b0h        ;写入“-”
         CALL LC_WDB
         mov a,#38h         ;写入“8”
         CALL LC_WDB
         mov a,#30h         ;写入“0”
         CALL LC_WDB
         mov a,#35h         ;写入“5”
         CALL LC_WDB
         mov a,#32h         ;写入“2”
         CALL LC_WDB
         mov a,#48h         ;写入“H”
         CALL LC_WDB
         mov a,#2Bh         ;写入“+”
         CALL LC_WDB
         mov a,#0a0h        ;写入“ ”
         CALL LC_WDB
         mov a,#67h         ;写入“g”
         CALL LC_WDB
         mov a,#6fh         ;写入“o”
         CALL LC_WDB
         mov a,#6fh         ;写入“o”
         CALL LC_WDB
         mov a,#64h         ;写入“d”
         CALL LC_WDB
         MOV A,#0C0H        ;写地址(换行)
         CALL LC_WMB        ;指向第二行第一位
         mov a,#50h         ;写入“P”
         CALL LC_WDB
         MOV A,#0C0H        ;写地址(光标)
         CALL LC_WMB        ;指向第二行第一位
;=========4位七段显示、3x3键扫实验==============
       ;ioa equ 0ffe9h             ;8155A口(字形)
       ;iob equ 0ffeah             ;8155B口(字位)
       ;ioc equ 0ffebh             ;8155C口(键入)
        MOV 50H,#7EH      ;清显示缓冲单元
	    MOV A,#10H
	    MOV R0,#7BH
LEDS:	MOV @R0,A
	    INC R0
	    CJNE R0,#7EH,LEDS
	    INC A             ;送待令符“p”
	    MOV @R0,A
LEDT:   CALL X2
        CJNE A,#10H,LED0  ;调闪动显示、键扫消抖子程序
LED0:   JNC LED1          ;是返“P”命令转!
        orl a,#30h        ;ASCLL码转换
        call lc_wdb       ;送LCD单元
        anl a,#0fh        ;还原代码
        acall x3          ;送当前LED光标闪动单元
        DB 7BH,7EH        ;调正光标闪动指针
        SJMP LEDT         ;完成送数操作返回显示键扫入口
LED1:   MOV A,#01H        ;LCD清屏
        CALL LC_WMB
        MOV a,#0eh
        call lc_wmb       ;开显示、光标不闪烁
        jmp lcd_p         ;返回初始待令入口
;=======刷新光标单元调正闪动指针==========
X3:     MOV R4,A
        MOV R0,#50H
        MOV A,@R0
        MOV R1,A
        MOV A,R4
        MOV @R1,A
        CLR A
        POP DPH
        POP DPL
        MOVC A,@A+DPTR
        INC DPTR
        CJNE A,01H,X30
        dec r1
        clr a
        MOVC A,@A+DPTR
X31:    MOV @R0,A
        INC DPTR
        PUSH DPL
        PUSH DPH
        RET
X30:    DEC R1
        MOV A,R1
        SJMP X31
;==========闪动显示子程序===============
X2:     MOV R6,#80H
X0:     ACALL XLE
        JNB ACC.5,XX0
        DJNZ R6,X0
        MOV R6,#30H
        MOV R0,#50H
        MOV A,@R0
        MOV R0,A
        MOV A,@R0
        MOV R7,A
        MOV A,#10H
        MOV @R0,A
X1:     ACALL XLE
        JNB ACC.5,XX1
        DJNZ R6,X1
        MOV A,R7
        MOV @R0,A
        SJMP X2
XX1:    MOV R6,A
        MOV A,R7
        MOV @R0,A
        MOV A,R6
XX0:    RET
;========= 显示、键扫消抖程序=========
XLE:    ACALL DIS      ;显示
        ACALL KEY      ;键扫
;========= 键消抖处理程序 =============
        MOV R4,A
        MOV R1,#48H
        MOV A,@R1
        MOV R2,A
        INC R1
        MOV A,@R1
        MOV R3,A
        MOV A,R4
        XRL A,R3
        MOV R3,04H
        MOV R4,02H
        JZ X10
        MOV R2,#88H
        MOV R4,#88H
X10:    DEC R4
        MOV A,R4
        XRL A,#82H
        JZ X11
        MOV A,R4
        XRL A,#0EH
        JZ X11
        MOV A,R4
        JZ X12
        MOV R4,#20H
        DEC R2
        SJMP X13
X12:    MOV R4,#0FH
X11:    MOV R2,04H
	    NOP
	    NOP
        MOV R4,03H
X13:    MOV R1,#48H
        MOV A,R2
        MOV @R1,A
        INC R1
        MOV A,R3
        MOV @R1,A
        MOV A,R4
        JB ACC.5,X113
	    MOV DPTR,#LS3
	    MOVC A,@A+DPTR
X113:   RET
;=========== 键值表===================
LS3:    DB 00H,01H,02H,20H,20H,20H,20H,20H;
        ;   0,   1,  2,无键按下值
        DB 03H,04H,05H,20H,20H,20H,20H,20H;
        ;    3, 4,  5,
        DB 06H,07H,10H,20H,20H,20H,20H,20H;
        ;    6, 7, 返回键按下值
;=========== 显示子程序===============
DIS:    PUSH DPH
        PUSH DPL
        SETB RS1
        MOV R0,#7EH
        MOV R2,#80H
        MOV R3,#00H
        MOV DPTR,#LS0
LS2:    MOV A,@R0
        MOVC A,@A+DPTR
        MOV R1,#0E9H
        ORL A,#80H
        MOVX @R1,A
        MOV A,R2
        inc R1
        ORL A,#0FH
        MOVX @R1,A
LS1:    DJNZ R3,LS1
        MOV A,R2
        CLR C
        RRC A
        MOV R2,A
        DEC R0
        JNB ACC.3,LS2
        MOV A,#0FH
        movx @R1,A
	    dec r0
	    CLR A
	    movx @r0,a
        CLR RS1
        POP DPL
        POP DPH
        RET
;=============字形表========================
LS0:    DB 0C0H,0F9H,0A4H,0B0H,99H,92H
         ;    0,  1,   2,   3,  4,  5,
        DB 82H,0F8H,80H,90H,88H,83H,0C6H
         ;   6,   7,  8, 9,  a,  b,  c,
        DB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
         ;   d,  e,   f, 空,  p , h,  -,
;=============键扫子程序====================
KEY:    SETB RS1
        MOV R2,#0FEH
        MOV R3,#03H
        MOV R0,#00H
LP1:    MOV R1,#0EAH
        MOV A,R2
        MOVX @R1,A
        RL A
        MOV R2,A
        inc r1
        MOVX A,@R1
        CPL A
        ANL A,#07H
        JNZ LP0
        INC R0
        DJNZ R3,LP1
XP33:   MOV A,#20H
XP3:    mov r2,a
        MOV A,#0FH
	    mov r1,#0EAH
	    movx @r1,a
	    mov a,r2
        CLR RS1
        RET
LP0:    CPL A
        JB ACC.0,XP0
        MOV A,#00H
        SJMP LPP
XP0:    JB ACC.1,XP1
        MOV A,#08H
        SJMP LPP
XP1:    JB ACC.2,XP33
        MOV A,#10H
LPP:    ADD A,R0
        sjmp xp3
;=============================
        end


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -