📄 jp01.asm
字号:
CLR P0.3
CALL YS50M
CALL YS50M
CALL YS50M
CALL YS50M
MAINA3_122:
SETB P0.2
SETB P0.3
RLC A
MOV R7,#40D ;延时2.5秒
MAINA3_1222: ;
CALL YS50M ;
DJNZ R7,MAINA3_1222 ;
MOV P0.3,C
CLR P0.2
MOV R7,#40D ;延时2.5秒
MAINA3_112: ;
CALL YS50M ;
DJNZ R7,MAINA3_112 ;
DJNZ 4DH,MAINA3_122
SETB P0.2
SETB P0.3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV 47H,#74H
LJMP EPD30
EPD13:
CJNE A,#00110011B,EPD14 ;KP /
MOV 47H,#4AH
LJMP EPD30
EPD14:
CJNE A,#00111000B,EPD15 ;PG DOWN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV 4DH,#08H
MOV A,62H
CPL A
CLR P0.2
CLR P0.3
CALL YS50M
CALL YS50M
CALL YS50M
CALL YS50M
MAINA3_123:
SETB P0.2
SETB P0.3
RLC A
MOV R7,#40D ;延时2.5秒
MAINA3_13: ;
CALL YS50M ;
DJNZ R7,MAINA3_13 ;
MOV P0.3,C
CLR P0.2
MOV R7,#40D ;延时2.5秒
MAINA3_113: ;
CALL YS50M ;
DJNZ R7,MAINA3_113 ;
DJNZ 4DH,MAINA3_123
SETB P0.2
SETB P0.3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV 47H,#7AH
LJMP EPD30
EPD15:
CJNE A,#00111001B,EPD16 ;PG UP
MOV 47H,#7DH
LJMP EPD30
EPD16:
CJNE A,#01000000B,EPD17 ;END
MOV 47H,#69H
LJMP EPD30
EPD17:
CJNE A,#01000001B,EPD18 ;HOME
MOV 47H,#6CH
LJMP EPD30
EPD18:
CJNE A,#01000010B,EPD19 ;LEFT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV 4DH,#08H
MOV A,60H
CPL A
CLR P0.2
CLR P0.3
CALL YS50M
CALL YS50M
CALL YS50M
CALL YS50M
MAINA3_121:
SETB P0.2
SETB P0.3
RLC A
MOV R7,#40D ;延时2.5秒
MAINA3_114: ;
CALL YS50M ;
DJNZ R7,MAINA3_114 ;
MOV P0.3,C
CLR P0.2
MOV R7,#40D ;延时2.5秒
MAINA3_111: ;
CALL YS50M ;
DJNZ R7,MAINA3_111 ;
DJNZ 4DH,MAINA3_121
SETB P0.2
SETB P0.3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV 47H,#6BH
LJMP EPD30
EPD19:
CJNE A,#01000100B,EPD20 ;UP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV 4DH,#08H
MOV A,4EH
CPL A
CLR P0.2
CLR P0.3
CALL YS50M
CALL YS50M
CALL YS50M
CALL YS50M
MAIN3_12:
SETB P0.2
SETB P0.3
RLC A
MOV R7,#40D ;延时2.5秒
MAIN3_1: ;
CALL YS50M ;
DJNZ R7,MAIN3_1 ;
MOV P0.3,C
CLR P0.2
MOV R7,#40D ;延时2.5秒
MAIN3_11: ;
CALL YS50M ;
DJNZ R7,MAIN3_11 ;
DJNZ 4DH,MAIN3_12
SETB P0.2
SETB P0.3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV 47H,#75H
LJMP EPD30
EPD20:
CJNE A,#01000101B,EPD21 ;KP ENTER
MOV 47H,#5AH
LJMP EPD30
EPD21:
LJMP EPD32
EPD30:
JB 2DH.7,EPD31
MOV 48H,#0E0H
MOV 46H,#02H
LJMP EPD32
EPD31:
MOV 49H,#0E0H
MOV 48H,#0F0H
MOV 46H,#03H
EPD32:
RET
YS20: ;延时20us子程序
MOV 40H,#08D
DJNZ 40H,$
RET
YS30: ;延时30us子程序
MOV 40H,#11D
DJNZ 40H,$
RET
YS40: ;延时40us子程序
MOV 40H,#18D
DJNZ 40H,$
RET
YS50M: ;延时50ms子程序
MOV 41H,#0F0H
MOV 42H,#28H
YS50M1:
NOP
NOP
NOP
DJNZ 41H,YS50M1
CALL MAIN2
CALL MAIN3
DJNZ 42H,YS50M1
RET
YS50MA: ;延时50ms子程序 (纯的)
MOV 41H,#0F0H
MOV 42H,#28H
YS50MA1:
NOP
NOP
NOP
DJNZ 41H,YS50MA1
DJNZ 42H,YS50MA1
RET
DDF: ;等待抑制释放子程序
SETB P0.0
SETB P0.1
JNB P0.0,DDF
JNB P0.1,DDF
RET
FSA1: ;发送进位标志位子程序
MOV P0.1,C ;进位标志位送到数据脚
NOP ;延时5微秒
NOP
NOP
NOP
NOP
CLR P0.0 ;时钟脚变低
CALL YS40 ;调延时40微秒
SETB P0.0 ;时钟脚变高
CALL YS30 ;延时30微秒
RET
FSB1: ;发送一个字节(R3)至主机子程序
SETB P0.0 ;准备读取时钟脚状态
SETB P0.1 ;准备读取数据脚状态
JNB P0.0,FSB1 ;时钟不为高跳
JNB P0.1,FSB1 ;数据不为高跳
MOV A,R3 ;要发送的字节送入a
MOV C,P ;偶效验位存入进位标志位
MOV 20H,C ;偶效验位存入20h
CPL 20H ;转为奇效验位
MOV 43H,#08H ;装入发送位数为8位
CLR C ;发送位清零
CALL FSA1 ;发送起始位
FSB2: ;发送数据位
RRC A ;数据低位送c
CALL FSA1 ;发送c
DJNZ 43H,FSB2 ;循环发送8位
MOV C,20H ;发送奇校验位
CALL FSA1
SETB C ;发送停止位
CALL FSA1
RET
SCANKEY: ;键扫描子程序
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV R0,#50H
MOV R5,#00H
MOV R4,#00H
CLR P1.0 ;行口变低
CLR 21H ;选择p1口扫描
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VVV
SA01:
MOV 45H,#08H ;设置行扫循环次数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VVV
SA02:
MOV P2,#0FFH
NOP
MOV A,P2
CPL A
MOV 2FH,A ;p2口状态取反后暂存 位=1表示键接通
MOV A,@R0
XRL A,2FH
MOV 2EH,A ;p2口取反 与原状态异或后暂存
MOV R4,#00H ;列地址清零
MOV 44H,#08H ;设置位扫8次
;;;;;;;;;;;;;;;;;;;;;;;;VVV
SA03:
JNB 2EH.0,SA05 ;查看本位是否有变化 =1有变化继(变化情况)
;键接通时先将待发指针加一然后将本位地址发至待发指针指向的地址
MOV A,R5 ;将行地址装入a
MOV B,#08H
MUL AB ;将行地址左移3位
ADD A,R4 ;行地址与列地址相加 得到7位地址
JB 2FH.0,SA04_1 ;查看新状态=1为接通变化跳过 (新状态)
ADD A,#10000000B ; 新状态=0为断开变化执行地址7位置1
SA04_1:
CJNE R1,#3FH,SA04_2
LJMP SA05 ;发送缓冲满时跳过
SA04_2:
INC R1 ;发送缓冲不满时待发指针加一
MOV @R1,A ;本位地址发至待发缓冲区
SA05:
INC R4 ;键扫列地址加1
MOV A,2EH
RR A
MOV 2EH,A ;是否变化右环移
MOV A,2FH
RR A
MOV 2FH,A ;新状态右环移
DJNZ 44H,SA03
;;;;;;;;;;;;;;;;;;;;;;;;AAA
MOV @R0,2FH ;刷新p2口原状态
INC R0 ;p2口原状态指针加一
INC R5 ;键扫行地址加一
DJNZ 45H,SA07_1 ;检查行循环是否到8次 =0到继
LJMP SA07
SA07_1:
JB 21H,SA06
MOV A,P1
RL A
MOV P1,A ;下一行变低 扫描下一行
LJMP SA02
SA06:
MOV A,P3
RL A
MOV P3,A
LJMP SA02
SA07:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAA
JB 21H,SA08 ;p1/p3口扫描转换 =1选择p3口
SETB 21H
MOV P1,#0FFH ;p1口停止扫描
CLR P3.0 ;准备扫描p3.0行点
LJMP SA01 ;跳至行扫描
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAA
SA08:
RET
;JJT: ;键接通时先将待发指针加一然后将本位地址发至待发指针指向的地址
; MOV A,R5 ;将行地址装入a
; MOV B,#08H
; MUL AB ;将行地址左移4位
; ADD A,R4 ;行地址与列地址相加 得到7位地址
; ;键接通时先将待发指针加一然后将本位地址发至待发指针指向的地址
; MOV A,R4 ;将列地址(即p2口位地址)装入a
; MOV B,#10H ;将列地址移至456位
; MUL AB
; ADD A,R5 ;与行地址的0123位相加
; CJNE R1,#3FH,JJT1
; LJMP JJT2 ;发送缓冲满时跳过
;JJT1:
; INC R1 ;发送缓冲不满时待发指针加一
; MOV @R1,A ;本位地址发至待发缓冲区
;JJT2:
; RET
;
;JDK: ;键断开时先将待发指针加一然后将本位地址发至待发指针指向的地址
; MOV A,R4 ;将列地址(即p2口位地址)装入a
; MOV B,#10H ;将列地址移至456位
; MUL AB
; ADD A,R5 ;与行地址的0123位相加
; ADD A,#80H ;将本键地址7位置一表示为本位的断开状态
; CJNE R1,#3FH,JDK1
; LJMP JDK2 ;发送缓冲满时跳过
;JDK1:
; INC R1 ;发送缓冲不满时待发指针加一
; MOV @R1,A ;本位地址发至待发缓冲区
;JDK2:
; RET
ORG 0500H ;实发键值表
BIA01: DB 03H, 14H, 00H,0E0H,0E0H,0E0H,0E0H,0E1H ; F5, Z CTRL, WAKE, Y CTRL, SLEEP, YSTART, POWER,PAUSE
BIA02: DB 0E0H, 00H,0E0H, 00H, 11H, 00H,0E0H, 7EH ; PRINT, , R ALT, , L ALT, , LSTART,S-LOCK
BIA03: DB 45H, 4EH, 4AH, 00H, 52H, 4CH, 54H, 4DH ; 0, -, /, , ', ;, [, P
BIA04: DB 09H, 01H, 07H, 5AH, 78H, 5DH, 66H, 00H ; F10, F9, F12, ENTER, F11, \, SPACE,
BIA05: DB 00H, 00H, 00H, 00H, 00H, 59H, 12H, 00H ; , , , , ,R SHIFT,L SHIFT,
BIA06: DB 00H,0E0H,0E0H, 77H, 29H, 69H, 6BH, 6CH ; , DEL, DOWN, NUM, APPS, KP1, KP4, KP7
BIA07: DB 00H,0E0H,0E0H,0E0H, 70H, 72H, 73H, 75H ; , INSERT, RIGHT, KP/, KP0, KP2, KP5, KP8
BIA08: DB 0E0H,0E0H, 7BH, 7CH, 71H, 7AH, 74H, 7DH ;PGDOWN, PG UP, KP-, KP*, KP., KP3, KP6, KP9
BIA09: DB 0E0H,0E0H,0E0H, 00H,0E0H,0E0H, 00H, 79H ; END, HOME, LEFT, , UP,KPENTER, , KP+
BIA10: DB 46H, 0AH,0E0H, 49H, 00H, 4BH, 83H, 44H ; 9, F8, WORD, ., , L, F7, W-O
BIA11: DB 3EH, 55H, 00H, 41H, 0BH, 42H, 5BH, 43H ; 8, =, , , , F6, K, ], I
BIA12: DB 3DH, 36H, 31H, 3AH, 33H, 3BH, 35H, 3CH ; 7, 6, N, M, H, J, Y, U
BIA13: DB 25H, 2EH, 32H, 2AH, 34H, 2BH, 2CH, 2DH ; 4, 5, B, V, G, F, T, R
BIA14: DB 26H, 06H, 00H, 21H, 0CH, 23H, 04H, 24H ; 3, F2, , C, F4, D, F3, E
BIA15: DB 1EH, 05H, 00H, 22H, 00H, 1BH, 58H, 1DH ; 2, F1, , X, , S, CAPS, W
BIA16: DB 16H, 0EH, 00H, 1AH, 76H, 1CH, 0DH, 15H ; 1, `, , Z, ESC, A, TAB, Q
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -