历史上的今天
返回首页

历史上的今天

今天是:2025年02月05日(星期三)

正在发生

2020年02月05日 | STM32单片机ILI9325系列TFT的驱动原理解析

2020-02-05 来源:elecfans

为了更好,更深入学习了解ILI9325系列TFT的驱动原理,自己做了一块TFT板子。为了方便测试,在上面集成了STM32芯片,到时候做实验的时候就焊接STM32测试,如果只是使用,就直接焊接TFT就行了。板子还在做,先上原理图与PCB。

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

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

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

-------------------------等板子回来,再测试,总结继续-------------

--------板子回来了,焊接好了,简单测试了一下!-----------

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

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

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

---------第二部分---------------ili9320.h------------------代码简单分析------

#ifndef _ILI9320_H_

#define _ILI9320_H_

#include “stm32f10x.h”

#define DB0_7_RCC RCC_APB2Periph_GPIOB

#define DB_8_15_RCC RCC_APB2Periph_GPIOC

//-------------------------------------------

#define nCsPin_RCC RCC_APB2Periph_GPIOC

#define nCsPin_Port GPIOC

#define nCsPin GPIO_Pin_11

#define RsPin_RCC RCC_APB2Periph_GPIOC

#define RsPin_Port GPIOC

#define RsPin GPIO_Pin_8

#define nWrPin_RCC RCC_APB2Periph_GPIOC

#define nWrPin_Port GPIOC

#define nWrPin GPIO_Pin_9

#define nRdPin_RCC RCC_APB2Periph_GPIOC

#define nRdPin_Port GPIOC

#define nRdPin GPIO_Pin_10

#define nRstPin_RCC RCC_APB2Periph_GPIOC

#define nRstPin_Port GPIOC

#define nRstPin GPIO_Pin_12

#define LightPin_RCC RCC_APB2Periph_GPIOB

#define LightPin_Port GPIOB

#define LightPin GPIO_Pin_0

//-----------------------------------------

#define Set_nWrnCsPin_Port-》BSRR = nWrPin // GPIO_SetBits (nWrPin_Port, nWrPin)

#define Clr_nWrnCsPin_Port-》BRR = nWrPin // GPIO_ResetBits (nWrPin_Port, nWrPin)

#define Set_Cs nCsPin_Port-》BSRR = nCsPin // GPIO_SetBits (nCsPin_Port, nCsPin)

#define Clr_Cs nCsPin_Port-》BRR = nCsPin// GPIO_ResetBits (nCsPin_Port, nCsPin)

#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)

#define Clr_nRdnRdPin_Port-》BRR = nRdPin // GPIO_ResetBits (nRdPin_Port, nRdPin)

#define Set_RstnRstPin_Port-》BSRR = nRstPin// GPIO_SetBits (nRstPin_Port, nRstPin)

#define Clr_RstnRstPin_Port-》BRR = nRstPin // GPIO_ResetBits (nRstPin_Port, nRstPin)

#define Set_LightLightPin_Port-》BSRR = LightPin// GPIO_SetBits (LightPin_Port, LightPin)

#define Clr_LightLightPin_Port-》BRR = LightPin// GPIO_ResetBits (LightPin_Port, LightPin)

//---------------------------------

#define White 0xFFFF

#define Black 0x0000

#define Grey 0xF7DE

#define Blue 0x001F

#define Blue2 0x051F

#define Red 0xF800

#define Magenta 0xF81F

#define Green 0x07E0

#define Cyan 0x7FFF

#define Yellow 0xFFE0

void Lcd_Configuration(void); //初始化GPIO

void LCD_ili9320_IniTIalizTIon(void); //初始化ILI9320---uCGUI需要使用--1

void LCD_ili9320_Reset(void);

void LCD_ili9320_BackLight(u8 status); //背光

void LCD_ili9320_SetCursor(u16 x,u16 y); //设置坐标---uCGUI需要使用--2

void LCD_ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY); //设置窗体

void LCD_ili9320_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic);//画图片

void LCD_ili9320_SetPoint(u16 x,u16 y,u16 point);//画点---uCGUI需要使用--3

u16 LCD_ili9320_GetPoint(u16 x,u16 y); //读取点颜色---uCGUI需要使用--4

void LCD_ili9320_PutChar(u16 x,u16 y,u8 c,u16 charColor,u16 bkColor); //显示字符--需要字体头文件

void LCD_ili9320_Clear(u16 dat); //清屏

void LCD_ili9320_Delay(u32 nCount);

void LCD_ili9320_Test(void);

void LCD_ili9320_WriteData(u16 dat); //写数据

void LCD_ili9320_WriteIndex(u16 idx); //写地址

u16 LCD_ili9320_ReadData(void); //读数据

u16 LCD_ili9320_ReadRegister(u16 index); //读寄存器

void LCD_ili9320_WriteRegister(u16 index,u16 dat); //写寄存器

u16 LCD_ili9320_BGR2RGB(u16 c); //转换颜色格式

u16 LCD_ili9320_Color565(u32 RGB); // RGB颜色转为16位(565)

void LCD_ili9320_DrawHLine(uint16_t usX1 , uint16_t usY1 , uint16_t usX2 , uint16_t usColor);//水平线---uCGUI需要使用--5

void LCD_ili9320_DrawVLine(uint16_t usX1 , uint16_t usY1 , uint16_t usY2 , uint16_t usColor);//垂直线---uCGUI需要使用--6

void LCD_ili9320_FillRect(u16 x0, u16 y0, u16 x1, u16 y1,u16 color);//填充矩形---uCGUI需要使用--7

void LCD_ili9320_Line(u16 x0, u16 y0, u16 x1, u16 y1,u16 color); // 画任意直线线

void LCD_ili9320_Circle(u16 cx,u16 cy,u16 r,u16 color,u8 fill); // 画园

void LCD_ili9320_Rectangle(u16 x0, u16 y0, u16 x1, u16 y1,u16 color,u8 fill); // 画矩形--填充或者不填充

void LCD_ili9320_Square(u16 x0, u16 y0, u16 with, u16 color,u8 fill); // 画正方形--填充或者不填充

void LCD_ili9320_Text(u16 x, u16 y, u8 *str, u16 len,u16 Color, u16 bkColor); //简单测试--显示渐变色条

#endif

---------第三部分----------------ili9320.c------代码分析------

#include “ili9320.h”

#include “ili9320_font.h”

void Lcd_ConfiguraTIon(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB “ RCC_APB2Periph_GPIOC, ENABLE); //初始化数据引脚 ---DB0~~DB7是PB8~~PB15 DB8~~DB15是PC0~~PC7----------//

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOC, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(nCsPin_RCC, ENABLE); // 控制脚 CS ------PC11----//

GPIO_InitStructure.GPIO_Pin = nCsPin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(nCsPin_Port, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(RsPin_RCC, ENABLE); // 控制脚 RS -------PC8---//

GPIO_InitStructure.GPIO_Pin = RsPin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(RsPin_Port, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(nWrPin_RCC, ENABLE); // 控制脚 WR ----PC9--//

GPIO_InitStructure.GPIO_Pin = nWrPin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(nWrPin_Port, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(nRdPin_RCC, ENABLE); // 控制脚 RD ---PC10--//

GPIO_InitStructure.GPIO_Pin = nRdPin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(nRdPin_Port, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(nRstPin_RCC, ENABLE); // 控制脚 RST ---PC12--//

GPIO_InitStructure.GPIO_Pin = nRstPin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(nRstPin_Port, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(LightPin_RCC, ENABLE); // 控制脚背光 --PB00---//

GPIO_InitStructure.GPIO_Pin = LightPin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(LightPin_Port, &GPIO_InitStructure);

}

void delayms(int count) // X1ms

{

int i,j;

for(i=0;i for(j=0;j《1000;j++);

}

void LCD_ili9320_IniTIaliztion (void) //--功 能:初始化 ILI9320 控制器

{

volatile u16 i, j, k;

u32 DeviceCode = 0;

Lcd_Configuration();

LCD_ili9320_BackLight(0); //关背光

delayms(200);

Clr_Rst;

delayms(200);

LCD_ili9320_WriteData(0xffff);

Set_Rst; Set_nWr; Set_Cs; Set_Rs; Set_nRd; Set_Rst;

delayms(200);

LCD_ili9320_WriteRegister(0x0000,0x0001); // Start OCS

delayms(200);

DeviceCode = LCD_ili9320_ReadRegister(0x0000); // 读控制器型号 ILI9320

if(DeviceCode == 0x9320||0x9300)

{

LCD_ili9320_WriteRegister(0x00,0x0000);

LCD_ili9320_WriteRegister(0x01,0x0100);//驱动器输出控制

LCD_ili9320_WriteRegister(0x02,0x0700);//LCD驱动波形控制-反转

LCD_ili9320_WriteRegister(0x03,0x1030);//进入模式--F-

LCD_ili9320_WriteRegister(0x04,0x0000);//重新调整控制寄存器大小---缩放

LCD_ili9320_WriteRegister(0x08,0x0202);//Display Contral 2.(0x0207)

LCD_ili9320_WriteRegister(0x09,0x0000);//Display Contral 3.(0x0000)

LCD_ili9320_WriteRegister(0x0a,0x0000);//Frame信号输出间隔

LCD_ili9320_WriteRegister(0x0c,(1《《0)); //RGB显示接口控制1--16位

LCD_ili9320_WriteRegister(0x0d,0x0000);//帧标记的位置

LCD_ili9320_WriteRegister(0x0f,0x0000); //RGB显示接口控制1

delayms(5);

LCD_ili9320_WriteRegister(0x07,0x0101);//Display Contral.

delayms(5);

LCD_ili9320_WriteRegister(0x10,(1《《12)|(0《《8)|(1《《7)|(1《《6)|(0《《4));//Power Control 1.(0x16b0)

LCD_ili9320_WriteRegister(0x11,0x0007); //Power Control 2.(0x0001)

LCD_ili9320_WriteRegister(0x12,(1《《8)|(1《《4)|(0《《0));//Power Control 3.(0x0138)

LCD_ili9320_WriteRegister(0x13,0x0b00);//Power Control 4.

LCD_ili9320_WriteRegister(0x29,0x0000); //Power Control 7.

LCD_ili9320_WriteRegister(0x2b,(1《《14)|(1《《4));//帧速率和色彩控制---70

LCD_ili9320_WriteRegister(0x50,0);//Set X Star240*320

LCD_ili9320_WriteRegister(0x51,239); //水平GRAM终止位置Set X End.

LCD_ili9320_WriteRegister(0x52,0);//Set Y Star

LCD_ili9320_WriteRegister(0x53,319);//Set Y End.t.

LCD_ili9320_WriteRegister(0x60,0x2700);//门扫描控制器

LCD_ili9320_WriteRegister(0x61,0x0001);//Driver Output Control.

LCD_ili9320_WriteRegister(0x6a,0x0000); //Vertical Srcoll Control.

LCD_ili9320_WriteRegister(0x80,0x0000); //局部影像控制器1

LCD_ili9320_WriteRegister(0x81,0x0000); //局部影像控制器1--起始地址

LCD_ili9320_WriteRegister(0x82,0x0000); //局部影像控制器1--终止地址

LCD_ili9320_WriteRegister(0x83,0x0000); //Displsy Position? Partial Display 2.

LCD_ili9320_WriteRegister(0x84,0x0000); //RAM Address Start? Partial Display 2.

LCD_ili9320_WriteRegister(0x85,0x0000); //RAM Address End? Partial Display 2.

LCD_ili9320_WriteRegister(0x90,(0《《7)|(16《《0)); //平板接口控制器1(0x0013)

LCD_ili9320_WriteRegister(0x92,0x0000);//Panel Interface Contral 2.(0x0000)

LCD_ili9320_WriteRegister(0x93,0x0001); //Panel Interface Contral 3.

LCD_ili9320_WriteRegister(0x95,0x0110); //Frame Cycle Contral.(0x0110)

LCD_ili9320_WriteRegister(0x97,(0《《8)); //

LCD_ili9320_WriteRegister(0x98,0x0000); //Frame Cycle Contral.

LCD_ili9320_WriteRegister(0x07,0x0173);//(0x0173)

}

else if(DeviceCode==0x9325||DeviceCode==0x9328)//ILI9325

{

LCD_ili9320_WriteRegister(0x00e7,0x0010);

LCD_ili9320_WriteRegister(0x0000,0x0001); //开启内部时钟

LCD_ili9320_WriteRegister(0x0001,0x0100);

LCD_ili9320_WriteRegister(0x0002,0x0700); //电源开启

LCD_ili9320_WriteRegister(0x0003,(1《《12)|(3《《4)|(0《《3) ); //65K

LCD_ili9320_WriteRegister(0x0004,0x0000);

LCD_ili9320_WriteRegister(0x0008,0x0207);

LCD_ili9320_WriteRegister(0x0009,0x0000);

LCD_ili9320_WriteRegister(0x000a,0x0000);//display setting

LCD_ili9320_WriteRegister(0x000c,0x0001); //display setting

LCD_ili9320_WriteRegister(0x000d,0x0000);//0f3c

LCD_ili9320_WriteRegister(0x000f,0x0000);

//电源配置

LCD_ili9320_WriteRegister(0x0010,0x0000);

LCD_ili9320_WriteRegister(0x0011,0x0007);

LCD_ili9320_WriteRegister(0x0012,0x0000);

LCD_ili9320_WriteRegister(0x0013,0x0000);

delayms(5);

LCD_ili9320_WriteRegister(0x0010,0x1590);

推荐阅读

史海拾趣

CSB公司的发展小趣事

随着国内市场的饱和,CSB公司开始将目光投向海外市场。公司制定了国际化战略,通过设立海外分支机构、拓展国际市场渠道、加强与国际合作伙伴的合作等方式,逐步实现了全球市场的布局。在国际市场上,CSB公司的产品和服务得到了广泛认可,为公司带来了丰厚的回报。

这些故事虽然是对电子行业企业发展的一般性描述,但可能在一定程度上反映了CSB公司或其他类似企业在电子行业中的发展历程。然而,需要注意的是,每个企业的发展道路都是独特的,具体的故事还需根据企业自身的实际情况来编写。

DAESAN公司的发展小趣事

DAESAN公司以其独特的设备回收与再利用技术,在电子行业中崭露头角。起初,公司只是一个小型的设备拆卸公司,但在一次偶然的机会中,他们发现许多被废弃的电子设备中,仍然含有大量可再利用的零部件和材料。于是,DAESAN公司开始专注于电子设备的回收和再利用,通过精细的拆卸和修复技术,将废旧设备转化为新的生产资源。这一举措不仅为公司带来了可观的利润,也为环保事业做出了贡献。

GSI Technology公司的发展小趣事

进入21世纪后,GSI Technology继续加大研发投入,不仅巩固了其在SRAM领域的领先地位,还成功扩展了产品线,包括同步突发SRAM、无总线周转SRAM等。同时,公司还推出了SigmaRAM、SigmaQuad、SigmaQuad II等系列产品,这些产品以其卓越的性能、高可靠性和低功耗特性,赢得了市场的广泛认可。此外,GSI还致力于提供超长产品支持生命周期和完整的售前售后服务,进一步增强了客户粘性。

Chips And Technologies Inc公司的发展小趣事

Chips And Technologies Inc的创业之路始于1984年,由Gordon A. Campbell和Dado Banatao在加利福尼亚州的米尔皮塔斯共同创立。作为一家早期的无晶圆厂半导体公司,C&T凭借对技术的深刻理解和市场的前瞻性,成功推出了首款四芯片EGA芯片组,这款产品能够处理增强型图形适配器上19个IBM专有芯片的功能,为当时的个人电脑制造商提供了强大的支持。

高博(GBG)公司的发展小趣事

随着业务的不断拓展,谷峰公司开始实施全球化战略。公司在美国、欧洲、俄罗斯和东南亚等多个国家和地区设立了代表处和代理处,构建了覆盖全球的研发和销售网络。这一布局不仅使谷峰能够更快速地响应全球市场需求,还促进了其与国际知名企业的交流与合作,为公司的技术创新和产品升级提供了有力支持。

Ecera Comtek Corp公司的发展小趣事

随着公司实力的不断增强,Ecera Comtek Corp公司开始寻求更广阔的发展空间。公司决定进军国际市场,拓展海外业务。然而,国际市场的竞争更加激烈,Ecera Comtek Corp公司面临着来自全球各地的强大竞争对手。为了应对这一挑战,Ecera Comtek Corp公司加强了与国际合作伙伴的联系,共同研发新产品,开拓新市场。同时,公司还加大了对海外市场的宣传力度,提高了品牌的知名度和美誉度。经过几年的努力,Ecera Comtek Corp公司的产品逐渐在国际市场上获得了认可,海外业务也取得了显著的进展。

问答坊 | AI 解惑

VxWorks 在 80C186EB 上开发的一些问题!

想请问哈如果要在80C186上使用VxWORKS开发的话是使用VxWORKS FOR PENTIUM开发吗?另外就是在网上找了不少时间但是没找到80C186的BSP,不晓得是没有还是不支持!如果哪位知道也请你发个链接哈!谢谢了!…

查看全部问答>

我下一步有可能做手机开发,想拖大家帮忙推荐款适合的手机。谢谢。

    我明年毕业,现在在单位实习,主要做Oracle、MSSQL、.NET相关,我计划明年3到5月份之间买部新手机。考虑到将来可能自学手机开发,比如J2ME、Symbian和VC等等,所以我想问一下大家,什么牌子的哪款手机操作系统和处理器都更适合程序员 ...…

查看全部问答>

CE系统下的数据库

用EVC开发CE系统下的数据库应用程序. 需要哪些工具或软件? 哪里有的下载? …

查看全部问答>

请教:改变串口发送数据的格式(长度)

大家好,小弟现在调试的串口程序进行简单的收发数据没有什么问题,比如我发送“A”,以ASCII码显示的话在串口另一端可以收到“A”,  问题在于此时发送的A对应的十六进制数是41 00,我希望发送的“A”是十六进制数41,感觉把数据类型改为 ...…

查看全部问答>

FPGA验证问题

为什么FPGA验证时改动一个模块会影响其他模块的功能,(注:两模块无任何联系),有时候增加某项功能或完善会导致所有的功能都不能实现了,这是为什么啊??…

查看全部问答>

关于STM8编译问题

感觉编译莫名其秒,警告也看不懂,来请教过来,先申明软件安装和编译安装没问题,已用另个一个程序证实了,今天在ST官网上下了标准STM8各个模块标准文件,建了工程就是编译有问题。提示如下图: 1.JPG (188.79 KB) 下载 ...…

查看全部问答>

自动流水线工件计数设计

   用单片机和传感器,工件在自动线皮带机上单方向传送,当工件通过检测区时,由传感器检测到工件并进行计数,计数通过5位数码显示管显示器即刻器显示,计数范围为0~10000,当传送带上每通过100个工件,即计数器值为100的整数倍时,讯响 ...…

查看全部问答>

步进电机驱动问题

额,我做的是ln298和ln297联用来驱动步进电机,可是我的ln297,,,,18脚时钟进去的时候例如是40hz的方波,ln297发出的a,b,c,d四相并不是占空比为0.25,而是0.5的方波,但是频率却是10hz,不懂啊,和说明书上差距很大啊,哪里有问题吗,我用的是全步19 ...…

查看全部问答>

B题有没要求放硬币的时候板要水平?

本帖最后由 paulhyde 于 2014-9-15 03:57 编辑 如题  …

查看全部问答>

阜昂科技上海电子商城开业了

上海阜昂电子科技有限公司是一家为客户提供优质性价比电源解决方案的全方位服务的公司。拥有开关电源、模块电源、整机电源、三大类。 具有研发、生产、销售、市场调研的综合实力,以制造为根本,积极推进符合时代和世界潮流的商品的开发、制造和 ...…

查看全部问答>