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

📄 键盘程序.asm

📁 本压缩包包含1602液晶显示
💻 ASM
字号:
       ORG 00H
       JMP START
       ORG 23H
       JMP UARTI
START: MOV TMOD,#20H
       ANL PCON,#7FH
       MOV TH1,#0F3H
       SETB TR1
       MOV SCON,#0D0H
       MOV IE,#90H
       JMP Y0               ;初始化程序
UARTI: PUSH ACC
       PUSH PSW
       JBC RI,LOOP
       CLR TI
       JMP RETURN
LOOP:  MOV R1,#3
       MOV R0,35H
JS:    MOV A,SBUF
       MOV @R0,A
       INC R0
       DJNZ R1,JS
       JMP RETURN
RETURN:POP PSW
       POP ACC
       RETI                  ;中断服务程序
Y0:    SETB P3.3
       SETB P3.4
       SETB P3.5
       JNB P3.7,NEXT0
       JMP Y0
NEXT0: JB P3.7,PROCESS0
       JMP NEXT0             ;判断ON/OFF键是否被按下?
PROCESS0: MOV R3,#3            ;ON/OFF键打至ON档
X0:       CALL XS1
          CALL DELAY1
          DJNZ R3,X0
          CALL XS2
          JMP Y01
Y01:   SETB P3.3
       SETB P3.4
       SETB P3.5
       JNB P3.7,NEXT1
       JMP Y02
NEXT1: JB P3.7, Y0
       CALL XS3
       JMP NEXT1             ;ON/OFF键打至OFF档
Y02:   JNB P3.2,NEXT2
       JMP Y1
NEXT2: JB P3.2,PROCESS1      ;清零键是否被按下?
       CALL XS3
       JMP Y01
PROCESS1: MOV R3,#3             ;清零键被按下
          MOV R0,#31H
X1:       MOV @R0,#11H
          INC R0
          DJNZ R3,X1
          CALL XS3
          JMP Y1
XS1:   MOV 40H,#89H          ;开机显示“PASS PASS”的友好界面
       MOV 41H,#89H
       MOV 42H,#05H
       MOV 43H,#07H
       MOV 44H,#89H
       MOV 45H,#89H
       MOV 46H,#05H
       MOV 47H,#07H
       CALL DISP0
       SETB P3.3
       SETB P3.4
       SETB P3.5
       RET
XS2:   MOV R3,#3          ;显示清零后全“0”的界面
       MOV R0,#31H
       MOV R1,#35H
X2:    MOV @R0,#11H
       MOV @R1,#11H
       INC R0
       INC R1
       DJNZ R3,X2
       CALL DISP1
       SETB P3.3
       SETB P3.4
       SETB P3.5
       RET
XS3:   CALL DISP1         ;显示运行中的界面
       SETB P3.3
       SETB P3.4
       SETB P3.5
       RET
DISP0: MOV R1,#40H        ;友好界面的数据送到数码管显示
       MOV R6,#8
D0:    MOV A,@R1
       MOV P0,A
       CALL DELAY
       INC R1
       DJNZ R6,D0
       RET
DISP1: MOV 30H,#93H        ;其他的数据送到数码管显示
       MOV 34H,#93H
       MOV A,30H
       MOV P0,A
       CALL DELAY
       MOV A,31H
       MOV P0,A
       CALL DELAY
       MOV A,32H
       MOV P0,A
       CALL DELAY
       MOV A,33H
       MOV P0,A
       CALL DELAY
       MOV A,34H
       MOV P0,A
       CALL DELAY
       MOV A,35H
       MOV P0,A
       CALL DELAY
       MOV A,36H
       MOV P0,A
       CALL DELAY
       MOV A,37H
       MOV P0,A
       CALL DELAY
       RET
DELAY: MOV R0,#06         ;延时1.5ms扫描时间
D1:    MOV R1,#248
       DJNZ R1,$
       DJNZ R0,D1
       RET
DELAY1:MOV R0,#400         ;延时0.1s闪烁时间
D2:    MOV R1,#248
       DJNZ R1,$
       DJNZ R0,D2
       RET
Y1:    SETB P3.3          ;判断键“7”或“4”是否被按下
       SETB P3.4
       CLR P3.5
       JNB P3.7,NEXT3
       JNB P3.2,NEXT4
       JMP Y2
NEXT3: JB P3.7,PROCESS2
       CALL XS4
       JMP NEXT3
PROCESS2:  MOV R1,#2       ;键“7”被按下
           MOV A,R1
           MOV DPTR,#TABLE
           MOVC A,@A+DPTR
           CALL YD
           CALL XS4
           JMP Y2
NEXT4: JB P3.2,PROCESS3
       CALL XS4
       JMP NEXT4
PROCESS3:  MOV R1,#5       ;键“4”被按下
           MOV A,R1
           MOV DPTR,#TABLE
           MOVC A,@A+DPTR
           CALL YD
           CALL XS4
           JMP Y2
YD:    XCH A,31H           ;移位显示
       XCH A,32H
       XCH A,33H
       RET
XS4:   CALL DISP1          ;调用显示程序,显示数值
       SETB P3.3
       SETB P3.4
       CLR P3.5
       RET
Y2:    SETB P3.3          ;判断键“8”或“5”是否被按下
       CLR P3.4
       SETB P3.5
       JNB P3.7,NEXT5
       JNB P3.2,NEXT6
       JMP Y3
NEXT5: JB P3.7,PROCESS4
       CALL XS5
       JMP NEXT5
PROCESS4:  MOV R1,#1       ;键“8”被按下
           MOV A,R1
           MOV DPTR,#TABLE
           MOVC A,@A+DPTR
           CALL YD
           CALL XS5
           JMP Y3
NEXT6: JB P3.2,PROCESS5
       CALL XS5
       JMP NEXT6
PROCESS5:  MOV R1,#4       ;键“5”被按下
           MOV A,R1
           MOV DPTR,#TABLE
           MOVC A,@A+DPTR
           CALL YD
           CALL XS5
           JMP Y3
XS5:   CALL DISP1          ;调用显示程序,显示数值
       SETB P3.3
       CLR P3.4
       SETB P3.5
       RET
Y3:    SETB P3.3          ;判断键“9”或“6”是否被按下
       CLR P3.4
       CLR P3.5
       JNB P3.7,NEXT7
       JNB P3.2,NEXT8
       JMP Y4
NEXT7: JB P3.7,PROCESS6
       CALL XS6
       JMP NEXT7
PROCESS6:  MOV R1,#0       ;键“9”被按下
           MOV A,R1
           MOV DPTR,#TABLE
           MOVC A,@A+DPTR
           CALL YD
           CALL XS6
           JMP Y4
NEXT8: JB P3.2,PROCESS7
       CALL XS6
       JMP NEXT8
PROCESS7:  MOV R1,#3       ;键“6”被按下
           MOV A,R1
           MOV DPTR,#TABLE
           MOVC A,@A+DPTR
           CALL YD
           CALL XS6
           JMP Y4
XS6:   CALL DISP1          ;调用显示程序,显示数值
       SETB P3.3
       CLR P3.4
       CLR P3.5
       RET
Y4:    CLR P3.3          ;判断键“1”或“0”是否被按下
       SETB P3.4
       CLR P3.5
       JNB P3.7,NEXT9
       JNB P3.2,NEXT10
       JMP Y5
NEXT9: JB P3.7,PROCESS8
       CALL XS7
       JMP NEXT9
PROCESS8:  MOV R1,#8       ;键“1”被按下
           MOV A,R1
           MOV DPTR,#TABLE
           MOVC A,@A+DPTR
           CALL YD
           CALL XS7
           JMP Y5
NEXT10: JB P3.2,PROCESS9
       CALL XS7
       JMP NEXT10
PROCESS9:  MOV R1,#9       ;键“0”被按下
           MOV A,R1
           MOV DPTR,#TABLE
           MOVC A,@A+DPTR
           CALL YD
           CALL XS7
           JMP Y5
XS7:   CALL DISP1          ;调用显示程序,显示数值
       CLR P3.3
       SETB P3.4
       CLR P3.5
       RET
Y5:    CLR P3.3          ;判断键“2”或“.”是否被按下
       CLR P3.4
       SETB P3.5
       JNB P3.7,NEXT11
       JNB P3.2,NEXT12
       JMP Y6
NEXT11:JB P3.7,PROCESS10
       CALL XS8
       JMP NEXT11
PROCESS10: MOV R1,#7       ;键“2”被按下
           MOV A,R1
           MOV DPTR,#TABLE
           MOVC A,@A+DPTR
           CALL YD
           CALL XS8
           JMP Y6
NEXT12: JB P3.2,PROCESS11
       CALL XS8
       JMP NEXT12
PROCESS11: MOV R1,#10H       ;键“.”被按下
           MOV A,31H         ;在最后一个数值上接着小数点
           ADD A,R1
           MOV 31H,A
           CALL XS8
           JMP Y6
XS8:   CALL DISP1          ;调用显示程序,显示数值
       CLR P3.3
       CLR P3.4
       SETB P3.5
       RET
Y6:    CLR P3.3          ;判断键“3”或“确定”是否被按下
       CLR P3.4
       CLR P3.5
       JNB P3.7,NEXT13
       JNB P3.2,NEXT14
       JMP Y01
NEXT13:JB P3.7,PROCESS12
       CALL XS9
       JMP NEXT13
PROCESS12: MOV R1,#6       ;键“3”被按下
           MOV A,R1
           MOV DPTR,#TABLE
           MOVC A,@A+DPTR
           CALL YD
           CALL XS9
           JMP Y01
NEXT14: JB P3.2,PROCESS13
        CALL XS9
        JMP NEXT14
PROCESS13: MOV R1,#3
           MOV R0,#31H
PROCESS14: MOV A,@R0
           MOV SBUF,A
WAIT:      JBC TI,LOOP1
           CALL XS9
           JMP WAIT
LOOP1:     INC R2
           DJNZ R1,PROCESS14
           JMP Y01
XS9:   CALL DISP1          ;调用显示程序,显示数值
       CLR P3.3
       CLR P3.4
       CLR P3.5
       RET
TABLE: DB 09H 01H 3DH 81H 89H 4DH 29H 23H 7DH 11H    ;数值对应表格

⌨️ 快捷键说明

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