单片机学习(五)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 4:
if 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);
}
}
}
}
运行效果:

单片机学习(五)LCD1602和矩阵键盘的使用的更多相关文章
- 芯航线FPGA学习套件之4*4矩阵键盘模块测试手册
芯航线FPGA学习套件之4*4矩阵键盘模块测试手册 本手册以简明扼要的方式介绍芯航线FPGA学习套件提供的矩阵键盘模块的测试方法: 连接开发板,如下所示: 2.将矩阵键盘模块与开发板按如下图所 ...
- 【STM32学习笔记】STM32f407 使用4*4矩阵键盘
作者:李剀 出处:https://www.cnblogs.com/kevin-nancy/ 欢迎转载,但也请保留上面这段声明.谢谢! 写在前面: 这是本人第一次开始写博客,可能写的不是很好,也请大家谅 ...
- AVR单片机教程——矩阵键盘
本文隶属于AVR单片机教程系列. 开发板上有4个按键,我们可以把每一个按键连接到一个单片机引脚上,来实现按键状态的检测.但是常见的键盘有104键,是每一个键分别连接到一个引脚上的吗?我没有考证过, ...
- 十天学会单片机Day2键盘检测(独立键盘、矩阵键盘)
1.键盘的分类 编码键盘:键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘 非编码键盘:靠软件编程来识别的称为非编码键盘.独立键盘.矩阵键盘 2.按键消抖 ...
- 「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- Win10 IoT C#开发 6 - 4x4矩阵键盘扫描
Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我 ...
- 4x4矩阵键盘扫描
4x4矩阵键盘扫描 Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架 ...
- 基于FPGA的4x4矩阵键盘驱动调试
好久不见,因为博主最近两个月有点事情,加上接着考试,考完试也有点事情要处理,最近才稍微闲了一些,这才赶紧记录分享一篇博文.FPGA驱动4x4矩阵键盘.这个其实原理是十分简单,但是由于博主做的时候遇到了 ...
- 单片机显示原理(LCD1602)
一.接口 LCD1602是很多单片机爱好者较早接触的字符型液晶显示器,它的主控芯片是HD44780或者其它兼容芯片.与此相仿的是LCD12864液晶显示器,它是一种图形点阵显示器,能显示的内容比LCD ...
随机推荐
- Spring学习日记01_IOC_xml的三种注入方式
什么是IOC 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 使用IOC目的:为了耦合度降低 做入门案例就是IOC实现 IOC底层原理 xml解析 工厂模式 反射 原始方式 cla ...
- Unity异步加载进度条
先上代码: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngi ...
- Unknown custom element: <...> - did you register the component correct?
之前用过的组件没有出现过任何问题,但偏偏在其他目录下引用就出问题了.组件的名称.import的路径都没任何问题,发现这是因为组件name填写不规范所导致的. 在定义组件的时候我们要严格按照官方文档要求 ...
- [心得笔记]Java多线程中的内存模型
一:现代计算机的高速缓存 在计算机组成原理中讲到,现代计算机为了匹配 计算机存储设备的读写速度 与 处理器运算速度,在CPU和内存设备之间加入了一个名为Cache的高速缓存设备来作为缓冲:将运算需要 ...
- Mybatis逆向工程生成类文件
首先,我们需要建好相关文件夹目录: 然后,编写执行脚本 generator.xml : 1 <?xml version="1.0" encoding="UTF-8& ...
- 在Intellij IDEA中新建Web项目
1.点击左上角 文件(F) ,--> new --> 项目 2.勾选下面的复选框,下一步就是给项目起名字和存放项目的位置 2.在Web文件下新建 clsses 和 lib文件夹:http ...
- 锁&事务
一.概述: 锁:是计算机协调多个进程或线程并发访问某一资源的机制,数据库中最重要的资源.数据库既要保证并发性,又要保证数据的一致性,所以锁机制也更复杂.在计算机科学中,锁(lock)或互斥(mutex ...
- linux学习之路第七天(时间日期类指令详解)
时间日期类 1.date指令 date指令 - 显示当前日期 基本语法 1)date (功能描述:显示当前时间): 2) date + %Y (功能描述:显示当前年份) 3)date+%m( 功能描述 ...
- android开发相关知识笔记
1.xpage页面打开: openPage(TestFragment.class) openPage("标识") // 页面打开等待结果返回: openPageForResult( ...
- ESP32-http server笔记
基于ESP-IDF4.1 #include <esp_wifi.h> #include <esp_event.h> #include <esp_log.h> #in ...