可以编写一段矩阵按键控制lcd1602的程序吗?
时间: 2023-05-26 11:04:04 浏览: 136
以下是一个基于Arduino平台的矩阵按键控制LCD1602显示屏的示例程序:
```
#include <LiquidCrystal.h> //引入LCD库
#define ROWS 4 //定义矩阵键盘行数
#define COLS 4 //定义矩阵键盘列数
//定义矩阵键盘按键对应的数字
const byte keys[ROWS][COLS] = {
{1, 2, 3, 'A'},
{4, 5, 6, 'B'},
{7, 8, 9, 'C'},
{'*', 0, '#', 'D'}
};
//定义矩阵键盘输入引脚
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
//初始化LCD对象
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2); //初始化LCD显示屏
pinMode(rowPins[0], INPUT_PULLUP); //第1行设置为输入模式
pinMode(rowPins[1], INPUT_PULLUP); //第2行设置为输入模式
pinMode(rowPins[2], INPUT_PULLUP); //第3行设置为输入模式
pinMode(rowPins[3], INPUT_PULLUP); //第4行设置为输入模式
pinMode(colPins[0], OUTPUT); //第1列设置为输出模式
pinMode(colPins[1], OUTPUT); //第2列设置为输出模式
pinMode(colPins[2], OUTPUT); //第3列设置为输出模式
pinMode(colPins[3], OUTPUT); //第4列设置为输出模式
lcd.setCursor(0, 0); //设置显示屏光标位置
lcd.print("Press a key"); //显示提示语句
}
void loop() {
char key = getKey(); //获取矩阵键盘输入的按键
if(key != NO_KEY) { //如果有按键输入
lcd.clear(); //清空显示屏屏幕
lcd.setCursor(0, 0);
lcd.print("You pressed:");
lcd.setCursor(0, 1);
lcd.print(key); //在显示屏上显示输入的按键
delay(1000); //延时1秒
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Press a key"); //显示提示语句,等待下一个输入
}
}
//函数:获取矩阵键盘输入的按键
char getKey() {
for(byte col = 0; col < COLS; col++) {
digitalWrite(colPins[col], LOW); //设置当前列为低电平
for(byte row = 0; row < ROWS; row++) {
if(digitalRead(rowPins[row]) == LOW) { //如果当前行为低电平
delay(10); //等待10毫秒去除反弹
if(digitalRead(rowPins[row]) == LOW) { //再次检查当前行电平
digitalWrite(colPins[col], HIGH); //恢复当前列高电平
return keys[row][col]; //返回按键对应字符
}
}
}
digitalWrite(colPins[col], HIGH); //恢复当前列高电平
}
return NO_KEY; //返回无输入状态
}
```
该程序中,使用了LiquidCrystal库来显示LCD1602显示屏。在setup()函数中,首先初始化LCD显示屏,并将矩阵键盘的输入引脚设置为INPUT_PULLUP模式(因为矩阵键盘中的按键需要通过连接到GND来输出LOW电平)。然后通过digitalWrite()函数将矩阵键盘的列引脚设置为输出模式。在循环中,调用getKey()函数来获取矩阵键盘的输入,如果有按键输入,就在LCD显示屏上显示输入的按键;否则,显示提示语句并等待下一个输入。getKey()函数用来获取矩阵键盘输入的按键。在该函数中,先通过循环设置每一列为低电平,然后通过循环检测每一行的电平状态。如果当前行为低电平,说明有按键被按下,检测到按键后返回按键对应的字符。注意,为了避免按键反弹,需要在行电平检测前延时10ms。如果没有任何输入,函数返回NO_KEY。
阅读全文