;44矩阵键盘
;设计者:黄宗灯(广西师范大学)
;行线P1.0-P1.3,列线P1.4-P1.7
;****************
LED0 EQU 40H
SDA BIT P0.2
SCL BIT P0.3
ORG 0000H
AJMP MAIN
ORG 0100H
;------------------------------
;-------主程序-----------------
MAIN:
MOV LED0,#0 ;初始化LED0
MOV DPTR,#TAB
MOV TMOD,#10H ;定时器T1方式1
MOV TH1,#0B1H ;定时初值B1E0
MOV TL1,#0E0H
LOOP:
ACALL SCAN
ACALL DISPLAY
ACALL DELAY
AJMP LOOP
;***********
;**********键盘扫描************
SCAN:
MOV P1,#0F0H ;行线全清0
MOV A,P1 ;读状态
CJNE A,#0F0H,LOOP1 ;有键按下吗?有转LOOP1
RET ;无按下返回
LOOP1:
ACALL DELAY_10 ;延时去抖动
MOV A,P1 ;再读状态
CJNE A,#0F0H,KEY0 ;再有键按下吗?有到KEY0
RET ;没有返回
KEY0: ;判别是那个键被按下了
MOV P1,#0FEH ;将P0.0行置0
JNB P1.4,N0 ;列线为0吗?为0到NX中去执行相应的
操作
JNB P1.5,N1
JNB P1.6,N2
JNB P1.7,N3
MOV P1,#0FDH ;将行P0.1置0
JNB P1.4,N4
JNB P1.5,N5
JNB P1.6,N6
JNB P1.7,N7
MOV P1,#0FBH ;将行P0.2置0
JNB P1.4,N8
JNB P1.5,N9
JNB P1.6,N10
JNB P1.7,N11
MOV P1,#0F7H ;将行P0.3置0
JNB P1.4,N12
JNB P1.5,N13
JNB P1.6,N14
JNB P1.7,N15
RET
;*********按键扫描结束***********
;**********按键处理子程序************
;*******16个按键可以实现16个功能*********
N0:
MOV LED0,#0
RET
N1:
MOV LED0,#1
RET
N2:
MOV LED0,#2
RET
N3:
MOV LED0,#3
RET
N4:
MOV LED0,#4
RET
N5:
MOV LED0,#5
RET
N6:
MOV LED0,#6
RET
N7:
MOV LED0,#7
RET
N8:
MOV LED0,#8
RET
N9:
MOV LED0,#9
RET
N10:
MOV LED0,#10
RET
N11:
MOV LED0,#11
RET
N12:
MOV LED0,#12
RET
N13:
MOV LED0,#13
RET
N14:
MOV LED0,#14
RET
N15:
MOV LED0,#15
RET
;*********按键处理子程序结束*************
;********显示子程序***************
DISPLAY:
MOV A,LED0
MOVC A,@A+DPTR
ACALL SHIFT ;显示按下键的数字
MOV A,#0FFH
ACALL SHIFT ;其它7个数码管显示灭
ACALL SHIFT
ACALL SHIFT
ACALL SHIFT
ACALL SHIFT
ACALL SHIFT
ACALL SHIFT
RET
;*********数据送进164在子程序*********
SHIFT:
PUSH A
MOV R0,#8 ;8位数据
CLR C
CLR SCL
DL:
RLC A
MOV SDA,C ;一位位传送
SETB SCL
CLR SCL
DJNZ R0,DL ;8位送完了吗?
POP A
RET
;*********显示数据表格*******
TAB:
DB 11H,0D7H,32H,92H
DB 0D4H,98H,18H,0D3H
DB 10H,90H,50H,1CH,39H
DB 16H,38H,78H,0FFH
;------------定时延时10MS--------
DELAY_10:
SETB TR1 ;启动定时器
JNB TF1,$ ;等待溢出
CLR TR1 ;关闭定时器
CLR TF1 ;清溢出标志位
MOV TH1,#0B1H ;重载初值
MOV TL1,#0E0H
RET
;------------延时子程序----------
DELAY:
MOV R1,#1
DEL1:
MOV R2,#0FFH
DEL2:
MOV R3,#0FFH
DEL3:
DJNZ R3,DEL3
DJNZ R2,DEL2
DJNZ R1,DEL1
RET
;--------------------------------
END