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

📄 keypad lcd display based on interrupt.asm

📁 一个中断方式编写的LCD键盘显示程序
💻 ASM
字号:
  ;只有两个功能键,一个设置键,按下后,将后面的按键放入50H、51H
  ;二次按下此键将此后按下的两个键值 合并保存在52H,
  ;取消键功能:清零50H、51H
;
            ORG 0000H
            AJMP START
            ORG  0013H
            AJMP INT1
            ORG  0100H
START:MOV   SP,#60H
CLR         F0
MOV         R0,#40H;设置随机数字暂存首地址40H41H;50H为确认数据首地址50H51H ,保存的数字
MOV         R1,#50H ;放到52H里面
MOV         A,#0FH
MOV         P1,A
MOV A,#38H         ;FUNC:DL=1 FOR BITS,N=1 FOR 2 LINES
LCALL OUTI
MOV A,#01H         ;CLEAR SCREEN
LCALL OUTI
MOV A,#0FH         ;ON DISPLAY
LCALL OUTI
MOV A,#06H         ;AC INCREMENT
LCALL OUTI
MOV A,#85H         ;DDRAM ADDRESS
LCALL OUTI
MOV	A,#57H
LCALL	OUTD
LCALL	MS40
MOV	A,#45H
LCALL	OUTD
LCALL	MS40
MOV	A,#4CH
LCALL	OUTD
LCALL	MS40
MOV	A,#43H
LCALL	OUTD
LCALL	MS40
MOV	A,#4FH
LCALL	OUTD
LCALL	MS40
MOV	A,#4DH
LCALL	OUTD
LCALL	MS40
MOV	A,#45H
LCALL	OUTD
LCALL	MS40
MOV     A,#01H
LCALL   OUTI
SETB	    IT1
SETB        EX1
SETB        EA
JMP         $

INT1:CLR    EA
ACALL       DELAY3              ;键盘延时去抖动
JB          P3.3,RETURN
ROW0:JB     P1.3,ROW1
MOV         R2,#00H
AJMP        CIRCLE
ROW1:JB     P1.2,ROW2
MOV         R2,#01H
AJMP        CIRCLE
ROW2:JB     P1.1,RETURN
MOV         R2,#02H
;上面是判断那一列按下
CIRCLE:
MOV         A,#0EFH ;P1.4行为低电平,其他为高电平
MOV         P1,A    ;
JB         P3.3,ONE ;
MOV         A,#00H  ;在第一行,显示1
AJMP        LKP
ONE:MOV     A,#0DFH
MOV         P1,A
JB          P3.3,TWO
MOV          A,#03H ;在第二行,显示2
AJMP         LKP
TWO:  MOV    A,#0BFH
MOV   P1,A
JB           P3.3,FOUR
MOV          A,#06H   ; 在第三行,显示3
AJMP         LKP
FOUR:MOV     A,#7FH
MOV          P1,A
JB           P3.3,RETURN
MOV          A,#09H    ;在第四行,显示4
LKP:ADD     A,R2
CLR         C
MOV         R5,A
SUBB        A,#0AH
JNC          MATH        ;转去功能键处理
MOV         A,R5
LCALL       DATE;调用数据键处理,包括显示
AJMP     SS
MATH:LCALL SHEZHI
JNC     SECOND        ;第二次按下,保存按下的内容合并保存在52H
MOV     A,#01H
LCALL   OUTI
AJMP    SS
CANCLE:LCALL    CANCLE1
AJMP            SS
SECOND:ACALL    HEBING
MOV             A,#01H
LCALL           OUTI
SS:PUSH	A            ;等待按键释放
MOV         A,#0FH
MOV         P1,A
ACALL       DELAY
POP	A
JNB          P3.3,SS;按键没有释放,则循环等待
RETURN: SETB             EA
RETI
;下面全部为子程序
DELAY:MOV       R3,#0A0H
DELAY1:MOV      R4,#0FFH
DELAY2:DJNZ     R4,DELAY2
DJNZ     R3,DELAY1
RET
DELAY3:MOV      R7,#20  ;6MHz晶振,延时10ms
DEL1:MOV        R6,#123
NOP             
DEL2:DJNZ       R6,DEL2
DJNZ            R7,DEL1
RET
HEBING:ANL      50H,#0FH
MOV             A,50H
SWAP            A
ANL             51H,#0FH
ORL             A,51H
MOV             52H,A
RET
DATE: PUSH        A
JB          F0,LL;已经按下功能键,转LL,将数据保存在50H,和51H里面
MOV         @R0,A ;如果没有按下功能键,则数据保存在以40H为首地址的空间里
INC         R0
AJMP        PP
LL:MOV      @R1,A ;数据保存部分
INC         R1
CLR         C
MOV         A,R1
SUBB        A,#52H
JC          LL1
MOV         R1,#50H
LL1:
CJNE        R1,#51H,NEXT ;如果现在是在R1=50H,则显示在第一个位置,否则显示在第二个位置
MOV         A,#80H
LCALL       OUTI
AJMP        PP
NEXT:MOV    A,#81H
LCALL       OUTI
PP: POP      A
ADD         A,#30H
LCALL OUTD
RET
SHEZHI:MOV A,R5
CJNE     A,#0AH,CANCLE  ;如果不等于0AH则转去取消键功能
CLR C                    ;等于0AH则为设置键,
CPL     F0           ;第一次按下设置键?
MOV     C,F0
RET
CANCLE1:CLR     F0
MOV     50H,#00H ;取消功能,存储区域清零,但53H里面不变
MOV     51H,#00H
MOV     R1,#50H
MOV     A,#01H
LCALL   OUTI
RET
OUTI:CLR P3.1
     CLR P3.1
     CLR P3.2
     CLR P3.2
     SETB P3.0
     SETB P3.0
     MOV P2,A
     MOV P2,A
     CLR P3.0
     CLR P3.0
     MOV R4,#02H           ;DELAY 1MS
TM4: MOV R5,#0FFH
TM5: DJNZ R5,TM5
     DJNZ R4,TM4
     RET

;OUT DATA
OUTD:SETB P3.2
     SETB P3.2
     CLR P3.1
     CLR P3.1
     SETB P3.0
     SETB P3.0
     MOV P2,A
     MOV P2,A
     CLR P3.0
     CLR P3.0
     MOV R4,#0FFH        ;DELAY 0.5MS
TM2: DJNZ R4,TM2
     RET

MS40:MOV R4,#0FFH        ;DELAY ABOUT 132MS
MS2: MOV R5,#0FFH
MS1: DJNZ R5,MS1
     DJNZ R4,MS2
RET
END

⌨️ 快捷键说明

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