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. 如何解决angular不自动生成spec.ts文件

    "schematics":{   "@schematics/angular:component": {        "styleext": ...

  2. ArcGIS 网络分析[1] 利用自定义点线数据(shp或数据库)创建网络数据集【小白向】

    前言 似乎除了官方介绍的例子,我还没有在网上见过一篇介绍如何“使用自己的数据”创建“网络数据集”的文章. 究其原因,是因为当前的高质量的线数据或保密,或采集困难. 有介绍几何网络的,有介绍如何用官方S ...

  3. 为你揭秘知乎是如何搞AI的——窥大厂 | 数智方法论第1期

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 数智物语(公众号ID:decision_engine)出品 策划.编写:卷毛雅各布 「我们相信,在垃圾 ...

  4. .net mvc session失效问题

    最近解决基于.net mvc项目的session失效问题,这个跟大家聊聊. 1.问题分析 .net mvc中,Session失效需要考虑几种情况: 基于权限认证的Action,使用非Ajax请求: 基 ...

  5. Idea软件中隐藏忽略.idea,.iml等文件

    参考链接,https://blog.csdn.net/fanrenxiang/article/details/80533950 ignore files and folders;增加隐藏的文件类型:

  6. Git:修改Git Bash默认打开位置(win10)

    1.起因 大家写的代码不可能直接保存在根目录下,但是Git Bash每次一打开就是根目录,每次都要切换路径很麻烦. 2.修改Git Bash默认打开位置 1)Git Bash右键 -> 属性 2 ...

  7. whistle

    whistle介绍 whistle是基于Node的跨平台web调试代理工具, 主要查看, 修改HTTP, HTTPS, Websocket的请求,响应, 也可以作为HTTP代理服务器使用 (文档)[h ...

  8. WPF开源项目

    WPF有很多优秀的开源项目,我以为大家都知道,结果,问了很多人,其实他们不知道.唉,太可惜了! 先介绍两个比较牛逼的界面库 1.MaterialDesignInXamlToolkit Android风 ...

  9. MySQL 基础知识梳理学习(二)----记录在页面层级的组织管理

    1.InnoDB的数据存储结构 InnoDB中数据是通过段.簇.页面构成的. (1)段是表空间文件中的主要组织结构,它是一个逻辑概念,用来管理物理文件,是构成索引.表.回滚段的基本元素.创建一个索引( ...

  10. Kafka相关内容总结(存储和性能)

    Kafka消息的存储 Kafka的设计基于一种非常简单的指导思想:不是要在内存中保存尽可能多的数据,在需要时将这些数据刷新(flush)到文件系统,而是要做完全相反的事情.所有数据都要立即写入文件系统 ...