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

📄 键盘与液晶.asm

📁 Proteus实例集锦(包括电路图.仿真程序,各种各样的电路
💻 ASM
字号:
;伪定义
        KEYBUF    EQU    30H     ;键值暂存单元,查表时用
        ;ZSDZ1     EQU   27H
        ZSDZ2     EQU   28H
        ZSDZ3     EQU   29H
        ZSDZ4     EQU   2AH
        ZSDZ5     EQU   2BH
        ZSDZ6     EQU   2DH
        ;*********************************************

 ;Controller:ST7920

 ;MCU:AT89C52 ,晶体频率:12MHz

 ;LCM:128*64

 ;LCM型号:带中文字库的128X64-0402

 ;LCM 接口:1:GND 2:VCC 3:V0 4.RS 5:RW 6:E 7--14:DB0-DB7 15:PSB 16:NC 17:RST 18:Vout

;**********************************************

      RS      EQU   P2.7

      RW      EQU   P2.6

      E       EQU   P2.5

      PSB     EQU   P2.4

      RST     EQU   P2.3

      COM     EQU   20H

      DAT     EQU   21H

;******************************以上是接口定义
        ORG     0000H       ;程序执行开始地址
        AJMP    MAIN               ;跳至MAIN执行
        ORG     0100H
MAIN:    MOV  SP,#60H
         MOV R1,#0FFH
         MOV R2,#0FCH
         MOV A,#00H
QING:    MOV @R1,A
         DEC R1
         DJNZ R2,QING
         ;MOV R0,#27H
         MOV 40H,#28H
         LJMP    DISP

;*********************************主程序入口地址



DISP:   CLR     PSB
        LCALL   time
        SETB    PSB                ;将PSB置1,通信方式为8位数据并口
        LCALL  time
        MOV     COM,#30H           ;功能设置---8BIT控制界面,基本指令集
        ACALL   WRI                ;调用写指令子程序
        LCALL   time               ;延迟39uS
        MOV     COM,#0CH           ;显示打开,光标关,反白显示关
        ACALL WRI                  ;调用写指令子程序
        LCALL  time                ;延迟39uS
        MOV  COM,#01H              ;清除屏幕显示,将DDRAM的地址计数器归零
        ACALL   WRI                ;调用写指令子程序
        LCALL  time                ;延迟39uS
        MOV     COM,#06H           ;DDRAM的地址计数器(AC)加1
        ACALL   WRI                ;调用写指令子程序
        LCALL   time               ;延迟39uS
 ;以下为字显示
        MOV COM,#01H


ZIXIANSHI:
        MOV     R2,#1       ;DDRAM地址记数器设为最大值
        MOV     R1,2DH
        MOV     COM,#80H      ;DD RAM 地址-----0000000
        ACALL   WRI

ZIXIANSHI1:  MOV     DAT,R4
        ACALL   WRD           ;写入第一字节数据
        MOV     DAT,R1
        ACALL   WRD           ;写入第二字节数据
        ;INC R1
        DJNZ    R2,ZIXIANSHI1
       
        LCALL DELAY     ;1S延时子程序




;****************************************************

        MOV     P1,#0FFH
        CLR     P2.0
        LJMP   KEYSCAN         ;调用查键子程序


;*************************************
;*                                   *
;* 键盘工作子程序(4 * 4 阵列)      *
;* 出口为各键工作程序入口 P1口      *
;*************************************
KEYSCAN:
     MOV P1,#0FFH;清P1口,初始化键低电平有效
     CLR P1.4;清P1.4口
     MOV A,P1;读P1口状态
     ANL A,#0FH;清高4位,保留低四位低电平有效
     XRL A,#0FH;异或相同则为0不同结果为1,为0则表示无键被按下(这一行)
     JZ NOKEY1;为0则转下一行键值处理
     LCALL DL10MS;有键按下则延时10ms再测一次抗干扰
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY1;是干扰则转下一行键值处理程序
     MOV A,P1
     ANL A,#0FH;保留低四?
KB1:
     CJNE A,#0EH,KB2;如果值为#0E则为P1.4与P1.0组合的键
     MOV KEYBUF,#00H;赋键值
     LJMP KEYWORK;转键处理
KB2: CJNE A,#0DH,KB3;如果值为#0D则为P1.4与P1.1组合的键
     MOV KEYBUF,#01H
     LJMP KEYWORK;转键处理
KB3: CJNE A,#0BH,KB4;如果值为#0B则为P1.4与P1.2组合的
     MOV KEYBUF,#02H
     LJMP KEYWORK;转键处理
KB4: CJNE A,#07H,KB5;如果值为#07则为P1.4与P1.3组合的
     MOV KEYBUF,#03H
     LJMP KEYWORK;转键处理
KB5: NOP


NOKEY1:
     MOV P1,#0FFH
     CLR P1.5
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY2
     LCALL DL10MS
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY2
     MOV A,P1
     ANL A,#0FH
     CJNE A,#0EH,KB6
     MOV KEYBUF,#04H
     LJMP KEYWORK;转键处理
KB6: CJNE A,#0DH,KB7
     MOV KEYBUF,#05H
     LJMP KEYWORK;转键处理
KB7: CJNE A,#0BH,KB8
     MOV KEYBUF,#06H
     LJMP KEYWORK;转键处理
KB8: CJNE A,#07H,KB9
     MOV KEYBUF,#07H
     LJMP KEYWORK;转键处理
KB9: NOP


NOKEY2:
     MOV P1,#0FFH
     CLR P1.6
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY3
     LCALL DL10MS
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY3
     MOV A,P1
     ANL A,#0FH
     CJNE A,#0EH,KB10
     MOV KEYBUF,#08H
     LJMP KEYWORK;转键处理
KB10: CJNE A,#0DH,KB11
     MOV KEYBUF,#09H
     LJMP KEYWORK;转键处理
KB11: CJNE A,#0BH,KB12
     MOV KEYBUF,#0AH
     LJMP KEYWORK;转键处理
KB12: CJNE A,#07H,KB13
     MOV KEYBUF,#0BH
     LJMP KEYWORK;转键处理

KB13: NOP


NOKEY3:
     MOV P1,#0FFH
     CLR P1.7
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY4
     LCALL DL10MS
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY4
     MOV A,P1
     ANL A,#0FH
     CJNE A,#0EH,KB14
     MOV KEYBUF,#0CH
     LJMP KEYWORK;转键处理
KB14: CJNE A,#0DH,KB15
     MOV KEYBUF,#0DH
     LJMP KEYWORK
KB15: CJNE A,#0BH,KB16
     MOV KEYBUF,#0EH
     LJMP KEYWORK;转键处理
KB16: CJNE A,#07H,KB17
     MOV KEYBUF,#0FH
     LJMP KEYWORK;转键处理
KB17: NOP

NOKEY4:
     LJMP DISP

KEYWORK: MOV R0,40H
      MOV @R0,KEYBUF           ;得到键值
      MOV A,40H
      INC A
      MOV 40H,A
      CJNE A,#2CH,WAITFREE
      ACALL time1s
      MOV A,28H
      SWAP A
      ADD A,29H
      MOV R4,A
      MOV A,2AH
      SWAP A
      ADD A,2BH
      MOV 2DH,A
      CLR A
      MOV 28H,A
      MOV 29H,A
      MOV 2AH,A
      MOV 2BH,A
      MOV 40H,#28H
      ;MOV ZSDZ6,A
      ACALL ZIXIANSHI

                 ;以上程序等待键释放

      LJMP DISP    ;转DISP循环
WAITFREE:
     MOV A,P1
     MOV KEYBUF,#00H
     ANL A,#0FH
     XRL A,#0FH
     JNZ WAITFREE
     LJMP DISP    ;转DISP循环
      RET


WRI:    PUSH    ACC
        CLR     RS
        SETB    RW

WRI1:   MOV     P0,#0FFH
        SETB    E
        MOV     A,P0
        CLR     E
        JB      ACC.7,WRI1
        CLR     RW
        MOV     P0,COM
        SETB    E
        CLR     E
        POP     ACC
        RET

;******************************************以上是写指令子程序

WRD:    PUSH    ACC
        CLR     RS
        SETB    RW

WRD1:   MOV     P0,#0FFH
        SETB    E
        MOV     A,P0
        CLR     E
        JB      ACC.7,WRD1
        SETB    RS
        CLR     RW
        MOV     P0,DAT
        SETB    E
        CLR     E
        POP     ACC
        RET                     ;以上是写数据子程序

;延迟39uS    *************
time:  MOV     R7,#0FFH

time1: MOV  R6,#00FH

LOOP2:  DJNZ R6,LOOP2

        DJNZ    R7,time1

        RET
;*****************************************************
;延时1S
;*****************************************************

time1s:      mov r5,#08h        	;1001.401ms
time1s_1:    mov r6,#0f4h		;125.173ms
time1s_2:    mov r7,#0ffh		;511us
             djnz r7,$
             djnz r6,time1s_2
             djnz r5,time1s_1
             ret
;*************************************
;*                                   *
;*          延时513 us              *
;*                                   *
;*************************************
;
;513微秒延时程序
DELAY:          MOV     R2,#0FEH
DELAY1:         DJNZ    R2,DELAY1
  RET
;
;
;
;*************************************
;*                                   *
;*             延时10ms             *
;*                                   *
;*************************************
;
;10毫秒延时程序
DL10MS:         MOV     R3,#14H
DL10MS1:        LCALL   DELAY
                DJNZ    R3,DL10MS1
          RET

END              ;程序结束

⌨️ 快捷键说明

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