今天我们主要讲一下LCD段码屏IO驱动。最近接到一个任务,是用MSP430直接接到段码屏的IO上,去驱动LCD显示数据,心想,这东西,不是简单的一批,结果没做过的东西,就不要妄下结论,还是栽在上面去了。
最初嘛,我的想法很简单,还不是像数码管一样,SEG和COM一个高,一个低 就完事了,COM高电平无效,低电平有效。而SEG是低电平无效,高电平有效。结果手板同硬件工程师联调的时候,就上当了。
最初没有控制COM,COM脚全部拉低,SEG脚全部拉高,期望它全显。结果想是想的好,这个显示,只是在开机的时候显示一下,后面就消隐了。而供电是没有问题的。遇见这件事呢,开始咨询屏幕的供应商,他说,这个要给脉冲,PWM信号才能保持显示。当时听的似懂非懂的,就切COM去了,用定时器操作COM不断的变换信号。
如下图所示:
这个倒是能正常显示了,但是,问题又来了,除了全显和极少数几个图形能显示之外,其它全显示不出来,悲剧了,开始找原因。
后面经过仔细思考,才发现是这么一回事,段码屏和数码管不一样,数码管是分阴极和阳级的,而段码则不分,只要两边有压差超过它的显示电压它就亮。而我们正常使用时,假设一个COM置低电平,其它COM置高电平,SEG里不可能只保持一个电平,也有低有高,其它COM有电平分压,分来COM是分时复用的,其它COM与SEG也有压差,分时复用这个功能就失效了,所以就会造成干扰。
要如何解决该问题呢,经过资料查找,发现可以这样子做:
实现该功能,有2个电压是不行的,要引入第3个电压,使一个COM工作,其它COM不工作就行了。所以,可以通过分压引入了第三个电压。
这种是MCU没内部上拉的做法,由于MCU只能输入,输出高,输出低3种状态,2个电阻始终是有电流流过的,所以呢,这种对做低功耗不利。真值表如下:
输出->高电平 COM = VCC
输出->低电平 COM = GND
输入 COM = VCC/2
所以,只要想让一个COM生效,则只需要一个状态高或低,其它3个,都是VCC/2,则不论SEG是高电平还是低电平,都只有VCC/2的压差,完美解决该问题。