单片机学习(五)LCD1602和矩阵键盘的使用

LCD1602的使用

首先LCD1602是外接在开发板上的液晶屏外设,如图所示:
在这里插入图片描述
我们主要使用它来代替动态数码管进行显示,因此使用的原理我们可以先略过,而控制它可以使用b站up主提供的驱动程序,即我们只需调用第三方库即可实现对LCD1602的控制了。
(b站对应视频链接:https://www.bilibili.com/video/BV1Mb411e7re,可以在视频下方找到对应的驱动程序资源)

up主提供的驱动程序包括以下的接口:
在这里插入图片描述
在使用LCD进行显示之前我们需要先使用LCD_Init()进行初始化,然后如上图所示,我们可以使用LCD来显示字符、字符串、数字的二进制显示、十六进制显示等等。

因此我们先打印一下迟来的“Hello World”。

int main() {
    LCD_Init();
    LCD_ShowString(1,1,"Hello World");
    while (1)}

运行结果:
在这里插入图片描述

矩阵键盘的使用

矩阵键盘相关电路图

在这里插入图片描述

按键检测扫描

在默认没有按键按下的情况下P1的7个引脚都会是高电平,这样假设P1[3…0]=0b1110,即使P1^0置为0,此时S4,S8,S12,S16的右边一端的电位都会变成0,此时若我们单击S4按钮,则S4所连接的另一端P1^7的电位也会变为0,此时即可判断S4按钮被按下了。因此我们的扫描过程可以描述如下:

for lowPart in [0111, 1011, 1101, 1110]:
	P1的低四位 = lowPart
	for i=1 to 4if P1的第i位(从左到右数)为 0:
			此时即可判断是某按键按下,进行相应的操作

因此代码实现为:

u8 MatrixKey() {
    u8 keyNum = 0;
    u8 i,j;
    u8 highCheck;
    for(j=0;j<4;j++) {
        P1 = 0xff;
        // 设置P1的低4位
        P1 &= ~(0x08>>j);
        highCheck = 0x80; //1000 0000
        for(i=0;i<4;i++) {
            // 检查高4位有没有0,若有则说明按键按下
            if ((highCheck & P1) ==0) {
                deley(1000);
                while ((highCheck & P1) ==0);
                deley(1000);
                keyNum = i*4+j+1;
            }
            highCheck>>=1;
        }
    }
    return keyNum;
}

这样当我们按动某个按键时就会返回对应的按键编号了。

制作密码输入器

#define BACKSPACE 15
#define REINPUT 16

int main() {
    char passWord[20];
    u8 i=0;
    LCD_Init();
    
    passWord[0] = '\0';
    LCD_ShowString(1,1,passWord);
    while (1) {
        u8 res = MatrixKey();
        if (res!=0) {
            if (res == REINPUT) {
            	// 若为按键16则代表清空并重新输入
                LCD_Init();
                passWord[0] = '\0';
                i=0;
            }
            else if(res == BACKSPACE) {
            	// 若为按键15则代表删除最后一个字符,即退格
                LCD_ShowString(1,i," ");
                i--;
                passWord[i] = '\0';
            }
            else {
            	// 其余情况则添加一个字符并显示出来
                passWord[i++]=res+'0';
                passWord[i] = '\0';
                LCD_ShowString(1,1,passWord);
            }
            
        }
    }
}

运行效果:
在这里插入图片描述

  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,这个实验需要使用到以下硬件和软件: 硬件: - LCD1602液晶屏 - 矩阵键盘 - DHT11温湿度传感器 - Arduino单片机开发板 软件: - Arduino IDE开发环境 接下来,我们按照以下步骤进行实验: 1. 接线 将LCD1602矩阵键盘和DHT11传感器按照如下图所示连接到Arduino开发板上: LCD1602: - VSS — GND - VDD — 5V - V0 — 10K电位器中间引脚 - RS — 数字口2 - RW — GND - E — 数字口3 - D4 — 数字口4 - D5 — 数字口5 - D6 — 数字口6 - D7 — 数字口7 - A — 5V - K — GND 矩阵键盘: - K1 — 数字口8 - K2 — 数字口9 - K3 — 数字口10 - K4 — 数字口11 - K5 — 数字口12 - K6 — 数字口13 - K7 — 数字口A0 - K8 — 数字口A1 DHT11: - VCC — 5V - GND — GND - DATA — 数字口A2 2. 编写代码 打开Arduino IDE开发环境,编写以下代码: ``` #include <LiquidCrystal.h> // 导入LCD1602库 #include <DHT.h> // 导入DHT11库 #define DHTPIN A2 // 设置DHT11数据引脚连接到Arduino的A2口 #define DHTTYPE DHT11 // 设置使用DHT11传感器 DHT dht(DHTPIN, DHTTYPE); // 初始化DHT11 const int ROWS = 4; // 设置矩阵键盘的行数和列数 const int COLS = 2; char keys[ROWS][COLS] = { // 设置矩阵键盘的键值 {'1', '2'}, {'3', '4'}, {'5', '6'}, {'7', '8'} }; byte rowPins[ROWS] = {8, 9, 10, 11}; // 设置矩阵键盘的行引脚和列引脚 byte colPins[COLS] = {12, 13}; LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // 初始化LCD1602 void setup() { lcd.begin(16, 2); // 初始化LCD1602的行数和列数 dht.begin(); // 初始化DHT11 } void loop() { readMatrixKeypad(); // 读取矩阵键盘的键值 readDHT11(); // 读取DHT11传感器的温湿度数据 delay(500); } void readMatrixKeypad() { char key = 0; for (int r = 0; r < ROWS; r++) { // 检测按下的行 digitalWrite(rowPins[r], LOW); for (int c = 0; c < COLS; c++) { // 检测按下的列 if (digitalRead(colPins[c]) == LOW) { key = keys[r][c]; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Key Pressed:"); lcd.setCursor(0, 1); lcd.print(key); while (digitalRead(colPins[c]) == LOW) {} } } digitalWrite(rowPins[r], HIGH); } } void readDHT11() { float temp = dht.readTemperature(); // 读取温度数据 float hum = dht.readHumidity(); // 读取湿度数据 lcd.setCursor(0, 2); lcd.print("Temp:"); lcd.print(temp); lcd.print("C "); lcd.setCursor(0, 3); lcd.print("Humidity:"); lcd.print(hum); lcd.print("% "); } ``` 3. 上传代码 将编写好的代码上传到Arduino开发板中。 4. 实验验证 按下矩阵键盘上的键后,LCD1602将会显示出对应的键值。同时,DHT11传感器将会读取当前的温湿度数据,并在LCD1602上显示出来。 至此,LCD1602显示矩阵键盘键值和DHT11温湿度传感器温度和湿度数据的实验完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值