⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ili9325.c

📁 STM32驱动nrf24l01
💻 C
字号:
/*******************************************************************************
名    称:ILI9325 TFT液晶彩屏操作程序
功    能:本c文件封装了对12864液晶的一些简单的基本读写操作.
封装函数:
	void ILI9325_Init(void);                                      //TFT初始化
	void ILI9325_WriteCmd(unsigned char CH,unsigned char CL);     //写命令
	void ILI9325_WriteData(unsigned char DH,unsigned char DL);    //写数据
	void ILI9325_WriteDataU16(unsigned int dat);                  //写16位数据
	void ILI9325_WriteCmdData (unsigned char cmd,unsigned int dat);	//写命令和数据
	void ILI9325_SetWindow(unsigned char x0,unsigned int y0,
                                unsigned char x1,unsigned int y1);    //设置窗口
	void ILI9325_SetXY(unsigned char x,unsigned int y);           //设定当前显示坐标
	void ILI9325_Test();                                          //彩条、单色自测程序
作    者:青涩的小黄瓜
最后修改时间:2011年12月13号
备注:
典型应用:

以上函数均进行测试可以正常使用
*******************************************************************************/
#include "stm32f10x.h"
#include "custom.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_flash.h"
#include "fsmc_sram.h"
#include "stm32f10x_fsmc.h"




#include "ILI9325.h"
#include "config.h"

#define Bank1_LCD_D    ((uint32_t)0x60020000)    //disp Data ADDR
#define Bank1_LCD_C    ((uint32_t)0x60000000)	 //disp Reg ADDR


/*颜色数值:红色,绿色,蓝色,黄色,黑色,白色,天蓝色,紫色*/
unsigned int color[]={0xf800,0x07e0,0x001f,0xffe0,0x0000,0xffff,0x07ff,0xf81f};


//=============================================================
//写命令
//功能:写一个命令到TFT控制器。
//入口参数: CH,CL分别为命令字的高8位和低8位,指定要执行的命令。
//出口参数: 无
void ILI9325_WriteCmd(unsigned int index)
{	  				
	*(__IO uint16_t *) (Bank1_LCD_C)= index;
}
	

//===================================================================
//写数据
//功能:写一个数据到TFT控制器。
//入口参数: DH,DL分别为数据字的高8位和低8位,指定要写入的数据。
//出口参数: 无
/*
void ILI9325_WriteData(unsigned char DH,unsigned char DL)
{		 
}
*/

//==============================================================
//写16位数据
//功能: 写一个数据到TFT控制器。
//入口参数: dat为要写入的16位数据。
//出口参数: 无
void ILI9325_WriteDataU16(unsigned int val)
{
	*(__IO uint16_t *) (Bank1_LCD_D)= val; 	
}


//===============================================================
//写命令数据
//功能: 写命令数据到TFT控制器。
//入口参数: cmd为要写入的命令字节;dat为要写入的16位数据。
//出口参数: 无
void ILI9325_WriteCmdData (unsigned int index,unsigned int val)
{
	*(__IO uint16_t *) (Bank1_LCD_C)= index;	
	*(__IO uint16_t *) (Bank1_LCD_D)= val;
}

void lcd_rst(void)
{
	GPIO_ResetBits(GPIOE, GPIO_Pin_1);
  ILI9325_Delay(20);					   
  GPIO_SetBits(GPIOE, GPIO_Pin_1 );		 	 
	ILI9325_Delay(1000);	
}

//=============================================================
//TFT初始化
//功能:该函数用于初始化TFT彩屏模块。
//入口参数: 无
//出口参数: 无
void ILI9325_Init(void)
{ 
  
  //TFT_CMDDIR;
  //TFT_CS_1;
  //_NOP();
  //ILI9325_Delay(20);
  //TFT_RST_0;
  //_NOP();
  //ILI9325_Delay(20);
  //TFT_RST_1;
  //_NOP();//可以适当调整延时,保障稳定显示
  //ILI9325_Delay(1000);		
	lcd_rst();

  ILI9325_WriteCmdData(0x0001,0x0100); //源扫描设置SS=0, 输出的移动方向是从S1到S720
  //(源扫描设置SS=1, 输出的移动方向是从S720到S1)
  //SM=0,逐行扫描(SM=1,隔行扫描)
  
  ILI9325_WriteCmdData(0x0002,0x0700); //B/C=1、EOR=1:行倒置(B/C=0:帧/场倒置)
  ILI9325_WriteCmdData(0x0003,0x1030); //AM=0,地址在水平方向自动加1
  //I/D[1:0] = 11:水平垂直方向均增加
  //BGR=1:采用BGR格式
  //TRI=0、DFM=*:8位机、两次数据传送
  ILI9325_WriteCmdData(0x0004,0x0000); //比例缩放设置:不缩放
  
  //显示控制
  ILI9325_WriteCmdData(0x0008,0x0207); //设置后边沿和前沿 
  ILI9325_WriteCmdData(0x0009,0x0000);//设置非显示区时间间隔ISC[3:0]
  ILI9325_WriteCmdData(0x000A,0x0000); //帧标记功能
  
  ILI9325_WriteCmdData(0x000C,0x0000);//RGB显示接口控制1
  ILI9325_WriteCmdData(0x000D,0x0000);//帧标记位置
  ILI9325_WriteCmdData(0x000F,0x0000);//RGB显示接口控制2
  
  //电源配置
  ILI9325_WriteCmdData(0x0010,0x0000);   
  ILI9325_WriteCmdData(0x0011,0x0007);  
  ILI9325_WriteCmdData(0x0012,0x0000);  
  ILI9325_WriteCmdData(0x0013,0x0000); 
  //vgh 
  ILI9325_WriteCmdData(0x0010,0x1290);   
  ILI9325_WriteCmdData(0x0011,0x0227);
  //delayms(100);
  //vregiout 
  ILI9325_WriteCmdData(0x0012,0x001d); //0x001b
  //delayms(100); 
  //vom amplitude
  ILI9325_WriteCmdData(0x0013,0x1500);
  //delayms(100); 
  //vom H
  ILI9325_WriteCmdData(0x0029,0x0018); 
  ILI9325_WriteCmdData(0x002B,0x000D); 
  
  //伽马校正
  ILI9325_WriteCmdData(0x0030,0x0004);
  ILI9325_WriteCmdData(0x0031,0x0307);
  ILI9325_WriteCmdData(0x0032,0x0002);//0006
  ILI9325_WriteCmdData(0x0035,0x0206);
  ILI9325_WriteCmdData(0x0036,0x0408);
  ILI9325_WriteCmdData(0x0037,0x0507); 
  ILI9325_WriteCmdData(0x0038,0x0204);//0200
  ILI9325_WriteCmdData(0x0039,0x0707); 
  ILI9325_WriteCmdData(0x003C,0x0405);//0504
  ILI9325_WriteCmdData(0x003D,0x0F02); 
  
  //窗口设置
  ILI9325_WriteCmdData(0x0050,0x0000);//水平起始位置
  ILI9325_WriteCmdData(0x0051,0x00EF);//水平终止位置
  ILI9325_WriteCmdData(0x0052,0x0000);//垂直起始位置
  ILI9325_WriteCmdData(0x0053,0x013F);//垂直终止位置
  
  ILI9325_WriteCmdData(0x0060,0xA700);//门扫描设置,GS=1:从G320扫描到G1,320线
  ILI9325_WriteCmdData(0x0061,0x0001); 
  ILI9325_WriteCmdData(0x006A,0x0000);
  //
  ILI9325_WriteCmdData(0x0080,0x0000); 
  ILI9325_WriteCmdData(0x0081,0x0000); 
  ILI9325_WriteCmdData(0x0082,0x0000); 
  ILI9325_WriteCmdData(0x0083,0x0000); 
  ILI9325_WriteCmdData(0x0084,0x0000); 
  ILI9325_WriteCmdData(0x0085,0x0000); 
  //
  ILI9325_WriteCmdData(0x0090,0x0010); 
  ILI9325_WriteCmdData(0x0092,0x0600); 
  ILI9325_WriteCmdData(0x0093,0x0003); 
  ILI9325_WriteCmdData(0x0095,0x0110); 
  ILI9325_WriteCmdData(0x0097,0x0000); 
  ILI9325_WriteCmdData(0x0098,0x0000);
  ILI9325_WriteCmdData(0x0007,0x0133);
  //ILI9325_WriteCmdData(0x0022);	
  
}







//===============================================================
//设置窗口
//入口参数: x0 y0,为显示窗口左上角坐标;x1,y1为显示窗口右下角坐标。
//出口参数: 无
//说明:该函数设置TFT模块的显示窗口。
void ILI9325_SetWindow(unsigned char x0,unsigned int y0,unsigned char x1,unsigned int y1)
{
  
  ILI9325_WriteCmdData(WINDOW_XADDR_START,x0);//水平起始位置
  ILI9325_WriteCmdData(WINDOW_XADDR_END,x1);//水平终止位置
  ILI9325_WriteCmdData(WINDOW_YADDR_START,y0);//垂直起始位置
  ILI9325_WriteCmdData(WINDOW_YADDR_END,y1);//垂直终止位置
  ILI9325_WriteCmdData(GRAM_XADDR,x0);//设置X坐标位置
  ILI9325_WriteCmdData(GRAM_YADDR,y0);//设置Y坐标位置
  ILI9325_WriteCmd(0x22);//LCD_WriteCMD(GRAMWR);
  
}


//===============================================================
//设定当前显示坐标
//入口参数: x,y为当前显示坐标。
//出口参数: 无
//说明:本函数实际上是ILI9325_SetWindow函数的一个特例,显示窗口为最小,仅是一个像素点。
void ILI9325_SetXY(unsigned char x,unsigned int y)
{
  
  ILI9325_SetWindow(x,y,x,y);
  
}

//===============================================================
//彩条、单色自测程序
//入口参数: 无。
//出口参数: 无
//说明:在TFT屏上轮流显示彩条和各种颜色的单色屏幕。
void ILI9325_Test(void)
{
  unsigned int temp,num;
  unsigned char n,c;
  
  
  //显示彩条	
  ILI9325_SetWindow(0,0,239,319);
  for(n=0;n<8;n++)
  {
    temp=color[n];										
    for(num=40*240;num>0;num--)
      ILI9325_WriteDataU16(temp);
  }
  //_NOP();
  //ILI9325_Delay(10);
  
  //显示单色彩色
  for(c=0;c<8;c++)
  {
    temp = color[c];
    ILI9325_SetWindow(0,0,239,319);
    for(n=0;n<240;n++)
    {
      for(num=0;num<320;num++)
        ILI9325_WriteDataU16(temp);
    }
    //_NOP();
  ILI9325_Delay(100);
  }
  
}
//******************************************************************************
//延时函数
//******************************************************************************
void ILI9325_Delay(unsigned long n)
{
	while(n--)						//外部晶振:8M;PLL: 9; 8M * 9=72MHz
		delay_u(1100);				//1ms延时补偿
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -