LCD学习

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 好好研究一下清屏函数:

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

他的本质就是往显存里边写数据,列地址好说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。

原文地址:https://www.cnblogs.com/947033916-fwh/p/8146573.html

时间: 2024-10-15 07:20:54

LCD学习的相关文章

tiny210(S5PV210)LCD控制器RGB配置相关学习记录

最近在弄210LCD的配置,在这里记录下一些学习的东西,有错恳请指正,互相学习. datasheet里面有好多名词,先记录一下一些名词的大概意思: alpha blending:本来采用R.G.B三通道来表示颜色,但是显示控制器分为5个图层,故图层混合时需要按照一定的比例因子来混合以实现图层的透明度,而不至于将背景图层完全覆盖掉,现在增加alpha通道来作为那个颜色混合时的调节因子,配置相关的设置后,透过调节alpha值则可以实现图层间透明度的控制,而所谓的透明度,相当于是两图层的按照不同的合成

STM32学习之路-LCD(2)&lt;LCD初始化&gt;

这些天一直在研究LCD的初始化函数,因为不过是用IO口模拟时序还是用FSMC来驱动LCD,都必须要弄好LCD的初始化 其实LCD的初始化就是跟着LCD IC的datasheet来写寄存器,大部分都使用上面的默认值,网上有很多修改的例子,这里就不 放出来了.但是我想写下一些比较重要的东西. 这是从网上下载来的一个文件的前半部分: 当然,别的型号的IC也是有这些东西的,不过可能有些地址不同而已. R0,这个命令有两个功能,如果对它写,则最低位为OSC,用于开启和关闭振荡器.而如果对它读操作, 则返回

LCD驱动学习笔记

通过这几天的学习发现驱动的框架感觉都差不多,一般分为以下几个步骤: 分配一个结构体 struct x *x = amlloc(); 设置结构体的参数 硬件寄存器 file_operations 注册 卸载 不同之处就是设置这一环节,lcd的驱动的框架就是这么回事,只不过设置的各项参数比较多. lcd的设置项包括 固定参数 可变参数 操作函数 硬件.寄存器 设置显存(framebuffer) 使能lcd

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

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

STM32学习之路-LCD驱动(1)&lt;基础知识&gt;

[1]以下关于 JVM 的叙述,哪些项正确? A.JVM 运行于操作系统之上,它依赖于操作系统 B.JVM 运行于操作系统之上,它与操作系统无关 C.JVM 支持 Java 程序运行,它能够直接运行 Java 字节码文件 D.JVM 支持 Java 程序运行,它能够直接运行 Java 源代码文件 扩展名为.java的是源代码文件(文本文件):开发时编写代码的文件 扩展名为.class的是字节码文件(二进制):系统运行时执行的文件 [2]下列选项中正确的表达式是: A.byte b = 128; 

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

祝大家端午和六一快乐!原本今天是想休息休息的,但是实在无奈没什么事干.所以就来学习学习LCD显示图片的函数 函数是照搬奋斗的例子,算是些笔记吧.不过奋斗的例子注释的不是很详细.今天去看了正点原子的论坛,唉..瞬间感觉正点原子做得真的很好 能把所有的资料都开源,并且论坛上大多问题都耐心的解答了.这实在是非常非常好的售后服务了!!自己也偷偷的去下了写资料来看看,(*^__^*) 嘻嘻-- 好,进入主题: 开发板:奋斗V5 LCD:3寸 400X240 直接上代码吧 void lcd_DrawPict

I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之LCD移植

经过前面的移植,eMMC已经可以在tqimx6q上正常运行了,本文将来移植LCD驱动. DTS编写 imx6的LCD控制器与之前的芯片略有不同,详细的信息可以阅读芯片手册.参考sabrelite开发板的DTS,我们可以添加如下内容: / { ... aliases { mxcfb0 = &mxcfb1; }; ... regulators { ... reg_mipi_dsi_pwr_on: mipi_dsi_pwr_on { compatible = "regulator-fixed&

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

TI的LCD控制器驱动是非常完善的,共通的地方已经由驱动封装好了,与按键一样,我们可以通过DTS配置完成LCD的显示.下面,我们来讨论下使用DTS方式配置内核完成LCD驱动的思路. (1)初步分析 由于TQ335x使用的芯片是AM335x,故仍然可以参考am335x-evm.dts.当然,am335x-evmsk.dts.am335x-beagbone.dts都可以.本文以am335x-evm.dts为例.大体上浏览下DTS文件,可以发现两个醒目的节点:一个是panel,一个是backlight

祼机源码学习笔记(一):LCD之Makefile

主Makefile总领全局的就这句—— lcd.bin: $(objs) 要生成lcd.bin,依赖于objs列举的一堆文件:head.o init.o nand.o interrupt.o serial.o lcddrv.o framebuffer.o lcdlib.o main.o lib/libc.a 所以要先找到这些文件,几个.o,还有一个.a .o目标文件怎么生成? %.o:%.c和%.o:%.S是生成规则,就是依赖于.c或.S文件,使用交叉编译命令生成. .a是库文件,到lib子目录