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

📄 lcddisplayandkeyboard.txt

📁 本程序为简单的12232F型LCD液晶显示及键盘功能程序 K1键为进入调整
💻 TXT
字号:
;本程序为简单的12232F型LCD液晶显示及键盘功能程序
;K1键为进入调整,进入后显示四个0,再次按下为退出调整,初始状态   ;为首行显示河北工程大学    
;K2键为进入调整后加一
;K3键为进入调整后减一
;K4键为光标右移   

        ORG        0000H
        AJMP       MAIN
        ORG        0100H
;/主程序,LCD初始化/
MAIN:   LCALL      DELAY1          ;主程序开始,调用延时
        MOV   SP,  #40H                          
        MOV   A,   #01H            ;清屏                         
        LCALL      ORDER           
        LCALL      BUSY
        LCALL      DELAY2
        MOV   A,   #0EH            ;整体显示,游标开,关闪烁
        LCALL      ORDER  
        LCALL      BUSY 
        MOV   A,   #06H            ;游标右移,地址计数器加一
        LCALL      ORDER
        LCALL      BUSY
        MOV   A,   #80H            ;赋第一行行首地址
        LCALL      ORDER
        LCALL      BUSY
        LCALL      SHOW            ;调用显示子程序
        MOV   A,   #02H            ;地址归位
        LCALL      ORDER
        LCALL      BUSY
        MOV   A,   #90H            ;赋第二行行首地址  
        LCALL      ORDER
        LCALL      BUSY
        LCALL      SHOWR           ;调用显示子程序
;/K1键扫描程序/                                   
KEY:    MOV   C,   P2.1            ;查询K1键 
        LCALL      DELAY2          ;消抖动 
        ORL   C,   P2.1            
        JC         KEY             ;未按下,重新查询
        LCALL      DELAY2
        SJMP       L               ;有键按下,进入调整,跳转键盘查询程序
DELAY2: MOV   R2,  #100            ;延时子程序
DEL21:  MOV   R3,  #160
DEL22:  DJNZ  R3,  DEL22
        DJNZ  R2,  DEL21
        RET
;/K1键按下,键盘扫描/
L:      MOV   A,   #02H            ;K1键按下,地址归位
        LCALL      ORDER
        LCALL      BUSY
        LCALL      DELAY2
        MOV   A,   #01H            ;清屏
        LCALL      ORDER
        LCALL      BUSY
        LCALL      DELAY3
        MOV   A,   #0FH            ;整体显示,开光标,开闪烁 
        LCALL      ORDER
        LCALL      BUSY
        MOV   R4,  #04H            ;显示四个0,循环次数
LOOP2:  MOV   A,   #0A3H           ;0显示
        LCALL      DIGITAL
        LCALL      BUSY
        MOV   A,   #0B0H
        LCALL      DIGITAL
        LCALL      BUSY
        DJNZ  R4,  LOOP2
        LCALL      DELAY2
        MOV   A,   #02H             ;显示结束,地址归位 
        LCALL      ORDER
        LCALL      BUSY
        LCALL      DELAY2
        MOV   A,   #80H             ;赋首行行首地址
        LCALL      ORDER
        LCALL      BUSY
        MOV   R5,  #04H             ;K4键按下的循环次数              
        MOV   DPTR,#TAB1            ;赋表首地址 
        MOV   A,   #TAB1
        ADD   A,   #16
        MOV   R4,  A                ;赋表尾地址
        MOV   R6,  #01H             ;数字显示循环次数 
        MOV   R0,  #80H             ;保存首行行首地址
        MOV  31H,  DPH              ;开辟显示缓冲区
        MOV  32H,  DPL
        MOV  33H,  DPH
        MOV  34H,  DPL 
        MOV  35H,  DPH 
        MOV  36H,  DPL
        MOV  37H,  DPH 
        MOV  38H,  DPL       
KEYBOARD1:MOV  A,  P2               ;键盘查询子程序 
          ANL  A,  #1EH             ;屏蔽高三位和最低位
          MOV  B,  A
          LCALL    DELAY1           ;消抖动
          MOV  A,  P2
          ANL  A,  #1EH
          CJNE A,  B, RETURN        ;相等则有键按下 
          CJNE A,  #1CH, KEY2       ;相等则K1按下,不等则继续查询
          LJMP     LKEY1
KEY2:     CJNE A,  #1AH, KEY3       ;相等则K2按下,不等则继续查询
          LCALL    LKEY2
KEY3:     CJNE A,  #16H, KEY4       ;相等则K3按下,不等则继续查询
          LCALL    LKEY3
KEY4:     CJNE A,  #0EH, RETURN     ;相等则K4按下,不等则重新查询
          LCALL    LKEY4
          LCALL    DELAY1
RETURN:   SJMP     KEYBOARD1
LKEY1:    LJMP     MAIN             ;K1再次按下,退出调整 
LKEY2:    CJNE R0, #80H, LKEY21     ;K2键按下,查询光标位置
          MOV  DPH,31H        
          MOV  DPL,32H        
  LKEY21: CJNE R0, #81H, LKEY22
          MOV  DPH,33H         
          MOV  DPL,34H         
  LKEY22: CJNE R0, #82H, LKEY23
          MOV  DPH,35H
          MOV  DPL,36H
  LKEY23: CJNE R0, #83H, KAISHI
          MOV  DPH,37H
          MOV  DPL,38H             
  KAISHI: MOV  R7, #02H
          CJNE R6, #0AH,  PLKEY2    ;显示9则返回1
          MOV  DPTR,  #TAB1
          MOV  R6, #01H
PLKEY2:   CLR  A                    ;加1显示程序
          MOVC A,  @A+DPTR
          LCALL    DIGITAL
          LCALL    DELAY1
          INC      DPTR
          DJNZ R7, PLKEY2
          CJNE R0, #80H, PLKEY21    ;显示结果存入对应缓冲区
          MOV  31H,DPH       
          MOV  32H,DPL       
 PLKEY21: CJNE R0, #81H, PLKEY22
          MOV  33H, DPH        
          MOV  34H, DPL        
 PLKEY22: CJNE R0, #82H, PLKEY23
          MOV  35H, DPH
          MOV  36H, DPL
 PLKEY23: CJNE R0, #83H, TT
          MOV  37H, DPH
          MOV  38H, DPL            
  TT:     INC  R6                    ;一次显示结束,光标归位,
          MOV  A,  #02H
          LCALL    ORDER
          LCALL    BUSY
          LCALL    DELAY1
          MOV  A,  R0
          LCALL    ORDER
          LCALL    BUSY
          LCALL    DELAY3
          RET   
LKEY3:    CJNE R0, #80H, LKEY31      ;K3键按下,确定光标位置,确定显示缓冲区
          MOV  DPH, 31H        
          MOV  DPL, 32H        
  LKEY31: CJNE R0,  #81H, LKEY32
          MOV  DPH, 33H         
          MOV  DPL, 34H         
  LKEY32: CJNE R0,  #82H, LKEY33
          MOV  DPH, 35H
          MOV  DPL, 36H
  LKEY33: CJNE  R0, #83H, KAISHI2
          MOV  DPH, 37H
          MOV  DPL, 38H             
 KAISHI2: MOV  R7,  #02H
          MOV  A,   #TAB1            ;减一显示策略
          SUBB A,   #01H
          MOV  40H,  A
          MOV  A,   DPL
          CJNE A,   40H, PLKEY3
          MOV  DPL, R4
PLKEY3:   CLR  A                     ;减一显示子程序
          MOVC A,   @A+DPTR
          LCALL     DIGITAL
          LCALL     DELAY1
          INC       DPTR
          DJNZ R7,  PLKEY3
          MOV  A,   DPL
          SUBB A,   #04H
          MOV  DPL, A
          CJNE  R0, #80H, PLKEY31     ;一次显示结束,结果存入对应缓冲区
          MOV  31H, DPH       
          MOV  32H, DPL       
 PLKEY31: CJNE  R0, #81H, PLKEY32
          MOV  33H, DPH        
          MOV  34H, DPL        
 PLKEY32: CJNE  R0, #82H, PLKEY33
          MOV  35H, DPH
          MOV  36H, DPL
 PLKEY33: CJNE  R0, #83H, TT2
          MOV  37H, DPH
          MOV  38H, DPL 
 TT2:     MOV  A,  #02H               ;一次显示结束,光标复位
          LCALL    ORDER
          LCALL    BUSY
          LCALL    DELAY1
          MOV  A,  R0
          LCALL    ORDER
          LCALL    BUSY
          LCALL    DELAY3
          RET                                
LKEY4:    MOV  A,  #14H               ;K4键按下,光标右移
          LCALL    ORDER
          LCALL    BUSY
          INC  R0
          DJNZ R5, RETURN4       
          MOV  R5 ,#04H               ;移至行尾,再赋循环次数
          MOV  A,  #02H
          LCALL    ORDER
          LCALL    BUSY
          LCALL    DELAY2
          MOV  R0, #80H
          MOV  A,  R0
          LCALL    ORDER
          LCALL    BUSY
RETURN4:  RET
TAB1:     DW 0A3B1H 0A3B2H 0A3B3H 0A3B4H 0A3B5H     ;加一减一数字表
          DW 0A3B6H 0A3B7H 0A3B8H 0A3B9H
;/显示子程序/
SHOW:   MOV   DPTR,#TAB                ;显示字符子程序
SHOWR:  MOV   R7,  #0CH
SHOWL:  CLR   A
        MOVC  A,   @A+DPTR
        LCALL      DIGITAL
        INC        DPTR
        LCALL      BUSY
        DJNZ  R7,  SHOWL
        RET
TAB:    DW 0BAD3H 0B1B1H 0B9A4H 0B3CCH 0B4F3H 0D1A7H ;字符表
        DW 0D5D4H 0C1F5H 0CCEFH 0C8CEH 0CBD5H 0CDF5H
ORDER:  CLR   P2.7                     ;命令输入子程序      
        CLR   P2.6
        SETB  P2.5
        MOV   P1,  A
        CLR   P2.5
        RET
BUSY:   PUSH  PSW                      ;查询是否繁忙子程序 
        PUSH  A
        SETB  P2.6
        SETB  P2.5
LOOP:   MOV   A,   P1
        JB    ACC.7, LOOP
        POP   A
        POP   PSW
        RET
DIGITAL:SETB  P2.7                     ;数据输入子程序
        CLR   P2.6
        SETB  P2.5
        MOV   P1, A
        CLR   P2.5
        RET
DELAY1: MOV   R2,  #200                ;延时子程序
DEL11:  MOV   R3,  #100
DEL12:  DJNZ  R3,  DEL12
        DJNZ  R2,  DEL11
        RET
DELAY3: MOV   R2,  #200
DEL31:  MOV   R3,  #200
DEL32:  DJNZ  R3,  DEL32
        DJNZ  R2,  DEL31
        RET

⌨️ 快捷键说明

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