液晶驱动心得【ili9325】

合集下载

stm32 TFT液晶

stm32 TFT液晶

Stm32的TFT LCD显示器控制学习笔记学习stm32,TFT LCD显示屏控制是很重要的一章,本人在初步学习STM32遇到了很多困难,所以把学习中积累的部分感觉重要的知识点罗列出来。

目前常用的TFT液晶内部驱动芯片是ILI9320,ILI9325系列,内部原理基本一致,我用的是ILI9320。

用stm32驱动液晶,实际上就是驱动ILI9320芯片。

点亮TFT LCD的具体步骤有:(1)stm32与ILI9320芯片管脚的初始化。

void LCD_Init(void); /*初始化LCD,也就是初始化LCD控制器ILI9320芯片与stm32控制器的管脚连接配置*/其中包括CS:TFTLCD片选信号,WR:向TFTLCD写入信号,RD:从TFTLCD读取信号,DB(15--0):16位双向数据线,RST:硬复位TFTLCD,RS:命令/数据标志(0 读写命令;1 读写数据),TFT模块有个控制器,名为ILI9320,该控制器自带显存,其显存总大小为172820,模块数据线与显存的对应关系位565方式SGRAM (Synchronous Graphics Random-Access Memory),同步图形随机存储器,是一种专为显卡设计的显存、一种图形读写能力较强的显存,由SDRAM改良而成。

SGRAM 读写数据时不是一一读取,而是以“块”(Block)为单位,从而减少了内存整体读写的次数,提高了图形控制器的效率。

同SDRAM一样,SGRAM也分普通SGRAM与DDR SGRAM 两种。

R0,这个命令有两个功能,如果对它写,则最低位位OSC,用于开启或关闭振荡器,而如果对它读,返回控制器型号。

我们知道了控制器型号,可以针对不同型号的控制器,进行不同对的初始化。

R3,入口模式命令。

重点关注I/D0,I/D1,AM这三个位,因为这3个位控制了屏幕的显示方向。

AM:控制GRAM更新方向,当AM=0的时候,地址以行方向更新,当为1的时候,地址以列方向更新。

ILI9325控制命令

ILI9325控制命令

8.2. Instruction DescriptionsNo. Registers Name R/W RS D15D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0IR Index Register W 0 - - - - - - - - ID7 ID6 ID5 ID4 ID3 ID2 ID1 ID000h Driver Code Read R 1 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 101h Driver Output Control 1 W 1 0 0 0 0 0 SM 0 SS 0 0 0 0 0 0 0 002h LCD Driving Control W 1 0 0 0 0 0 0 BC0 EOR 0 0 0 0 0 0 0 0 Mode W 1 TRI DFM0 BGR 0 0 HWM 0 ORG0 I/D1 I/D0 AM 0 0 003h Entry04h Resize Control W 1 0 0 0 0 0 0 RCV1 RCV00 0 RCH1RCH00 0 RSZ1 RSZ007h Display Control 1 W 1 0 0 PTDE1PTDE00 0 0 BASEE0 0 GON DTE CL 0 D1 D008h Display Control 2 W 1 0 0 0 0 FP3 FP2 FP1 FP0 0 0 0 0 BP3 BP2 BP1 BP009h Display Control 3 W 1 0 0 0 0 0 PTS2 PTS1 PTS0 0 0 PTG1 PTG0ISC3 ISC2 ISC1 ISC00Ah Display Control 4 W 1 0 0 0 0 0 0 0 0 0 0 0 0 FMARKOE FMI2 FMI1 FMI00Ch RGB Display Interface Control 1 W 1 0 ENC2ENC1ENC00 0 0 RM 0 0 DM1 DM0 0 0 RIM1 RIM00Dh Frame Maker Position W 1 0 0 0 0 0 0 0 FMP8FMP7FMP6FMP5FMP4FMP3 FMP2 FMP1 FMP00Fh RGB Display Interface Control 2 W 1 0 0 0 0 0 0 0 0 0 0 0 VSPL HSPL 0 DPL EPL10h Power Control 1 W 1 0 0 0 SAP 0 BT2 BT1 BT0 APE AP2 AP1 AP0 0 DSTB SLP STB11h Power Control 2 W 1 0 0 0 0 0 DC12DC11 DC100 DC02DC01 DC00 0 VC2VC1 VC012h Power Control 3 W 1 0 0 0 0 0 0 0 0 VCIRE0 0 PON VRH3 VRH2 VRH1 VRH013h Power Control 4 W 1 0 0 0 VDV4VDV3 VDV2VDV1 VDV00 0 0 0 0 0 0 020h Horizontal GRAM Address Set W 1 0 0 0 0 0 0 0 0 AD7 AD6 AD5 AD4 AD3 AD2AD1 AD021h Vertical GRAM Address Set W 1 0 0 0 0 0 0 0 AD16AD15AD14AD13 AD12 AD11 AD10 AD9 AD822h Write Data to GRAM W 1 RAM write data (WD17-0) / read data (RD17-0) bits are transferred via different data bus lines according to the selected interfaces.29h Power Control 7 W 1 0 0 0 0 0 0 0 0 0 0 VCM5VCM4VCM3 VCM2 VCM1 VCM02Bh Frame Rate and Color Control W 1 0 0 0 0 0 0 0 0 0 0 0 0 FRS[3] FRS[2] FRS[1] FRS[0]30h Gamma Control 1 W 1 0 0 0 0 0 KP1[2]KP1[1] KP1[0]0 0 0 0 0 KP0[2] KP0[1] KP0[0]31h Gamma Control 2 W 1 0 0 0 0 0 KP3[2]KP3[1] KP3[0]0 0 0 0 0 KP2[2] KP2[1] KP2[0]32h Gamma Control 3 W 1 0 0 0 0 0 KP5[2]KP5[1] KP5[0]0 0 0 0 0 KP4[2] KP4[1] KP4[0]35h Gamma Control 4 W 1 0 0 0 0 0 RP1[2]RP1[1] RP1[0]0 0 0 0 0 RP0[2] RP0[1] RP0[0]36h Gamma Control 5 W 1 0 0 0 VRP1[4]VRP1[3]VRP1[2]VRP1[1] VRP1[0]0 0 0 0 VRP0[3]VRP0[2] VRP0[1] VRP0[0]37h Gamma Control 6 W 1 0 0 0 0 0 KN1[2]KN1[1] KN1[0]0 0 0 0 0 KN0[2] KN0[1] KN0[0]38h Gamma Control 7 W 1 0 0 0 0 0 KN3[2]KN3[1] KN3[0]0 0 0 0 0 KN2[2] KN2[1] KN2[0]39h Gamma Control 8 W 1 0 0 0 0 0 KN5[2]KN5[1] KN5[0]0 0 0 0 0 KN4[2] KN4[1] KN4[0]3Ch Gamma Control 9 W 1 0 0 0 0 0 RN1[2]RN1[1] RN1[0]0 0 0 0 0 RN0[2] RN0[1] RN0[0]3Dh Gamma Control 10 W 1 0 0 0 VRN1[4]VRN1[3]VRN1[2]VRN1[1] VRN1[0]0 0 0 0 VRN0[3]VRN0[2] VRN0[1] VRN0[0]1 0 0 0 0 0 0 0 0 HSA7HSA6HSA5 HSA4HSA3 HSA2 HSA1 HSA0Start WAddress50h HorizontalNo. Registers Name R/W RS D15D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 Position51h Horizontal Address End Position W 1 0 0 0 0 0 0 0 0 HEA7HEA6HEA5HEA4HEA3HEA2HEA1HEA0 52h VerticalAddressStartPositionW1 0 0 0 0 0 0 0VSA8VSA7VSA6VSA5VSA4VSA3VSA2VSA1VSA0 53h VerticalAddressEndPositionW1 0 0 0 0 0 0 0VEA8VEA7VEA6VEA5VEA4VEA3VEA2VEA1VEA0 60h Driver Output Control 2 W 1 GS 0 NL5 NL4 NL3 NL2 NL1 NL0 0 0 SCN5SCN4SCN3 SCN2 SCN1 SCN061h Base Image Display Control W 1 0 0 0 0 0 0 0 0 0 0 0 0 0 NDL VLE REV6Ah Vertical Scroll Control W 1 0 0 0 0 0 0 0 VL8 VL7 VL6 VL5 VL4 VL3 VL2 VL1 VL080h Partial Image 1 Display Position W 1 0 0 0 0 0 0 0 PTDP08PTDP07PTDP06PTDP05PTDP04PTDP03PTDP02 PTDP01 PTDP0081h Partial Image 1 Area (Start Line) W 1 0 0 0 0 0 0 0 PTSA08PTSA07PTSA06PTSA05PTSA04PTSA03PTSA02 PTSA01 PTSA0082h Partial Image 1 Area (End Line)W 1 0 0 0 0 0 0 0 PTEA08PTEA07PTEA06PTEA05PTEA04PTEA03PTEA02 PTEA01 PTEA0083h Partial Image 2 Display Position W 1 0 0 0 0 0 0 0 PTDP18PTDP17PTDP16PTDP15PTDP14PTDP13PTDP12 PTDP11 PTDP1084h Partial Image 2 Area (Start Line) W 1 0 0 0 0 0 0 0 PTSA18PTSA17PTSA16PTSA15PTSA14PTSA13PTSA12 PTSA11 PTSA1085h Partial Image 2 Area (End Line)W 1 0 0 0 0 0 0 0 PTEA18PTEA17PTEA16PTEA15PTEA14PTEA13PTEA12 PTEA11 PTEA1090h Panel Interface Control 1 W 1 0 0 0 0 0 0 DIVI1 DIVI000 0 0 0 RTNI3 RTNI2 RTNI1 RTNI092h Panel Interface Control 2 W 1 0 0 0 0 0 NOWI2NOWI1 NOWI00 0 0 0 0 0 0 095h Panel Interface Control 4 W 1 0 0 0 0 0 0 DIVE1 DIVE00 0 RTNE5RTNE4RTNE3RTNE2 RTNE1 RTNE0A1h OTP VCM Programming Control W 1 0 0 0 0 OTP_PGM_EN 0 0 0 0 0 VCM_OTP5VCM_OTP4VCM_OTP3VCM_OTP2VCM_OTP1VCM_OTP0A2h OTP VCM Status and Enable W 1 PGM_CNT1PGM_CNT0VCM_D5VCM_D4VCM_D3VCM_D2VCM_D1VCM_D00 0 0 0 0 0 0VCM_ENA5h OTP Programming ID Key W 1 KEY15 KEY14KEY13KEY12KEY11KEY10KEY9KEY8KEY7KEY6KEY5KEY4KEY3KEY2KEY1KEY。

9325操作要点

9325操作要点

用逆向思维方法教你10分钟学会ILI9325液晶的驱动【转】只要你有点基础-知道什么叫地址,什么叫指针,会玩流水灯,菜鸟可以在我这里学会,老鸟可以节省很多宝贵的时间一会就能学会不用去看冥长的数据手册。

一般产品手册上教的是你怎么用单片机操作他们生产的模块我的逆向思维法是告诉你他们的模块是怎么接受和识别你所发出的指令好处有两个:一是瞬间学会二是了解机理后,语句上更灵活精简好了,开始说正题。

首先要了解下几个引脚的功能和两大寄存器和把数据线接对。

把IO口置为推挽方式一.指令寄存器(从GRAM跳转到这里的方法是RS=0)RESET 这个是复位,不需要我解释了吧CS :片选它的作用是除了字面上的意思外,还有个和SPI总线的NSS脚一样的作用:重新定义数据头,如果通讯重出现数据错位的话这个脚就起到作用了RS :数据 or 地址(低电平就把你赋到数据口上的值当做地址来操作地址指针。

高电平时写的数据被放进相应寄存器里)RD :读(下降沿生效)WR :写(上升沿生效)DB0-DB17 :数据脚二。

GRAM--是个矩阵,每个点对应屏幕上的一个点(从指令寄存器跳转到这里的方法是将指令寄存器的地址写0X0022(这里是指令寄存器的出口))1.底层协议和基本函数(后面我具体讲)2.操作寄存器来实现初始化其代码比较复杂上网或者找朋友要份代码抄一下,想深入研究的朋友可以找份中文的寄存器说明看下。

只要屏来做显示用的朋友没有必要看了3。

划定具体显示区域,默认是地址每写一位会自动加1超过分界回自动循环(一般是 X为 0-239 ,Y为 0-319。

当然也可以定义更小的区域)这个在寄存器0X0050,0X0051,0X0052,0X0053里操作。

4.把GRAM指针移动到指定位置,类似1602液晶光标的作用,它不会显示出来。

指令是行坐标是操作 0x0020寄存器列坐标是操作 0x0021寄存器5。

会了上面这些接着就简单了初始化--划显示区域--移动GRAM坐标到想要的起始位置--写0X0022把指针移动到GRAM--对数据端口赋值,WR每个上升沿9325会把该值写进GRAM并显示出来(保证RS为高)6.至于还有个8位总线,硬件是接DB10-DB17。

液晶显示驱动原理心得体会(共5篇)

液晶显示驱动原理心得体会(共5篇)

液晶显示驱动原理心得体会(共5篇)第一篇:液晶显示驱动原理心得体会SZRD 了解液晶顯示驅動原理1.Cs(storage capacitor)储存电容架构不同, 所形成不同驱动系统架构的原理。

(1).Cs on gate:儲存電容利用gate走線來完成。

優點:1)不需要增加一条额外的common走线,開口率(Aperture ratio)較大。

2)不影響儲存電容上儲存電壓的大小(響應時間影響有限)。

(2).Cs on common:儲存電容利用common走線來完成。

2.整块面板的电路架构。

(1).以一个1024*768分辨率的TFT LCD来说,共需要1024*768*3个点(每一个TFT与Clc跟Cs所并联的电容, 代表一个显示的点;三个RGB三原色代表一个基本的显示单元pixel)组合而成.(2).由gate driver所送出的波形,依序将每一行的TFT打开, 好让整排的source driver同时将一整行的显示点, 充电到各自所需的电压, 显示不同的灰阶.如此依序下去。

3.面板的各种极性变换方式。

(1).由于液晶分子有一种特性,就是不能够一直固定在某一个电压不变, 不然时间久了, 你即使将电压取消掉, 液晶分子会因为特性的破坏, 而无法再因应电场的变化来转动, 以形成不同的灰阶.避免当液晶分子转向一直固定在一个方向时, 所造成的特性破坏.也就是说, 当显示画面一直不动时, 我们仍然可以由正负极性不停的交替, 达到显示画面不动, 同时液晶分子不被破坏掉特性的结果.(2).面板各種極性變換方式:1)frame inversion2)row inversion与column inversion3)dot inversion4)delta inversionmon電極的驅動方式:(1).common電壓固定不變的驅動方式。

(2).common電壓不停變動的驅動方式。

1.面板极性变换与common电极驱动方式的选用:2.各种面板极性变换的比较:5.SVGA分辨率的二阶驱动: 指gate driver的输出电压仅有两种数值,一为打开电压,一为关闭电压.1.feed through电压:成因主要是因为面板上其它电压的变化,经由寄生电容或是储存电容,影响到显示电极电压的正确性.(1)CS on common時Common電壓不變之feed through。

lcd驱动原理

lcd驱动原理

lcd驱动原理LCD驱动原理是指控制液晶显示器(LCD)工作的基本原理和方法。

液晶显示器是一种利用液晶材料的光学特性显示图像的平面显示器。

它通过一个特定的驱动电路将电信号转换为显示图像。

液晶显示器通常由玻璃基板、像素点阵列、驱动电路和灯管组成。

驱动电路起着核心作用,它可以控制每个像素点的电压和开关状态,以达到控制显示效果的目的。

液晶显示器通常采用被动矩阵驱动方式,即通过一个行列排布的驱动电路进行控制。

在驱动电路中,液晶材料扮演着关键角色。

液晶有两种典型状态:向列头方向扭曲和向列尾方向扭曲。

液晶分子扭曲程度决定了其透光性,从而实现信息的显示。

驱动电路通过施加电场来控制液晶分子的扭曲程度。

当电压施加到液晶层时,液晶分子会因电场作用而扭曲,从而改变光的传播路径。

通过改变施加的电压,可以控制液晶分子的扭曲程度,从而调整显示的亮度和颜色。

液晶显示器驱动电路通常由逐行扫描和逐列输出两个阵列组成。

逐行扫描阵列控制每行液晶分子的扭曲程度,逐列输出阵列则控制输出的电压。

通过逐行扫描和逐列输出的方式,可以实现对整个显示器的控制。

驱动电路还包括了时序控制和温度补偿等功能。

时序控制是为了保证电路产生准确的电压和信号,使液晶分子能够按照预定的方式扭曲。

而温度补偿则是为了解决液晶分子在不同温度下的扭曲程度不同的问题,以保证显示的准确性和稳定性。

总之,LCD驱动原理是通过控制驱动电路中液晶分子的扭曲来实现显示效果的原理。

驱动电路中的逐行扫描和逐列输出阵列,以及时序控制和温度补偿功能等,都是为了保证显示器能够正确地显示出图像和信息。

液晶显示器的工作原理及驱动技术

液晶显示器的工作原理及驱动技术

液晶显示器的工作原理及驱动技术液晶显示器是现代电子设备中常见的显示器类型之一。

它在计算机、手机、电视等领域都有广泛的应用。

本文将介绍液晶显示器的工作原理和驱动技术,以帮助读者更好地理解和应用液晶显示器。

一、液晶显示器的工作原理液晶显示器利用液晶材料的光学特性来实现图像的显示。

液晶材料是一种介于固体和液体之间的特殊物质,它有着与普通液体不同的结构和行为。

液晶分子具有顺直排列的特点,在没有外界电场作用下,液晶分子呈现有序排列。

当外界电场加入后,液晶分子会发生取向变化,从而改变光的透过性能。

这种现象被称为液晶分子的电光效应。

液晶显示器通常由液晶面板和背光源组成。

其中,液晶面板是用来控制光通过的关键部件。

液晶面板由两块平行排列的玻璃基板构成,中间填充有液晶材料。

玻璃基板上覆盖有透明电极,用来施加电场。

当液晶显示器中的电路向液晶材料施加电场时,液晶分子会产生取向变化,光的透过性能也会相应变化。

通过控制电场的强弱和方向,可以实现对液晶分子的控制,从而达到显示图像的目的。

二、液晶显示器的驱动技术液晶显示器的驱动技术是指通过电路系统来控制液晶显示器的工作状态和图像显示。

液晶显示器的驱动技术涉及到多个方面的内容,以下是其中的几个关键技术。

1. 像素驱动技术液晶显示器的最小显示单元是像素,每个像素包含若干液晶分子和透明电极。

像素驱动技术主要包括主动矩阵和被动矩阵两种类型。

主动矩阵驱动技术使用TFT(薄膜晶体管)来控制每个像素的电压,可以实现高分辨率和快速响应。

而被动矩阵驱动技术使用传统的电路布线方式来控制像素,成本较低,但响应速度较低。

2. 背光源驱动技术液晶显示器需要背光源来提供光源,使图像能够显示。

背光源驱动技术一般采用冷阴极荧光灯(CCFL)或LED(发光二极管)作为背光。

通过分区域控制背光亮度,可以提高图像的对比度和色彩表现。

此外,还可以采用调光技术来控制背光的明暗程度,以适应不同亮度环境的显示需求。

3. 触摸屏技术液晶显示器常常与触摸屏技术结合使用,以实现触摸操作。

stm32驱动ILI9325

stm32驱动ILI9325

LCD.C#include "LCD.h"#include "fsmc_sram.h"//定义驱动IC是ILI9320还是ILI9325#define ILI9325 //ILI9325//屏幕旋转定义数字按照 ID[1:0]AM 按照PDF中的配置定义#define ID_AM 110void Wr_LCD_Data(u16 Data);void Wr_LCD_Reg(u16 Reg_Addr,u16 Data);void Lcd_SetCursor(u8 x,u16 y);void Lcd_Clear(u16 Color);void LCD_ExitSleep_ILI9325(void);static void LCD_Delay(u32 Delay_Time){while(Delay_Time>0){Delay_Time--;}}void Wr_LCD_Reg(u16 Reg_Addr,u16 Data){FSMC_SRAM_WriteBuffer(&Reg_Addr, 0x00000000, 1); FSMC_SRAM_WriteBuffer(&Data, 0x00000001, 1);}void Wr_LCD_Data(u16 Data){FSMC_SRAM_WriteBuffer(&Data, 0x00000001, 1);}int LCD_Init(void){int i;// 测试16根数据线/*while(1){Wr_LCD_Data(0xffff);LCD_Delay(100);Wr_LCD_Data(0x0000);}*/GPIO_SetBits(GPIOG,GPIO_Pin_4);LCD_Delay(1000);GPIO_ResetBits(GPIOG,GPIO_Pin_4);LCD_Delay(40000);GPIO_SetBits(GPIOG,GPIO_Pin_4);LCD_Delay(1000); //LCD Reset.//Start Initial Sequence//Wr_LCD_Reg(0x00E3, 0x3008); // Set internal timingWr_LCD_Reg(0x00E7, 0x0012); // Set internal timingWr_LCD_Reg(0x00EF, 0x1231); // Set internal timingWr_LCD_Reg(0x0001, 0x0100); // set SS and SM bitWr_LCD_Reg(0x0002, 0x0700); // set 1 line inversionWr_LCD_Reg(0x0003, 0x1030); // set GRAM write direction and BGR=1.Wr_LCD_Reg(0x0004, 0x0000); // Resize registerWr_LCD_Reg(0x0008, 0x0207); // set the back porch and front porchWr_LCD_Reg(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0] Wr_LCD_Reg(0x000A, 0x0000); // FMARK function/////////////////Wr_LCD_Reg(0x000C, 0x0000); // RGB interface setting////////////////Wr_LCD_Reg(0x000D, 0x0000); // Frame marker PositionWr_LCD_Reg(0x000F, 0x0000); // RGB interface polarity//Power On sequence//Wr_LCD_Reg(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STBWr_LCD_Reg(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]Wr_LCD_Reg(0x0012, 0x0000); // VREG1OUT voltageWr_LCD_Reg(0x0013, 0x0000); // VDV[4:0] for VCOM amplitudeLCD_Delay(200); // Dis-charge capacitor power voltageWr_LCD_Reg(0x0010, 0x1490); // SAP, BT[3:0], AP, DSTB, SLP, STBWr_LCD_Reg(0x0011, 0x0227); // DC1[2:0], DC0[2:0], VC[2:0]LCD_Delay(50); // Delay 50msWr_LCD_Reg(0x0012, 0x001C); // Internal reference voltage= Vci;LCD_Delay(50); // Delay 50msWr_LCD_Reg(0x0013, 0x1A00); // Set VDV[4:0] for VCOM amplitudeWr_LCD_Reg(0x0029, 0x0025); // Set VCM[5:0] for VCOMHWr_LCD_Reg(0x002B, 0x000C); // Set Frame RateLCD_Delay(50); // Delay 50msWr_LCD_Reg(0x0020, 0x0000); // GRAM horizontal AddressWr_LCD_Reg(0x0021, 0x0000); // GRAM Vertical Address// ----------- Adjust the Gamma Curve ----------//Wr_LCD_Reg(0x0030, 0x0000);Wr_LCD_Reg(0x0031, 0x0506);Wr_LCD_Reg(0x0032, 0x0104);Wr_LCD_Reg(0x0035, 0x0207);Wr_LCD_Reg(0x0036, 0x000F);Wr_LCD_Reg(0x0037, 0x0306);Wr_LCD_Reg(0x0038, 0x0102);Wr_LCD_Reg(0x0039, 0x0707);Wr_LCD_Reg(0x003C, 0x0702);Wr_LCD_Reg(0x003D, 0x1604);//------------------ Set GRAM area ---------------//Wr_LCD_Reg(0x0050, 0x0000); // Horizontal GRAM Start Address Wr_LCD_Reg(0x0051, 0x00EF); // Horizontal GRAM End Address Wr_LCD_Reg(0x0052, 0x0000); // Vertical GRAM Start Address Wr_LCD_Reg(0x0053, 0x013F); // Vertical GRAM Start Address Wr_LCD_Reg(0x0060, 0xA700); // Gate Scan LineWr_LCD_Reg(0x0061, 0x0001); // NDL,VLE, REVWr_LCD_Reg(0x006A, 0x0000); // set scrolling line//-------------- Partial Display Control ---------//Wr_LCD_Reg(0x0080, 0x0000);Wr_LCD_Reg(0x0081, 0x0000);Wr_LCD_Reg(0x0082, 0x0000);Wr_LCD_Reg(0x0083, 0x0000);Wr_LCD_Reg(0x0084, 0x0000);Wr_LCD_Reg(0x0085, 0x0000);//-------------- Panel Control -------------------//Wr_LCD_Reg(0x0090, 0x0010);Wr_LCD_Reg(0x0092, 0x0600);Wr_LCD_Reg(0x0007, 0x0133); // 262K color and display ON// LCD_ExitSleep_ILI9325();return 1;}void LCD_ExitSleep_ILI9325(void){//*************Power On sequence ******************//Wr_LCD_Reg(0x0010, 0x0080); // SAP, BT[3:0], AP, DSTB, SLPWr_LCD_Reg(0x0011, 0x0000); // DC1[2:0], DC0[2:0], VC[2:0]Wr_LCD_Reg(0x0012, 0x0000); // VREG1OUT voltageWr_LCD_Reg(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude LCD_Delay(200); // Dis-charge capacitor power voltageWr_LCD_Reg(0x0010, 0x1490); // SAP, BT[3:0], AP, DSTB, SLP, STB Wr_LCD_Reg(0x0011, 0x0227); // DC1[2:0], DC0[2:0], VC[2:0]LCD_Delay(50); // Delay 50msWr_LCD_Reg(0x0012, 0x001C); //Inernal reference voltage =Vci; LCD_Delay(50); // Delay 50msWr_LCD_Reg(0x0013, 0x1A00); // VDV[4:0] for VCOM amplitude Wr_LCD_Reg(0x0029, 0x0025); // VCM[5:0] for VCOMHLCD_Delay(50); // Delay 50msWr_LCD_Reg(0x0007, 0x0133); // 262K color and display ON}void Lcd_SetCursor(u8 x,u16 y){Wr_LCD_Reg(0x20,x);Wr_LCD_Reg(0x21,y);}void Lcd_Clear(u16 Color){u32 temp;Lcd_SetCursor(0x00, 0x0000);Wr_LCD_Reg(0x0050,0x00);//水平 GRAM起始位置Wr_LCD_Reg(0x0051,239);//水平GRAM终止位置Wr_LCD_Reg(0x0052,0x00);//垂直GRAM起始位置Wr_LCD_Reg(0x0053,319);//垂直GRAM终止位置for (temp = 0; temp < 76800; temp++){Wr_LCD_Data(Color);}}。

TFT彩屏使用说明书

TFT彩屏使用说明书
| | | | | | | | | | | | | | | | | | | |
G V N R W R D D D D D D D D R L C N
N C C S R D B B B B B B B B S E S C
D C 0 1 2 3 4 5 6 7 T D
IA
N
| | | | | | | | | | | | | | | | | | | |
CLR_Screen(BLUE);//清屏蓝色
函数名:Put_pixel
功能:在屏幕上画点
函数原型:void Put_pixel(uchar x,uchar y,unsigned int color);
入口参数:x,y 需要画点的坐标,color为点的颜色
出口参数:无
说明:在屏幕上指定的坐标画指定颜色的点
unsigned int forecolor,
unsigned intbkcolor);
入口参数:x 横坐标,y 纵坐标
bColor 字符背景颜色
出口参数:无
说明:需包含"8X16.h",显示数字、大小写英文字符和一些符号等
示例代码:
LCD_PutChar8x16(0,0,'Z',RED,BLUE);//显示英文字符Z
函数名:PutGB1616
功能:显示16*16汉字
函数原型:void PutGB1616
(uR_Screen
功能:清屏
函数原型:void CLR_Screen(unsigned intbColor);
入口参数:bColor清除屏幕的的颜色
出口参数:无
说明:使用背景色清除屏上所有内容
示例代码:
CLR_Screen(0xf800);//清屏红色

STM32单片机ILI9325系列TFT的驱动原理解析

STM32单片机ILI9325系列TFT的驱动原理解析
#define Clr_nRdnRdPin_Port-》BRR = nRdPin // GPIO_ResetBits(nRdPin_Port,nRdPin)
#define Set_RstnRstPin_Port-》BSRR = nRstPin// GPIO_SetBits(nRstPin_Port,nRstPin)
#define Set_nWrnCsPin_Port-》BSRR = nWrPin // GPIO_SetBits(nWrPin_Port,nWrPin)
#define Clr_nWrnCsPin_Port-》BRR = nWrPin // GPIO_ResetBits(nWrPin_Port,nWrPin)
void Lcd_Configuration(void); //初始化GPIO
void LCD_ili9320_IniTIalizTIon(void); //初始化ILI9320---uCGUI需要使
void LCD_ili9320_BackLight(u8 status); //背光
#define Set_Rs RsPin_Port-》BSRR = RsPin// GPIO_SetBits(RsPin_Port,RsPin)
#define Clr_Rs RsPin_Port-》BRR = RsPin // GPIO_ResetBits(RsPin_Port,RsPin)
#define Set_nRdnRdPin_Port-》BSRR = nRdPin// GPIO_SetBits(nRdPin_Port,nRdPin)
STM32单片机ILI9325系列TFT的驱动原理解析
为了更好,更深入学习了解ILI9325系列TFT的驱动原理,自己做了一块TFT板子。为了方便测试,在上面集成了STM32芯片,到时候做实验的时候就焊接STM32测试,如果只是使用,就直接焊接TFT就行了。板子还在做,先上原理图与PCB。

TFTLCD液晶显示器的驱动原理详解

TFTLCD液晶显示器的驱动原理详解

TFTLCD液晶显示器的驱动原理详解1.TFT液晶显示器的像素控制TFT液晶显示器由很多个像素点组成,每个像素点由一个TFT晶体管和一个液晶单元组成。

驱动原理中的像素控制指的是对每个像素点的亮度和颜色进行控制。

首先,通过扫描线进行逐行的行选择,确定需要刷新的像素点的位置。

然后,通过控制每个像素点的TFT晶体管的门电压,来控制像素点是否导通,从而决定其亮度。

最后,通过改变液晶单元的偏振方向和强度,来调整像素点显示的颜色。

2.TFT液晶显示器的背光控制TFT液晶显示器需要背光来照亮像素点,使其显示出来。

背光控制是驱动原理中非常重要的一部分。

通常,TFT液晶显示器采用CCFL(冷阴极荧光灯)或LED(发光二极管)作为背光源。

背光的亮度可以通过控制背光源的电压或电流来实现。

在驱动原理中,通过在适当的时间段内给背光源供电,来控制背光的开关和亮度,进而实现对显示器亮度的控制。

3.TFT液晶显示器的数据传输TFT液晶显示器的驱动原理还涉及到数据的传输和刷新。

液晶显示器通常使用串行并行转换器将来自图形处理器(GPU)或其他输入源的图像信号转换为液晶显示器可接受的格式。

在驱动原理中,通过控制驱动芯片中的数据线和时钟线,将每个像素点对应的图像数据传输到相应的位置,从而实现图像的显示。

此外,TFT液晶显示器的驱动原理还包括时序控制和电压控制。

时序控制用于控制图像数据的传输速率和刷新频率,以确保图像的稳定和流畅;电压控制用于确定液晶单元的电压,以实现相应的亮度和颜色效果。

总结起来,TFT液晶显示器的驱动原理主要涉及像素控制、背光控制、数据传输、时序控制和电压控制。

每个像素点的亮度和颜色通过TFT晶体管和液晶单元的控制实现,背光通过背光源的控制实现,数据通过驱动芯片的控制传输到相应的位置。

通过精确的控制和调整,TFT液晶显示器能够呈现出清晰、鲜艳的图像。

2.4寸TFT彩屏使用技巧

2.4寸TFT彩屏使用技巧

2.4寸彩屏使用技巧1.驱动芯片ILI9325ILI9325与ILI9328兼容2.使用技巧(1) R01h寄存器设置SS=0,SM=0,GS=0与SS=1,SM=0,GS=1可实现屏幕上下反转(2)R60h,R61h寄存器通过设置REV可实现图像的灰度反转;当NDL=0时,非显示区显示为白色;当NDL=0时,非显示区显示为黑色。

(3)局部影像1与局部影像2设置LCD_clearscreen(CYAN); //清屏write_com_data(0x81,40); //设置局部影像1write_com_data(0x82,79);write_com_data(0x80,40);write_com_data(0x84,120); //设置局部影像2write_com_data(0x85,279);write_com_data(0x83,120);write_com_data(0x07,0x3033);图1 设置NDL=0,局部影像效果图图2 设置NDL=1,局部影像效果图(4)显示控制器R07h设置D1D0=00时,关闭显示面板,内部显示操作停止;设置D1D0=11时,打开显示面板;设置D1D0=01,GON=1,DTE=0时,显示面板关闭,内部显示操作运作,而面板上的原画面会继续显示1s~1.4s后会逐渐变淡,最后变为全白;设置D1D0=01,GON,DTE为00/01/11时,显示面板关闭,且会瞬间变为全白,内部显示操作运作;设置BASEE=1,显示基本图像;设置BASEE=0,只显示局部影像;设置PTDE0=1,显示局部影像1;设置PTDE1=1,显示局部影像2.验证程序如下:LCD_SetWindows(0,0,239,319);LCD_clearscreen(WHITE);write_com_data(0x07,0x0131);//显示器关闭,内部显示运作LCD_clearscreen(CYAN);write_com_data(0x07,0x0133);delayms(3000);while(1){write_com_data(0x07,0x0121);LCD_clearscreen(RED);write_com_data(0x07,0x0133);delayms(3000);write_com_data(0x07,0x0121);LCD_clearscreen(BLUE);write_com_data(0x07,0x0133);delayms(3000);write_com_data(0x07,0x0121);LCD_clearscreen(GREEN);write_com_data(0x07,0x0133);write_com_data(0x07,0x0121);LCD_clearscreen(CYAN);write_com_data(0x07,0x0133);delayms(3000);write_com_data(0x07,0x0121);LCD_clearscreen(PURPLE);write_com_data(0x07,0x0133);delayms(3000);write_com_data(0x07,0x0121);LCD_clearscreen(YELLOW);write_com_data(0x07,0x0133);delayms(3000);// write_com_data(0x07,0x0030);//关闭显示}3.附上驱动程序void write_com(uchar com) //写命令寄存器地址{RS=0;CS=0;P0=0;WR=0;WR=1;P0=com;WR=0;WR=1;CS=1;}void write_data0(uchar a,uchar b) //写数据{RS=1;CS=0;P0=a;WR=0;WR=1;P0=b;WR=0;WR=1;CS=1;}void write_data16(uint date) //写16位数据{uchar m,n;m=date>>8;n=date;write_data0(m,n);}void write_com_data(uchar com,uint date){write_com(com);write_data16(date);}void init_ILI9328() //初始化{CS=1;delayms(N);RSET=0;delayms(N);RSET=1;delayms(5*N);write_com_data(0x01,0x0000); //驱动器输出控制write_com_data(0x02,0x0700); //LCD驱动波形控制write_com_data(0x03,0x1030); //进入模式write_com_data(0x04,0x0000); //重新调整控制寄存器大小write_com_data(0x08,0x0207); //显示控制2write_com_data(0x09,0x0000); //显示控制3write_com_data(0x0A,0x0000); //显示控制4write_com_data(0x0C,0x0000); //RGB显示接口控制1write_com_data(0x0D,0x0000); //帧标记的位置write_com_data(0x0F,0x0000); //RGB显示接口控制2write_com_data(0x10,0x0000); //功率控制1write_com_data(0x11,0x0007); //功率控制2write_com_data(0x12,0x0000); //功率控制3write_com_data(0x13,0x0000); //功率控制4write_com_data(0x10,0x1290);write_com_data(0x11,0x0227);write_com_data(0x12,0x001d);write_com_data(0x13,0x1500);write_com_data(0x29,0x0018); //电力控制7write_com_data(0x2B,0x000D); //帧速率和色彩控制write_com_data(0x30,0x0004); //伽马控制write_com_data(0x31,0x0307);write_com_data(0x32,0x0002); //0006write_com_data(0x35,0x0206);write_com_data(0x36,0x0408);write_com_data(0x37,0x0507);write_com_data(0x38,0x0200); //0204write_com_data(0x39,0x0707);write_com_data(0x3C,0x0405); //0504write_com_data(0x3D,0x0F02);write_com_data(0x50,0x0000); //水平位置的起始坐标write_com_data(0x51,0x00EF); //水平位置的终止坐标write_com_data(0x52,0x0000); //垂直位置的起始坐标write_com_data(0x53,0x013F); //垂直位置的终止坐标write_com_data(0x60,0x2700); //门扫描控制write_com_data(0x61,0x0001);write_com_data(0x6A,0x0000);write_com_data(0x80,0x0000); //局部影像1的显示位置write_com_data(0x81,0x0000); //局部影像1的RAM开始地址write_com_data(0x82,0x0000); //局部影像1的RAM结束地址write_com_data(0x83,0x0000); //局部影像2的显示位置write_com_data(0x84,0x0000); //局部影像2的RAM开始地址write_com_data(0x85,0x0000); //局部影像2的RAM结束地址write_com_data(0x90,0x0010); //平板接口控制1write_com_data(0x92,0x0300); //平板接口控制2write_com_data(0x93,0x0003);write_com_data(0x95,0x0110); //平板接口控制4write_com_data(0x97,0x0000);write_com_data(0x98,0x0000);write_com_data(0x07,0x0133); //显示控制1}void LCD_SetWindows(uint x0,uint y0,uint x1,uint y1) //设置操作窗口{write_com_data(0x50,x0);write_com_data(0x51,x1);write_com_data(0x52,y0);write_com_data(0x53,y1);}void LCD_clearscreen(uint bcolor) //清屏{uint i,j;write_com_data(0x20,0);//设置X坐标位置write_com_data(0x21,0);//设置Y坐标位置write_com(0x22);for(i=0;i<320;i++){for(j=0;j<240;j++){write_data16(bcolor);}}}。

ILI9325驱动程序,8位数据模式

ILI9325驱动程序,8位数据模式

ILI9325 STM32驱动程序 8位数据传输模式LCD.C#include "lcd.h"#include "stdlib.h"#include "font.h"#include "usart.h"#include "delay.h"u16 POINT_COLOR=0x0000; //u16 BACK_COLOR=0xFFFF; //void LCD_Writ_Bus(u8 VH,u8 VL) //{u16 temp1,temp2;temp1=VH*256;temp2=VL*256;GPIO_Write(GPIOB,temp1);LCD_WR_CLR;LCD_WR_SET;GPIO_Write(GPIOB,temp2);LCD_WR_CLR;LCD_WR_SET;}void LCD_WR_DATA8(u8 VH,u8 VL) //{LCD_RS_SET;LCD_Writ_Bus(VH,VL);}void LCD_WR_DATA(int da){LCD_RS_SET;LCD_Writ_Bus(da>>8,da);}void LCD_WR_REG(int da){LCD_RS_CLR;LCD_Writ_Bus(da>>8,da);}void LCD_WR_REG_DATA(int reg,int da){LCD_WR_REG(reg);LCD_WR_DATA(da);}void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2) {LCD_WR_REG(0x0020);LCD_WR_DATA8(x1>>8,x1);//ÉèÖÃX×ø±êλÖÃLCD_WR_REG(0x0021);LCD_WR_DATA8(y1>>8,y1); //ÉèÖÃY×ø±êλÖÃLCD_WR_REG(0x0050);LCD_WR_DATA8(x1>>8,x1); //¿ªÊ¼XLCD_WR_REG(0x0052);LCD_WR_DATA8(y1>>8,y1); //¿ªÊ¼YLCD_WR_REG(0x0051);LCD_WR_DATA8(x2>>8,x2); //½áÊøXLCD_WR_REG(0x0053);LCD_WR_DATA8(y2>>8,y2); //½áÊøYLCD_WR_REG(0x0022);}void LCD_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB, ENABLE); //ʹÄÜPORTB,CʱÖÓºÍAFIOʱÖÓGPIO_InitStructure.GPIO_Pin =GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6|GPIO_Pin_5;///PORTC6~10¸´ÓÃÍÆÍìÊä³öGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure); //GPIOCGPIO_SetBits(GPIOC,GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7|GPI O_Pin_6|GPIO_Pin_5);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPI O_Pin_13|GPIO_Pin_14|GPIO_Pin_15; // PORTBÍÆÍìÊä³öGPIO_Init(GPIOB, &GPIO_InitStructure); //GPIOBGPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_10|GP IO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);LCD_RD_SET;LCD_WR_SET;LCD_RST_CLR;delay_ms(20);LCD_RST_SET;delay_ms(20);LCD_WR_REG_DATA(0x0001,0x0100);LCD_WR_REG_DATA(0x0002,0x0700);LCD_WR_REG_DATA(0x0003,0x1030);LCD_WR_REG_DATA(0x0004,0x0000);LCD_WR_REG_DATA(0x0008,0x0202); //0207LCD_WR_REG_DATA(0x0009,0x0000);LCD_WR_REG_DATA(0x000A,0x0000);LCD_WR_REG_DATA(0x000C,0x0000);LCD_WR_REG_DATA(0x000D,0x0000);LCD_WR_REG_DATA(0x000F,0x0000);//power on sequence VGHVGLLCD_WR_REG_DATA(0x0010,0x0000);LCD_WR_REG_DATA(0x0011,0x0007);LCD_WR_REG_DATA(0x0012,0x0000);LCD_WR_REG_DATA(0x0013,0x0000);//vghLCD_WR_REG_DATA(0x0010,0x1290);LCD_WR_REG_DATA(0x0011,0x0227);//delay_ms(100);//vregioutLCD_WR_REG_DATA(0x0012,0x001d); //0x001b //delay_ms(100);//vom amplitudeLCD_WR_REG_DATA(0x0013,0x1500);// delay_ms(100);//vom HLCD_WR_REG_DATA(0x0029,0x0018);LCD_WR_REG_DATA(0x002B,0x000D);//gammaLCD_WR_REG_DATA(0x0030,0x0004);LCD_WR_REG_DATA(0x0031,0x0307);LCD_WR_REG_DATA(0x0032,0x0002);// 0006 LCD_WR_REG_DATA(0x0035,0x0206);LCD_WR_REG_DATA(0x0036,0x0408);LCD_WR_REG_DATA(0x0037,0x0507);LCD_WR_REG_DATA(0x0038,0x0204);//0200LCD_WR_REG_DATA(0x0039,0x0707);LCD_WR_REG_DATA(0x003C,0x0405);// 0504 LCD_WR_REG_DATA(0x003D,0x0F02);//ramLCD_WR_REG_DATA(0x0050,0x0000); LCD_WR_REG_DATA(0x0051,0x00EF); LCD_WR_REG_DATA(0x0052,0x0000); LCD_WR_REG_DATA(0x0053,0x013F); LCD_WR_REG_DATA(0x0060,0xA700); LCD_WR_REG_DATA(0x0061,0x0001); LCD_WR_REG_DATA(0x006A,0x0000); //LCD_WR_REG_DATA(0x0080,0x0000); LCD_WR_REG_DATA(0x0081,0x0000); LCD_WR_REG_DATA(0x0082,0x0000); LCD_WR_REG_DATA(0x0083,0x0000); LCD_WR_REG_DATA(0x0084,0x0000); LCD_WR_REG_DATA(0x0085,0x0000); //LCD_WR_REG_DATA(0x0090,0x0010); LCD_WR_REG_DATA(0x0092,0x0600); LCD_WR_REG_DATA(0x0093,0x0003); LCD_WR_REG_DATA(0x0095,0x0110); LCD_WR_REG_DATA(0x0097,0x0000); LCD_WR_REG_DATA(0x0098,0x0000); LCD_WR_REG_DATA(0x0007,0x0133); }void LCD_Clear(u16 Color){u8 VH,VL;u16 i,j;VH=Color>>8;VL=Color;Address_set(0,0,LCD_W-1,LCD_H-1);for(i=0;i<LCD_W;i++){for (j=0;j<LCD_H;j++){LCD_WR_DATA8(VH,VL);}}}void LCD_DrawPoint(u16 x,u16 y,u16 Color){Address_set(x,y,x,y);LCD_WR_DATA(Color);}//»-Ò»¸ö´óµã//POINT_COLOR:´ËµãµÄÑÕÉ«void LCD_DrawPoint_big(u16 x,u16 y){LCD_Fill(x-1,y-1,x+1,y+1,POINT_COLOR);}//ÔÚÖ¸¶¨ÇøÓòÄÚÌî³äÖ¸¶¨ÑÕÉ«//ÇøÓò´óС:// (xend-xsta)*(yend-ysta)void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color) {u16 i,j;Address_set(xsta,ysta,xend,yend); //ÉèÖùâ±êλÖÃfor(i=ysta;i<=yend;i++){for(j=xsta;j<=xend;j++)LCD_WR_DATA(color);//ÉèÖùâ±êλÖà }}//»-Ïß//x1,y1:Æðµã×ø±ê//x2,y2:ÖÕµã×ø±êvoid Draw_Circle(u16 x0,u16 y0,u8 r){int a,b;int di;a=0;b=r;di=3-(r<<1); //ÅжÏϸöµãλÖõıêÖ¾while(a<=b){LCD_DrawPoint(x0-b,y0-a,POINT_COLOR); //3LCD_DrawPoint(x0+b,y0-a,POINT_COLOR); //0LCD_DrawPoint(x0-a,y0+b,POINT_COLOR); //1LCD_DrawPoint(x0-b,y0-a,POINT_COLOR); //7LCD_DrawPoint(x0-a,y0-b,POINT_COLOR); //2LCD_DrawPoint(x0+b,y0+a,POINT_COLOR); //4LCD_DrawPoint(x0+a,y0-b,POINT_COLOR); //5LCD_DrawPoint(x0+a,y0+b,POINT_COLOR); //6LCD_DrawPoint(x0-b,y0+a,POINT_COLOR);a++;//ʹÓÃBresenhamËã·¨»-Ô²if(di<0)di +=4*a+6;else{di+=10+4*(a-b);b--;}LCD_DrawPoint(x0+a,y0+b,POINT_COLOR);}}void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2){u16 t;int xerr=0,yerr=0,delta_x,delta_y,distance;int incx,incy,uRow,uCol;delta_x=x2-x1; //¼ÆËã×ø±êÔöÁ¿delta_y=y2-y1;uRow=x1;uCol=y1;if(delta_x>0)incx=1; //ÉèÖõ¥²½·½Ïòelse if(delta_x==0)incx=0;//´¹Ö±Ïßelse {incx=-1;delta_x=-delta_x;}if(delta_y>0)incy=1;else if(delta_y==0)incy=0;//ˮƽÏßelse{incy=-1;delta_y=-delta_y;}if( delta_x>delta_y)distance=delta_x; //Ñ¡È¡»ù±¾ÔöÁ¿×ø±êÖáelse distance=delta_y;for(t=0;t<=distance+1;t++ )//»-ÏßÊä³ö{LCD_DrawPoint(uRow,uCol,POINT_COLOR);//»-µãxerr+=delta_x ;yerr+=delta_y ;if(xerr>distance){xerr-=distance;uRow+=incx;}if(yerr>distance){yerr-=distance;uCol+=incy;}}}void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2){LCD_DrawLine(x1,y1,x2,y1);LCD_DrawLine(x1,y1,x1,y2);LCD_DrawLine(x1,y2,x2,y2);LCD_DrawLine(x2,y1,x2,y2);}void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode){u16 temp,t1,t;u16 y0=y;u16 csize=(size/8+((size%8)?1:0))*(size/2);//µÃµ½×ÖÌåÒ»¸ö×Ö·û¶ÔÓ¦µãÕó¼¯ËùÕ¼µÄ×Ö½ÚÊý//ÉèÖô°¿Únum=num-' ';//µÃµ½Æ«ÒƺóµÄÖµfor(t=0;t<csize;t++){if(size==12)temp=asc2_1206[num][t]; //µ÷ÓÃ1206×ÖÌåelse if(size==16)temp=asc2_1608[num][t]; //µ÷ÓÃ1608×ÖÌåelse if(size==24)temp=asc2_2412[num][t]; //µ÷ÓÃ2412×ÖÌåelse return;//ûÓеÄ×Ö¿âfor(t1=0;t1<8;t1++){if(temp&0x80) LCD_DrawPoint(x,y,POINT_COLOR);else if(mode==0) LCD_DrawPoint(x,y,0X7D7C);temp<<=1;y++;if(x>=240)return; //³¬ÇøÓòÁËif((y-y0)==size){y=y0;x++;if(x>=240)return; //³¬ÇøÓòÁËbreak;}}}}u32 LCD_Pow(u8 m,u8 n){u32 result=1;while(n--)result*=m;return result;}void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size){u8 t,temp;u8 enshow=0;for(t=0;t<len;t++){temp=(num/LCD_Pow(10,len-t-1))%10;if(enshow==0&&t<(len-1)){if(temp==0){LCD_ShowChar(x+(size/2)*t,y,' ',size,0);continue;}else enshow=1;}LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,0);}}void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p) {u8 x0=x;width+=x;height+=y;while((*p<='~')&&(*p>=' '))//ÅжÏÊDz»ÊÇ·Ç·¨×Ö·û!{if(x>=width){x=x0;y+=size;}if(y>=height)break;//Í˳öLCD_ShowChar(x,y,*p,size,0);x+=size/2;p++;}}LCD.H#ifndef __LCD_H#define __LCD_H#include "sys.h"#include "stdlib.h"#define LCD_W 240#define LCD_H 320extern u16 BACK_COLOR, POINT_COLOR; //±³¾°É«£¬»-±ÊÉ«#define LCD_CS_SET GPIO_SetBits(GPIOC,GPIO_Pin_9) //Ƭѡ¶Ë¿ÚPC9 //Ó²¼þ½ÓµØ ûÓÃ#define LCD_RS_SET GPIO_SetBits(GPIOC,GPIO_Pin_8) //Êý¾Ý/ÃüÁîPC8#define LCD_WR_SET GPIO_SetBits(GPIOC,GPIO_Pin_7) //дÊý¾ÝPC7#define LCD_RD_SET GPIO_SetBits(GPIOC,GPIO_Pin_6) //¶ÁÊý¾ÝPC6#define LCD_RST_SET GPIO_SetBits(GPIOC,GPIO_Pin_5) //RSTPC5#define LCD_CS_CLR GPIO_ResetBits(GPIOC,GPIO_Pin_9) //Ƭѡ¶Ë¿ÚPC9 //Ó²¼þ½ÓµØ ûÓÃ#define LCD_RS_CLR GPIO_ResetBits(GPIOC,GPIO_Pin_8) //Êý¾Ý/ÃüÁîPC8#define LCD_WR_CLR GPIO_ResetBits(GPIOC,GPIO_Pin_7) //дÊý¾Ý PC7#define LCD_RD_CLR GPIO_ResetBits(GPIOC,GPIO_Pin_6) //¶ÁÊý¾Ý PC6#define LCD_RST_CLR GPIO_ResetBits(GPIOC,GPIO_Pin_5) //RSTPC5//PB10~15,×÷ΪÊý¾ÝÏß#define DATAOUT(x) GPIO_Write(GPIOB,x);#define DATAIN GPIO_ReadInputData(GPIOB)void Lcd_Init(void);void LCD_Clear(u16 Color);void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2); void LCD_WR_DATA8(u8 VH,u8 VL); //·¢ËÍÊý¾Ý-8λ²ÎÊývoid LCD_WR_DATA(int da);void LCD_WR_REG(int da);void LCD_DrawPoint(u16 x,u16 y,u16 Color);//»-µãvoid LCD_DrawPoint_big(u16 x,u16 y);//»-Ò»¸ö´óµãu16 LCD_ReadPoint(u16 x,u16 y); //¶Áµãvoid Draw_Circle(u16 x0,u16 y0,u8 r);u32 LCD_Pow(u8 m,u8 n);void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2);void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2);void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color);void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode);void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size);//ÏÔʾÊý×Övoid LCD_Show2Num(u16 x,u16 y,u16 num,u8 len);//ÏÔʾ2¸öÊý×Övoid LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p);//ÏÔʾһ¸ö×Ö·û´®,16×ÖÌåvoid showhanzi(unsigned int x,unsigned int y,unsigned char index);//»-±ÊÑÕÉ«#define WHITE 0xFFFF#define BLACK 0x0000#define BLUE 0x001F#define BRED 0XF81F#define GRED 0XFFE0#define GBLUE 0X07FF#define RED 0xF800#define MAGENTA 0xF81F#define GREEN 0x07E0#define CYAN 0x7FFF#define YELLOW 0xFFE0#define BROWN 0XBC40 //×ØÉ«#define BRRED 0XFC07 //×غìÉ«#define GRAY 0X8430 //»ÒÉ«//GUIÑÕÉ«#define DARKBLUE 0X01CF //ÉîÀ¶É«#define LIGHTBLUE 0X7D7C //dzÀ¶É«#define GRAYBLUE 0X5458 //»ÒÀ¶É«//ÒÔÉÏÈýɫΪPANELµÄÑÕÉ«#define LIGHTGREEN 0X841F //dzÂÌÉ«#define LGRAY 0XC618 //dz»ÒÉ«(PANNEL),´°Ìå±³¾°É«#define LGRAYBLUE 0XA651 //dz»ÒÀ¶É«(Öмä²ãÑÕÉ«)#define LBBLUE 0X2B12 //dz×ØÀ¶É«(Ñ¡ÔñÌõÄ¿µÄ·´É«)#endif。

ILI9325 指令说明

ILI9325 指令说明

8.2.Instruction Descriptions指令说明8.2.1.Index(IR)指数(IR)或是电阻指数该指数寄存器指定寄存器地址(R00h RFFh)或将被访问的RAM。

8.2.2.Status Read(RS)状态读取(RS)该SR位代表了ILI9325内部状态。

L[7:0]指示目前正在驱动TFT面板的驱动线位置。

8.2.3.Start Oscillation(R00h)启动振荡振荡周率当读取该寄存器时,该器件代码“9325”H被读出。

8.2.4.Driver Output Control(R01h)驱动器输出控制SS:从源驱动器选择输出的转变方向。

When SS=0,输出转变方向是从S1到S720When SS=1,输出转变方向是从S720到S1除了改变方向,SS和BGR位的设置都需要更改R,G,B三个点的分配到源驱动引脚。

从S1到S720指定R,G,B点到源驱动引脚,设置SS=0。

从S720到S1指定R,G,B点到源驱动引脚,设置SS=1。

When changing SS or BGR bits,RAM data must be rewritten.(当改变SS或BGR位时,RAM数据必须被再次写入)设置栅极驱动器引脚排列与GS位(R60h)相结合,以为模块选择最佳扫描模式。

8.2.5.LCD Driving Wave Control(R02h)LCD驱动波形控制.B/C0:帧/场倒位1:线反转EOR:EOR=1和B/C=1设置行反转。

8.2.6.Entry Mode(R03h)进入模式AM控制GRAM更新的方向。

When AM=“0”,地址在水平写入方向得以更新。

When AM=“1”,地址在垂直写入方向得以更新。

当一个窗口区域是由寄存器R50h R53h来设置时,基于I/D[1:0]和AM位只有编址的GRAM区得以更新。

当更新一个像素显示数据时,I/D[1:0]控制的地址计数器(AC)将自动增加或减少1,。

ILI9325_TFT驱动中文资料

ILI9325_TFT驱动中文资料

ILI9325TFT驱动中文资料TFT9325驱动学习1、寄存器03HAM:控制GRAM更新方向的控制位AM=0:在水平方向更新地址AM=1:在垂直方向更新地址这个地方对AM的选择将直接影响img2lcd软件的扫描方式控制项,这一位就是控制扫描方式的。

I/D[1:0]:当更新显示区域的一个像素点的时候,控制AC是增加1还是减少1,具体参考下图I/D[1:0]的正确设置才能正确的显示图片,比如有时候发现显示出来的图片和输入img2lcd的图片方向是左右方向是反的,或者上下或者都是反的,那就是需要修改这个的地方了,可以根据上面的方向来选择合适的I/D.ORG:当一个窗口的地址区域确定以后,根据上面I/D的设置,来移动原始地址。

当高速写窗口地址域时,这个功能将被使能。

ORG=0:原始地址是不移动的。

这种情况下,是通过指定地址来启动写操作的,这个地址是根据窗口显示区域的GRAM的地址表。

ORG=1:原始地址是更加I/D的设置相应的移动的。

注意:1、当ORG=1的时候,设置R20H,R21H,的原始地址的时候,只能设置0x00002、在RAM读操作时,要保证ORG=0;BGR交换写数据中红和蓝BGR=0:根据RGB顺序写像素点的数据。

BGR=1:交换RGB数据为BGR,写入GRAMTRI:当TRI=1的时候,在8位数据模式下是以8bit*3传输的,也就是传输三个字节到内部的RAM,同样也支持16位数据的模式,和使用SPI模式显示26万色,也就是说当RTI=1的时候,传输的字节数基本上都是三个。

这一位在显示26万色的时候有用的,或者使用8位数据接口的时候,这个要看具体的应用来设置,但是注意如果不需要的时候,要设置为0.DFI:设置像内部RAM传输数据的的模式。

这一位是要和TRI联合起来使用的。

具体的参看下图。

2、寄存器R04寄存器图如下RSZ[1:0]:设置调整参数(RSZ的意思就是resizeing)当设置了RSZ后,ILI9325将会根据RSZ设置的参数来调整图片的大小,这个时候水平和垂直方向的区域都会改变。

液晶显示器驱动方法及驱动电路探析

液晶显示器驱动方法及驱动电路探析

液晶显示器驱动方法及驱动电路探析液晶显示器是一种普遍应用于电子设备中的显示设备,它通过液晶分子的排列状态来显示图像。

液晶显示器本质上是一种非常薄的平面显示器,它具有低功率消耗、高亮度、高清晰度等特点,更加适合用于移动设备和电视机等应用。

然而,要显示出图像,液晶显示器需要使用一些驱动方法和驱动电路。

液晶显示器的驱动方法主要有主动矩阵、被动矩阵和时间分频三种。

其中,主动矩阵方法是目前使用最广泛的驱动方法,这种方法通过使用多个行和列交叉的电极来控制液晶分子在互相作用的电场中排列的方向,从而达到显示图像的目的。

而被动矩阵和时间分频方法是较为简单,但缺乏实际应用的方式,它们在一些低端电子设备中可能会被采用。

液晶显示器的驱动电路主要是由控制芯片和驱动芯片组成的。

控制芯片负责从显示控制器中接受图像信号,并将其转换为液晶显示器可以识别的信号。

驱动芯片则负责向液晶显示器的每个像素点施加合适的电压,控制液晶分子的排列,从而显示出图像。

在液晶显示器的驱动电路中,有一个非常关键的元件就是驱动芯片内部的源极驱动器。

这个驱动器负责向液晶显示器中的每个像素点提供所需要的电压和电流,从而使其能够显示出正确的颜色和亮度。

一般来说,驱动芯片内部的源极驱动器需要经过特殊的设计和优化,以确保其可以高效地供应电流和电压,从而提高液晶显示器的响应速度和稳定性。

除了源极驱动器,液晶显示器的驱动电路中还有一些其他的元件和线路,如数据线、时钟线、扫描线、行驱动器、列驱动器等。

这些元件和线路都是非常重要的,它们通过复杂的交互作用来实现液晶显示器的驱动和显示。

总的来说,液晶显示器的驱动方法和驱动电路是非常重要的,它们对于液晶显示器的性能和功能有着决定性的影响。

现在,随着技术的不断进步,液晶显示器的驱动方法和驱动电路也在不断更新和优化,带来了越来越好的显示效果和用户体验。

STM32 基于9325TP液晶驱动器的驱动程序

STM32 基于9325TP液晶驱动器的驱动程序

//==========================9325TP.h==========================///*-------------------------------------------------9325TP驱动器TFT驱动程序----------------------------------------------------*/#ifndef __9325TP_H#define __9325TP_H#include "stm32f10x_lib.h"/* LCD color */#define White 0xFFFF#define Black 0x0000#define Blue 0x001F#define Blue2 0x051F#define Red 0xF800#define Magenta 0xF81F#define Green 0x07E0#define Cyan 0x7FFF#define Yellow 0xFFE0/* LCD COMMAND */#define WINDOW_XADDR_START 0x50 // Horizontal Start Address Set#define WINDOW_XADDR_END 0x51 // Horizontal End Address Set#define WINDOW_YADDR_START 0x52 // Vertical Start Address Set#define WINDOW_YADDR_END 0x53 // Vertical End Address Set#define GRAM_XADDR 0x20 // GRAM Horizontal Address Set#define GRAM_YADDR 0x21 // GRAM Vertical Address Set#define GRAMWR 0x22 // memory write/* LCD CONTROL PORT */#define LCD_CONTROL_PORT GPIOD#define CS_LCD GPIO_Pin_10#define RS_LCD GPIO_Pin_11#define RW_LCD GPIO_Pin_12#define RD_LCD GPIO_Pin_13#define RST_LCD GPIO_Pin_14#define LCD_CONTROL_PIN CS_LCD | RS_LCD | RW_LCD | RD_LCD | RST_LCD/* LCD DATA PORT */#define LCD_DATA_PORT GPIOE#define RST_LCD_SET GPIO_SetBits(LCD_CONTROL_PORT ,RST_LCD)#define RST_LCD_CLR GPIO_ResetBits(LCD_CONTROL_PORT ,RST_LCD)#define CS_LCD_SET GPIO_SetBits(LCD_CONTROL_PORT ,CS_LCD)#define CS_LCD_CLR GPIO_ResetBits(LCD_CONTROL_PORT ,CS_LCD)#define RS_LCD_SET GPIO_SetBits(LCD_CONTROL_PORT ,RS_LCD)#define RS_LCD_CLR GPIO_ResetBits(LCD_CONTROL_PORT ,RS_LCD)#define RW_LCD_SET GPIO_SetBits(LCD_CONTROL_PORT ,RW_LCD)#define RW_LCD_CLR GPIO_ResetBits(LCD_CONTROL_PORT ,RW_LCD)#define RD_LCD_SET GPIO_SetBits(LCD_CONTROL_PORT ,RD_LCD)#define RD_LCD_CLR GPIO_ResetBits(LCD_CONTROL_PORT ,RD_LCD)/* Line Direction */#define Vertical 0x00#define Horizontal 0x01extern void Init_LCD_9325TP(void) ;extern void Write_LCD_Cmd(unsigned int Data_H ,unsigned int Data_L) ;extern void Write_LCD_Data(unsigned int Data_H ,unsigned int Data_L) ;extern void Write_LCD_Data_U16(unsigned int Dat) ;extern void Init_LCD_Data(unsigned int x ,unsigned int y) ;extern void Clear_Screen(unsigned int Back_Color) ; //用指定的颜色刷屏extern void LCD_SetPos(unsigned int x0,unsigned int x1,unsigned int y0,unsigned inty1) ; //设定起始坐标extern void LCD_PutChar8x16(unsigned int x, unsigned int y, unsigned char c,unsigned int For_Color, unsigned int Back_Color) ; //显示一个8X16的字符extern void LCD_PutGB1616(unsigned int x, unsigned int y, unsigned char c[2],unsigned int For_Color,unsigned int Back_Color) ; //显示一个16X16的汉字extern void LCD_PutGB3232(unsigned int x, unsigned int y, unsigned char c[2],unsigned int For_Color,unsigned int Back_Color) ; //显示一个32X32的汉字extern void LCD_PutString(unsigned int x, unsigned int y, unsigned char *s,unsigned int For_Color, unsigned int Back_Color) ; //显示一串16X16的字符串extern void LCD_PutGB1616_String(unsigned int x ,unsigned int y ,unsigned char *s ,unsigned int For_Color ,unsigned int Back_Color) ; //显示一串16X16的汉字extern void LCD_DrawLine(unsigned short x ,unsigned short y ,unsigned short length , unsigned char Direction ,unsigned int color) ; //画一条直线extern void LCD_DrawRect(unsigned short x ,unsigned short y ,unsigned short Width , unsigned short Height ,unsigned int color) ; //画一个矩形void LCD_DrawCircle(unsigned short XPos ,unsigned short Ypos ,unsigned short Radius , unsigned int color) ; //画一个圆extern void Show_Photo(unsigned int x0 ,unsigned int y0 ,unsigned int x ,unsigned int y ,const unsigned char *p) ; //显示一张图片extern void u32tostr(unsigned long dat,unsigned char *str) ; //将整型转换为字符串#endif /* 9325TP_H *///=================================================================// //=========================9325TP.c=================================//#include "stm32f10x_lib.h"#include "SysTick_Delay.h"#include "9325TP.h"#include "GB1616.h"#include "GB3232.h"#include "8x16.h"/****************************************************************函数名称: Write_LCD_Cmd功能: 向LCD写入命令参数: Data_H - 16位数据的高八位Data_L - 16位数据的低八位返回值: 无*****************************************************************/void Write_LCD_Cmd(unsigned int Data_H ,unsigned int Data_L){CS_LCD_CLR ; //使能片选信号RS_LCD_CLR ; //命令模式GPIO_Write(LCD_DATA_PORT ,Data_H) ; //高八位RW_LCD_CLR ; //写使能RW_LCD_SET ; //关闭写使能GPIO_Write(LCD_DATA_PORT ,Data_L) ;RW_LCD_CLR ; //写使能RW_LCD_SET ; //关闭写使能CS_LCD_SET ; //结束片选信号}/****************************************************************函数名称: Write_LCD_Data功能: 向LCD写入数据参数: Data_H - 16位数据的高八位Data_L - 16位数据的低八位返回值: 无*****************************************************************/void Write_LCD_Data(unsigned int Data_H ,unsigned int Data_L) {CS_LCD_CLR ; //使能片选信号RS_LCD_SET ; //数据模式GPIO_Write(LCD_DATA_PORT ,Data_H) ; //高八位RW_LCD_CLR ; //写使能RW_LCD_SET ; //关闭写使能GPIO_Write(LCD_DATA_PORT ,Data_L) ; //低八位RW_LCD_CLR ; //写使能RW_LCD_SET ; //关闭写使能CS_LCD_SET ; //结束片选信号}/****************************************************************函数名称: Write_LCD_Data_U16功能: 向LCD写入16位的数据参数: Dat - 要写入的数据返回值: 无*****************************************************************/void Write_LCD_Data_U16(unsigned int Dat){CS_LCD_CLR ; //使能片选信号RS_LCD_SET ; //数据模式GPIO_Write(LCD_DATA_PORT ,Dat>>8) ; //高八位//GPIOE->ODR = Dat>>8 ;RW_LCD_CLR ; //写使能RW_LCD_SET ; //关闭写使能GPIO_Write(LCD_DATA_PORT ,Dat) ; //低八位//GPIOE->ODR = Dat ;RW_LCD_CLR ; //写使能RW_LCD_SET ; //关闭写使能CS_LCD_SET ; //结束片选信号}/****************************************************************函数名称: Init_LCD_Data功能: 初始化LCD写入方法参数: x-要使用的命令代码y-要使用的数据代码返回值: 无*****************************************************************/void Init_LCD_Data(unsigned int x ,unsigned int y){Write_LCD_Cmd(0x0000,x) ;Write_LCD_Data_U16(y) ;}/*************************************************************函数名称: LCD_SetPos功能: 定义显示窗体参数: x0 - 窗体中X坐标中较小者x1 - 窗体中X坐标中较大者y0 - 窗体中Y坐标中较小者y1 - 窗体中Y坐标中较大者返回值: 无*************************************************************/void LCD_SetPos(unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1) {Init_LCD_Data(WINDOW_XADDR_START,x0);Init_LCD_Data(WINDOW_XADDR_END,x1);Init_LCD_Data(WINDOW_YADDR_START,y0);Init_LCD_Data(WINDOW_YADDR_END,y1);Init_LCD_Data(GRAM_XADDR,x0);Init_LCD_Data(GRAM_YADDR,y0);Write_LCD_Cmd(0x0000,0x0022); //LCD_WriteCMD(GRAMWR);}/****************************************************************函数名称: Clear_Screen功能: 清屏参数: Back_Color - 清屏后的背景颜色返回值: 无*****************************************************************/void Clear_Screen(unsigned int Back_Color){unsigned int i ,j ;LCD_SetPos(0,240,0,320) ;for(i = 0 ;i < 325 ;i++){for(j = 0 ;j < 240 ;j++)Write_LCD_Data_U16(Back_Color) ;}}/****************************************************************函数名称: LCD_PutChar8x16功能: 显示8x16的字符参数: x - 起始x坐标y - 起始y坐标c - 要显示的字符For_Color - 前景颜色Back_Color - 背景颜色返回值: 无*****************************************************************/void LCD_PutChar8x16(unsigned int x, unsigned int y, unsigned char c, unsigned int For_Color, unsigned int Back_Color){unsigned char i,j;unsigned char m ;c -= 32;LCD_SetPos(x,x+8-1,y,y+16-1);for(i = 0 ;i < 16 ;i++){m = Font8x16[c][i];for(j = 0 ;j < 8 ;j++){if((m&0x80)==0x80){Write_LCD_Data_U16(For_Color);}else{Write_LCD_Data_U16(Back_Color);}m<<=1;}}}/****************************************************************函数名称: LCD_PutGB1616功能: 显示16x16的汉字参数: x - 起始x坐标y - 起始y坐标c - 要显示的汉字For_Color - 前景颜色Back_Color - 背景颜色返回值: 无*****************************************************************/void LCD_PutGB1616(unsigned int x, unsigned int y, unsigned char c[2], unsigned int For_Color,unsigned int Back_Color)unsigned int i, j, k ;unsigned int m ;LCD_SetPos(x ,x+16-1 ,y ,y+16-1) ;for (k = 0;k < 25;k++) //25表示自建汉字库中的汉字个数,采用循环查询{if( (GB_16[k].Index[0]==c[0]) && (GB_16[k].Index[1]==c[1]) ){for(i = 0;i < 32;i++){m = GB_16[k].Msk[i];for(j = 0;j < 8;j++){if((m&0x80)==0x80)Write_LCD_Data_U16(For_Color);elseWrite_LCD_Data_U16(Back_Color);m<<=1;}}}}}/****************************************************************函数名称: LCD_PutGB3232功能: 显示32x32的汉字参数: x - 起始x坐标y - 起始y坐标c - 要显示的汉字For_Color - 前景颜色Back_Color - 背景颜色返回值: 无*****************************************************************/void LCD_PutGB3232(unsigned int x, unsigned int y, unsigned char c[2], unsigned int For_Color,unsigned int Back_Color){unsigned int i, j, k ;unsigned int m ;LCD_SetPos(x ,x+32-1 ,y ,y+32-1) ;for (k = 0;k < 2;k++) //25表示自建汉字库中的汉字个数,采用循环查询{if( (GB_32[k].Index[0]==c[0]) && (GB_32[k].Index[1]==c[1]) )for(i = 0;i < 128;i++){m = GB_32[k].Msk[i];for(j = 0;j < 8;j++){if((m&0x80)==0x80)Write_LCD_Data_U16(For_Color);elseWrite_LCD_Data_U16(Back_Color);m<<=1;}}}}}/****************************************************************函数名称: LCD_PutString功能: 显示32x32的字符串参数: x - 起始x坐标y - 起始y坐标s - 要显示的字符串For_Color - 前景颜色Back_Color - 背景颜色返回值: 无*****************************************************************/void LCD_PutString(unsigned int x, unsigned int y, unsigned char *s, unsigned int For_Color, unsigned int Back_Color){unsigned char i = 0 ;while(*s){LCD_PutChar8x16(x+i*8,y,*s,For_Color,Back_Color);s++ ;i++ ;}}/****************************************************************函数名称: LCD_PutGB1616_String功能: 显示16x16的汉字串参数: x - 起始x坐标y - 起始y坐标s - 要显示的汉字符串For_Color - 前景颜色Back_Color - 背景颜色返回值: 无*****************************************************************/void LCD_PutGB1616_String(unsigned int x ,unsigned int y ,unsigned char *s ,unsigned int For_Color ,unsigned int Back_Color){unsigned char i = 0 ;while(*s){LCD_PutGB1616(x+i*8 ,y ,(unsigned char *)s ,For_Color ,Back_Color) ;s += 2 ;i += 2 ;}}/****************************************************************函数名称: Show_Photo功能: 显示图片参数: x0 - 起始x坐标y0 - 起始y坐标x - 图片宽y - 图片长pic[] 要显示的图片数组返回值: 无*****************************************************************/void Show_Photo(unsigned int x0 ,unsigned int y0 ,unsigned int x ,unsigned int y ,const unsigned char pic[]){unsigned int j;unsigned int i;unsigned long s=0;LCD_SetPos(x0,x0+x-1,y0,y0+y-1);for (i=0;i<y-1;i++){for (j=0;j<x-1;j++){Write_LCD_Data(pic[2*s],pic[2*s+1]);s++ ;}}}/****************************************************************函数名称: LCD_DrawLine功能: 画直线参数: x - 起始x坐标y - 起始y坐标length - 直线长度(长度超过边框将被截掉)Direction - 直线方向(Horizontal or Verticalcolor - 直线颜色返回值: 无*****************************************************************/void LCD_DrawLine(unsigned short x ,unsigned short y ,unsigned short length , unsigned char Direction ,unsigned int color){unsigned char i;if(Direction == Horizontal){if( (x+length) < 240) //检查是否超出边框{LCD_SetPos(x ,x+length ,y ,y) ;for(i = 0 ;i < length ;i++){Write_LCD_Data_U16(color) ;}}else{LCD_SetPos(x ,240 ,y ,y) ;for(i = 0 ;i < (240-x) ;i++){Write_LCD_Data_U16(color) ;}}}else if(Direction == Vertical){if(y+length < 320) //检查是否超出边框{LCD_SetPos(x ,x ,y ,y+length) ;for(i = 0 ;i < length ;i++){Write_LCD_Data_U16(color) ;}}else{LCD_SetPos(x ,x ,y ,320) ;for(i = 0 ;i < (320-y) ;i++){Write_LCD_Data_U16(color) ;}}}}/****************************************************************函数名称: LCD_DrawRect功能: 画矩形参数: x - 起始x坐标y - 起始y坐标Width - 矩形宽Height - 矩形高color - 直线颜色返回值: 无*****************************************************************/void LCD_DrawRect(unsigned short x ,unsigned short y ,unsigned short Width , unsigned short Height ,unsigned int color){LCD_DrawLine(x ,y ,Width ,Horizontal ,color) ; //上'-'LCD_DrawLine(x ,y+Height ,Width ,Horizontal ,color) ; //下'-'LCD_DrawLine(x ,y ,Height ,Vertical ,color) ; //左'|'LCD_DrawLine(x+Width ,y ,Height ,Vertical ,color) ;//右'|'}/****************************************************************函数名称: LCD_DrawCircle功能: 在指定圆心处以指定半径画圆参数: x - 圆心x坐标y - 圆心y坐标Radius - 半径长度color - 直线颜色返回值: 无*****************************************************************/void LCD_DrawCircle(unsigned short Xpos ,unsigned short Ypos ,unsigned short Radius , unsigned int color){signed long D ; //变量unsigned long CurX ; //当前x坐标unsigned long CurY ; //当前y坐标D = 3 - (Radius << 1);CurX = 0;CurY = Radius;while (CurX <= CurY){LCD_SetPos(Xpos + CurX, Xpos + CurX ,Ypos + CurY ,Ypos + CurY);Write_LCD_Data_U16(color);LCD_SetPos(Xpos + CurX, Xpos + CurX ,Ypos - CurY ,Ypos - CurY);Write_LCD_Data_U16(color);LCD_SetPos(Xpos - CurX, Xpos - CurX ,Ypos + CurY ,Ypos + CurY);Write_LCD_Data_U16(color);LCD_SetPos(Xpos - CurX, Xpos - CurX ,Ypos - CurY ,Ypos - CurY);Write_LCD_Data_U16(color);LCD_SetPos(Xpos + CurY, Xpos + CurY ,Ypos + CurX ,Ypos + CurX);Write_LCD_Data_U16(color);LCD_SetPos(Xpos + CurY, Xpos + CurY ,Ypos - CurX ,Ypos - CurX);Write_LCD_Data_U16(color);LCD_SetPos(Xpos - CurY, Xpos - CurY ,Ypos + CurX ,Ypos + CurX);Write_LCD_Data_U16(color);LCD_SetPos(Xpos - CurY, Xpos - CurY ,Ypos - CurX ,Ypos - CurX);Write_LCD_Data_U16(color);if (D < 0){D += (CurX << 2) + 6;}else{D += ((CurX - CurY) << 2) + 10;CurY--;}CurX++;}}/****************************************************************函数名称: u32tostr功能: 将整型数据转换为字符串以送给液晶显示参数: dat - 要转换的整型数据str - 保存转换后字符串的地址指针返回值: 无*****************************************************************/void u32tostr(unsigned long dat,unsigned char *str){char temp[20];unsigned char i=0,j=0;while(dat){temp[i]=dat%10+0x30;i++;dat/=10;}j=i;for(i=0;i<j;i++){str[i]=temp[j-i-1];}if(!i) {str[i++]='0';}str[i]=0;}/****************************************************************函数名称: Init_LCD功能: 初始化LCD参数: 无返回值: 无*****************************************************************/ void Init_LCD_9325TP(void){GPIO_InitTypeDef GPIO_InitStructure ;//数据端口设为输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All ;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;GPIO_Init(GPIOE ,&GPIO_InitStructure) ;//控制端口设为输出GPIO_InitStructure.GPIO_Pin = LCD_CONTROL_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;GPIO_Init(GPIOD ,&GPIO_InitStructure) ;RD_LCD_SET ;CS_LCD_SET ;Delay_Nms(5) ;RST_LCD_CLR ;Delay_Nms(5) ;RST_LCD_SET ;Delay_Nms(5) ;Delay_Nms(50); //根据不同晶振速度可以调整延时,保障稳定显示Init_LCD_Data(0x0001,0x0100);Init_LCD_Data(0x0002,0x0700);Init_LCD_Data(0x0003,0x1030);Init_LCD_Data(0x0004,0x0000);Init_LCD_Data(0x0008,0x0207);Init_LCD_Data(0x0009,0x0000);Init_LCD_Data(0x000A,0x0000);Init_LCD_Data(0x000C,0x0000);Init_LCD_Data(0x000D,0x0000);Init_LCD_Data(0x000F,0x0000);//power on sequence VGHVGLInit_LCD_Data(0x0010,0x0000);Init_LCD_Data(0x0011,0x0007);Init_LCD_Data(0x0012,0x0000);Init_LCD_Data(0x0013,0x0000);//vghInit_LCD_Data(0x0010,0x1290);Init_LCD_Data(0x0011,0x0227);Delay_Nms(100);//vregioutInit_LCD_Data(0x0012,0x001d); //0x001bDelay_Nms(100);//vom amplitudeInit_LCD_Data(0x0013,0x1500);Delay_Nms(100);//vom HInit_LCD_Data(0x0029,0x0018);Init_LCD_Data(0x002B,0x000D);//gammaInit_LCD_Data(0x0030,0x0004);Init_LCD_Data(0x0031,0x0307);Init_LCD_Data(0x0032,0x0002);// 0006Init_LCD_Data(0x0035,0x0206);Init_LCD_Data(0x0036,0x0408);Init_LCD_Data(0x0037,0x0507);Init_LCD_Data(0x0038,0x0204);//0200Init_LCD_Data(0x0039,0x0707);Init_LCD_Data(0x003C,0x0405);// 0504Init_LCD_Data(0x003D,0x0F02);//ramInit_LCD_Data(0x0050,0x0000);Init_LCD_Data(0x0051,0x00EF);Init_LCD_Data(0x0052,0x0000);Init_LCD_Data(0x0053,0x013F);Init_LCD_Data(0x060,0xA700);Init_LCD_Data(0x0061,0x0001);Init_LCD_Data(0x006A,0x0000);Init_LCD_Data(0x0080,0x0000);Init_LCD_Data(0x0081,0x0000);Init_LCD_Data(0x0082,0x0000);Init_LCD_Data(0x0083,0x0000);Init_LCD_Data(0x0084,0x0000);Init_LCD_Data(0x0085,0x0000);Init_LCD_Data(0x0090,0x0010);Init_LCD_Data(0x0092,0x0600);Init_LCD_Data(0x0093,0x0003);Init_LCD_Data(0x0095,0x0110);Init_LCD_Data(0x0097,0x0000);Init_LCD_Data(0x0098,0x0000);Init_LCD_Data(0x0007,0x0133);Clear_Screen(Black) ; //显示黑屏}//=================================================================// //====================会用到的其他文件================================// //======================Systick_Delay.h===============================// /*--------------------------------------------------利用SysTick进行精确定时---------------------------------------------------*/#ifndef __SYSTICKDELAY_H#define __SYSTICKDELAY_Hextern void Delay_Nms(u16 Nms);extern void Delay_Nus(u32 Nus);#endif /*SYSTICKDELAY_H*///=================================================================//#include "stm32f10x_lib.h"#include "SysTick_Delay.h"//延时Nms//注意Nms的范围//Nms<=0xffffff*8/SYSCLK//对72M条件下,Nms<=1864void Delay_Nms(u16 Nms){SysTick->LOAD=(u32)Nms*9000; //给重装载寄存器赋值,9000时,将产生1ms的时基 SysTick->CTRL|=0x01; //开始倒数while(!(SysTick->CTRL&(1<<16))); //等待时间到达SysTick->CTRL=0X00000000; //关闭计数器SysTick->VAL=0X00000000; //清空计数器}//延时usvoid Delay_Nus(u32 Nus){SysTick->LOAD=Nus*9; //时间加载SysTick->CTRL|=0x01; //开始倒数while(!(SysTick->CTRL&(1<<16)));//等待时间到达SysTick->CTRL=0X00000000; //关闭计数器SysTick->VAL=0X00000000; //清空计数器}//=================================================================// //写得一般,希望大家可以给我提点意见。

液晶显示器驱动器设计与优化

液晶显示器驱动器设计与优化

液晶显示器驱动器设计与优化一、概述液晶显示器驱动器设计与优化是涉及液晶显示器技术的一个重要方面,该技术在现代科技中得到广泛应用。

本文主要讨论液晶显示器的驱动器设计和优化,根据其结构和性能特点,分别从液晶显示器驱动技术、LCD模块和图像质量提高三个方面进行论述。

二、液晶显示器驱动技术1、驱动技术的发展液晶显示器的驱动技术经历了大约30年的发展,经过多种驱动方式、驱动技术的不断改进和优化,液晶显示器的品质、制造成本等方面有了明显的提高。

2、驱动原理液晶显示器的驱动原理是通过交错排列的适量导电材料构成的电极和电介质层,控制在导电层之间施加电场,因而改变其光学特性。

驱动方式:液晶驱动IC,加电路、波形发生器等组成驱动电路,而电源供电板、信号输入板、接口板等则合成液晶显示器总控板。

3、驱动技术的结构液晶显示器的驱动技术结构包括液晶驱动器、扫描驱动器和时序控制器。

其中液晶驱动器主要实现像素点筛选、行列扫描和色彩管理等功能;扫描驱动器控制像素的点阵排列方式,并确保图像清晰;时序控制器则为液晶驱动IC提供正确的信号,以确保LCD可以正确地工作。

三、LCD模块1、液晶板参数液晶板的参数包括尺寸、分辨率、视角和对比度等。

在液晶显示器的驱动设计和优化中,液晶板的尺寸和分辨率是两个关键参数。

液晶板的分辨率越高,驱动器需要支持的操作数量也越大,因此,液晶板的分辨率也是设计和优化液晶显示器驱动器时必须考虑的因素。

2、IED模块IED(Integrated Electronic Drive)模块是一种集成了电源、LCM 驱动芯片、扫描驱动器和时序控制器四个模块的高集成度液晶驱动器模块。

该模块因具有易于设计、快速应用、成本低等优点,被广泛应用于液晶显示器的驱动设计和优化中。

四、图像质量提高1、液晶显示器的亮度液晶显示器的亮度是衡量其品质的重要指标,其直接影响到图像的真实性和清晰度。

液晶显示器的亮度主要通过LED背光电压控制,以及反射板或透射板的选择等方式实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

几点说明:
1、本文所用液晶控制器为ILI9325 320*240
2、理解水平有限,如有误,请指正
3、驱动原理,每个点用2个字节表示颜色,按设定的方向刷新320*240个点,就可以显示
一张图片。

一、坐标原点位置的确定
首先,你买回来的液晶屏,有一个位置,就是G1和S1开始的位置,我们暂且把它称为物理地址。

(这个是没有办法改变的,所以我称之为物理地址,不过坐标原点还是可以改的)
G1、S1
S720
二、屏上的每一点与显示RAM的对应关系。

从下图可以看出:
1、每一行的每一个点地址2.5个字节,所以用三个S表示一个点,720/3=240
2、纵向是320行,所以是G1到G320,所以正好是320*240
G1
G320
三、关键命令。

从源驱动器选择输出的转变方向
When SS = 0, 输出转变方向是从S 1 到S 720 When SS = 1, 输出转变方向是从S 720 到S 1
进入模式
When AM = “0”,地址在水平写入方向得以更新。

When AM = “1”,地址在垂直写入方向得以更新。

I/D[1:0]控制地址计数器(AC)将自动增加或减少1.
ORG =“0”:如果原始地址是不能被移动的。

ORG=“1”:原始地址“00000H ”根据I/D[1:0]设置移动。

四、有关原点位置的确定(实测我自己的液晶)
GS=1SS=0
GS=0SS=1
GS=1
SS=1
GS=0SS=0。

相关文档
最新文档