双源电子

在线客服
 工作时间
周一至周五 :8:30-17:30
周六至周日 :9:00-17:00

ARDUINO学习11

作者:双源电子

有的时候我会用到很多数量的按键,而IO数量比较稀缺,那就要用到扫描按键了。
扫描按键就是将IO采用行列交叉的接法,每个交叉点放置一个按键,然后采用逐行(列)扫描的方式获取按键的值。
原理图如下:
图片
这是一个常见的3*3的扫描按键原理图,共占用了6个IO,3行3列(行列可以自己随意来定)。
它的基本工作原理是这样的:
XIO_0,XIO_1,XIO_2被上拉到+5V,这三个IO作为输入端,YIO_0,YIO_1,YIO_2三个IO作为输出端;
将三路输出依次置为低电平,然后读取三路输入端的值,如果按键没有被按下,由于上拉电阻的存在,读数值一定是高(1);
如果按键被按下,输入端与输出端连接到低电平(一般是GND),这时,读数值就是低(0);
代码实现如下:
int getKey()
{
   int XIO_iN[3]={XIO_0,XIO_1,XIO_2};//
   int YIO_OUT[3]={YIO_0,YIO_1,YIO_2};
   int KEY_VALUE[9]={0,1,2,3,4,5,6,7,8};
   int i,j;
   int k;
   for(i=0;i<3;i++)
   {
        digitalWrite(YIO_OUT[i],0);//将输出端置底(0)
        for(j=0;j<3;j++)
       {
            k= digitalRead(XIO_iN[j]); //读取输入端
            if(k==0)   //读数值为0,表示按键被按下
           {
                digitalWrite(YIO_OUT[i],1);//输出端置高(1),以免影响下一次读取
                 return KEY_VALUE[i*3+j];//返回按键的位置
           }      
       }
       digitalWrite(YIO_OUT[i],1);//输出端置高(1),以免影响下一次读取
   }
}
这是扫描按键的基本思路,ARDUINO有一个专门的库实现了这个软件功能,就是Arduino Keypad键盘库(http://playground.arduino.cc//Code/Keypad)使用起来很方便。
下面是利用该库的一段代码(大家先熟悉一下,有机会结合实际硬件再来和大家一起讨论):

#include

constbyte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns

//Definethe keymap
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};

////Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduinopins.
byte rowPins[ROWS] = {6,7,8,9};

//Connect keypad COL0, COL1, COL2 and COL3 to these Arduinopins.
byte colPins[COLS] = {2,3,4,5};//connect to column pinouts

//Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS,COLS );

voidsetup(){
  Serial.begin(9600);
}

voidloop(){
  char key =keypad.getKey();

 if (key != NO_KEY){
  Serial.println(key);
  }
}


联系方式
_faiMaterial_000045

联系人:ANTBOT001

QQ:584860790

邮 箱:584860790@qq.com

交流群: 615486305