LCD简介
(1)显示器,常见显示器
(2)LCD(Liquid Crystal Display),液晶显示器,原理介绍
(3)LCD应用领域
(4)LED OLED
1.17.1.2、电子显示器的原理
(1)像素(分辨率)
(2)显存,用来做显示的内存
(3)字模
(4)字库
(5)控制器和驱动器
(6)软件+硬件实现功能

1.17.1.3 1602显示屏

简介:为什么叫1602(16*2显示器显示2排,每排16个字符)。能显示的字符数为 32。此时32不是像素,像素可能是 5*7,我们编程时只需要把相应的字符的的ascii码,送给液晶驱动器(软件做到这里就可以了),控制器就会自动将此字符的字模与字库相对应。发给驱动器去驱动LCD显示。

1.17.3.2原理图和接线引脚

(1)引脚分为:数据线(8位(bit0-bit7)) + 控制接口 (3根(W/R、RS、E))+背光VO+电源地

并行接口: 相比之前的SPI、IIC是串行接口。他每次只能传输一个 bit位,每一个SCL 传输一位(分时传送)。但是并行接口(8位)一次传输 8位数据。相比较代价较大。

数据手册:

LCM (LCD 模组) 我们只是和LCD的控制器打交道(HD44780芯片)

主要技术参数、接口信号 :RS(命令/数据)W/R(写/读选择端)E(使能端)

截屏的功能就是读显示屏的数据。

3.RAM地址映射图

这个就是我们说的是 显存  80个字节。总共有2*40。但是我们显示时只用了 16 * 2 个内存。

譬如我要显示 一个 大写字母 A,我们需要把 大写字母A的字模放到这个显存中去,但是这个芯片本身是带字库的,我们只需要给他索引值,那么他是如何查找的呢?就是靠ASCII码,我只需要把 'A'的ascii码,写入到显存中去。就显示了。编程本身是挺简单的。

指令说明: 

00001000             0x08               // 关闭光标

需要写在任意位置需要改变 写入显存的地址才能在改变后的位置显示。

手册上的严格时序:

杜绝显示屏刚开始时,显示屏上显示杂乱的东西。

1.17.712864显示屏:

(1)128p*64p  (注意不是字符而是pixel)和1602不一样。

(2)本身是没有字库的,需要自己制作字模给LCD12864内部的控制器。

(3)可以显示文字和图片

1.17.7.2原理图和数据手册和接线

原理图注意转接板的引脚对应

数据手册分两个(lcd12864模组 和 它的内部的控制器(芯片ST7565p) ),

lcd12864模组 数据手册里面并没有与编程有关的内容。除过interface description( chip脚 一 一对应 (从原理图 到 转接板 到 12864模组的数据手册chip脚) 这里稍有繁杂)抓住关键点。

编程接口:

(2)控制总线+数据总线

(3)控制总线的定义

数据接口(p0)+ 控制总线(RS(1命令/0 数据)+CS(片选-低电平有效)+RD(读控制线-低电平有效)+RW(写控制线-低电平有效) +reset肯定是拉低的)  (根据interface description)

学习方法:遇到坎的时候从容易到难我们一下是受不了,

(1)学习方法:数据书册是查的,找准数据书册关键信息点,用来查而不是挨个看。

(2)数据手册对照官方示例代码来参照对比

(3)要结合各部分原理图、各部分书册、示例代码来综合分析   (有时某一份资料会出错)

(4)必要时要记笔记 /*********************************************************功力就是这么来的*************************************************/  牢记

但是在两份数据手册中均没有找到时序图,所以只能猜测 根据  interface description 来大致根据经验先大致猜测,然后再各根据代码,来具体分析。

在参考示例代码的时候:先看底层时序代码:写命令和写数据    区别只是在 RS 的不同。

void LcdSt7565_WriteCmd(cmd)
{
LCD12864_CS = 0; //chip select,打开片选
LCD12864_RD = 1; //disable read,读失能
LCD12864_RS = 0; //select command,选择命令 // 这里和我们之前在interface description 分析的不一样。无语。。。。。。
LCD12864_RW = 0; //select write,选择写模式
_nop_();
_nop_(); DATA_PORT = cmd; //put command,放置命令
_nop_();
_nop_(); LCD12864_RW = 1; //command writing ,写入命令
}

1.17.9 ST7565 的指令集

1.17.9.1 高层时序分析

(1)指令式交互系统:ST7567芯片内部事先规定了各种指令,cpu只要发送特定的指令达到特定的功能。这就是指令式交互系统。根据指令表具体看。

(2)指令表是关键(非常普遍)ST7565很具有代表性。

1.17.9.2 指令系统学习方法:

(1)沿着数据手册顺序分析。

(2)沿着示例代码按需分析                  两种方法综合来看,先大致沿着看手册(简单的),在结合示例代码具体看。

查指令表 :(1) display on    0xAF  / display off       0xAE

1.17.9.3先顺序分析简单的指令 :

(2)2号指令:显示行号设置 (display start line set)

01000000+0-0x3F   即就是 0x40+(0 - 63)(也就是64行)

(3)3号指令: 页地址设置 (page address set)10110000+( 0 - 7)0xB0+(0-7); 设置page address ( 0-7 64个纵向像素点分为8份)    具体参考 figure 4

(4)4号指令:  列地址设置 (Column adress set)  0001 bit7-bit4 +   0000+bit3-bit0  <bit7-bit0 (00000000 -10000011)   (0-131) >

设置Column address 一个完整的指令事发两次 (1.先发高位 0001 bit7-bit4  2. 后发低位 0000  bit3-bit 0)。

(5)status read 详细看看每一位代表的意思:

(6) 设置ADC

0XA0   normal

0xA1    reverse

1.17.9.4 以代码为纲领来分析

(1)  void Lcd12864_Init()

{

时序(reset、)、硬件特性参数(对比度、亮度)、显示参数(起始行、ADC(0-127 / 4-131)、 )

}

自己对某个参数特性不清楚,可以对着代码,来修改某个参数来实际看看效果。<比如 像素全开 >

1.17.9.5 好好研究一下清屏函数:

 void Lcd12864_ClearScreen(void)
{
uchar i, j; for(i=; i<; i++)
{
//--表格第3个命令,设置Y的坐标--//
//--Y轴有64个,一个坐标8位,也就是有8个坐标--//
//所以一般我们使用的也就是从0xB0到0x07,就够了--//
LcdSt7565_WriteCmd(0xB0+i); //--表格第4个命令,设置X坐标--//
//--当你的段初始化为0xA1时,X坐标从0x10,0x04到0x18,0x04,一共128位--// 131(0x83)这里应该是 0x18 0x03吧
//--当你的段初始化为0xA0时,X坐标从0x10,0x00到0x18,0x00,一共128位--// 128(0x80)-----0x18 0x00
//--在写入数据之后X坐标的坐标是会自动加1的,我们初始化使用0xA0所以--//
//--我们的X坐标从0x10,0x00开始---//
LcdSt7565_WriteCmd(0x10);
LcdSt7565_WriteCmd(0x04); //--X轴有128位,就一共刷128次,X坐标会自动加1,所以我们不用再设置坐标--//
for(j=; j<; j++)
{
LcdSt7565_WriteData(0xf0); //如果设置背景为白色时,清屏选择0XFF
}
}
}

他的本质就是往显存里边写数据,列地址好说0-128 但是行(64行)它分为8个列地址(每一个bit代表8行像素点(bit0-bit7)),如果初始化的时候背景是白的,那么写入数据的时候就应该写入0xff,显示的是128*64个点阵黑色的。如果初始化的时候设置背景是黑的,那么则无需写入数据(0x00)。具体可以参考这幅表:

1.17.14.2、LCD12864显示文字

(1)字模

(2)像素&显存

(3)显示函数:将字模丢到正确的显存中去

1.17.14.3、字模的获取

(1)芯片自带字库(输入ascii即可)

(2)网上下载字库

(3)字模生成软件自助生成。

代码实战自己写一个显示函数,

遗留问题:

(1)初始化和字模不匹配,字显示是反的。

(2)初始化不对,造成x坐标是从右往左的。解决。

将选择方向的命令改为 0xA0,对应的的 坐标也要改变。

17.17.15.1 超过8*8的字符如何显示?

(1)常见汉字字模大小是 16*16(32字节的数据(32*8=16*16))。也就是说每一个bit代表一个像素,把他分解成 两个8*16(上下来分),横向显示。纵向设置 page address (8 bit),显示上一半。page address 加一,显示下一半,横向显示。这样一个字就显示出来了。注意要和取模软件一一对应。

一个像素点代表一个bit。

参考资料:朱老师物联网大讲堂教程

LCD学习的更多相关文章

  1. LCD驱动学习笔记

    通过这几天的学习发现驱动的框架感觉都差不多,一般分为以下几个步骤: 分配一个结构体 struct x *x = amlloc(); 设置结构体的参数 硬件寄存器 file_operations 注册 ...

  2. STM32学习之路-LCD(3)&lt;显示图片&gt;

    祝大家端午和六一快乐!原本今天是想歇息歇息的,可是实在无奈没什么事干.所以就来学习学习LCD显示图片的函数 函数是照搬奋斗的样例,算是些笔记吧.只是奋斗的样例凝视的不是非常具体.今天去看了正点原子的论 ...

  3. STM32 FSMC学习笔记+补充(LCD的FSMC配置)

    STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD

  4. (stm32学习总结)—LCD—液晶显示

    显示器简介 显示器属于计算机的 I/O 设备,即输入输出设备.它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具.常见的有 CRT 显示器.液晶显示器.LED 点阵显示器及OLED 显示器 本章 ...

  5. 嵌入式Linux驱动学习之路(十八)LCD驱动

    驱动代码: /************************************************************************* > File Name: lcd ...

  6. FL2440驱动添加(3)LCD驱动添加学习笔记

    FL2440 LCD内置控制器,320*240 TFT型LCD. 自我理解总结的两种添加驱动模式: 非platform方式添加驱动: 加载驱动: 1,硬件初始化,申请内存,并作地址映射 2,分配设备号 ...

  7. Smart210学习-----lcd驱动

    帧缓冲设备 1.1帧缓冲设备:帧缓冲(framebuffer)是 Linux 系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行 ...

  8. AM335x(TQ335x)学习笔记——LCD驱动移植

    TI的LCD控制器驱动是非常完善的,共通的地方已经由驱动封装好了,与按键一样,我们可以通过DTS配置完成LCD的显示.下面,我们来讨论下使用DTS方式配置内核完成LCD驱动的思路. (1)初步分析 由 ...

  9. Linux学习: LCD驱动

    一.LCD驱动框架: 1.分配一个fb_info结构体:s3c_lcd = framebuffer_alloc(0,NULL); 2.设置fb_info(s3c_lcd): ID.固定参数.可变参数. ...

随机推荐

  1. git操作+一个本地项目推到github上+注意

    git init 创建新文件夹,打开,然后执行以创建新的 git 仓库. git config --global user.name "xxx" git config --glob ...

  2. arcgis api 3.x for js 入门开发系列十叠加 SHP 图层(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  3. ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)视图母版页教程 ASP.NET Core MVC (Razor)带有Section的视图母版页教程 ASP.NET Cor ...

  4. 一个磁盘I/O故障导致的AlwaysOn FailOver 过程梳理和分析

    下面是我们在使用AlwaysOn过程中遇到的一个切换案例.这个案例发生在2014年8月,虽然时间相对久远了,但是对我们学习理解AlwaysOn的FailOver原理和过程还是很有帮助的.本次FailO ...

  5. 【公众号系列】SAP将裁员4400人,颤抖吧!

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]SAP将裁员4400人,颤抖吧! ...

  6. iOS 常用三方(持续更新)

    iOS 常用三方 1.ZWMSegmentController 分页控制器 https://github.com/weiming4219/ZWMSegmentController

  7. python3 dict(字典)

    clear(清空字典内容) stu = { 'num1':'Tom', 'num2':'Lucy', 'num3':'Sam', } print(stu.clear()) #输出:None copy( ...

  8. SQLServer之创建DML AFTER UPDATE触发器

    DML AFTER UPDATE触发器创建原理 触发器触发时,系统自动在内存中创建deleted表或inserted表,inserted表临时保存了插入或更新后的记录行,deleted表临时保存了删除 ...

  9. Python简单多进程demo

    ''' 多线程使用场景: 怎样用Python的多线程提高效率? io操作不占用CPU 计算操作占用CPU Python多线程不适合CPU操作密集型的任务,适合io操作密集型的任务 如果有CPU操作密集 ...

  10. .NET CORE学习笔记系列(2)——依赖注入[7]: .NET Core DI框架[服务注册]

    原文https://www.cnblogs.com/artech/p/net-core-di-07.html 包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IS ...