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

📄 keydip.s43

📁 魏小龙《MSP430系列单片机接口技术及系统设计实例》书中全部程序代码
💻 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 + -