打印
[STM32L1]

[资料] 解决STM8L152 LCD液晶驱动段码亮度不一样的经验分享

[复制链接]
680|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我对LCD液晶驱动还是朦朦胧胧的时候,遇上了这个刚硬的task。
所以,写下这个帖子,为后面的同学填坑!

说一下遇到问题的时候啊,不应该张口就问(我感觉我有时候就是,自己不动脑):
        首先,你要知道自己的问题在哪儿,把问题罗列清楚,就已经解决一半了。
        其次,查资料,百度,Google,必应等搜索引擎;发烧友,21IC,51黑,CSDN,开源电子网,野火电子论坛等各种论坛。
        最后,运用官方手册,咨询(液晶)厂家官方,配合程序代码的配置,看了又看,翻译之后再翻译,捋一捋清楚;示波器、程序调试仿真,来了又来!我敢保证问题就解决了。

        进入正题:
1、状态描述,LCD段码液晶屏幕驱动,我写这个驱动的时候,还不太清楚原理,就网上找了一下,大楷了解了,就是用方波信号驱动,如下图:

2、波形分析,3channel和4channel是COM信号,2channel是SEG信号,我是点亮所有段的程序,所以这里呢,SEG信号对应的两个COM也就是2段都会亮,在段码的任意一个高(低)电平,2个COM都
会有与之对应的相反电平且各占一半,这里又要插入一份液晶屏厂家提供的液晶资料,如下图:

这是由2个COM口,25个段码组成的屏,参数的话主要就是看驱动模式和电压,图上的5V电压有误(应该是3.3V),可以看到占空比是1/2,偏压也是1/2,
然后驱动频率>128Hz,从波形中看出来我们的配置没有问题,其他的参数可以自行了解。这里再插入一张STM8的LCD_CR1寄存器的图:

初始化如下:
void LCD_init(void)
{
        /*
        系统时钟HSI=16MHz , LSI=38KHz
        1、LSI clock used as RTC clock source
        2、RTC clock source / 2
        */
        CLK_CRTCR     = 0x24;//RTC_CLK = 38KHz/2= 19KHz
        CLK_PCKENR2   = 0x08;//开启LCD时钟
        /*
        19KHz = RTCCLK / 2 to LCD
        19KHz = (Halt) LCDCLK
        */
        LCD_FRQ=0x10;//这里 2PS[3:0]=2^1=2  ;  DIV[3:0]+16=?  1.8ms*4=5.2  192.3Hz  7ms 142.86Hz
        LCD_CR1=0x03;// 1/2duty  1/2bias 0x03
        /*
        高驱动使能
        该位永久启用低电阻分压器。 内阻高的显示器可能
        需要更长的驱动时间才能获得令人满意的对比度,因此如果存在
        没有强大的功率约束。
        */
        LCD_CR2=0x1E;//PON调节对比度 将高性能驱动打开就OK
        LCD_CR3=0x03;//1-phase period dead time
        LCD_CR4=0x00;//
        
        //Configures the LCD Port Mask.
        LCD_PM0=0xFF;
        LCD_PM1=0xFF;
        LCD_PM2=0xFF;
        LCD_PM3=0x01;
        LCD_PM4=0x00;
        LCD_PM5=0x00;
        
        LCD_CR3|=0x40;//LCD enable

        //点亮所有的段
     /*LCD_RAM0=0xff;LCD_RAM1=0xff;LCD_RAM2=0xff;LCD_RAM3=0xff;
        LCD_RAM4=0xff;LCD_RAM5=0xff;LCD_RAM6=0xff;LCD_RAM7=0xff;
        LCD_RAM8=0xff;LCD_RAM9=0xff;LCD_RAM10=0xff;LCD_RAM11=0xff;
        LCD_RAM12=0xff;LCD_RAM13=0xff;LCD_RAM14=0xff;LCD_RAM15=0xff;
        LCD_RAM16=0xff;LCD_RAM17=0xff;LCD_RAM18=0xff;LCD_RAM19=0xff;
        LCD_RAM20=0xff;LCD_RAM21=0xff; */
}


3、问题现象,我之前配置出来的现象是COM2端口的所有SEG段比COM1端口的所有SEG暗,应该是驱动能力不够!

后面打开LCD_CR2的bit4,就感觉好很多了,功能描述如下:
High drive enable
This bit permanently enables the low resistance divider. displays with a high internal resistance may
need longer drive time to achieve a satisfactory contrast, so the software can set the HD bit IF there is
no strong power constraint.

高驱动使能
该位永久启用低电阻分压器。 内阻高的显示器可能
需要更长的驱动时间才能获得令人满意的对比度,因此如果存在
没有强大的功率约束。
看起来整体暗了一点,
有点怀疑液晶屏内阻较大,单片机的驱动能力不够,but , it looks much better ,isn't? ~~~
4、段码如何和显存地址对应起来

可以从手册中看出来STM8L152是高密度型器件,那么他就有8个COM,44个SEG,但是我这里呢,只用了2个COM,25个SEG,看网上说的用4个COM还是8个COM会有问题(
没有试过,不知道!)
那么液晶厂家给的PIN脚和COM脚对应的单片机引脚怎么和液晶的显示缓存地址对应起来,实现把数据写到缓存对应的SEG段就会亮呢?
我们的COM脚和SEG脚在STM8L152数据手册上已经给出了
我们就是对应这里的LCD_COMx和LCD_SEGx,然后再看一张显存表,一张SEGx段对应的COMx[y]口关系图和一张中高密度器件如果要用8个COM的控制寄存器LCD_CR4:

现在就很清晰了,对不对,就是SEG0[Pin]=COM0[Pin] , SEG1[Pin]=COM1[Pin],Pin就是你连接到单片机的引脚对应的LCD_SEGx,COM就是你接到单片机的COM0~COM7;
我这里LCD液晶屏资料的COM1连到单片机的COM0,COM2连到单片机的COM1,Pin脚1~25接到单片机的LCD_SEG0~LCD_SEG24;所以我要点亮P1这个笔段的话
就是S0[SEG0]或者就说S0[0]=1就行了,然后对应单片机内存地址0x0C(LCD_RAM0)这个地址(寄存器)的第0位写1,就能点亮了。






























使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

211

主题

1124

帖子

9

粉丝