MSP430G2553 4x4矩阵键盘

Posted yl-xy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MSP430G2553 4x4矩阵键盘相关的知识,希望对你有一定的参考价值。

采用行(列)扫描法:

1.初始化:所有行线输出低电平,所有列线上拉输入

2.确定列:输入为低电平的一列

3.确定行:轮流让行线输出低电平,其它行线输出高电平。若使得上一步确定的列线输入为低电平,可以确定按键所在行就是当前输出低电平的一行

4.显示数码:列号(0~3) + 4 * 行号(0~3)

 

#include <msp430.h>

typedef unsigned int uint;
typedef unsigned char uchar;

volatile uint t;
volatile uchar key;

void delay(){
    for(t = 1000; t > 0; t--);
}

void main(){
    WDTCTL = WDTPW + WDTHOLD;

    P1DIR = 0x0f;//LED
    P1OUT = 0x00;

    P2DIR = 0x0f;//0~3号为行输出,4~7号为列输入
    P2REN = 0xf0;//4~7号上拉
    P2OUT = 0xf0;

    P2IE = 0xff;//开启GPIO中断
    P2IES = 0xff;
    P2IFG = 0x00;

    __bis_SR_register(GIE);

}

#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void){
    //P1OUT = 0xff;//test

    if(P2IN != 0xf0){
        delay();//软件消抖
        if(P2IN != 0xf0){
            switch(P2IN){//确定按键所在列:对应4~7号中的低电平位
                case 0xe0: key = 0; break;
                case 0xd0: key = 1; break;
                case 0xb0: key = 2; break;
                case 0x70: key = 3; break;
            }

            //先将所有行输出高电平并拉高所有列,然后逐行输出低电平
            //如果按键所在行输出低电平,则其所在列也会被拉低
            P2OUT = 0xfe; if(P2IN != 0xfe) { key += 0;  goto Cat; }
            P2OUT = 0xfd; if(P2IN != 0xfd) { key += 4;  goto Cat; }
            P2OUT = 0xfb; if(P2IN != 0xfb) { key += 8;  goto Cat; }
            P2OUT = 0xf7; if(P2IN != 0xf7) { key += 12; goto Cat; }
Cat:
            P1OUT = key;
            P2OUT = 0xf0;

        }
    }

    P2IFG &= 0;
}

 

技术图片

以上是关于MSP430G2553 4x4矩阵键盘的主要内容,如果未能解决你的问题,请参考以下文章

MSP430G2553 模拟交通灯

MSP430G2553单片机——利用蜂鸣器播放一首歌

基于msp430G2553的低频方波频率占空比峰峰值测量函数

怎么在烧录的时候在msp430g2553的information memory中烧录参数

有没有办法在 msp430 中进行多精度算术(整数大于 64 位)?

MSP430G2333下位机乘法运算需要注意的一个问题