用单片机IO口直接驱动段式LCD的方法用IO口驱动段式LED(数码管)的方法相信大家比较清楚,但用IO口直接驱动段式LCD的方法相对复杂一些
在网上搜了一下单片机IO口驱动段式LCD的方法,大部分资料讲得不够清晰、具体,而且简单问题复杂化
后来查了LCD的显示原理,结合网上的相关介绍,发现IO口直接驱动段式LCD原理比较简单,用几句话就可以描述清楚:1
LCD和LED的显示原理不一样:LED是加正向电压发光,而LCD必须交替加正反向电压才会持续显示(可以做个实验,如果把恒定电压加到LCD的一段上,该段会显示一下,但马上不能显示,而且长时间加恒定电压,会加速LCD的老化和损坏)2
常听说1/2bias,1/3biasLCD,是什么意思呢
对于1/2biasLCD,假如LCD的显示电压是3V,则1/2bias是1
5V,也就是说在±3V电压作用时,LCD有显示;±1
5V及以下的电压作用时没有显示3
普通单片机IO口不能直接输出半高电平(1
5V),但可以用相等的上下拉电阻实现,当IO口设置为输入(高阻)时,由于上下拉电阻的分压作用,则产生一个半高电平(1
5V)知道了以上3点后,动态驱动LCD就不是难事了,对于4*8段的LCD(4个COM,8个SEG,显示电压为3V,1/2bias),驱动方法如下:1、四个COM采用交替扫描的方式,每个COM在相邻两次扫描时又进行电压交变的方式
2、若扫描到某一个COM时,该COM输出3V(0V):与该COM相连的SEG输出与COM相反,ΔV=±3V,则该相连点亮;与该COM相连的SEG输出与COM相同,ΔV=0,则该相连点不亮
3、其他没有扫描到的COM,单片机IO口为输入,从而产生1/2bias(1
5V),不管SEG为何值,ΔV1;RTC_CLK=0;dly(5);if(RTC_IO)read_buf=read_buf|0x80;els