查看: 2927|回复: 38

[经验] 【Arduino】108种传感器模块系列实验(26)---4X4矩阵键盘模块

[复制链接]
  • TA的每日心情
    开心
    2020-4-2 05:34
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-6-17 17:27 | 显示全部楼层 |阅读模式
    本帖最后由 eagler8 于 2019-8-27 09:34 编辑

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。


    【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)

    实验二十六:4X4矩阵键盘模块(轻触式按键)


    矩阵键盘
    是单片机外部设备中所使用的排布类似于矩阵的键盘组。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。由于电路设计时需要更多的外部输入,单独的控制一个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘有4X4和8X8,其中用的最多的是4X4。

    0.jpg




  • TA的每日心情
    开心
    2020-4-2 05:34
  • 签到天数: 302 天

    [LV.8]以坛为家I

     楼主| 发表于 2020-2-6 16:24 | 显示全部楼层
    本帖最后由 eagler8 于 2020-2-6 16:26 编辑
    小木屋 发表于 2020-2-6 16:13
    矩阵键盘的接线是对的,但是我用的LCD没有蓝色的驱动,它的RS端,E使能端,还有D4,D5,D6,D7端都接了ardui ...

    这个专用转接板挺好用的,相关资料在这里,淘宝上不到二元,自己焊接上就行了

    【Arduino】108种传感器模块系列实验(111)-PCF8574扩展板模块
    -Arduino中文社区 - Powered by Discuz!
    https://www.arduino.cn/thread-91830-1-1.html
    0.jpg

    15.jpg
  • TA的每日心情
    开心
    2020-4-2 05:34
  • 签到天数: 302 天

    [LV.8]以坛为家I

     楼主| 发表于 2019-6-17 17:52 | 显示全部楼层
    工作原理
    矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4X4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。由于单片机IO端口具有线与的功能,因此当任意一个按键按下时,行和列都有一根线被线与,通过运算就可以得出按键的坐标从而判断按键键值。


    03-7.jpg

  • TA的每日心情
    开心
    2020-4-2 05:34
  • 签到天数: 302 天

    [LV.8]以坛为家I

     楼主| 发表于 2019-6-17 18:14 | 显示全部楼层
    行列扫描法原理
    1、使行线为编程的输入线,列线是输出线,拉低所有的列线,判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则所有的行线都为高电平。
    2、在第一步判断有键按下后, 延时10ms消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下 一步,否则返回第一步重新判断。
    3、开始扫描按键位置,采用逐 行扫描,每间隔1ms的时间,分别拉低第一列,第二列,第三列,第四 列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置,分别把行值和列值储存在寄存器里。
    4、从寄存器中找到行值和列 值并把其合并,得到按键值,对此按键值进行编码,按照从第一行第一个一直到第四行第四个逐行进行编码,编码值从“0000” 至“1111” , 再进行译码,最后显示按键号码。


    03--.jpg

  • TA的每日心情
    开心
    2020-4-2 05:34
  • 签到天数: 302 天

    [LV.8]以坛为家I

     楼主| 发表于 2019-6-17 19:31 | 显示全部楼层
    4X4矩阵4管脚直插按键键盘
    (1)体积小;
    (2)节省空间;
    (3)使用方便;
    (4)共计16按键;
    (5)单片机外扩键盘的上佳选择。


    01.jpg

  • TA的每日心情
    开心
    2020-4-2 05:34
  • 签到天数: 302 天

    [LV.8]以坛为家I

     楼主| 发表于 2019-6-17 19:33 | 显示全部楼层
    矩阵键盘所需库文件
    在Arduino IDE 1.8.0 或者以上版本中, 项目->加载库->管理库中搜索Keypad,然后安装即可。
    也可以在下载库(需要下载库文件 https://github.com/Chris--A/Keypad),然后手动添加到IDE中。
    01-0 (1).jpg

  • TA的每日心情
    开心
    2020-4-2 05:34
  • 签到天数: 302 天

    [LV.8]以坛为家I

     楼主| 发表于 2019-6-17 19:43 | 显示全部楼层
    安装4*4矩阵键盘
    4*4矩阵键盘有一个8孔的排母,理论上可以直接插到0-7脚上,但0,1脚用于串口通信,所以只能选择2~13脚,这里选用了2-9脚。


    Keypad Pin R1 –> Arduino Pin 2
    Keypad Pin R2 –> Arduino Pin 3
    Keypad Pin R3 –> Arduino Pin 4
    Keypad Pin R4 –> Arduino Pin 5
    Keypad Pin C1 –> Arduino Pin 6
    Keypad Pin C2 –> Arduino Pin 7
    Keypad Pin C3 –> Arduino Pin 8
    Keypad Pin C4 –> Arduino Pin 9
    02 (1).jpg

  • TA的每日心情
    开心
    2020-4-2 05:34
  • 签到天数: 302 天

    [LV.8]以坛为家I

     楼主| 发表于 2019-6-17 19:49 | 显示全部楼层

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

    /*
    【Arduino】37种传感器模块系列实验(26)
    实验二十六:4X4矩阵键盘模块(12键示例代码)
    */
    
    #include <Keypad.h>
     
    const byte ROWS = 4; 
    const byte COLS = 3; 
    
    char keys[ROWS][COLS] = {
      {'1','2','3'},
      {'4','5','6'},
      {'7','8','9'},
      {'#','0','*'}
    };
    byte rowPins[ROWS] = {5, 4, 3, 2}; 
    byte colPins[COLS] = {8, 7, 6}; 
     
    Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
     
    void setup(){
      Serial.begin(9600);
    }
     
    void loop(){
      char key = keypad.getKey();
     
      if (key != NO_KEY){
        Serial.println(key);
      }
    }

  • TA的每日心情
    开心
    2020-4-2 05:34
  • 签到天数: 302 天

    [LV.8]以坛为家I

     楼主| 发表于 2019-6-17 19:57 | 显示全部楼层
    07.jpg
  • TA的每日心情
    开心
    2020-4-2 05:34
  • 签到天数: 302 天

    [LV.8]以坛为家I

     楼主| 发表于 2019-6-17 20:01 | 显示全部楼层
    这是一个非常简单的示例,可以看到将键盘输入添加到Arduino程序中是多么容易。也可以将此类输入用于许多不同的项目,包括:
    ●    门锁
    ●    输入PWM
    ●    闹钟
    ●    安全锁等


    06.jpg

  • TA的每日心情
    开心
    2020-4-2 05:34
  • 签到天数: 302 天

    [LV.8]以坛为家I

     楼主| 发表于 2019-6-17 20:08 | 显示全部楼层

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

    /*
    【Arduino】37种传感器模块系列实验(26)
    实验二十六:4X4矩阵键盘模块(16键示例代码)
    */
    
    #include <Keypad.h>
    
    const byte ROWS = 4; 
    const byte COLS = 4; 
    
    char hexaKeys[ROWS][COLS] = {
      {'1','2','3','A'},
      {'4','5','6','B'},
      {'7','8','9','C'},
      {'*','0','#','D'}
    };
    
    byte rowPins[ROWS] = {2, 3, 4, 5}; 
    byte colPins[COLS] = {6, 7, 8, 9}; 
    
    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);
      }
    }

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    《Color Unit免费申请试用》
    《Color Unit免费申请试用
    COLOR 是一款颜色识别 Unit,其内部集成TCS3472彩色光数字转换器,能够将其检测到颜色
    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    求助帖,ESP01S介入WS2812B,无法让灯
    求助帖,ESP01S介入WS2812
    看抖音暴改车间着迷,但是无法调试出氛围灯,新手,有没有大神帮忙解决一下,感谢 上
    完美解决同步开关状态 ,小爱同学+app+本地按键控制状态...
    完美解决同步开关状态 ,
    你有没有发现app上面的按键在操作完毕后你就不知道开关的状态了;或者小爱操作完毕后
    DW542驱动器控制42步进电机
    DW542驱动器控制42步进电
    求一个范例,或者现成的代码,控制42步进电机,实现控制转台转动,要求可以控制转台转
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表