Nokia5110液晶屏完全新手学习笔记(二)

本文详细介绍了如何通过模拟串行总线协议向Nokia5110液晶屏写入数据,包括时序图解析及具体程序实例,并提供了一种使用SPI接口进行数据传输的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

四、时序图

没错,要向液晶屏写入数据,我们需要通过模拟一个串行总线协议来写入数据。
先来看看传送一个字节(指令)的时序图:


如果能看懂时这些序图的兄弟,就不要听我废话啦。请飘过~~

从时序图1看出:
1. SCE片选为0时开始发送数据。
2. 时钟信号SCLK仅在SCE片选为0时有效。
3. SDIN数据输入,需要在时钟信号SCLK有效时开始发送数据,且在SCLK的正边缘取样, 注意,数据是从高位开始发送的。

知道了传送数据的时序,我们需要使用程序来模拟这个时序,从而发送指令控制液晶屏。
接下来,看看实例。

五、程序实例

代码一:
/*--------------------------------------------
LCD_write_byte: 使用SPI接口写数据到LCD
输入参数:dt:写入的数据;
command :写数据/命令选择;
编写日期:20080918
----------------------------------------------*/
void LCD_write_byte(unsigned char dt, unsigned char command)
{
     unsigned char i;
     sce=0;    
     dc=command;    
     for(i=0;i<8;i++)
     {
          if(dt&0x80)
               sdin=1;
          else
               sdin=0;
          dt=dt<<1;         
          sclk=0;          
          sclk=1;
     }    
     dc=1;    
     sce=1;    
     sdin=1;
}

代码分析:
这个是一个写入一个字节数据的模拟时序函数,具有两个参数,dt为要写入的字节,command为数据/命令选择。
首先,需要sce拉低电平,开始发送数据。
i循环8次,写入8位数据,现以“设置扩展指令集”(即写入0x21)全过程如下:
  • i = 0:dt = 0x21 = 0010 0001 b

    dt & 0x80:
    0010 0000
    1000 0000 &
    0000 0000 = 0,则sdin = 0 (DB7),
    dt左移1位,dt<<1 = 0100 0010 b,
    模拟时钟信号sclk = 0, sclk = 1,以使采样

  • i = 1: dt = 0100 0010b

    dt & 0x80:
    0100 0010
    1000 0000 &
    0000 0000 = 0, 则sdin = 0 (DB6),
    dt左移1位,dt<<1 = 1000 0100 b,
    模拟时钟信号sclk = 0, sclk = 1,以使采样 

  • i = 2: dt = 1000 0100b

    dt & 0x80:
    1000 0100
    1000 0000 &
    1000 0000 != 0,则sdin = 1 (DB5)
    dt左移1位,dt<<1 = 0000 1000 b,
    模拟时钟信号sclk = 0, sclk = 1
    ,以使采样 

  • i = 3:dt = 0000 1000b

    dt & 0x80:
    0000 1000
    1000 0000 &
    0000 0000 = 0,则sdin = 0 (DB4)
    dt左移1位,dt<<1 = 0001 0000 b,
    模拟时钟信号sclk = 0, sclk = 1
    ,以使采样

  • i = 4:dt = 0001 0000b

    dt & 0x80:
    0001 0000
    1000 0000 &
    0000 0000 = 0,则sdin = 0 (DB3)
    dt左移1位,dt<<1 = 0010 0000 b,
    模拟时钟信号sclk = 0, sclk = 1
    ,以使采样

  • i = 5:dt = 0010 0000b

    dt & 0x80:
    0010 0000
    1000 0000 &
    0000 0000 = 0,则sdin = 0 (DB2)
    dt左移1位,dt<<1 = 0100 0000 b,
    模拟时钟信号sclk = 0, sclk = 1
    ,以使采样
     

  • i = 6:dt = 0100 0000b

    dt & 0x80:
    0100 0000
    1000 0000 &
    0000 0000 = 0,则sdin = 0 (DB1)
    dt左移1位,dt<<1 = 1000 0000 b,
    模拟时钟信号sclk = 0, sclk = 1
    ,以使采样
     

  • i = 7:dt = 1000 0000b

    dt & 0x80:
    1000 0000
    1000 0000 &
    1000 0000 != 0,则sdin = 1 (DB0)
    dt左移1位,dt<<1 = 0000 0000 b,
    模拟时钟信号sclk = 0, sclk = 1
    ,以使采样
     
     

过程很罗嗦,不过很简单,呵呵~~
可见,这样循环8次,写入了8位数,DB7~DB0 = 0010 0001b = 0x20,正是“扩展指令集”的指令值。
代码二:
/*--------------------------------------------
LCD_init: 初始化LCD_init
输入参数:无
编写日期:20080918
----------------------------------------------*/
void LCD_init(void)
{
     res=0;      
     delayms(10);
     res=1; 
     LCD_write_byte(0x21,0);//1、初始化Lcd,功能设定使用扩充指令
     LCD_write_byte(0xd0,0);//2、设定液晶偏置电压
     LCD_write_byte(0x20,0);//3、使用基本指令
     LCD_write_byte(0x0C,0);//4、设定显示模式,正常显示
}
代码分析:
初始化步骤可以参照芯片手册中的编程示例:


代码三:
/*-----------------------------------------------------------------------
LCD_write_char    : 显示英文字符
输入参数:c       :显示的字符;
编写日期          :2004-8-10 
最后修改日期      :2004-8-10 
-----------------------------------------------------------------------*/
void LCD_write_char_my(unsigned char *font)
{
    unsigned char i;
	
    for (i=0; i<6; i++)
      LCD_write_byte(font[i], 1);
}

代码分析:
我们可以使用字模软件,求出一个6*8大小的字符“A”,该组值为:
unsigned char A[6] = {0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C};
这些很容易理解,还原看一下:


上面的矩阵,就是一个字母"A",可见只要把这组值写入即可以显示“A”。

最后,到这里,我们已经学会了Nokia 5110液晶屏的原理和基本控制。是不是觉得很简单。呵呵~~~希望帮到大家,写得不好,请见谅,写的不对,望指正!

小Jay累了。

转载于:https://my.oschina.net/jayzonex/blog/10151

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值