?? keydlpm.s43
字號:
; 魏小龍編寫
; 此示例介紹430的低功耗設計方法
;在這個例子中有LED顯示 與 行列式鍵盤,這些程序的編寫在相應的地方已經介紹
;這個程序還是要求顯示出所按鍵的鍵值
;但要求做到低功耗,所以大部分的事情在中斷程序里實現,
;顯示用中斷實現,而且5秒沒有按鍵按下則自動關斷顯示,用以節省能耗
;
; 約定:顯示緩存在200H 以后的6個單元,顯示位寄存器為 206H;208H為顯示計數器
; 20Ah 按鍵計時器
#include "msp430x13x.h"
RSEG CSTACK ; System stack
DS 0
RSEG CODE ; Program code 的開始
Reset mov #SFE(CSTACK),SP ;
SetupWDT mov #WDTPW+WDTHOLD,&WDTCTL ;
SetupTA mov #TASSEL1+TACLR,&TACTL ; SMCLK, Clear TAR
SetupC0 mov #CCIE,&CCTL0 ; 使能CCR0 中斷
mov #500,&CCR0 ;
SetupP1 bis #MC1,&TACTL ; 定時器工作在連續模式
eint ; 開中斷
MOV #0FFDFH,&206H
MOV #200H,&208H
MOV #5000,&20AH
MOV.B #21H,&201H
MOV.B #22H,&202H
Mainloop bis #LPM1,SR ; 低功耗模式
;---------------------------------------------------------------------------
TA0_isr add #500,&CCR0 ; Add Offset to CCR0
CMP #0,&20AH
JZ TA0_1
CALL #KEY
CALL #DISPLAY_LED
DEC &20AH
reti
TA0_1 CALL #KEY
MOV.B #0,P5OUT
MOV.B #00,P5DIR
RETI
KEY PUSH.B &P1DIR
PUSH.B &P1OUT
CALL #KEYJUDGE ; 沒有按鍵就退出,有就得到鍵值并處理
JNC KEY2 ;
MOV #2000,R15
KEY0 DEC R15
JNZ KEY0
CALL #KEYJUDGE
JNC KEY2 ;去抖動
CALL #KEYCODE ;得到鍵值
PUSH R9
KEY1 CALL #KEYJUDGE ;等待按鍵松開
JC KEY1
POP R9
MOV.B R9,&200H
MOV.B R9,&201H ; 送到第一位顯示
MOV.B R9,&202H ; 送到第一位顯示
MOV.B R9,&203H ; 送到第一位顯示
MOV.B R9,&204H ; 送到第一位顯示
MOV.B R9,&205H ; 送到第一位顯示
MOV #5000,&20AH
CALL #KEY_TAB ;處理按鍵
KEY2 POP.B &P1OUT
POP.B &P1DIR
RET
KEY_TAB ;
NOP
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
BIT.B #070H,&P1IN ; 測試3根列線是否為1,是否有按健
RET ; 若有,C=1
DISPLAY_LED MOV.B #0FFh,&P1DIR ;
MOV.B #0FFH,&P5DIR
MOV &208H,R15
MOV.B @R15,R15
MOV.B TABLED(R15),R15 ;從表中查得顯示碼
MOV.B R15,&P5OUT
MOV.B
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -