11767|19

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

万利的STM32学习板上的LCD驱动原理及编程实现 [复制链接]

   LCD的驱动不像LED那样,加上电压(LED实际上是电流驱动)就可以长期显示的。
LCD驱动必须使用交流电压驱动才能保持稳定的显示,如果在LCD上加上稳定的直流电压,
不但不能正常显示,时间久了还会损坏LCD。一段LCD由背电极和段电极组成,需要显示时,
在背电极和段电极之间加上合适的交流电压(通常使用方波)。为了调节对比度,可以
调节方波中每半个周期中显示的时间(即占空比)来实现。

    通常,为了节约驱动口,将多个背电极连在一起,形成公共背电极端:COM。
另外,再将属于不同COM的段电极连接在一起,形成公共段电极端:SEG。当在某个COM和
某个SEG之间加了足够的交流电压之后,就会将对应的段点亮(实际上是变黑)。

    像万利的板子上使用的这种LCD,有4个COM,还有16个SEG。要想某一SEG显示时,
需要在对应的SEG和COM之间加上足够的交流电压。在万利的板子上,COM驱动使用了两个
电阻分压,输出电压为1/2Vcc,当不想让某位显示时,就将它的电压设置为1/2Vcc(通过
设置IO口为高阻态来完成),这样加在对应的SEG和COM之间的电压只有1/2Vcc,不足以
点亮对应的SEG。需要显示的,就将COM电压设置为0或者1,这样SEG电压跟COM电压相反的
段就被点亮了(变黑),因为它们之间的电压为Vcc。通过定期扫描每个COM,即可稳定的
在LCD上显示需要的图形了。需要显示字符或者数字时,自己先将对应的图案设计好,
在显示时,发送到相应的SEG和COM上即可。但是如果使用100%的时间都驱动的话,会造成
对比度太高,甚至出现不该显示的地方也显示了。因此在显示一段时间后,就将COM和SEG都
设置为低,以关闭它的显示,降低对比度。通过调节关闭时间的长短(PWM),可以调节
对比度。在下面的测试程序中,为了简化程序,使用了50%固定的占空比。

    为了方便描述,我们把COM为低电平时点亮叫做正亮,COM为高电平时点亮叫做负亮。
扫描每个COM分成4个阶段:正亮,关闭,负亮,关闭。因此对于本板子上的LCD驱动,
总共有16个状态,每个COM都有上面所说的4个状态。我们每隔2ms就切换一次状态,这样
整个扫描周期就是2*16=32ms,基本上感觉不到闪烁。

    但是需要注意的是,这个LCD中的每个COM并不是刚好对应着显示图案中的一个字符的位置。
每个COM都对应着每个显示字符中的相同4段!换句话说,要显示第一个字符位置的字符,每个
COM都要被用到。因此,要改变某个字符位置的显示,就需要改变每次COM输出时对应的SEG中
的4段。为此,建立一个缓冲区,当需要修改显示字符时,就修改缓冲区中的内容。这个缓冲区
有4行,每行中有16个SEG,对应着一个COM。需要修改显示时,把每行中对应的4个SEG设置为
需要的值,这样就实现了某个显示位置图案的修改。

    为了显示字符,需要事先把需要显示的字符按照SEG和COM的分布,制作成数据保存起来,
需要显示时,就把它复制到显示缓冲区中对应的位置去。另外,由于输入的参数是字符的ASCII码,
因此还需要将ASCII码转换为对应的字符图案的索引值。使用一个专门的函数来完成这些转换和
填充缓冲区,在需要修改显示数据时,就调用该函数。

    为了方便大家对这个LCD的驱动方式和编程,下面简单的画一下驱动的波形图。



    这里只画出2个SEG波形图,实际有16个SEG,只要你理解了2个SEG的,那么16个的也是一样的意思。
如图所示,所有偶数阶段都是关闭显示阶段,这时COM和SEG都是0,将不会有段被点亮,通过调节关闭
显示阶段所占的时间百分比,即可调节总体显示的对比度。SEG和COM之间电平相差1格的显示不出来或者
浓度不够,而SEG和COM之间电平相差2格的则可以显示出来或者浓度较深。例如第一阶段中的SEG1和COM1
之间相差2格,第三阶段中COM1和SEG1相差2格,因而SEG1和COM1之间的交叉点(即点1)被显示。又如
第九阶段的SEG1和COM3之间相差2格,第十一阶段中的COM3和SEG1之间相差2格,因而SEG1和COM3之间的
交叉点(即点5)被显示出来。其它点以此类推。

    最后,再来看看万利板子上的LCD的COM和SEG之间的关系图,如下图所示。



    图中显示,S0、S1、S2、S3属于第一个字符,在显示第一个字符时,只要在对应的COM选中时,
将需要显示的SEG放在上面即可。其余几个字符类似。例如要显示一个数字3,则应该将A段、B段、C段、D段、G段、K段显示。
某段显示,用1表示,不显示用0表示,得到的各段值如下:
X=0 I="0" A="1" DP="0"
F=0 H="0" J="0" B="1"
E=0 G="1" K="1" C="1"
L=0 M="0" N="0" D="1"
注意是低位在先的,把每行用十六进制来表示(高位在先),就是0x4,0x8,0xE,0x8。它们分别对应着
COM1~COM3选中时S3~S0的输出值。为了方便管理,将这4个十六进制值合并为一个2字节的值0x48E8保存。
其它各字符的构造方式相同。显示时,分别取出各段的值写入到对应的缓冲区去。

扫描LCD的程序流程如下:
①、COM1设置为低电平,其余COM为1/2高电平,设置PE口为需要的电平(16个段码),延时2ms;
②、4个COM、PE口均设置为低电平,关闭显示,延时2ms;
③、COM1设置为高电平,其余COM为1/2高电平,设置PE口为需要的电平(第一步16个段码的取反),延时2ms。
④、4个COM、PE口均设置为低电平,关闭显示,延时2ms;
然后对剩下的3个COM重复前面4个步骤,这样一个完整的扫描就完成了。

具体的实现代码比较长,这里就不再贴出了,在工程包中的LCD.C中可以查看。该测试工程包使用软件延时的
方法来实现LCD的扫描,实际使用时,可以将扫描代码放在定时器中断中处理。该测试程序使用一个时钟功能来
演示LCD的显示,显示为xx分xx秒。从这里下载整个测试的工程包:
http://blog.ednchina.com/computer00/142101/message.aspx
千万要记得顶呀~~~我晕,还来~~~谢谢了。
此帖出自stm32/stm8论坛

最新回复

                                 原理液晶跟LED不一样,怪不得怎么试都不行听君一席话   详情 回复 发表于 2008-8-2 16:41
点赞 关注
 

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

顶呀

                                  
此帖出自stm32/stm8论坛
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

顶你个肺~~~

                                  
此帖出自stm32/stm8论坛
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 

不要晕,我顶就是了。

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 

我顶了!

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

6
 

顶了

哈哈,圈圈好强呀,
我顶就是了
此帖出自stm32/stm8论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

7
 

顶了

哈哈,圈圈好强呀,
我顶就是了
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

8
 

晕了~~~~哈哈,不是在这里顶咯~~~是在我发的那个链接里顶呢~

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

9
 

弱弱问一个:圈圈年芳几何?

                                 好想知道你嫁了没?呵呵
此帖出自stm32/stm8论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

10
 

倒塌……年龄是保密的拉~~~~

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

11
 

总之00肯定还未嫁人~~~

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

12
 

原来圈圈是女的,我还以为是男的

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(初级)

13
 

无聊



这里又不是世纪佳缘。。。

更何况楼主还是男。。。
此帖出自stm32/stm8论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

14
 

zyok明白~~~

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(中级)

15
 

00的代码可移植性太差!

                                 鉴定完毕!
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

16
 

明白还问。。。



。。。
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

17
 

哈哈~~~这个只是例子,为了使程序尽量简单

                                 不然写一堆函数和宏定义,看了头晕。要移植的慢慢移植吧。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

18
 

好崇拜圈圈啊

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

19
 

我顶

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

20
 

哦~~~~~~

原理液晶跟LED不一样,怪不得怎么试都不行
听君一席话
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表