前言
我们在开发指南(二)里简要介绍了按键中断的使用方式,鉴于示例程序的各项测试内容都用到了LCD显示,故而本章要首先为大家讲解一下LCD显示的基本使用办法,需参考应用手册第25章节。
LCD结构
在对LCD显示功能作出讲解之前,要先去了解一下LCD整体结构图,其呈现于如下图1所示的内容之中 。
图1. LCD整体结构图
从图中我们能看到,LCD整体结构被分为Charge pump电路跟LCD Driver电路,Charge pump电路所要负责的是,给LCD驱动电路提供VLCD电压,LCD Driver电路所要负责的是,依据设置来驱动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模块的使用而言是最为重要的一点,至于其他诸如显示字符、闪烁之类等内容,皆仅仅是在该基础之上所做的应用 。












