微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 4.LCD1602的使用

4.LCD1602的使用

时间:10-02 整理:3721RD 点击:

今天晚上去焊接好了LCD1602的液晶屏排针~



虽然有点歪,但这不重要~

要使用LCD1602,我们先来看看这个屏幕的原理图~


这里的R41和R42都是0欧电阻,实际上是用于选择逻辑电平。


看实际图我们可以知道,这里的R42处断开,则实际上使用了5V输入。

如果下次用到3V3输入的LCD屏幕,可以断开R41,焊上R42。

查看我们的芯片手册可以发现:


芯片的工作电压是5V,而且可以显示32个字符~

所以这里也就是为什么设置5V电源的原因。

同样手册上也说明了各个端口的作用。


显然,这个LCD是使用类似8086的并口时序写的,所以我们只需要先使能,然后通过设置端口4、5来确定当前的读写模式,还有读写的内容。

而具体的内容则由D0到D7来将数据一个字节一个字节的写入。

我们先看看手册说的操作时序~


读状态:

在使能的时候,设置读命令(状态)。

而读到的状态中,最高位是用来表示忙信号的,即当最高位为1的时候,代表LCD正在处理我们上一步操作。


所以我们需要进行忙检测。

写指令:

检测完之后我们可以进行写指令了,具体指令如下:



观察一下我们可以发现,对于这些我们可以根据自己喜好设计的命令,LCD是怎么识别的呢?

我们可以看一下他们的最高位都为1,所以我猜测他们是根据最高位的位置来区别设置什么的……

读数据和写数据则简单多了,使能之后读数据,而写数据则是先把数据准备好,通过使能的脉冲触发去写入。

既然LCD1602的操作时序我们都懂了,那么我们就来看看Demo吧~


先定义R/W、D/C、EN。


我们来看看LCD写命令的具体实现:

先读取GPIOB的数据,然后清除5~9位,把byte的低五位的数据写入这里GPIOB的5~9位。

再读取GPIOC的数据,然后清除0~2位,把byte的低五位的数据写入这里GPIOB的0~2位。

这里官方的注释有错哈!是第5~9位!

结合原理图:



我们可以发现,这里的GPIO操作实际上是在改变这些引脚的电平,即配置LCD的D0到D7口上的数据。


所谓的写命令就是先配置写命令模式,通过使能端的上升沿把数据写进去。


这个是带等待的写命令,因为对于LCD来说,一般的时间都不超过1ms。


所以我们这里给10ms的延时,基本上可以保证不忙了。

虽然这种方法不是很可靠,而且比较费时,但是可以偷懒呀。


写数据和写命令一样。


我们来看看LCD的初始化,其实就是配置所有接口为输出模式(反正我们用的时候也不需要读数据),然后进行工作模式的配置。


如芯片手册上描述的写入数据。


而清行则是将当行写空格,清屏就调用0x01命令就可以了。


最重要的显示和函数则是将%s%d等变量先格式化成标准字符串,然后设置光标位置。


因为0x00到0x0F是第一行,0x40到0x4F是第二行,所以通过写数据0xC0就可以把第二行的地址写入光标。


再看看我们主函数的调用~


设置光标,然后在指定位置输出相应的内容即可。




小编这个液晶屏是买的嘛?

学习一下大作,好东西

这个LCD1602是OneNET套件配套送的。

谢谢支持。

好东西,是肯定要支持的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top