单片机学习(五)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 ...
随机推荐
- 基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则
目录 系列文章 领域服务 应用服务 学习帮助 系列文章 基于ABP落地领域驱动设计-00.目录和前言 基于ABP落地领域驱动设计-01.全景图 基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践 ...
- 关于WLS2中Ubuntu启用SSH远程登录功能,基于Xshell登录,支持Root
背景介绍 虽然WSL2提供了非常便利的访问Ubuntu目录的形式,但是仍然我们需要通过一个工具,比如XSHELL来实现对Ubuntu的SSH登录. 获取并安装Xshell 7 目前Xshell已经更新 ...
- 36、mysql数据库(dml)
36.1.表记录的增删改: 1.增加表记录: insert[into]tab_name (field1,filed2,.......) values (value1,value2,.......); ...
- TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗?
大家好,我是小林. TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗? 这是个好问题,应该有不少人都会搞混,因为这两个东西看上去太像了,很容易误以为是同一个东西. ...
- Redis 底层数据结构之String
文章参考:<Redis设计与实现>黄建宏 Redis 的 string 类型底层使用的是 SDS(动态字符串) 实现的, 具体数据结构如下: struct sdshdr { int len ...
- AcWing 1127. 香甜的黄油
农夫John发现了做出全威斯康辛州最甜的黄油的方法:糖. 把糖放在一片牧场上,他知道 N 只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油. 当然,他将付出额外的费用在奶牛上. 农夫John很狡猾, ...
- Docker安装MySQL8.0
环境 CentOS 7.5 Docker 1.13.1 MySQL 8.0.16 安装 拉取镜像 默认拉取最新版本的镜像 $ docker pull mysql 如果要指定版本,使用下面的命令 $ d ...
- NoSql非关系型数据库之MongoDB应用(三):MongoDB在项目中的初步应用
业精于勤,荒于嬉:行成于思,毁于随. 我们可以结合相关的IDE做一个简单的增删改查了,实现MongoDB在项目中的初步应用. 前提是安装了MongoDB服务和MongoDB可视化工具,没有安装的可以点 ...
- pdfkit html转pdf
pdfkit的通用option选项 参考:https://cloud.tencent.com/developer/ask/202116https://www.cnblogs.com/taceywong ...
- php-高级计算器
HTML代码: <!doctype html><html lang="en"><head> <meta charset="UTF ...