2019独角兽企业重金招聘Python工程师标准>>>

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

如果能看懂时这些序图的兄弟,就不要听我废话啦。请飘过~~
从时序图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;elsesdin=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

Nokia5110液晶屏完全新手学习笔记(二)相关推荐

  1. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  2. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  3. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  4. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  5. Scapy学习笔记二

    Scapy学习笔记二 Scapy Sniffer的用法: http://blog.csdn.net/qwertyupoiuytr/article/details/54670489 Scapy Snif ...

  6. Ethernet/IP 学习笔记二

    Ethernet/IP 学习笔记二 原文链接:http://wiki.mbalib.com/wiki/Ethernet/IP 1.通信模式 不同于源/目的通信模式,EtherNet/IP 采用生产/消 ...

  7. Java学习笔记二:数据类型

    Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...

  8. 吴恩达《机器学习》学习笔记二——单变量线性回归

    吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...

  9. ASP.NET MVC 2 学习笔记二: 表单的灵活提交

    ASP.NET MVC 2 学习笔记二:  表单的灵活提交 前面说到有做到公司内部的一个请假系统,用的是ASP.NET MVC 2+Entity Framework.虽然EF(Entity Frame ...

最新文章

  1. Linux (x86) Exploit 开发系列教程之十一 Off-By-One 漏洞(基于堆)
  2. 一分钟了解 TCP/IP 模型
  3. 别魔改网络了,Google研究员:模型精度不高,是因为你的Resize方法不够好
  4. 5. 深入研究 UCenter API 之 MVC 网站下的用法(转载)
  5. 生成器设计模式的应用
  6. javaScript DOM编程常用的方法与属性
  7. 从外包公司到今日头条offer,含BATJM大厂
  8. poj 4468Spy(kmp算法)
  9. API 层实现语音录制
  10. Hadoop 系列之 Hive
  11. 剑指offer-序列化二叉树
  12. 二叉搜索树(排序二叉树)
  13. mysqldump 工具使用详解——参数选项
  14. ZStack CMP多云管理平台有何不同?
  15. 在线画图工具 免费
  16. 「面试」TCP/IP常见攻击
  17. 揭秘TVS管在电压与电流中的奥秘
  18. Linux系统的基本介绍
  19. VMware 常见问题集锦
  20. 尺寸大的背光为何设计双AK级?

热门文章

  1. 40年诞生7位诺奖得主,美国贝尔实验室做对了什么?
  2. 宇宙是一个无始无终的循环?
  3. 好文|奔向宇宙,揭开太空机器人的神秘面纱
  4. 深度揭秘AI换脸原理,为啥最先进分类器也认不出?
  5. 人机融合智能与深度态势感知
  6. 5G时代,工业互联网安全挑战远超消费互联网
  7. 中国科学家将绘制最精细人脑三维“地图”
  8. 最前线丨新零售结果、AT暗战,今年的618都讲了哪些故事
  9. 前百度首席科学家吴恩达携手富士康,要用人工智能升级制造业
  10. 总监调岗至前台,企业被判赔偿26万,法院:“侮辱性调岗”违法!