单片机学习(五)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 ...
随机推荐
- 使用阿里云服务器部署jupyter notebook远程访问
安装annaconda 与jupyter notebook annaconda在已经自带了jupyter notebook.jupyter lab.ipython 等一系列工具,不需要再单独安装这些工 ...
- SystemVerilog 中的相等运算符:== or === ?
1. 四值逻辑的逻辑运算 在对比SystemVerilog中的相等运算符之前,先来看一下三种最基本的逻辑运算符,下文中以·表示与运算,以+表示或运算,以'表示非运算.我们都知道在逻辑代数中,只有0和1 ...
- 关于Excel中表格转Markdown格式的技巧
背景介绍 Excel文件转Markdown格式的Table是经常会遇到的场景. Visual Studio Code插件 - Excel to Markdown table Excel to Mark ...
- 视频云峰会|“科技 X 艺术” 的颗粒度体验是什么?
科技日新月异,交互艺术新门类也随之蓬勃,当代艺术创作者不断凭借其想象力和跨学科能力,致力科技与艺术的融合创作. 7 月 10 日,在北京,2021 阿里云视频云全景创新峰会暨全球视频云创新挑战赛决赛颁 ...
- python导入模块--案例
1 导入模块 1.1 问题 本案例要求先编写一个star模块,主要要求如下: 建立工作目录 ~/bin/ 创建模块文件 ~/bin/star.py 模块中创建pstar函数,实现打印50个星号的功能 ...
- CentOS-配置jar包自启动(SpringBoot)
在pom.xml文件<plugin>中添加配置后,再打包(开发人员) <plugin> <groupId>org.springframework.boot& ...
- SpringBoot | 1.2 全注解下的Spring IoC
前言 在学习SpringBoot之前,有几个Spring的重要的基础概念需要提一下,SpringBoot对这些基础概念做进一步的封装,完成自动配置.首先就是Spring的控制反转IOC,由于Sprin ...
- Reactive Spring实战 -- 响应式MySql交互
本文与大家探讨Spring中如何实现MySql响应式交互. Spring Data R2DBC项目是Spring提供的数据库响应式编程框架. R2DBC是Reactive Relational Dat ...
- vim下出现^M怎么解决
将window下的文本文件上传到linux上,在读取数据文件时,在每一行数据后会出现^M字符. 为什么会出现这种情况呢: 因为windows.linux.os系统的换行符标准不同: 先了解下概念, ...
- 160crackme002
一.查壳 结果:vb写的,并且无壳 二.运行程序 发现了这个程度调用了vb调用窗口的api.这时有两种方式: 1.再重新调试,运行到有窗口的时候,F12暂停,按ctrl+K,查看dll调用,再数据窗口 ...