⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keydlpm.s43

📁 MSP430系列单片机接口技术及系统设计实例_光盘资料
💻 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 + -