?? 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 + -