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

上传人:白大夫 文档编号:3273609 上传时间:2019-08-07 格式:DOC 页数:24 大小:100KB
返回 下载 相关 举报
STM32单片机ILI9325系列TFT的驱动原理解析.doc_第1页
第1页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《STM32单片机ILI9325系列TFT的驱动原理解析.doc》由会员分享,可在线阅读,更多相关《STM32单片机ILI9325系列TFT的驱动原理解析.doc(24页珍藏版)》请在三一文库上搜索。

1、STM32单片机ILI9325系列TFT的驱动原理解析为了更好,更深入学习了解ILI9325系列TFT的驱动原理,自己做了一块TFT板子。为了方便测试,在上面集成了STM32芯片,到时候做实验的时候就焊接STM32测试,如果只是使用,就直接焊接TFT就行了。板子还在做,先上原理图与PCB。-等板子回来,再测试,总结继续-板子回来了,焊接好了,简单测试了一下!-第二部分-ili9320.h-代码简单分析-#ifndef _ILI9320_H_#define _ILI9320_H_#include “stm32f10x.h”#define DB0_7_RCC RCC_APB2Periph_GPIO

2、B#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 GP

3、IO_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_

4、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)#de

5、fine 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)#de

6、fine 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_Res

7、etBits (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 0xFFE0void Lcd_Configuration(void); /初始化GPIOvoid LCD_ili9320_IniTIalizTIon

8、(void); /初始化ILI9320-uCGUI需要使用-1void LCD_ili9320_Reset(void);void LCD_ili9320_BackLight(u8 status); /背光void LCD_ili9320_SetCursor(u16 x,u16 y); /设置坐标-uCGUI需要使用-2void LCD_ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY); /设置窗体void LCD_ili9320_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 E

9、ndY,u16 *pic);/画图片void LCD_ili9320_SetPoint(u16 x,u16 y,u16 point);/画点-uCGUI需要使用-3u16 LCD_ili9320_GetPoint(u16 x,u16 y); /读取点颜色-uCGUI需要使用-4void 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 LC

10、D_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_Col

11、or565(u32 RGB); / RGB颜色转为16位(565)void LCD_ili9320_DrawHLine(uint16_t usX1 , uint16_t usY1 , uint16_t usX2 , uint16_t usColor);/水平线-uCGUI需要使用-5void LCD_ili9320_DrawVLine(uint16_t usX1 , uint16_t usY1 , uint16_t usY2 , uint16_t usColor);/垂直线-uCGUI需要使用-6void LCD_ili9320_FillRect(u16 x0, u16 y0, u16 x1,

12、 u16 y1,u16 color);/填充矩形-uCGUI需要使用-7void 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,

13、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

14、(RCC_APB2Periph_GPIOB “ RCC_APB2Periph_GPIOC, ENABLE); /初始化数据引脚 -DB0DB7是PB8PB15 DB8DB15是PC0PC7-/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.

15、GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, 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, RCC_APB2Per

16、iphClockCmd(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, RCC_APB2PeriphClockCmd(RsPin_RCC, ENABLE); / 控制脚 RS -PC8-/GPIO_InitStructure.GPIO_Pin = RsPin;G

17、PIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(RsPin_Port, RCC_APB2PeriphClockCmd(nWrPin_RCC, ENABLE); / 控制脚 WR -PC9-/GPIO_InitStructure.GPIO_Pin = nWrPin;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mod

18、e_Out_PP;GPIO_Init(nWrPin_Port, 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, RCC_APB2PeriphClockCmd(nRstPin_RCC, ENABLE); / 控制脚 R

19、ST -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, RCC_APB2PeriphClockCmd(LightPin_RCC, ENABLE); / 控制脚背光 -PB00-/GPIO_InitStructure.GPIO_Pin = LightPin;GPIO_InitStructure.GPIO_Speed =

20、GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(LightPin_Port, void delayms(int count) / X1msint i,j;for(i=0;i for(j=0;j1000;j+);void LCD_ili9320_IniTIaliztion (void) /-功 能:初始化 ILI9320 控制器volatile u16 i, j, k;u32 DeviceCode = 0;Lcd_Configuration();LCD_ili9320_BackLight(0);

21、 /关背光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 OCSdelayms(200);DeviceCode = LCD_ili9320_ReadRegister(0x0000); / 读控制器型号 ILI9320if(DeviceCode = 0x9320|0x9300)LCD_ili9

22、320_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

23、_ili9320_WriteRegister(0x09,0x0000);/Display Contral 3.(0x0000)LCD_ili9320_WriteRegister(0x0a,0x0000);/Frame信号输出间隔LCD_ili9320_WriteRegister(0x0c,(10); /RGB显示接口控制1-16位LCD_ili9320_WriteRegister(0x0d,0x0000);/帧标记的位置LCD_ili9320_WriteRegister(0x0f,0x0000); /RGB显示接口控制1delayms(5);LCD_ili9320_WriteRegister(

24、0x07,0x0101);/Display Contral.delayms(5);LCD_ili9320_WriteRegister(0x10,(112)|(08)|(17)|(16)|(04);/Power Control 1.(0x16b0)LCD_ili9320_WriteRegister(0x11,0x0007); /Power Control 2.(0x0001)LCD_ili9320_WriteRegister(0x12,(18)|(14)|(00);/Power Control 3.(0x0138)LCD_ili9320_WriteRegister(0x13,0x0b00);/P

25、ower Control 4.LCD_ili9320_WriteRegister(0x29,0x0000); /Power Control 7.LCD_ili9320_WriteRegister(0x2b,(114)|(14);/帧速率和色彩控制-70LCD_ili9320_WriteRegister(0x50,0);/Set X Star240*320LCD_ili9320_WriteRegister(0x51,239); /水平GRAM终止位置Set X End.LCD_ili9320_WriteRegister(0x52,0);/Set Y StarLCD_ili9320_WriteRe

26、gister(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); /局部影像控制器1LCD_ili9320_WriteRegister(0x81,0x0000); /局部影像控制器

27、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_ili93

28、20_WriteRegister(0x90,(07)|(160); /平板接口控制器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,(08); /L

29、CD_ili9320_WriteRegister(0x98,0x0000); /Frame Cycle Contral.LCD_ili9320_WriteRegister(0x07,0x0173);/(0x0173)else if(DeviceCode=0x9325|DeviceCode=0x9328)/ILI9325LCD_ili9320_WriteRegister(0x00e7,0x0010);LCD_ili9320_WriteRegister(0x0000,0x0001); /开启内部时钟LCD_ili9320_WriteRegister(0x0001,0x0100);LCD_ili93

30、20_WriteRegister(0x0002,0x0700); /电源开启LCD_ili9320_WriteRegister(0x0003,(112)|(34)|(03) ); /65KLCD_ili9320_WriteRegister(0x0004,0x0000);LCD_ili9320_WriteRegister(0x0008,0x0207);LCD_ili9320_WriteRegister(0x0009,0x0000);LCD_ili9320_WriteRegister(0x000a,0x0000);/display settingLCD_ili9320_WriteRegister(

31、0x000c,0x0001); /display settingLCD_ili9320_WriteRegister(0x000d,0x0000);/0f3cLCD_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);L

32、CD_ili9320_WriteRegister(0x0010,0x1590);LCD_ili9320_WriteRegister(0x0011,0x0227);delayms(5);LCD_ili9320_WriteRegister(0x0012,0x009c);delayms(5);LCD_ili9320_WriteRegister(0x0013,0x1900);LCD_ili9320_WriteRegister(0x0029,0x0023);LCD_ili9320_WriteRegister(0x002b,0x000e);delayms(5);LCD_ili9320_WriteRegis

33、ter(0x0020,0x0000);LCD_ili9320_WriteRegister(0x0021,0x013f);delayms(5);/伽马校正LCD_ili9320_WriteRegister(0x0030,0x0007);LCD_ili9320_WriteRegister(0x0031,0x0707);LCD_ili9320_WriteRegister(0x0032,0x0006);LCD_ili9320_WriteRegister(0x0035,0x0704);LCD_ili9320_WriteRegister(0x0036,0x1f04);LCD_ili9320_WriteRe

34、gister(0x0037,0x0004);LCD_ili9320_WriteRegister(0x0038,0x0000);LCD_ili9320_WriteRegister(0x0039,0x0706);LCD_ili9320_WriteRegister(0x003c,0x0701);LCD_ili9320_WriteRegister(0x003d,0x000f);delayms(5);LCD_ili9320_WriteRegister(0x0050,0x0000); /水平GRAM起始位置LCD_ili9320_WriteRegister(0x0051,0x00ef);/水平GRAM终止

35、位置LCD_ili9320_WriteRegister(0x0052,0x0000); /垂直GRAM起始位置LCD_ili9320_WriteRegister(0x0053,0x013f); /垂直GRAM终止位置LCD_ili9320_WriteRegister(0x0060,0xa700);LCD_ili9320_WriteRegister(0x0061,0x0001);LCD_ili9320_WriteRegister(0x006a,0x0000);LCD_ili9320_WriteRegister(0x0080,0x0000);LCD_ili9320_WriteRegister(0x

36、0081,0x0000);LCD_ili9320_WriteRegister(0x0082,0x0000);LCD_ili9320_WriteRegister(0x0083,0x0000);LCD_ili9320_WriteRegister(0x0084,0x0000);LCD_ili9320_WriteRegister(0x0085,0x0000);LCD_ili9320_WriteRegister(0x0090,0x0010);LCD_ili9320_WriteRegister(0x0092,0x0000);LCD_ili9320_WriteRegister(0x0093,0x0003);

37、LCD_ili9320_WriteRegister(0x0095,0x0110);LCD_ili9320_WriteRegister(0x0097,0x0000);LCD_ili9320_WriteRegister(0x0098,0x0000);/开启显示设置LCD_ili9320_WriteRegister(0x0007,0x0133);LCD_ili9320_WriteRegister(0x0020,0x0000);LCD_ili9320_WriteRegister(0x0021,0x013f);delayms(200);LCD_ili9320_BackLight(1);/开背光void

38、LCD_ili9320_SetCursor(u16 x,u16 y) /-功 能:设置屏幕座标LCD_ili9320_WriteRegister(0x0020,x);/ 行LCD_ili9320_WriteRegister(0x0021,y);/ 列/* 功 能:设置窗口区域* 入口参数:StartX 行起始座标* StartY 列起始座标* EndX 行结束座标* EndY 列结束座标*/void LCD_ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY)LCD_ili9320_SetCursor(StartX,StartY

39、);LCD_ili9320_WriteRegister(0x0050, StartX);LCD_ili9320_WriteRegister(0x0052, StartY);LCD_ili9320_WriteRegister(0x0051, EndX);LCD_ili9320_WriteRegister(0x0053, EndY);/* 功 能:将屏幕填充成指定的颜色,如清屏,则填充 0xffff* 入口参数:dat 填充值*/void LCD_ili9320_Clear(u16 dat)u32 i;LCD_ili9320_SetCursor(0x0000, 0x0000);Clr_Cs;LCD

40、_ili9320_WriteIndex(0x0022);Set_Rs;for(i = 0; i 768000; i+) /240*320=76800LCD_ili9320_WriteData(dat);Clr_nWr;Set_nWr;Set_Cs;/* 功 能:获取指定座标的颜色值* 入口参数:x 行座标* y 列座标* 出口参数:当前座标颜色值*/u16 LCD_ili9320_GetPoint(u16 x,u16 y)LCD_ili9320_SetCursor(x,y);return (LCD_ili9320_BGR2RGB(LCD_ili9320_ReadRegister(0x0022)

41、;/* 功 能:在指定座标画点* 入口参数:x 行座标* y 列座标* point 点的颜色*/void LCD_ili9320_SetPoint(u16 x,u16 y,u16 point)if (x240)|(y320)return;LCD_ili9320_SetCursor(x,y);Clr_Cs;LCD_ili9320_WriteIndex(0x0022);Set_Rs;LCD_ili9320_WriteData(point);Clr_nWr;Set_nWr;Set_Cs;/* 功 能:在指定座标范围显示一副图片* 入口参数:StartX 行起始座标* StartY 列起始座标* En

42、dX 行结束座标* EndY 列结束座标* pic 图片头指针* 说 明:图片取模格式为水平扫描,16位颜色模式*/void LCD_ili9320_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic)u16 i;LCD_ili9320_SetWindows(StartX,StartY,EndX,EndY);LCD_ili9320_SetCursor(StartX,StartY);Clr_Cs;LCD_ili9320_WriteIndex(0x0022);Set_Rs;for (i=0;i(EndX*EndY);i+)LCD_ili9320_WriteData(*pic+);Clr_nWr;Set_nWr;Set_Cs;/* 功 能:在指定座标显示一个8x16点阵的ascii字符* 入口参数:x 行座标* y 列座标* charColor 字符的颜色* bkColor 字符背景颜色* 说 明:显示范围限定为可显示的ascii码*/void LCD_ili9320_PutChar(u16 x,u16 y,u8 c,u16 charColor,u16 bkCo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1