zoukankan      html  css  js  c++  java
  • 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;
    }
    

  • 相关阅读:
    猜数字游戏,猜三次都不对,则结束游戏,猜一次就成功,结束游戏
    用return关键字实现1——100累加求和,返回总和并接收输出
    用return关键字实现求和操作
    return关键字的作用和接受实验
    数组各元素随机赋值、求和、求平均值、求最大值的各类测试(一维数组)
    日期下拉选择
    22--
    css 17课--
    css盒模型
    css学习
  • 原文地址:https://www.cnblogs.com/yl-xy/p/13378488.html
Copyright © 2011-2022 走看看