查看: 43206|回复: 47

4*4矩阵键盘驱动

  [复制链接]

该用户从未签到

发表于 2013-7-30 13:40 | 显示全部楼层 |阅读模式
本帖最后由 money0010 于 2013-7-30 13:40 编辑

4*4 矩阵键盘,可以作为简单的控制器输入,能用于复杂的arduino控制。本文主要介绍如何驱动4*4矩阵键盘。

材料
4*4矩阵键盘
Arduino Uno  1
8P线
双排针或排针
DSC_0553.jpg
这里简单介绍一种矩阵键盘的工作原理,4*4矩阵键盘有8个引脚,4个一组,分别对应行和列,通过按键扫描的方法,对不同行(列)分别输入高低电平,然后读取不同列(行)上的电平,从而知道键盘上的某一按键按下。
例如,当第1行输出低电平,其他行输出高电平,分别读取依次列上的状态,如果第1列为低,结果为(1,1),按键为1,如果第2列为低,则结果为(1,2)按键为2
安装4*4矩阵键盘
4*4矩阵键盘有一个8孔的排母,理论上可以直接插到0-7脚上,但0,1脚用于串口通信,所以只能选择2~13脚,这里选用了2-9脚。
首先,选取一个16 PIN 的双排针,将双排针长的那一排的一面引脚插到键盘排母里
DSC_0554.jpg
DSC_0555.jpg


另一面插8P线,8P线另一头按键盘正面从左到右的顺序,线接2 PIN排针,再接5 PIN排针,
DSC_0556.jpg

DSC_0558.jpg

2 PIN 的排针插到Arduino8,9脚,5 PIN 的排针插到2~5

DSC_0559.jpg

总的硬件电路
DSC_0560.jpg


定义Arduino IO口
byte rowPins[ROWS] = {9, 8, 7, 6}; //连接到行数字小键盘的管脚
byte colPins[COLS] = {5, 4, 3, 2};//连接到列数字小键盘的管脚

示例程序

kittenblock中小学创客名师推荐的图形化编程软件

#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

void setup(){
  Serial.begin(9600);
}
  
void loop(){
  char customKey = customKeypad.getKey();
  
  if (customKey){
    Serial.println(customKey);
  }
}


效果
QQ图片20130730133501.jpg


Keypad.rar

8.75 KB, 下载次数: 2966

4*4键盘类库和示例程序

该用户从未签到

发表于 2015-2-10 10:05 | 显示全部楼层
CustomKeypad:25: error: 'Keypad' does not name a type
怎么办
errorcap.PNG

该用户从未签到

发表于 2013-7-30 19:35 | 显示全部楼层
好东西,支持下····

该用户从未签到

发表于 2013-7-30 20:31 | 显示全部楼层
顶一个,很给力的输入设备
  • TA的每日心情

    2017-2-22 13:27
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    发表于 2013-7-30 20:41 | 显示全部楼层
    绝对支持

    该用户从未签到

    发表于 2014-6-18 06:11 | 显示全部楼层
    很给力啊,我弄了一天都没弄出来啊,,,,,,,

    该用户从未签到

    发表于 2014-8-8 16:21 | 显示全部楼层
    正在找,很有用的东东

    该用户从未签到

    发表于 2014-11-8 13:35 | 显示全部楼层
    绝对赞,超给力,我想弄但是弄不了

    该用户从未签到

    发表于 2014-12-10 11:53 | 显示全部楼层
    很好的资料,学习了

    该用户从未签到

    发表于 2015-2-11 20:01 | 显示全部楼层
    回复一下!好东西顶!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    Wemos D1解析blinker气象数据制作中文台历
    Wemos D1解析blinker气象
    blinker气象数据能够非常方便的获得各地气象数据从Serial中打印出来,我用Wemos D1,
    LD3320怎么才能编译成功?
    LD3320怎么才能编译成功?
    一开始从http://www.waveshare.net/study/article-11-1.html下了VoiceLED-V2文件,然
    怎么在Arduino 1.0.6版本下载ESP8266?
    怎么在Arduino 1.0.6版本
    因为某种需要,只有Ardunio1.0.6版本可以用,它的首选项是下面这样的,工具开发板下面
    【分享】UNO直接测量电容容量
    【分享】UNO直接测量电容
    查找 Arduino 库的时候,偶然间看到了 Capacitor 这么个库,可直接用 UNO 测试电容,1
    【原创】尝试手工焊接16U2版本UNO
    【原创】尝试手工焊接16U2
    之前发过一个帖子,焊接了 CH340 版本的 UNO,运行良好。 然而对于原版的设计方案(16
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表