5110液晶屏初始化和datasheet详解

本文详细介绍了5110液晶屏的初始化过程,包括重置、片选信号、设置Vop和混合率等步骤,并解析了 datasheet 中的关键参数。在初始化过程中遇到的屏幕变白、设置失败等问题,作者通过实验找到了解决方案。文章还提供了初始化代码示例,帮助读者理解和应用。
摘要由CSDN通过智能技术生成

来自:http://blog.csdn.net/ming1006/article/details/7233074

这几天学习nikia 5110屏的控制,特地把datasheet看了几遍,琢磨了一下。又参考了网上的一些代码,自己用nios ii io口模拟写了驱动程序。一开始就成功了,但却出现了一些很奇怪的问题,对datasheet一些地方也感到疑惑。因为我用的nios ii的时钟是66.666667MHz,是高速系统,我也不能确定这些问题是不是高速系统和普通低速单片机的区别导致的。

但现在经过多次测试,我已经解决了初始化问题,对于datasheet一些不懂的地方也有进一步的理解。在此分享一下自己的理解。以下是初始化步骤:

1.记住在5110的初始化开始要先给REST引脚发送一个低脉冲来重置(清零)所有内部寄存器,这个低电平脉冲持续时间大于100ns

2.之后片选信号SCE要先变低再变高

关于为什么要先片选我刚开始也不懂,datasheet上也没说要这么做。网上的代码有些有这个步骤有些没有这个步骤。我开始没有这个步骤,倒是也可以成功,但接下去出现了一些问题。比如设置参数Vop(后面介绍Vop)后屏幕并没有改变,而且有时候屏幕会变白,且变白后再也调不出图案,要先拔掉5110电源再测试才会再出现图像(开始还以为烧坏了,初始化不好会烧坏)(有时也不行)。本来在datasheet中就不太明白参数Vop到底是什么(现在明白了,说白了就是调节液晶屏电压Vlcd的),因为Vlcd可以用软件调节,也可以硬件提供,自己买的是带别人做好的PCB板的,不知道Vlcd是否已经接电源了,所以对Vop更怀疑了。后来经过不断测试终于发现,要是没有先片选一下的话,紧接着设置Vop有很大的概率会设置失败。这也就是为什么很过来人都加上了这一步。

PS:我改变了Vop和混合率的初始化次序,发现会出现一样的问题,所以未必是Vop设置失败,也可能是混合率设置失败。总之,没有这句的话有很大的概率初始化失败,所以最好加上这句吧。当然,对于外接Vlcd的是否有这个问题我就不得而知了。

3.发送指令0x21设置PD = 0 、 V = 0 和 H = 1(表示要使用拓展指令集,Vop和混合率的设置属于拓展指令集)

4.设置Vop(Vlcd外部供电的省略这一步,事实上大多数带PCB板的5110都是内部产生Vlcd的,所以要这一步)

Vop可以内部产生(通过设置Vop)也可以外接电源。外部供电的话要提供6.0V-9.0V给Vlcd(因为和Vdd不同,所以大多数都是采用内部产生这个方法),内部产生的要提供6.0V-8,.5V给Vlcd。Vlcd产生的大小通过Vop的大小来设置。计算公式为:Vlcd = a + Vop * b [V],其中对于5110的控制芯片PCD8544,a = 3.06,b = 0.06。因为Vop是一个7bit的参数,所以Vop从0-127取值,产生的Vlcd的范围为3.06(datasheet上写3.00应该是笔误)到10.68V。其中只有6.0到8.5V的范围内液晶屏才能正常工作。写命令的时候要注意发送的指令为0x80|Vop,最高位是1

5.设置RECOMMENDED MUX RATE(混合率)

什么是混合率呢,这个参数搞了好久才明白,就是对比度啦。当初屏幕没有先片选出现白屏问题,因为不知道Vop和混合率的意思才导致瞎折腾了好久(以为是混合率没设置好,其实是Vop出问题了)。混合率是1:x的形式,x越大对比度越低。虽难datasheet上说5110的混合率要设置1:48,但事实上这样设置对比度太小,看不大清除,所以我看到网上一些程序其实是设置1:40/1:34的,我这里设置了1:24。混合率是通过设置BS2、BS1、BS0这三位来实现的,对应的混合率如下:

6.设置温度系数TC1、TC0,复位后TC1和TC0都置零,即温度系数为0,。事实上,网上的代码要么没这一步,要么置温度系数为0(其实两种都一样)。从datasheet上也看不出温度系数要怎么设置,但上面两种方法都可行,只有在低温情况下要注意这一点

7.发送指令0x20设置PD = 0、 V = 0 和 H = 0(表示要使用基本指令,设置显示模式和设置xy轴坐标属于基本指令)

8.发送0x0c指令或0x0d指令表示进入正常显示模式,0x0c显示黑字,背景为白色,0x0d显示白字,黑色背景。

9.清屏(下面有清屏函数)

其实这里是通过设置D为何E为来设置显示模式的,5110总共有四种显示模式,另外两种还没试下什么效果,试好了我补充

下面是四种模式对应的D和E:


通过以上几步后5110就可以成功初始化,下面提供完整的初始化代码:

 

[cpp]   view plain copy print ?
  1. #include"lcd_5110_solution.h"  
  2.   
  3. void LcdWrite(alt_u8 data,alt_u8 d_c)  
  4.  
  5.     alt_u8 i;  
  6.     //chose the chip  
  7.     IOWR_ALTERA_AVALON_PIO_DATA(SCE_BASE, 0x00);  
  8.     //chose data mode or command mode  
  9.     IOWR_ALTERA_AVALON_PIO_DATA(D_C_BASE, d_c);  
  10.     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值