- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用单片机IO口直接驱动段式LCD方法
用单片机IO口直接驱动段式LCD的方法
用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.?????? 原理图
说明:由于管脚不够用,所以时钟芯片DS1302的RST和LCD的一个SEG是复用的,只要在这个SEG无效的时候去读取时间就可以了,另外,3PIN串口是ISP下载程序用的。
2.?????? 备料
?
3.?????? 焊接
4.?????? 实验结果
5.?????? 不足之处
通过实验结果可以发现,不显示的SEG也有阴影
原因分析:纽扣电池电压3.7V,1/2bias是1.85V,大于1.5V,所以会出现阴影。
解决办法:选择工作电压小于3V的单片机和电压等于3V的电池(如2节干电池)
6. 程序源代码
点击 HYPERLINK /dpjzhyy/clock.c /dpjzhyy/clock.c下载
代码
/******************************************************************
段式LCD驱动实验
外部晶体:12MHz
作者:
邮箱:wang9601@126.com
日期:2011.08.26
*****************************************************************/
#include reg52.h
#include stdio.h
//管脚定义
sbit COM0=P3^5;
sbit COM1=P3^4;
sbit COM2=P3^3;
sbit COM3=P3^2;
sbit BI_4=P3^7;
sbit RTC_CLK=P3^0;
sbit RTC_IO=P3^1;
sbit RTC_RST=P3^7; //复用
//P3口模式寄存器
sfr P3M1=0xb1;
sfr P3M0=0xb2;
//当前时间(BCD码):秒、分、时、日、月、星期、年
unsigned char ClockBuffer[8]={0x34,0x12,0x08,0x20,0x03,0x05,0x09};
//0~9的段码查询表
//位序 D7 D6 D5 D4 D3 D2 D1 D0
//段 A B C D E F G DOT
code unsigned char seg_code[10]={~0x03,~0x9f,~0x25,~0x0d,~0x99,~0x49,~0x41,~0x1f,~0x01,~0x09};
unsigned char ScanCoun=0; //动态扫描显示位数计数器
unsigned c
原创力文档


文档评论(0)