段码LCD液晶屏驱动方法
来源:深圳市迈晶电子有限公司 添加时间:2018-09-21
生活中小电器见到最多的lcd模组就是段码lcd液晶屏,段码lcd有普通的数码管的特征,又有点阵LCD的特征,固定的图形,优点是省成本而有好看,那么段码LCD液晶屏是怎么驱动的呢?下面我们就来简单了解一下:
首先,不要以为用单片机来驱动就以为段码屏是直流驱动的,其实,段码屏是交流驱动,什么是交流?矩形波,正弦波等。大家可能会经常用驱动芯片来玩,例
如HT1621等,但是有些段式屏IO口比较少,或者说IO口充足的情况下,也可以省去写控制器的驱动了。与单片机接口方便,而后者驱动电流小,功耗低、寿命长、字形美观、显示清晰、视角大、驱动方式灵活、应用广泛【1】。但在控制上LCD较复杂,因为LCD电极之间的相对电压直流平均值必须为0【2】,否则易引起LCD氧化,因此LCD不能简单地用电平信号控制,而要用一定波形的方波序列来控制。LCD显示有静态和时分割两种方
式,前者简单,但是需要较多的口线;后者复杂,但所需口线较少,这两种方式由电极引线的选择方式确定。下面以电子表的液晶显示为例,小时的高位同时灭或亮,分钟的高位在显示数码1~5时,其顶部和底部也是同时灭或亮,两个dot点也是同时亮或灭,其驱动方式是偏置比为1/2的时分割驱动,共有11个段电极和两个公共电极。
但是,IO模拟驱动段式液晶有一个前提条件,就是IO必须是三态,
为什么?下面我们一起细细道来:
第一步,段码式液晶屏的重要参数:工作电压,占空比,偏压比。这三个参数非常重要,必须都要满足。
第二步,驱动方式:根据LCD的驱动原理可知,LCD像素点上只能加上AC电压,LCD显示器的对比度由COM脚上的电压值减去SEG脚上的电压值决定,当这个电压
差大于LCD的饱和电压就能打开像素点,小于LCD阈值电压就能关闭像素点,LCD型MCU已经由内建的LCD驱动电路自动产生LCD驱动信号,因此只要I/O口能仿真输
出该驱动信号,就能完成LCD的驱动。
段码式液晶屏幕主要有两种引脚,COM,SEG,跟数码管很像,但是,压差必须是交替变化,例如第一时刻是正向的3V,那么第二时刻必须是反向的3V,注意一点,如果
给段码式液晶屏通直流电,不用多久屏幕就会废了,所以千万注意。下面我们来考虑如何模拟COM口的波形,以1/4D,1/2B为例子:
只要模拟出以上波形,液晶屏已经成功了一大半了。
1.voiddisplay_sub(u8y)//lcddisplaysubroutine
2.{
3.switch(y)//4*com,VDDand-VDDLCDdisplay,so8timebaseinterruptonesacnperiod
4.{
5.case1:
6.{com1_output_high();break;}
7.case2:
8.{com1_output_low();break;}
9.case3:
10.{com2_output_high();break;}
11.case4:
12.{com2_output_low();break;}
13.case5:
14.{com3_output_high();break;}
15.case6:
16.{com3_output_low();break;}
17.case7:
18.{com4_output_high();break;}
19.case8:
20.{com4_output_low();break;}
21.default:
22.{LCDPluseStep=0;
23.get_display_code(AD_Value,KeyScanRetVal);
24.break;}
25.}
26.}
入以上代码所示,定时2ms,让4个COM交替输出波形即可。
同时我们要注意,在COM输出高的时候,如果要屏幕亮,SEG就要输出低,那么在COM输出低的时候,SEG就要输出高,保证COM和SEG的压差大于1/2B工作电压就可以显示了
下面我们看其中一个com口输出时的函数
1.staticvoidseg1_output(void)//seg1outputsubroutine
2.{
3.if(1==(LCDPluseStep%2))//com_pulseisodd,comoutputhigh(VDD)
4.{
5.if(0==(DisplayCode1&0x10))
6.{SEG1=1;}
7.else
8.{SEG1=0;}
9.}
10.else//com_pulseiseven,comoutputlow(VSS)
11.{
12.if(0==(DisplayCode1&0x10))
13.{SEG1=0;}
14.else
15.{SEG1=1;}
16.}
17.}
时刻让SEG电平跟COM的电平反向,那么驱动段式液晶就基本上成功了。