一、前言
在开发指南(二)中,我们简单介绍了按键中断的使用方法,由于示例程序的各个测试内容都有使用到LCD显示,所以本章先给大家讲解一下LCD显示的基本使用方法,参考应用手册第25章节。
二、LCD结构:
在讲解LCD显示功能之前先了解一下LCD整体结构图,如下图1:
图1. LCD整体结构图
从图中我们看到LCD整体结构分为Charge pump电路和LCD Driver电路,前者负责提供VLCD电压给LCD驱动电路,后者负责根据设置驱动LCD进行显示,其中控制VLCD电压即可控制LCD显示的灰度,写入LCDDATA即可控制显示内容,注意VLCD需外接1uF电容到VDD/GND,否则会影响显示效果。
三、LCD显示:
接下来我们按照main函数的执行顺序简单介绍一下如何控制LCD驱动液晶屏进行正常显示。上电后先对LCD模块进行初始化(见图2),第一步还是要先开启外设时钟源,然后根据使用的液晶屏规格选择COM数量和SEG数量,示例程序使用的液晶屏为4COM,显示内容‘123456’只需要12个SEG即可满足,因此可以选择任意的12个SEG引脚作为液晶脚,示例程序以SEG0-SEG11作为液晶脚,其他SEG引脚仍做数字功能使用,选择VLCD电压为3.3V,其余设置保持默认值,最后打开Charge pump模块和LCD驱动电路。
图2. LCD初始化函数
LCD初始化完成后,接下来要在液晶屏上显示‘123456’。首先液晶屏的每个引脚都有对应控制的段码(参考图3),其中PIN1-PIN12引脚可以对应连接到芯片的任意12个SEG引脚,为了便于代码编写,我们选择将PIN1-PIN12连接至芯片的SEG0-SEG11引脚,PIN13-PIN16连接至芯片的COM0-COM3引脚。
图3. 液晶屏段码
图4. 液晶屏段码对应
参考图4的示例和图3的段码可以发现每个‘8’形状的全部段码都被分配在两个相邻的PIN脚,也就是说控制SEG0-1、SEG2-3、SEG4-5、SEG6-7、SEG8-9、SEG10-11就可以完全独立的控制6个‘8’的显示。
我们再看一下LCD_DR2寄存器(见图5,与其他LCD_DRx寄存器仅控制的SEG不同),可以分为4个部分S11C7-0,S10C7-0,S09C7-0,S08C7-0,其中S是SEG的缩写,C是COM的缩写,即S11C3代表可以控制SEG11&COM3对应的液晶段,也就意味着一个LCD_DRx寄存器就能控制4个SEG口进行显示,在8COM设置下可驱动最多32段液晶段显示4个‘8’,由于我们使用的液晶仅需要4COM,因此仅能驱动16段液晶段显示2个‘8’。
图5. LCD_DR2寄存器
由此可以根据需求控制液晶段组合显示成阿拉伯数字、大小写英文字母或其他人为定义的显示内容,例如从图3中可以看到SEG11控制6F、6G、6E、P6,SEG10控制6A、6B、6C、6D,SEG9控制5F、5G、5E、P5,SEG8控制5A、5B、5C、5D,共16段,按顺序在LCD_DR2寄存器写入0x0E0B0C0B,就可以控制LCD显示数字‘5’和‘6’(如图6),最后我们将常用的显示内容进行组合定义,便于随时取用(如图7,不同液晶屏的组合顺序不同,使用时需要注意)。
图6. LCD显示‘56’
图7. LCD显示字符组合
当这些准备工作完成之后,驱动LCD显示我们想要的内容就变得非常简单了,首先确定我们要显示在哪一位上,要显示的是什么字符,再调用函数LCD_DisplayData,其中Num表示显示在哪一位,Data表示显示的是什么字符,例如在第1位显示数字‘0’,则Num=1,Data=0x00,通过比较即可将宏定义结果‘Disp_Num0’取出(如图8的过程),再进入显示程序LCD_MyDisplay即可将数字‘0’显示在第1位上。
图8. 自编LCD函数
最后我们按顺序显示‘123456’,实际运行后的结果如图9。
图9.LCD显示验证结果
四、开发问题简析:
开发阶段使用LCD模块遇到最多的问题是显示乱码、亮度不够、屏幕闪烁,要重点关注SEG口选择是否正确、写入LCD_DR寄存器的顺序是否正确、宏定义是否正确以及VLCD电容是否外接,根据需要选择合适的负载驱动能力。
五、总结:
LCD模块的使用最重要的还是要理解如何准确点亮液晶屏对应的液晶段,其他的如显示字符、闪烁等等内容都只是在基础上进行应用。
审核编辑:汤梓红
-
mcu
+关注
关注
146文章
17123浏览量
350963 -
lcd
+关注
关注
34文章
4424浏览量
167394 -
adc
+关注
关注
98文章
6495浏览量
544444 -
soc
+关注
关注
38文章
4161浏览量
218152
发布评论请先 登录
相关推荐
评论