📄 keyboard.asm
字号:
//===========================================================================
//函数说明:1*8键盘扫描程序
//调用方法:void keyboard(void)
//
//注意事项:1、使用IOA的高8位作为1*8键盘的接口
// 2、按键初始状态为低电平,按键有效时为高电平
// 3、采用直接扫描的方法,只对键盘扫描一次
// 4、若没有按键,则退出程序,注意在程序外部循环时加入喂狗
// 5、若没有放开按键,整个程序在函数void keyboard(void)里死循环
// 6、全局变量key_value=0时为没有按键状态,1~8分别为8个按键的键值
//===========================================================================
.include hardware.inc
.ram
.public _key_value
.var _key_value
.code
//=========================================================================================
//
//=========================================================================================
.public _keyboard
_keyboard: .proc
PUSH R1,R5 TO [sp]
?DETECT:
R2=[P_IOA_Data]
R2|=0xff00 //保护低8位数据
R2^=0xff00 //保护低8位数据,高8位设置成0
[P_IOB_Data]=R2
R2=[P_IOA_Attrib]
R2|=0xff00 //保护低8位数据
R2^=0xff00 //保护低8位数据,高8位设置成0
[P_IOB_Attrib]=R2
R2=[P_IOA_Dir]
R2|=0xff00 //保护低8位数据
R2^=0xff00 //保护低8位数据,高8位设置成0
[P_IOA_Dir]=R2
R2=[P_IOA_Data]
R2&=0xff00
CMP R2,0x0000 //检查是否有按键,若全为低电平,则无按键;否则为有按键
JE ?RET_KEY //无按键,退出键盘程序
CALL DELAY_20ms //有按键,进行延时消抖
R2=[P_IOA_Data]
R2&=0xff00
CMP R2,0x0000 //检查是否有按键,若全为低电平,则为抖动;否则为有按键
JE ?RET_KEY //抖动,退出键盘程序
R3=1 //有按键,计算键值,设定按键初始值为0
R2=R2 LSR 4
R2=R2 LSR 4
?CALCULATE:
TEST R2,0x0001
JNZ ?END_CAL //检测到按键位置
R3+=1
R2=R2 LSR 1
JMP ?CALCULATE
?END_CAL:
NOP
?DETECT_KEY_OFF:
R2=0x0001
[P_Watchdog_Clear]=R2
R2=[P_IOA_Data]
R2&=0xff00
CMP R2,0x0000
JNE ?DETECT_KEY_OFF //若不相等,则按键尚未释放
CALL DELAY_20ms //延时消抖
R2=[P_IOB_Data]
R2&=0xff00
CMP R2,0x0000
JNE ?DETECT_KEY_OFF //若不相等,则为抖动,则按键尚未释放
[_key_value]=R3
?RET_KEY:
POP R1,R5 FROM [SP]
RETF
.ENDP
//=========================================================================================
//延时20ms子程序,在CPU频率为24.576/8=3.072MHz下,循环6000次,则约为20ms
//=========================================================================================
DELAY_20ms: .PROC
PUSH R4,R4 to [sp]
R4=0
LOOP:
R4+=1;
CMP R4,6000
JB LOOP
POP R4,R4 from [sp]
RETF
.ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -