独闷闷网

 找回密码
 立即注册
搜索
查看: 6432|回复: 3
收起左侧

[原创] 段码式LCD屏幕驱动方法分享

[复制链接]
发表于 2015-2-8 21:48:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
       大家平常在生活中见到最多的就是段码是液晶屏幕了,他有普通的数码管的特征,又有点阵LCD的特征,固定的图形,省成本而有好看,那么,我们今天来一起玩玩!       首先,大家不要以为用单片机来驱动就以为断码屏是直流驱动的,其实,段码屏是交流驱动,什么是交流?矩形波,正弦波等。大家可能会经常用驱动芯片来玩,例
如HT1621等,但是有些段式屏IO口比较少,或者说IO口充足的情况下,也懒得在去写控制器的驱动了。但是,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为例子:
波形.png
只要模拟出以上波形,你的液晶屏已经成功了一大半了。
  1. void display_sub(u8 y)              //lcd display subroutine
  2. {
  3.         switch(y)                              //4*com,VDD and -VDD LCD display,so 8 timebase interrupt one sacn period
  4.         {
  5.                 case 1:
  6.                         {com1_output_high();break;}
  7.                 case 2:
  8.                         {com1_output_low();break;}
  9.                 case 3:
  10.                         {com2_output_high();break;}
  11.                 case 4:
  12.                         {com2_output_low();break;}
  13.                 case 5:
  14.                         {com3_output_high();break;}
  15.                 case 6:
  16.                         {com3_output_low();break;}
  17.                 case 7:
  18.                         {com4_output_high();break;}
  19.                 case 8:
  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. static void seg1_output(void)                        //seg1 output subroutine
  2. {
  3.         if(1 == (LCDPluseStep%2))                        //com_pulse is odd,com output high (VDD)
  4.         {
  5.                 if(0 == (DisplayCode1&0x10))
  6.                 {SEG1=1;}
  7.                 else
  8.                 {SEG1=0;}
  9.         }
  10.         else                                        //com_pulse is even,com output low (VSS)
  11.         {
  12.                 if(0 == (DisplayCode1&0x10))
  13.                 {SEG1=0;}
  14.                 else
  15.                 {SEG1=1;}
  16.         }
  17. }
复制代码
时刻让SEG电平跟COM的电平反向,那么驱动段式液晶就不会有多大难度了
乐于分享,勇于质疑!
发表于 2015-2-9 09:39:29 | 显示全部楼层
非常宝贵的经验分享。
乐于分享,勇于质疑!
发表于 2015-3-7 13:19:16 | 显示全部楼层
再来几张图就好了
乐于分享,勇于质疑!
 楼主| 发表于 2015-3-9 08:46:06 | 显示全部楼层
f晨星 发表于 2015-3-7 13:19
再来几张图就好了

帖子编写能力尚未到家,如果有需要,可以在群里@我随意发问
乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2021-4-22 09:57 , Processed in 0.159334 second(s), 21 queries .

快速回复 返回顶部 返回列表