好久都没有更新微信公众号了,今日闲暇,搞了一个1602的时钟,特此分享给大家,共同学习。废话就不多说了
咱们先来看看LCD1602的引脚
1602的引脚十分简单,三根信号线,8跟数据线,两根背光电源线,一个背光调节线,在上表中也解释的很详细,对于1602的引脚就介绍到这里
下面主要来看看它的时序图,分为“写时序”和“读时序”
写时序
由时序图可知,写指令时,EN引脚需要一个下降沿,RS = 0;RW = 0;
故我们的写指令函数可以这样写:
读时序
同理:根据时序图我们可以写出写数据的函数
读写操作都配置好以后我们来看一下如何初始化LCD1602
在初始化之前呢,我们还是要先来看看1602的指令集,看懂了指令集才知道如何去配置
先举个“栗”子:
如果我们想要对1602进行清屏操作的话,根据指令集我们改发送什么指令呢
在1602的数据手册上就找到了他的指令集,如下图,清屏指令
知道这个以后有啥用呢,怎么实现清屏呢
这个就需要用我们刚写的写指令函数,for exampl:
LCD_1602_WriteCmd(0x01);//清屏
写入0x01就可以啦,
同样我们还可以配置1602显示方式,移屏、光标闪烁等操作,根据指令集都可以实现
只要按照提示就可以配置1602
下面分享一下lcd1602的初始化函数(可以根据个人喜好配置)我这里配置成不移屏显示
完成后我们就可以向1602写数据啦
LCD_1602_WriteCmd(0x80);//光标定位到第一行第0列,故0x81就是第一列
LCD_1602_WriteCmd(0xC0);//光标定位到第二行第0列,故0xC1就是第一列
比如我们想往1602的第一行最后一列写入一个字符“!”
我们的程序就可以这么写
LCD_1602_WriteCmd(0x8F);//光标定位到第一行最后一列
LCD_1602_WriteDat('!'); //显示‘!’
如果想显示一个数的话,需要来点骚操作
LCD_1602_WriteCmd(0x80);//光标定位到第一行第0列
LCD_1602_WriteDat(0x30 + dat); //显示dat数据
因为我们要显示的数是ASCII码,当要显示显示数字时,必须要加上0x30,不过还可以这样写:LCD_1602_WriteDat(‘0’+dat);这两种方式是一样的
写字符和写数据都说完啦,大家感兴趣可以试一下如何写一个字符串,自己定义一个子函数,往1602里写入一个字符串,这就可以用指针,有兴趣的可以研究一下
下一节分享基于Stm32的上位机控制步进电机的程序