#include"stm32f10x_lib.h" //#include "lpc11xx.h" #include "ili9325.h" //#include "ascii.h" //#include "w25q16.h" u16 POINT_COLOR=BLACK; u16 BACK_COLOR=WHITE; #define CS_SET GPIO_SetBits(GPIOB,0X2) #define CS_CLR GPIO_ResetBits(GPIOB,0X2) #define WR_SET GPIO_SetBits(GPIOB,0X10) #define WR_CLR GPIO_ResetBits(GPIOB,0X10) #define RS_SET GPIO_SetBits(GPIOB,0X20) #define RS_CLR GPIO_ResetBits(GPIOB,0X20) #define RST_SET GPIO_SetBits(GPIOB,0X40) #define RST_CLR GPIO_ResetBits(GPIOB,0X40) #define RD_SET GPIO_SetBits(GPIOB,0X800) #define RD_CLR GPIO_ResetBits(GPIOB,0X800) /**************************************************/ /* 函数功能;短暂延时,为LCD初始化时序服务 */ /**************************************************/ void delay(u32 i) { i=i*10000; while(i>0) { i--; } } /*******************************************************/ /* 函数功能:初始化LCD */ /*******************************************************/ void LCD_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO结构体变量 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB,ENABLE); //使能各个端口时钟,重要!!! GPIO_InitStructure.GPIO_Pin = 0XFFF2;//GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用输出推挽 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //配置端口速度为50M GPIO_Init(GPIOB, &GPIO_InitStructure); //根据参数初始化GPIOB寄存器 GPIO_Write(GPIOB,0XFFF2); delay(60); //************* Start Initial Sequence **********// 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); LCD_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 ****************// LCD_WR_REG_DATA(0x0010, 0x0000); LCD_WR_REG_DATA(0x0011, 0x0007); LCD_WR_REG_DATA(0x0012, 0x0000); LCD_WR_REG_DATA(0x0013, 0x0000); LCD_WR_REG_DATA(0x0007, 0x0001); delay(200); LCD_WR_REG_DATA(0x0010, 0x1690); LCD_WR_REG_DATA(0x0011, 0x0227); delay(250); LCD_WR_REG_DATA(0x0012, 0x001A); delay(250); LCD_WR_REG_DATA(0x0013, 0x1400); LCD_WR_REG_DATA(0x0029, 0x0024); LCD_WR_REG_DATA(0x002B, 0x000C); delay(250); LCD_WR_REG_DATA(0x0020, 0x0000); LCD_WR_REG_DATA(0x0021, 0x0000); // ----------- Adjust the Gamma Curve ----------// LCD_WR_REG_DATA(0x0030, 0x0000); LCD_WR_REG_DATA(0x0031, 0x0707); LCD_WR_REG_DATA(0x0032, 0x0307); LCD_WR_REG_DATA(0x0035, 0x0200); LCD_WR_REG_DATA(0x0036, 0x0008); LCD_WR_REG_DATA(0x0037, 0x0004); LCD_WR_REG_DATA(0x0038, 0x0000); LCD_WR_REG_DATA(0x0039, 0x0707); LCD_WR_REG_DATA(0x003C, 0x0002); LCD_WR_REG_DATA(0x003D, 0x1D04); //------------------ Set GRAM area ---------------// LCD_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); //-------------- Partial Display Control ---------// 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); //-------------- Panel Control -------------------// LCD_WR_REG_DATA(0x0090, 0x0010); LCD_WR_REG_DATA(0x0092, 0x0600); LCD_WR_REG_DATA(0x0007, 0x0133); // 开启显示 delay(260 ); } /******************************************************/ /* 函数功能;先选择寄存器号,再写数据到里面 */ /* 入口参数;REG:寄存器号 VALUE:数据值 */ /* 说明: 该函数是前两个函数的合成,也就是上面两个 */ /* 函数一般的用法就是这样组合。 */ /******************************************************/ void LCD_WR_REG_DATA(u16 REG, u16 VALUE) { LCD_WR_REG(REG); LCD_WR_DATA(VALUE); } /****************************************************/ /* 函数功能:确定往哪个寄存器写数 */ /* 入口参数;reg:选择的寄存器 */ /* 说明: 寄存器号是16位数,8位连接方式需要写两次*/ /****************************************************/ void LCD_WR_REG(u16 reg) { u16 M; RS_CLR; //RS=0; CS_CLR; //CS=0; M=GPIO_ReadOutputData(GPIOB); M&=0X0FF;M|=(reg&0X0FF00); GPIO_Write(GPIOB,M); WR_CLR; //WR=0; WR_SET; //WR=1; M=GPIO_ReadOutputData(GPIOB); M&=0X0FF;M|=((reg<<8)&0X0FF00); GPIO_Write(GPIOB,M); WR_CLR; //WR=0; WR_SET; //WR=1; RS_SET; //RS=1; } /***************************************************/ /* 函数功能;给ILI9325的寄存器写数据 */ /* 入口参数;val:16位数据 */ /* 说明: 写16位数据,学习板上的LCD采用8位连接,*/ /* 所以,16位数据分两次写进寄存器,先写高*/ /* 位,再写低位。 */ /* 注意:使用时需要先使用LCD_WR_REG(reg)选择要把数 */ /* 据写到哪个寄存器里面。 */ /***************************************************/ void LCD_WR_DATA(u16 val) { u16 M; RS_SET; //RS=1; CS_CLR; //CS=0; M=GPIO_ReadOutputData(GPIOB); M&=0X00FF;M|=(val&0X0FF00); GPIO_Write(GPIOB,M); WR_CLR; //WR=0; WR_SET; //WR=1; M=GPIO_ReadOutputData(GPIOB); M&=0X00FF;M|=((val<<8)&0X0FF00); GPIO_Write(GPIOB,M); WR_CLR; //WR=0; WR_SET; //WR=1; CS_SET; //CS=1; } void LCD_Clear(u16 color) { u32 temp; LCD_WR_REG_DATA(0x0020,0);//设置X坐标位置 LCD_WR_REG_DATA(0x0021,0);//设置Y坐标位置 LCD_WR_REG(0x0022); //指向RAM寄存器,准备写数据到RAM for(temp=0;temp<76800;temp++) { LCD_WR_DATA(color); }LCD_WR_REG_DATA(0x0007, 0x0133); // 开启显示*/ } |
下面提供一些 ili9325 的资料(来源于野火开发板)
ILI9325的英文资料
ILI9325的中文资料
ILI9325的驱动源码
ILI9325驱动2.4寸TFT屏的整套源码
评分
查看全部评分