电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

用单片机IO口直接驱动段式LCD的方法VIP专享VIP免费

用单片机IO口直接驱动段式LCD的方法_第1页
用单片机IO口直接驱动段式LCD的方法_第2页
用单片机IO口直接驱动段式LCD的方法_第3页
用单片机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为何值,Δ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.程序源代码点击http://www.dzsj.net/dpjzhyy/clock.c下载代码/******************************************************************段式LCD驱动实验外部晶体:12MHz作者:www.dzsj.net邮箱:wang9601@126.com日期:2011.08.26*****************************************************************/#include#include//管脚定义sbitCOM0=P3^5;sbitCOM1=P3^4;sbitCOM2=P3^3;sbitCOM3=P3^2;sbitBI_4=P3^7;sbitRTC_CLK=P3^0;sbitRTC_IO=P3^1;sbitRTC_RST=P3^7;//复用//P3口模式寄存器sfrP3M1=0xb1;sfrP3M0=0xb2;//当前时间(BCD码):秒、分、时、日、月、星期、年unsignedcharClockBuffer[8]={0x34,0x12,0x08,0x20,0x03,0x05,0x09};//0~9的段码查询表//位序D7D6D5D4D3D2D1D0//段ABCDEFGDOTcodeunsignedcharseg_code[10]={~0x03,~0x9f,~0x25,~0x0d,~0x99,~0x49,~0x41,~0x1f,~0x01,~0x09};unsignedcharScanCoun=0;//动态扫描显示位数计数器unsignedcharDisplayBuf[4]={1,2,3,4};//4位数字对应的显示暂存//段码缓冲区unsignedcharSegBuf[4]={0x00,0x00,0x00,0x00};//COM1、COM2、COM3、COM4的段码bitbi_4a=0;//COM0对应的4abitbi_4b=0;//COM1对应的4abitbi_4c=0;//COM2对应的4a//延时voiddly(unsignedcharx){unsignedchari;for(i=0;i>1;}RTC_CLK=0;dly(5);}//ds1302读1字节unsignedcharrtc_rd_byte(void){unsignedchari,read_buf;RTC_IO=1;//RTC_IO置1,保证为输入状态for(i=0;i<8;i++){read_buf=read_buf>>1;RTC_CLK=0;dly(5);if(RTC_IO)read_buf=read_buf|0x80;elseread_buf=read_buf&0x7f;RTC_CLK=1;dly(5);}RTC_CLK=0;dly(5);returnread_buf;}//ds1302写入时间voidrtc_wr_time(unsignedchar*p_w...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部