📄 keydip.s43
字号:
;此示例介绍行列式扫描键盘的程序编写方法
;并且显示出所按键的键值
#include "msp430x13x.h"
RSEG CSTACK ; System stack
DS 0
RSEG CODE ; Program code 的开始
Reset MOV #300H,SP
SetupWDT mov #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
MAIN CALL #DIP
CALL #KEYJUDGE ; 如果有按键
JNC MAIN
CALL #KEY ; 得到键值
MOV.B R9,&200H ; 送到第一位显示
MOV.B R9,&201H ; 送到第一位显示
MOV.B R9,&202H ; 送到第一位显示
MOV.B R9,&203H ; 送到第一位显示
MOV.B R9,&204H ; 送到第一位显示
MOV.B R9,&205H ; 送到第一位显示
JMP MAIN
KEY CALL #KEYJUDGE ;
JNC KEY ;
CALL #DIP
CALL #DIP
CALL #KEYJUDGE
JNC KEY ;去抖动
CALL #KEYCODE ;得到键值
PUSH R9
KEY1 CALL #KEYJUDGE ;等待按键松开
JC KEY1
POP R9
RET
KEYCODE MOV.B #0,&P5DIR
MOV.B #0FH,&P1DIR ;低4位作为扫描线行输出,高3位作为列线读入
MOV #0,R9
MOV #1,R8
KEYCODELOOP MOV.B R8,&P1OUT ;R8为扫描信号的输出
BIT.B #10H,&P1IN
JC KEYCODE1 ;测试P1.4
BIT.B #20H,&P1IN
JC KEYCODE2 ;测试P1.5
BIT.B #40H,&P1IN
JC KEYCODE3 ;测试P1.6
RLA.B R8
ADD.B #3,R9
CMP.B #12,R9 ;4根行线扫描完了吗
JNZ KEYCODELOOP
KEYCODE1 ADD #0,R9
RET
KEYCODE2 ADD #1,R9
RET
KEYCODE3 ADD #2,R9
RET
KEYJUDGE MOV.B #0FFH,&P1DIR
MOV.B #0,&P1OUT
MOV.B #0FH,&P1DIR
MOV.B #0FH,&P1OUT
MOV.B &P1IN,R9
AND.B #7FH,R9
BIT.B #070H,&P1IN ; 测试3根列线是否为1,是否有按健
RET ; 若有,C=1
DIP MOV.B #0FFh,&P1DIR ; P1.0 output
MOV.B #0FFH,&P5DIR
MOV #200H,R9
MOV #0FFDFH,R8 ; 使用右移操作,0FFDFH对应最右边的一个显示器
DIS6LOOP MOV.B @R9,R7
MOV.B TABLED(R7),R7 ; 从表中查得显示码
MOV.B R7,&P5OUT
MOV.B
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -