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

📄 keyqing.s43

📁 MSP430系列单片机接口技术及系统设计实例_光盘资料
💻 S43
字号:

                           
;  12个按键用做电子琴的输入
;  1,2,3,4,5,6,7作为一个八度音阶
;

#include    "msp430x13x.h"
             RSEG    CSTACK                  ; System stack
             DS      0   
             RSEG    CODE                    ; Program code 的开始    
             


PUBLIC      
Reset        mov     #SFE(CSTACK),SP         ; 
SetupWDT     mov     #WDTPW+WDTHOLD,&WDTCTL  ; 

SetupTA      mov     #TASSEL1+TACLR,&TACTL   ; SMCLK, Clear TAR
SetupC0      mov     #CCIE,&CCTL0            ; 使能CCR0 中断
             mov     #100,&CCR0              ; 
SetupP1      bis     #MC1,&TACTL             ; 定时器工作在连续模式

             MOV.B  #0FH,&P1DIR
             MOV.B  #0FH, &P1OUT
             MOV.B  #0,&P1IES
             MOV.B  #70H,P1IE   
             MOV.B  #8,&P4DIR        
             MOV.B  #0FH,&230H
             eint                            ; 开中断
            
Mainloop     bis     #LPM1,SR                ; 低功耗模式

;---------------------------------------------------------------------------
TA0_isr      XOR.B   #08H,&P4OUT
             add     &220H,&CCR0
     
             RETI          

P1KEY          CALL      #KEYJUDGE
               JNC       P1KEYEND
               CALL      #DELAY10M
               CALL      #KEYJUDGE
               JNC       P1KEYEND
               CALL      #KEYCODE
               RLA       R9                  ; R9*2
               MOV.w       F_TAB(R9),&220H   ; 查表得到某音的频率数值
               
           ;    BIS       #CCIE,&CCTL0
               
               ; ............
P1KEY1         CALL      #KEYJUDGE           ; 等待按键松开
               NOP
               MOV.B     #0,&P1IFG
               MOV.B     #0,&P1IE
               JC        P1KEY1
               ;.............
               MOV.B     #70H,&P1IE
         ;      BIC       #CCIE,&CCTL0
               MOV.B     #0FH,&230H
               
P1KEYEND       MOV.B     #0FH,&P1OUT
               MOV.B     #0,&P1IFG
               RETI


DELAY10M       MOV      #300H,R15
DELAY10M1      DEC      R15
               JNZ      DELAY10M1
               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
               
F_TAB          DW   0EEFH,  0D4EH,   0BDAH
               DW   0B30H,  09F8H,   08E1H,  07E9H
               
               DW   0778H,  06A7H,   05EDH 
               DW   0598H,  04FCH,   0471H,  03F5H
               
               DW   03BCH   ,0354H,  02F7H
               DW   02CCH,  027EH,   0239H,  01F8H
               
                     
             COMMON  INTVEC                  ; Interrupt vectors
             ORG     PORT1_VECTOR
             DW      P1KEY
             ORG     TIMERA0_VECTOR
             DW      TA0_isr
             ORG     RESET_VECTOR
             DW      Reset
                                                                            
;---------------------------------------------------------------------------
             END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -