Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: eagler8

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

[复制链接]
 楼主| 发表于 2019-6-17 20:08 | 显示全部楼层
08.jpg
 楼主| 发表于 2019-6-17 20:16 | 显示全部楼层
程序思路
1
#include <Keypad.h>   //加载库


2
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};//建立二维数组,用于设置按键的输出字符


3
byte rowPins[ROWS] = {2,3,4,5};   //定义行引脚
byte colPins[COLS] = {6,7,8,9};     //定义列引脚


4
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //实例化Keypad 对象


5
char key = keypad.getKey();//新建一个key 变量 用于获取键盘当前的值
02 (2) (1).jpg

 楼主| 发表于 2019-6-17 20:54 | 显示全部楼层
4X4矩阵键盘模块的一些应用电路


10 (6).jpg

10 (1).jpg

10 (3).jpg
 楼主| 发表于 2019-6-17 20:57 | 显示全部楼层
10 (8).jpg

10 (9).jpg

10 (10).jpg
 楼主| 发表于 2019-6-17 21:01 | 显示全部楼层
12.jpg
 楼主| 发表于 2019-8-29 21:30 | 显示全部楼层
13.jpg
 楼主| 发表于 2019-8-29 21:36 | 显示全部楼层
14.jpg
发表于 2019-9-4 14:39 | 显示全部楼层
高人啊 学习了
 楼主| 发表于 2019-9-4 14:50 | 显示全部楼层

谢谢鼓励,今天在做12位环形灯的实验
发表于 2020-2-5 22:00 | 显示全部楼层
老哥,我想用一个矩阵键盘做一个计算器并把计算过程显示在LCD1602上,但是在写程序的时候发现键盘不能输入多位数显示在LCD 上,在网上查资料后看到有人使用int receive=0; receive = receive * 10 + data(新数据);来生成多位数,然而这样写之后每输入一个data,比如说1,在LCD上看到的数字确是29127,其它data生成的receive也特别大,请问这种问题该怎么解决呢?程序如下:
[mw_shl_code=arduino,true]#include <Keypad.h>
#include <LiquidCrystal.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns

char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {13, 12, 11, 10}; //第一行到第四行
byte colPins[COLS] = {9, 8, 7, 6}; //第一列到第四列

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
LiquidCrystal lcd(5, 4, 3, 2, 14, 15);

unsigned int data;
unsigned int receive_num = 0;

void setup() {
  lcd_init();
}

void loop() {
  readKeyboard();
  process_data();
}

void lcd_init()
  {
    lcd.begin(16, 2);
    lcd.clear();
  }

void readKeyboard()
  {
    char customKey = customKeypad.getKey();
    if (customKey != NO_KEY)
      {
        switch(customKey)
          {
            case '0': data = 0; break;
            case '1' : data = 1; break;
            case '2' : data = 2; break;
            case '3' : data = 3; break;
            case '4': data = 4; break;
            case '5': data = 5; break;
            case '6': data = 6; break;
            case '7': data = 7; break;
            case '8': data = 8; break;
            case '9': data = 9; break;
            case '*': data = 10; break;
            case '#': data = 11; break;
            case 'A' : data = 12; break;
            case 'B' : data = 13; break;
            case 'C': data = 14; break;
            case 'D': data = 15; break;
            default: break;
          }
       }
  }

void process_data()
  {
    if ((data == 0) || (data == 1) || (data == 2) || (data == 3) || (data == 4) || (data == 5) || (data == 6) || (data == 7) || (data == 8) || (data == 9))
      {
        lcd.setCursor(0, 0);
        receive_num = 10 * receive_num + data;
        lcd.print(receive_num);
      }
  }[/mw_shl_code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino爱好者

GMT+8, 2022-12-7 08:51 , Processed in 0.072456 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表