用单片机IO口直接驱动段式LCD的方法 用IO口驱动段式LED(数码管)的方法相信大家比较清楚,但用IO口直接驱动段式LCD的方法相对复杂一些。在网上搜了一下单片机IO口驱动段式LCD的方法,大

时间:2022-11-21 20:04:41

转自:http://www.dzsj.net/dpjzhyy/10001.htm


用IO口驱动段式LED(数码管)的方法相信大家比较清楚,但用IO口直接驱动段式LCD的方法相对复杂一些。在网上搜了一下单片机IO口驱动段式LCD的方法,大部分资料讲得不够清晰、具体,而且简单问题复杂化。后来查了LCD的显示原理,结合网上的相关介绍,发现IO口直接驱动段式LCD原理比较简单,用几句话就可以描述清楚:

 

1.       LCD和LED的显示原理不一样:LED是加正向电压发光,而LCD必须交替加正、反向电压才会持续显示(可以做个实验,如果把恒定电压加到LCD的一段上,该段会显示一下,但马上不能显示,而且长时间加恒定电压,会加速LCD的老化和损坏)

2.       常听说1/2bias,1/3bias LCD,是什么意思呢?对于1/2bias LCD,假如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/2 bias(1.5V),不管SEG为何值,ΔV<±1.5V,故该点不亮。

 

本人用4*8段的LCD自制了一个数字钟表,验证了以上方法的可行性,现把制作过程罗列如下

1.       原理图

用单片机IO口直接驱动段式LCD的方法  用IO口驱动段式LED(数码管)的方法相信大家比较清楚,但用IO口直接驱动段式LCD的方法相对复杂一些。在网上搜了一下单片机IO口驱动段式LCD的方法,大

说明:由于管脚不够用,所以时钟芯片DS1302的RST和LCD的一个SEG是复用的,只要在这个SEG无效的时候去读取时间就可以了,另外,3PIN串口是ISP下载程序用的。

2.       备料

用单片机IO口直接驱动段式LCD的方法  用IO口驱动段式LED(数码管)的方法相信大家比较清楚,但用IO口直接驱动段式LCD的方法相对复杂一些。在网上搜了一下单片机IO口驱动段式LCD的方法,大

 

3.       焊接

用单片机IO口直接驱动段式LCD的方法  用IO口驱动段式LED(数码管)的方法相信大家比较清楚,但用IO口直接驱动段式LCD的方法相对复杂一些。在网上搜了一下单片机IO口驱动段式LCD的方法,大

4.       实验结果

用单片机IO口直接驱动段式LCD的方法  用IO口驱动段式LED(数码管)的方法相信大家比较清楚,但用IO口直接驱动段式LCD的方法相对复杂一些。在网上搜了一下单片机IO口驱动段式LCD的方法,大

5.       不足之处

通过实验结果可以发现,不显示的SEG也有阴影

原因分析:纽扣电池电压3.7V,1/2bias是1.85V,大于1.5V,所以会出现阴影。

解决办法:选择工作电压小于3V的单片机和电压等于3V的电池(如2节干电池)

6. 程序源代码

点击http://www.dzsj.net/dpjzhyy/clock.c下载