📄 jp.txt
字号:
;* *
;*************************************
ORG 0000H ;程序执行开始地址
AJMP MAIN ;跳至MAIN执行
;*************************************
;* *
;* 主 程 序 *
;* *
;*************************************
ORG 0040H
MAIN: MOV P1,#0FFH
MOV P3,#0FFH
LCALL KEYSCAN ;主体程序。调用查键子程序
LJMP MAIN ;转MAIN循环
NOP ;软件陷阱
NOP
NOP
LJMP MAIN
;*************************************
;* *
;* 键盘工作子程序(4 * 5 阵列) *
;* 接口为2051的P3和P1口 *
;*************************************
KEYSCAN:MOV P3,#0FFH ;清P3口,初始化键低电平有效
CLR P3.2 ;清P3.2口
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,#0 ;赋键值
LJMP KEYWORK ;转键处理
KB2: CJNE A,#0DH,KB3 ;如果值为#0D则为P1.4与P1.1组合的键
MOV KEYBUF,#1
LJMP KEYWORK
KB3: CJNE A,#0BH,KB4 ;如果值为#0B则为P1.4与P1.2组合的
MOV KEYBUF,#2
LJMP KEYWORK
KB4: CJNE A,#07H,KB5 ;如果值为#07则为P1.4与P1.3组合的
MOV KEYBUF,#3
LJMP KEYWORK
KB5: NOP
;
NOKEY1: MOV P3,#0FFH
CLR P3.3
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,#4
LJMP KEYWORK
KB6: CJNE A,#0DH,KB7
MOV KEYBUF,#5
LJMP KEYWORK
KB7: CJNE A,#0BH,KB8
MOV KEYBUF,#6
LJMP KEYWORK
KB8: CJNE A,#07H,KB9
MOV KEYBUF,#7
LJMP KEYWORK
KB9: NOP
;
NOKEY2: MOV P3,#0FFH
CLR P3.4
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,#8
LJMP KEYWORK
KB10: CJNE A,#0DH,KB11
MOV KEYBUF,#9
LJMP KEYWORK
KB11: CJNE A,#0BH,KB12
MOV KEYBUF,#10
LJMP KEYWORK
KB12: CJNE A,#07H,KB13
MOV KEYBUF,#11
LJMP KEYWORK
KB13: NOP
;
NOKEY3: MOV P3,#0FFH
CLR P3.5
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,#12
LJMP KEYWORK
KB14: CJNE A,#0DH,KB15
MOV KEYBUF,#13
LJMP KEYWORK
KB15: CJNE A,#0BH,KB16
MOV KEYBUF,#14
LJMP KEYWORK
KB16: CJNE A,#07H,KB17
MOV KEYBUF,#15
LJMP KEYWORK
KB17: NOP
;
NOKEY4: MOV P3,#0FFH
CLR P3.7
MOV A,P1
ANL A,#0FH
XRL A,#0FH
JZ NOKEY5
LCALL DL10MS
MOV A,P1
ANL A,#0FH
XRL A,#0FH
JZ NOKEY5
MOV A,P1
ANL A,#0FH
CJNE A,#0EH,KB18
MOV KEYBUF,#16
LJMP KEYWORK
KB18: CJNE A,#0DH,KB19
MOV KEYBUF,#17
LJMP KEYWORK
KB19: CJNE A,#0BH,KB20
MOV KEYBUF,#18
LJMP KEYWORK
KB20: CJNE A,#07H,KB21
MOV KEYBUF,#19
LJMP KEYWORK
KB21: NOP
;
NOKEY5: LJMP MAIN
;
KEYWORK:MOV A,KEYBUF ;得到键值
MOV DPTR,#TABLE
MOVC A,@A+DPTR ;查行键值送ACC
MOV P0,A
;
WAITFREE:
MOV A,P1 ;以下程序等待键释放
MOV KEYBUF,#00H
ANL A,#0FH
XRL A,#0FH
JNZ WAITFREE
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
;
TABLE: ;七段显示器数据定义
DB 0C0H, 0F9H, 0A4H, 0B0H, 99H ; 01234
DB 92H, 82H, 0F8H, 80H, 90H ; 56789
DB 88H, 83H, 0C6H, 0A1H, 86H; ABCDE
DB 8EH ; F
;
END ;程序结束
/*--------------------------------------------------------------*/
KEYBUF EQU 30H
ORG 00H
START: MOV KEYBUF,#2
WAIT:
MOV P3,#0FFH
CLR P3.4
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY1
LCALL DELY10MS
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY1
MOV A,P3
ANL A,#0FH
CJNE A,#0EH,NK1
MOV KEYBUF,#0
LJMP DK1
NK1: CJNE A,#0DH,NK2
MOV KEYBUF,#1
LJMP DK1
NK2: CJNE A,#0BH,NK3
MOV KEYBUF,#2
LJMP DK1
NK3: CJNE A,#07H,NK4
MOV KEYBUF,#3
LJMP DK1
NK4: NOP
DK1:
MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
DK1A: MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ DK1A
NOKEY1:
MOV P3,#0FFH
CLR P3.5
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY2
LCALL DELY10MS
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY2
MOV A,P3
ANL A,#0FH
CJNE A,#0EH,NK5
MOV KEYBUF,#4
LJMP DK2
NK5: CJNE A,#0DH,NK6
MOV KEYBUF,#5
LJMP DK2
NK6: CJNE A,#0BH,NK7
MOV KEYBUF,#6
LJMP DK2
NK7: CJNE A,#07H,NK8
MOV KEYBUF,#7
LJMP DK2
NK8: NOP
DK2:
MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
DK2A: MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ DK2A
NOKEY2:
MOV P3,#0FFH
CLR P3.6
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY3
LCALL DELY10MS
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY3
MOV A,P3
ANL A,#0FH
CJNE A,#0EH,NK9
MOV KEYBUF,#8
LJMP DK3
NK9: CJNE A,#0DH,NK10
MOV KEYBUF,#9
LJMP DK3
NK10: CJNE A,#0BH,NK11
MOV KEYBUF,#10
LJMP DK3
NK11: CJNE A,#07H,NK12
MOV KEYBUF,#11
LJMP DK3
NK12: NOP
DK3:
MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
DK3A: MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ DK3A
NOKEY3:
MOV P3,#0FFH
CLR P3.7
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY4
LCALL DELY10MS
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY4
MOV A,P3
ANL A,#0FH
CJNE A,#0EH,NK13
MOV KEYBUF,#12
LJMP DK4
NK13: CJNE A,#0DH,NK14
MOV KEYBUF,#13
LJMP DK4
NK14: CJNE A,#0BH,NK15
MOV KEYBUF,#14
LJMP DK4
NK15: CJNE A,#07H,NK16
MOV KEYBUF,#15
LJMP DK4
NK16: NOP
DK4:
MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
DK4A: MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ DK4A
NOKEY4:
LJMP WAIT
DELY10MS:
MOV R6,#10
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -