一种LCD1602液晶屏的串口控制程序封装方法

文档序号:33703781发布日期:2023-03-31 20:44阅读:64来源:国知局
一种LCD1602液晶屏的串口控制程序封装方法
一种lcd1602液晶屏的串口控制程序封装方法
技术领域
1.本发明涉及控制程序的封装技术领域,具体为一种lcd1602液晶屏的串口控制程序封装方法。


背景技术:

2.目前lcd1602液晶屏在嵌入式系统领域使用较为广泛,但一般是通过并行方式来传输数据的,非常浪费引脚资源,传输距离也不远。虽然lcd1602也具有4位数据模式,但其仍然属于并行方式,同时还需要另外3条控制线的参与,并不是真正的串行方式,不能调节成本,在软件控制上,lcd1602基于日立公司的hd44780控制芯片,共有11条操作命令,共有两类,一类是命令数据(如清屏、光标定位等),另一类是显示数据(要显示的内容),每类命令还需要配合控制引脚来进行程序设计,不仅条理不清晰,还容易引起程序上的混乱,导致开发上的困难。
3.传统程序设计控制lcd1602显示时,需要考虑的内容较多,不但使用起来不方便,后期修改起来也不方便,无形中带来了开发和维护成本的增加。


技术实现要素:

4.针对现有技术的不足,本发明提供了一种lcd1602液晶屏的串口控制程序封装方法,解决了使用起来不方便,后期修改起来也不方便,无形中带来了开发和维护成本的增加的问题。
5.为实现以上目的,本发明通过以下技术方案予以实现:一种lcd1602液晶屏的串口控制程序封装方法,包括以下步骤;
6.步骤一、首先定义通信帧,其帧格式为:第1个字节表示设备地址(即第几个设备),第2个字节表示本帧数据的长度,第3个字节为操作码,第4个字节以后为数据,具体有多少字节随操作码的不同而不同,最后2个字节为本通信帧的16位校验码;
7.步骤二、接下来定义10条命令及其配套的帧格式;
8.步骤三、下面是以上10条命令对应的回应帧格式。
9.优选的,所述步骤二还包括以下步骤,第一、设备复位,操作码:0x01,参数:无,帧长度:5字节,该命令用于复位lcd1602;第二、光标复位,操作码:0x02,参数:无,帧长度:5字节,该命令用于光标地址复位,不改变显示内容,第三、清屏。操作码:0x03,参数:无,帧长度:5字节。该命令用于清除显示内容,并且光标地址复位,第四、初始化,操作码:0x04,参数:1字节,帧长度:6字节,该命令用于lcd1602的初始化操作,其中“1字节参数”按位来表征需要初始化的具体功能,只用了其中的低6位,具体如下:
10.第5位:值为0时表示单行显示,为1时表示双行显示。
11.第4位:值为0时表示地址指针ac递减,为1时表示递增。
12.第3位:值为0时表示光标移动,为1时表示图像移动。
13.第2位:值为0时表示关闭显示,为1时表示开启显示。
14.第1位:值为0时表示不显示光标,为1时表示显示光标。
15.第0位:值为0时表示光标不闪烁,为1时表示闪烁。
16.优选的,所述步骤二还包括以下步骤,第五、特定位置显示一个字符,操作码:0x05,参数:3字节,帧长度:8字节,该命令用于在某行某列上显示一个ascii码字符,其中的“3字节参数”中,第1个字节表示第几行,取值为1到2;第2个字节表示第几列,取值从1到16;第3个字节为要显示字符的ascii码,第六、特定位置显示一串字符,操作码:0x06,参数:2+n字节,帧长度:7+n字节,该命令用于在某行某列处开始,显示一串字符,其中“2+n字节参数”中,第1个字节表示第几行,取值为1到2;第2个字节表示第几列,取值从1到16;其后的n个字节为要显示字符串的ascii码,第七、光标移动,操作码:0x07,参数:1字节,帧长度:6字节,该命令用于移动光标,其中“1字节参数”用来表示向左移还是向右移,值为0x4c(l的ascii码)时向左移,为0x52(r的ascii码)时向右移,第八、图像移动,操作码:0x08,参数:1字节,帧长度:6字节,该命令用于移动图像,其中“1字节参数”用来表示向左移还是向右移,值为0x4c(l的ascii码)时向左移,为0x52(r的ascii码)时向右移,第九、获取特定位置上的数据。操作码:0x09,参数:2字节,帧长度:7字节。该命令用于获取某行某列上的显示数据,其中“2字节参数”中,第1个字节表示第几行,取值为1到2;第2个字节表示第几列,取值从1到16,第十、获取当前光标所在的地址,操作码:0x0a,参数:无,帧长度:5字节,该命令用于获取当前光标所在的位置,即ac值。
17.优选的,所述步骤三还包括以下步骤,1、设备复位回应。【设备地址】【0x06】【0x01】【回应值】【校验码1】【校验码2】,其中的“回应值”为0xaa表示成功,为0x55表示失败,2、光标复位回应。【设备地址】【0x06】【0x02】【回应值】【校验码1】【校验码2】,其中的“回应值”为0xaa表示成功,为0x55表示失败,3、清屏回应,【设备地址】【0x06】【0x03】【回应值】【校验码1】【校验码2】,其中的“回应值”为0xaa表示成功,为0x55表示失败,4、初始化回应。【设备地址】【0x06】【0x04】【回应值】【校验码1】【校验码2】,其中的“回应值”为初始化参数表示成功,为0x55表示失败,5、特定位置显示一个字符回应,【设备地址】【0x06】【0x05】【回应值】【校验码1】【校验码2】,其中的“回应值”为显示字符的ascii码表示成功,为0x55表示失,6、特定位置显示一串字符回应,【设备地址】【0x05+n】【0x06】【回应值】【校验码1】【校验码2】,其中的“回应值”为n个字节的ascii码,即显示的字符串表示成功,为0x55表示失败,7、光标移动回应,【设备地址】【0x06】【0x07】【回应值】【校验码1】【校验码2】,其中的“回应值”为光标移动的参数(即移动方向)表示成功,为0x55表示失败,8、图像移动回应,【设备地址】【0x06】【0x08】【回应值】【校验码1】【校验码2】,其中的“回应值”为图像移动的参数(即移动方向)表示成功,为0x55表示失败,9、获取特定位置上数据的回应,【设备地址】【0x06】【0x09】【回应值】【校验码1】【校验码2】,其中的“回应值”为获取到的数据,10、获取当前光标所在地址的回应,【设备地址】【0x06】【0x0a】【回应值】【校验码1】【校验码2】,其中的“回应值”为获取到的地址。
18.本发明提供了一种lcd1602液晶屏的串口控制程序封装方法。具备以下
19.有益效果:
20.本发明通过降低lcd1602设备的开发要求和开发成本,对于开发者而言,只需要按需求使用封装好的10条数据帧,就可以实现原来复杂繁琐的开发工作,达到相同的效果,且后续程序的修改维护工作也比较简单,提高了开发者体验,对于设备而言,使用串口有效降
低了连线成本,让设备的使用更加便捷。
附图说明
21.图1为本发明的硬件框图;
22.图2为本发明的数据帧处理的总过程示意图;
23.图3为本发明的硬件复位、光标复位、清屏等模块的处理过程示意图;
24.图4为本发明的初始化模块处理过程示意图;
25.图5为本发明的光标或图像移动处理过程示意图;
26.图6为本发明的特定位置显示一个字符模块及特定位置显示一串字符模块的处理过程示意图;
27.图7为本发明的获取特定位置数据模块及获取当前光标所在地址模块的处理过程示意图;
28.图8为本发明的液晶屏lcd1602初始化过程示意图。
具体实施方式
29.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
30.实施例:
31.如图1所示,是本发明方法所基于的硬件结构,图中的mcu即为实现本方法的主体,通过它进行串并转换,并实现程序封装和解析。
32.如图2所示,是本发明的主体程序结构,把对lcd1602的所有底层操作封装为10个模块程序,并通过各自模块程序实现对lcd1602的操作。先通过串口接收来自主控设备的数据帧,根据数据帧的定义,第1个字节为lcd1602的地址(即第几个设备),把它赋值给变量dev_num;第2个字节为本帧数据的长度,给串口要接收多少字节数据一个参考;第3个字节为操作码,其值从0x01~0x0a,分别定义为设备复位、光标复位、清屏、初始化、特定位置显示一个字符、特定位置显示一串字符、光标移动、图像移动、获取特定位置数据和获取当前光标所在地址等10条命令,先把收到的操作码赋值给变量cmd,然后再根据具体的命令去执行相应的模块程序。
33.如图3所示,是硬件、光标复位及清屏模块的程序流程。当收到的操作码是0x01时,向lcd1602写入命令0x02和0x01,以复位液晶屏,然后封装回发的数据帧,表示成功的数据帧为:第1字节为变量dev_num的值,第2字节为0x06,第3字节为变量cmd的值,第4字节为0xaa,第5~6字节为前面4个字节的16位校验码。表示失败的数据帧为:第1字节为变量dev_num的值,第2字节为0x06,第3字节为变量cmd的值,第4字节为0x55,第5~6字节为前面4个字节的16位校验码。封装完成后即刻通过串口把该数据帧回发给主控设备。当收到的操作码是0x02时,向lcd1602写入命令0x02,以复位光标,然后封装回发的数据帧,数据帧结构与硬件复位的一致,完成后即刻通过串口把该数据帧回发给主控设备。当收到的操作码是0x03时,向lcd1602写入命令0x01,以对lcd1602进行清屏,然后封装回发的数据帧,数据帧
内容结构与硬件复位的一致,完成后即刻通过串口把该数据帧回发给主控设备。
34.如图4所示,是初始化模块的程序流程。当收到的操作码是0x04时,则第4字节表示初始化的参数,先把它赋值给变量parm,然后再根据参数的具体内容向lcd1602写入初始化命令,以初始化液晶屏。接着封装回发的数据帧,表示成功的数据帧为:第1字节为变量dev_num的值,第2字节为0x06,第3字节为变量cmd的值,第4字节为变量parm的值,第5~6字节为前面4个字节的16位校验码。表示失败的数据帧为:第1字节为变量dev_num的值,第2字节为0x06,第3字节为变量cmd的值,第4字节为0x55,第5~6字节为前面4个字节的16位校验码。封装完成后即刻通过串口把该数据帧回发给主控设备。
35.如图5所示,是光标移动或图像移动模块的程序流程。当收到的操作码是0x07时,则第4字节表示初始化参数,先把它赋值给变量parm,当参数的值为0x4c时,向lcd1602写入命令0x10,使光标左移一位,当参数的值不是0x4c时,向lcd1602写入命令0x14,使光标右移一位。然后封装回发的数据帧,表示成功的数据帧为:第1字节为变量dev_num的值,第2字节为0x06,第3字节为变量cmd的值,第4字节为变量parm的值,第5~6字节为前面4个字节的16位校验码。表示失败的数据帧为:第1字节为变量dev_num的值,第2字节为0x06,第3字节为变量cmd的值,第4字节为0x55,第5~6字节为前面4个字节的16位校验码。封装完成后即刻通过串口把该数据帧回发给主控设备。当收到的操作码是0x08时,则第4字节表示初始化参数,先把它赋值给变量parm,当参数的值为0x4c时,向lcd1602写入命令0x1c,使图像左移一位,当参数的值不是0x4c时,向lcd1602写入命令0x18,使图像右移一位,然后封装回发的数据帧,表示成功的数据帧为:第1字节为变量dev_num的值,第2字节为0x06,第3字节为变量cmd的值,第4字节为变量parm的值,第5~6字节为前面4个字节的16位校验码。表示失败的数据帧为:第1字节为变量dev_num的值,第2字节为0x06,第3字节为变量cmd的值,第4字节为0x55,第5~6字节为前面4个字节的16位校验码。封装完成后即刻通过串口把该数据帧回发给主控设备。
36.如图6所示,是特定位置显示一个字符或特定位置显示一串字符模块的程序流程。当收到的操作码是0x05时,则第4字节表示行,把它赋值给变量row,第5字节表示列,把它赋值给变量col,第6字节表示显示的字符,把它赋值给变量ch。然后再根据行、列及显示内容等信息向lcd1602写入相应的命令,以在该行该列处显示出字符。接着封装回发的数据帧,表示成功的数据帧为:第1字节为变量dev_num的值,第2字节为0x06,第3字节为变量cmd的值,第4字节为变量ch的值,第5~6字节为前面4个字节的16位校验码。表示失败的数据帧为:第1字节为变量dev_num的值,第2字节为0x06,第3字节为变量cmd的值,第4字节为0x55,第5~6字节为前面4个字节的16位校验码。封装完成后即刻通过串口把该数据帧回发给主控设备。当收到的操作码是0x06时,则第4字节表示行,把它赋值给变量row,第5字节表示列,把它赋值给变量col,从第6字节开始表示显示的一串字符,把它赋值给数组变量ch[]。然后再根据行、列及显示内容等信息向lcd1602写入相应的命令,以在该行该列开始处显示出字符串。接着封装回发的数据帧,表示成功的数据帧为:第1字节为变量dev_num的值,第2字节为具体的长度值(5+n),第3字节为变量cmd的值,从第4字节开始为数组变量ch[]的值,最后2字节为前面所有字节的16位校验码。表示失败的数据帧为:第1字节为变量dev_num的值,第2字节为0x06,第3字节为变量cmd的值,第4字节为0x55,第5~6字节为前面4个字节的16位校验码。封装完成后即刻通过串口把该数据帧回发给主控设备。
[0037]
如图7所示,是获取特定位置数据或获取当前光标所在地址模块的程序流程。当收到的操作码是0x09时,则第4字节表示行,把它赋值给变量row,第5字节表示列,把它赋值给变量col,然后向lcd1602写入相应的命令,以获取该行该列处的内容,并把它赋值给变量ch。接着封装回发的数据帧:第1字节为变量dev_num的值,第2字节为0x06,第3字节为变量cmd的值,第4字节为变量ch的值,第5~6字节为前面4个字节的16位校验码。封装完成后即刻通过串口把该数据帧回发给主控设备。当收到的操作码是0x0a时,向lcd1602写入相应的命令,以获取当前光标所在的地址值,并把它赋值给变量ac。接着封装回发的数据帧:第1字节为变量dev_num的值,第2字节为0x06,第3字节为变量cmd的值,第4字节为变量ac的值,第5~6字节为前面4个字节的16位校验码。封装完成后即刻通过串口把该数据帧回发给主控设备。
[0038]
对于上述lcd写入命令及数据的操作,要根据hd44780控制芯片手册来进行,有些需要进行判忙,有些不需要。对于初始化过程,需要经过的步骤如图8所示。上电后先进行大于15毫秒地延时,然后对lcd1602写入0x30(不判忙),再进行大于4.1毫秒地延时,再写入0x30(不判忙),再进行大于100微秒的延时,再写入0x30(不判忙),最后根据初始化参数parm写入相应的值,完成以上步骤后,lcd1602初始化结束,对lcd1602的写入分为写命令和写数据两种方式,写命令时可以判忙或者不判忙,写数据时必须判忙。在进行读写操作时,需要严格遵循hd44780的相关时序要求,对lcd1602的底层操作,可通过c语言封装成12个函数,分别是:忙等待函数、写命令函数、写数据函数、初始化函数、光标定位函数、显示单字符函数、显示字符串函数、读取光标位置函数、读数据函数、光标移动函数、图像移动函数和延时函数,基于上述方法,操作lcd1602的大部分工作已经由mcu完成,现有开发只需要通过串口发送相应的命令数据帧就可完成,不再需要关心lcd1602的操作细节,可以降低开发要求和成本。对于开发者而言,只需要理解10条串口命令数据帧的具体功能就可以实现轻松开发,后续修改维护工作也比较简单。
[0039]
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1