4.LCD1602的使用
今天晚上去焊接好了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套件配套送的。
谢谢支持。
好东西,是肯定要支持的