LCD液晶屏显示问题分析

昨晚编写液晶屏显示程序的时候遇到了两个问题:

1.LED背光点不亮;

2.开机LCD亮的瞬间有花屏,并且LCD每帧图片显示的时候不是从 Y 轴的零点开始刷新;

issue

找了大量资料,最终把这两个问题都解决了,这两个问题竟然都和LCD屏的初始化有关。

关于问题 1 的分析

开机后,屏幕不亮,这显然是背光没有点亮,参照了一下LCD的背光电路图:

 图一

图一为LCD背光驱动电路,由图中可提炼出三条对编程有用的信息:

1. KEYBOARD 为输入项,当 KEYBOARD 有效时,可点亮背光;

2. KEYBOARD 高电平有效;

3. LED+ 和  LED- 为输出;

然后,又参照了芯片的GPIO引出管脚图:

 图二

由上图可知 KEYBOARD 接到了 GPB0 上。

又去核验了一下代码中 GPBCON 寄存器的配置表:

图三

由图中可知 GPB0 应该设置为 01 Output 模式,没错。

然后又去复核了一下代码中 LCDCON5 关于 PWREN 的设置:

图四

发现 PWREN 和 INVPWREN 均已设置。

然后又去复核了一下代码中 LCDCON1 的 ENVID 位:

图五

发现 ENVID 位已经设置。

那么问题来了,为何LCD屏幕的背光仍然没有点亮?

后来查找了大量的资料,最终发现我在代码中虽然设置了 GPBCON 的 GPB0 位,但是没有在 GPBDAT 中写入要输出的值。出现这个问题的原因是我对 LCDCON5  寄存器的理解不透彻,对 GPIO寄存器 和其他控制寄存器的配合使用理解不透彻。前几天写代码的时候,当看到 PWREN  有如下解释:

 图五

当时还以为只要设置了 PWREN ,LCD控制器就会通过 GPB0 向外输出信号。这种理解是错误的,因为此处设置 PWREN 仅表示允许 LCD_PWREN 向外输出。至于输出值则是由 GPBDAT 决定的。至此解决了第一个问题,当我向 GPBDAT 写入高电平之后,LCD屏的背光终于被点亮了。

关于问题 2 的分析:

从视频中可以看到,图片刷新的时候有两个问题,LCD亮的瞬间有花屏,并且LCD每帧图片显示的时候不是从 Y 轴的零点开始刷新。

查找了大量资料,再加上无数次的重复实验,终于解决了问题 2 。

其实问题二是由两个问题组成的:

a.开机在没有输出图片的时候 LED 背光被点亮了;

b.LCD每帧图片显示的时候都不是从 Y 轴的零点开始的。

问题  a 的原因是过早的设置了 LCDCON5 的 PWREN  位,当此位被设置并且 GPBDAT 被写入 1 之后,背光就开始亮了,这亮的太早了。要等输出图片之前再点亮,不要太早使能。

#if 1
    LCDCON5 |= (the_polarity.INVLEND << 4);
#if 0
    LCDCON5 |= (the_polarity.PWREN << 3);
#endif
    LCDCON5 |= (the_polarity.ENLEND << 2);

	LCDCON5 |= (the_polarity.BSWP << 1);
#endif
	LCDCON5 |= (the_polarity.HWSWP << 0);

当把  PWREN 位的设置注释掉,并且把 PWREN 位的设置移到  controller_enalbe() 之后 解决了问题 a。

问题 b 的原因是过早设置了 LCDCON1 的 ENVID 位,如果过早打开此位,而图片没有随后立刻到来,那么就会有杂乱的条纹输出,而后图片到来之后,图片就没有从 Y 轴的零点开始输出,而是从白底时杂纹开始的地方一帧帧的刷新图片。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值