电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
课程
芯视听
DIY视频
厂商活动
正点原子
板卡试用
电子赛事
RM机甲大师赛
电子设计竞赛
智能汽车竞赛
资源库
下载
文章
社区首页
文章
Arduino LCD Keypad Shield 扩展板使用教程
分 享
扫描二维码分享
Arduino LCD Keypad Shield 扩展板使用教程
arduino
新手
LCD扩展板
西栎
关注
发布时间: 2019-11-14
丨
阅读: 7558
## 简介 LCD Keypad Shield是Arduino的一块液晶扩展板,这块扩展板仅需直接插在Arduino开发板上即可通过程序驱动,让Arduino连接屏幕变得十分简单和方便。  如上图所示,这块扩展板上带有一个LCD1602液晶屏,5个按键,1个Arduino复位按键,和一个用来调节液晶对比度的电位器,并且引出了Arduino开发板的所有引脚以及其他接口。这篇文章主要介绍一下如何使用这块扩展板的显示和按键功能。 ## LCD驱动 驱动LCD1602显示屏之前首先来简单说明一下LCD显示屏各个引脚的功能。LCD1602上方共有16个引脚,每个引脚名称及功能如下: VSS:接地 VDD:接电源 V0:对比度调整端,使用时可接电位器接地进行对比度调节 RS:寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器 RW:读写信号线,高电平读,低电平写 E:使能端,下降沿写操作,高电平读操作 DB0:数据总线最低位 DB1:数据总线1位 DB2:数据总线2位 DB3:数据总线3位 DB4:数据总线4位 DB5:数据总线5位 DB6:数据总线6位 DB7:数据总线7位 A:背光电源正极 K:背光电源负极 LCD1602显示屏的驱动我们可以使用LiquidCrystal库。LiquidCrystal库是Arduino中的一个LCD驱动库,我们可以使用库中的函数来对LCD显示屏进行操作。要驱动LCD显示屏我们就要知道扩展板上的LCD显示屏与Arduino是怎么连接的。在文章开头的图片中我们可以看到左侧对LCD显示屏引脚的连接有标注,LCD显示屏使能脚E接到了Arduino的数字9脚,RS脚接数字8脚,RW脚接地,信号脚DB4~DB7分别接数字脚4~7。LCD1602可以通过程序选择4线操作还是8线操作,我们的这块扩展板选择的是4线操作,所以数据脚只需要连接DB4到DB7即可。 在了解了LCD显示屏引脚功能以及与Arduino的连接后我们就可以通过LiquidCrystal库中的函数对LCD显示屏进行操作了,首先我们来看用到的第一个函数LiquidCrystal(),这个函数用于设置Arduino与LCD显示屏的连接信息,我们在使用这个函数的时候需要依次填入相应的参数,这块扩展板上显示屏与Arduino的数据连接是四线控制,所以我们使用LiquidCrystal()函数的时候需要依次填入LCD的RS、RW、E、D4、D5、D6、D7对应的Arduino引脚,由于RW是接地的,所以我们在填的时候可以省略。我们打开LiquidCrystal库的cpp文件可以看到LiquidCrystal()函数做的工作: LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) { init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0); } 我们可以看到函数中调用了init()这个函数,这个函数就是用来对Arduino引脚来进行初始化的,具体内容为: void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) { _rs_pin = rs; _rw_pin = rw; _enable_pin = enable; _data_pins[0] = d0; _data_pins[1] = d1; _data_pins[2] = d2; _data_pins[3] = d3; _data_pins[4] = d4; _data_pins[5] = d5; _data_pins[6] = d6; _data_pins[7] = d7; if (fourbitmode) _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; else _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS; begin(16, 1); } 这个函数非常简单,就是将我们对我们填写的引脚进行一个设置同时设置显示屏为4线还是8线控制。  在设置完引脚后我们可以进行第二步操作,第二步我们要用到的是begin()函数,这个函数的主要作用就是来设置LCD显示屏的显示尺寸,扩展板上用到的是LCD1602显示屏,显示尺寸为16列2行,在填写参数时我们要先填写列数再填写行数,所以我们的函数语句应为:LCD.begin(16,2); 我们同样可以在LiquidCrystal库的cpp文件中找到begin()函数的定义,因为篇幅原因就这里就不把代码贴出来了,具体的功能就是根据输入的行和列对LCD显示屏发送指令,设置显示的尺寸,我们连接的LCD四位数据线除了可以发送要显示的信息以外,还可以对LCD显示屏发送指令信息,显示屏会根据发送的指令进行相应的设置。 LCD显示屏内部控制器的指令如下表所示:  这11条指令就是LCD1602的所有指令了。这些指令我们在使用的时候不需要再编写程序发送,在LiquidCrystal库中已经封装好了各种函数,我们直接调用就可以了。 例如我们在前面设置好了引脚和显示屏尺寸后可以调用clear()函数来清屏,clear()同样是LiquidCrystal()库中的一个函数,我们可以找到它的定义: void LiquidCrystal::clear() { command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero delayMicroseconds(2000); // this command takes a long time! } 我们可以看到clear()函数里调用了command()函数和一个延时函数,command()函数命是命令,很显然这个函数是给LCD显示屏发送命令的,接着我们找到它的定义: inline void LiquidCrystal::command(uint8_t value) { send(value, LOW); } 在里面我们又看到了一个函数send(),这个函数有两个参数,value很明显指的是命令,LOW应该是引脚的配置,我们找到send()函数定义: void LiquidCrystal::send(uint8_t value, uint8_t mode) { digitalWrite(_rs_pin, mode); // if there is a RW pin indicated, set it low to Write if (_rw_pin != 255) { digitalWrite(_rw_pin, LOW); } if (_displayfunction & LCD_8BITMODE) { write8bits(value); } else { write4bits(value>>4); write4bits(value); } } 通过分析上面这段程序我们就可以了解Arduino给LCD显示屏发送指令的步骤了,首先通过digitalWrite()函数让RS脚输出低电平,RS为低电平时操作的是指令寄存器,我们就可以开始写指令了,然后send()函数判断连接方式是4线还是8线,对于不同模式分别发送不同bit的指令,这就是对LCD写指令的操作,像clear()函数一样,LiquidCrystal库中也将其他指令封装成了函数,我们可以直接调用,这里我列出部分函数和各自的功能: home() 将光标置于左上角,不会清屏 setCursor() 将光标置于指定位置 write() 在光标处显示一个字符 print() 显示字符串 cursor() 显示光标 blink() 光标闪烁 这只是一部分常用的,其余的函数也可以去库中查找。 在清屏操作后我们设置一下光标的位置也是要显示的字符的位置,我们通过调用setCursor()函数实现,这个函数可以将光标置于指定位置,函数内部同clear()函数,这里就不再介绍了。最后我们就要发送要显示的字符了,显示字符我们用到的是write()函数,显示字符串可以使用print()函数,这里讲一下write()函数,定义如下: inline size_t LiquidCrystal::write(uint8_t value) { send(value, HIGH); return 1; // assume sucess } 我们看到write()函数与command()函数很相似,只是对send()函数中引脚设置不同,前面讲过send()函数中的HIGH、LOW是设置RS的,RS为低是写指令,为高就是写数据的,所以write()里面设置RS为高,然后send()函数会自动转换字符为4bit还是8bit然后发送出去。这样就完成了一个字符的写入,有了单字符显示的函数我们很容易就能写字符串显示的函数了,这里就不再讲了,只需知道原理,用的时候直接调用print()函数就可以了。 现在我们就可以写一个简单的小程序在LCD上显示字符了,例如:  通过这段程序我们就可以在LCD第一行显示一串字符,效果如下  LCD的对比度我们可以通过左上角的电位器进行调整。现在我们已经实现了这块扩展板上LCD的驱动,接下来我们看一下扩展板上的5个按键要怎么驱动。 ## 按键驱动 这块扩展板上按键的连接电路图如下:  这五个按键连接在了Arduino的A0口上,A0是Arduino的一个模拟口,当按下不同的按键时A0口的电压是不同的,我们只要读取A0口的值再通过对比就可以分辨出我们按下的是哪一个按键,这种方法非常节省IO口,而且对按键的判断也是很准确的。 我们先写一段程序来看一下当按下不同按键时A0返回的值是多少。  上述程序可以在我们按下按键后将A0口的数值通过串口发送到电脑,我们可以打开Arduino的串口监视器  当我们按下不同按键的时候,A0口可以读取到不同的值,并且不同按键是很好区分的,不过我们可以看到,对于同一按键,我们每次按下时A0口的值其实是在一个小范围内变化的,所以我们在写程序区分的时候就要选择好用来比较的值。 通过上述的原理我们就可以根据以下的程序来对按键进行判断了。    通过这段程序我们就可以判断按下的按键了,实际效果如下图   以上就是LCD Keypad Shield的使用教程了,感谢各位观看本教程。
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
西栎
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
【花雕体验】15 尝试搭建Beetle ESP32 C3之Arduino开发环境之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交