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

📄 noname1'.asm

📁 此程序为调试通过的程序
💻 ASM
字号:
KEYBUF  EQU     35H             ;/*键内码
KEY     EQU     39H             ;/*键显示码
rs	BIT	P2.2		;/*LCD模块用*/
rw	BIT	P2.1		;/*LCD模块用*/
enable	BIT	P2.0		;/*LCD模块用*/
LCDADR  EQU     3AH             ;/*LCD显示地址
DB0_DB7  DATA   P1
FLAG0   EQU     0


;******************************************************************
        ORG      000H
        AJMP     START
        ORG      100H
START:
        MOV  R0,#7FH
        CLR  A
CLRRAM:  MOV   @R0,A
         DJNZ  R0,CLRRAM
         MOV   SP,#7DH

         MOV   P0,#0FFH
         MOV   P1,#0FFH
         MOV   P2,#0FFH
         MOV   P3,#0FFH
;***************************************************************
        MOV FLAG0,#0
;LCD初始化
        LCALL   InitialL        ;LCD初始化
        LCALL   CLRLCD          ;清LCD


;*******************************************************************************************
;主程序
;*******************************************************************************************
WAIT:
        LCALL   KEYINPUT           ;是否有键按下?
        MOV     A,FLAG0
        CJNE    A,#1,WAIT
        lcall   tslcd
        SJMP     WAIT

;*****************************************************************
tslcd:
LOOP1:                MOV     A,#10000000B            ;set the address
                      MOV     R1,A

                      CALL    Write_instruction
                      INC     R1
LOOP2:

                      MOV     A,KEY
                      ADD     A,#30H

                      CALL    WriteLCDData                ;显示 第一行字符

                      ;CJNE    A,#1001000B,LOOP2

;LOOP3:                MOV     A,#11000010B            ;set the address
                      ;CALL    Write_instruction
;LOOP4:                MOV     R5,#KEY                  ;显示密码
                      ;CALL    PR_KEY
                      ;CJNE    A,#11010010B,LOOP4

                      ;LJMP  LOOP1
                      RET




;*****************************************************************
;InitialInitial  子程序
;//  设定 字符型LCD模块, 使用DB0--DB7,显示两行,
;//  使用5*7字型  显示器要显示 光标要显示但不闪烁 */
;*****************************************************************
InitialL:
                MOV     A,#00111000B            ;/*LCD功能设定,8位点阵数据传送,2行显示*/
                CALL    Write_instruction

                MOV     A,#00001110B            ;/*屏幕设定开显示,游标ON,但不闪烁*/
                CALL    Write_instruction

                MOV     A,#00000110B            ;/*加一状态,游标向右移*/
                CALL    Write_instruction
                RET
;*****************************************************************
;CheckBusy
;等待LCM有空可以执行下一行命令
;*****************************************************************
CheckBusy:
                PUSH    ACC
;CheckBusyLoop:
		CLR	ENABLE
		SETB	RW
		CLR	RS
                SETB    ENABLE
                MOV     A,DB0_DB7
                CLR     ENABLE
  ;              JB      ACC.7,CheckBusyLoop
                POP     ACC
                CALL    DELAY
                RET
;*****************************************************************
;Write_instruction
;将ACC内的资料输入到LCM的IR寄存器
;*****************************************************************
Write_instruction:
                CALL    CheckBusy
		CLR	ENABLE
		CLR	RW
		CLR	RS
                SETB    ENABLE
                MOV     DB0_DB7,A
                CLR     ENABLE
                RET
;*****************************************************************
;WriteLCDData
;将ACC内的资料输入到LCM的DR寄存器
;*****************************************************************
WriteLCDData:
                CALL    CheckBusy
		CLR	ENABLE
		CLR	RW
		SETB	RS
                SETB    ENABLE
                MOV     DB0_DB7,A
                CLR     ENABLE
                RET
;*****************************************************************
;cls
;清除LCM的显示字幕
;*****************************************************************
CLRLCD:
                MOV     A,#01H          ;清除LCD屏幕
                CALL    Write_instruction
                RET
;*****************************************************************
;PR_STRING

;*****************************************************************
;PR_KEY:
               ; PUSH    ACC

                ;CLR     A
                ;MOV    A,#KEY

               ; ADD    A,#30H
                ;CALL    WriteLCDData
;

                ;POP     ACC
                ;INC     A
               ; RET
;*****************************************************************
;PR_MIMA
;将密码显示在LCM,密码的起地址要存入R0,字串必须以00H结束
;*****************************************************************
;PR_MIMA:
                ;PUSH    ACC
;MIMALP:
               ;CLR     A
                ;MOV     A,@R0
                ;JZ      END_PRMIMA
                ;CALL    WriteLCDData
                ;INC     R0
                ;JMP     MIMALP
;END_PRMIMA:
                ;POP     ACC
                ;RET
;*****************************************************************
;DELAY
;延迟时间约为R6*(500uS)
;*****************************************************************
DELAY:
                MOV     R3,#5
D11:            MOV     R4,#248
                DJNZ    R4,$
                DJNZ    R3,D11
                RET
;*******************************************************************************************
KEYINPUT:
            MOV         KEYBUF,#2
;
            MOV         P0,#0FFH
            CLR         P0.4
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH          ;有键按下吗?
            JZ          NOKEY1
            LCALL       DELY10US
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH          ;真的有键按下吗?
            JZ          NOKEY1
            MOV         A,P0
            ANL         A,#0FH
            CJNE        A,#0EH,NK1      ;键码的值是多少?P0.4xP0.0
            MOV         KEYBUF,#3
            LJMP        DK1
NK1:        CJNE        A,#0DH,NK2      ;键码是P0.4xP0.1 ?
            MOV         KEYBUF,#2
            LJMP        DK1
NK2:        CJNE        A,#0BH,NK3      ;键码是P0.4xP0.2 ?
            MOV         KEYBUF,#1
            LJMP        DK1
NK3:        CJNE        A,#07H,NK4      ;键码是P0.4xP0.3 ?
            MOV         KEYBUF,#0
            LJMP        DK1
NK4:        NOP
DK1:
            MOV         A,KEYBUF
            MOV         DPTR,#TAB
            MOVC        A,@A+DPTR       ;查表,取键值
            MOV         KEY,A
            MOV         FLAG0,#1        ;FLAG0=1

DK1A:       MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH          ;按键有没有松开?
            JNZ         DK1A
NOKEY1:
            MOV         P0,#0FFH
            CLR         P0.5
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JZ          NOKEY2
            LCALL       DELY10US
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JZ          NOKEY2
            MOV         A,P0
            ANL         A,#0FH
            CJNE        A,#0EH,NK5
            MOV         KEYBUF,#7
            LJMP        DK2
NK5:        CJNE        A,#0DH,NK6
            MOV         KEYBUF,#6
            LJMP        DK2
NK6:        CJNE        A,#0BH,NK7
            MOV         KEYBUF,#5
            LJMP        DK2
NK7:        CJNE        A,#07H,NK8
            MOV         KEYBUF,#4
            LJMP        DK2
NK8:        NOP
DK2:
            MOV         A,KEYBUF
            MOV         DPTR,#TAB
            MOVC        A,@A+DPTR
            MOV         KEY,A
            MOV         FLAG0,#1        ;FLAG0=1

DK2A:       MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JNZ         DK2A
NOKEY2:
            MOV         P0,#0FFH
            CLR         P0.6
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JZ          NOKEY3
            LCALL       DELY10US
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JZ          NOKEY3
            MOV         A,P0
            ANL         A,#0FH
            CJNE        A,#0EH,NK9
            MOV         KEYBUF,#0bh
            LJMP        DK3
NK9:        CJNE        A,#0DH,NK10
            MOV         KEYBUF,#0ah
            LJMP        DK3
NK10:       CJNE        A,#0BH,NK11
            MOV         KEYBUF,#9
            LJMP        DK3
NK11:       CJNE        A,#07H,NK12
            MOV         KEYBUF,#8
            LJMP        DK3
NK12:       NOP
DK3:
            MOV         A,KEYBUF
            MOV         DPTR,#TAB
            MOVC        A,@A+DPTR
            MOV         KEY,A
            MOV         FLAG0,#1        ;FLAG0=1

DK3A:       MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JNZ         DK3A
NOKEY3:
            MOV         P0,#0FFH
            CLR         P0.7
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JZ          NOKEY4
            LCALL       DELY10US
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JZ          NOKEY4
            MOV         A,P0
            ANL         A,#0FH
            CJNE        A,#0EH,NK13
            MOV         KEYBUF,#0fh
            LJMP        DK4
NK13:       CJNE        A,#0DH,NK14
            MOV         KEYBUF,#0eH
            LJMP        DK4
NK14:       CJNE        A,#0BH,NK15
            MOV         KEYBUF,#0dH
            LJMP        DK4
NK15:       CJNE        A,#07H,NK16
            MOV         KEYBUF,#0ch
            LJMP        DK4
NK16:       NOP
DK4:
            MOV         A,KEYBUF
            MOV         DPTR,#TAB
            MOVC        A,@A+DPTR
            MOV         KEY,A
            MOV         FLAG0,#1        ;FLAG0=1

DK4A:       MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JNZ         DK4A
NOKEY4:
            RET



;end test*********************************************
DELY10MS:
            MOV         R6,#10
D1:         MOV         R7,#248
            DJNZ        R7,$
            DJNZ        R6,D1
            RET
DELY10US:
            MOV       R6,#10
            DJNZ      R6,$
            RET
DELY3US:
            MOV       R6,#3
            DJNZ      R6,$
            RET
;*********************************************************************
TAB:    DB	01H,02H,03H,0aH	;/*键盘码00,01,02,03,*/
        DB	04H,05H,06H,0bH	;/*键盘码04,05,06,07,*/
        DB	07H,08H,09H,0cH	;/*键盘码08,09,0a,0b,*/
        DB	0eH,00H,0fH,0dH	;/*键盘码0c,0d,0e,0f*/



       END

⌨️ 快捷键说明

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