?? ili9325.c
字號(hào):
/*******************************************************************************
名 稱(chēng):ILI9325 TFT液晶彩屏操作程序
功 能:本c文件封裝了對(duì)12864液晶的一些簡(jiǎn)單的基本讀寫(xiě)操作.
封裝函數(shù):
void ILI9325_Init(void); //TFT初始化
void ILI9325_WriteCmd(unsigned char CH,unsigned char CL); //寫(xiě)命令
void ILI9325_WriteData(unsigned char DH,unsigned char DL); //寫(xiě)數(shù)據(jù)
void ILI9325_WriteDataU16(unsigned int dat); //寫(xiě)16位數(shù)據(jù)
void ILI9325_WriteCmdData (unsigned char cmd,unsigned int dat); //寫(xiě)命令和數(shù)據(jù)
void ILI9325_SetWindow(unsigned char x0,unsigned int y0,
unsigned char x1,unsigned int y1); //設(shè)置窗口
void ILI9325_SetXY(unsigned char x,unsigned int y); //設(shè)定當(dāng)前顯示坐標(biāo)
void ILI9325_Test(); //彩條、單色自測(cè)程序
作 者:青澀的小黃瓜
最后修改時(shí)間:2011年12月13號(hào)
備注:
典型應(yīng)用:
以上函數(shù)均進(jìn)行測(cè)試可以正常使用
*******************************************************************************/
#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
/*顏色數(shù)值:紅色,綠色,藍(lán)色,黃色,黑色,白色,天藍(lán)色,紫色*/
unsigned int color[]={0xf800,0x07e0,0x001f,0xffe0,0x0000,0xffff,0x07ff,0xf81f};
//=============================================================
//寫(xiě)命令
//功能:寫(xiě)一個(gè)命令到TFT控制器。
//入口參數(shù): CH,CL分別為命令字的高8位和低8位,指定要執(zhí)行的命令。
//出口參數(shù): 無(wú)
void ILI9325_WriteCmd(unsigned int index)
{
*(__IO uint16_t *) (Bank1_LCD_C)= index;
}
//===================================================================
//寫(xiě)數(shù)據(jù)
//功能:寫(xiě)一個(gè)數(shù)據(jù)到TFT控制器。
//入口參數(shù): DH,DL分別為數(shù)據(jù)字的高8位和低8位,指定要寫(xiě)入的數(shù)據(jù)。
//出口參數(shù): 無(wú)
/*
void ILI9325_WriteData(unsigned char DH,unsigned char DL)
{
}
*/
//==============================================================
//寫(xiě)16位數(shù)據(jù)
//功能: 寫(xiě)一個(gè)數(shù)據(jù)到TFT控制器。
//入口參數(shù): dat為要寫(xiě)入的16位數(shù)據(jù)。
//出口參數(shù): 無(wú)
void ILI9325_WriteDataU16(unsigned int val)
{
*(__IO uint16_t *) (Bank1_LCD_D)= val;
}
//===============================================================
//寫(xiě)命令數(shù)據(jù)
//功能: 寫(xiě)命令數(shù)據(jù)到TFT控制器。
//入口參數(shù): cmd為要寫(xiě)入的命令字節(jié);dat為要寫(xiě)入的16位數(shù)據(jù)。
//出口參數(shù): 無(wú)
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初始化
//功能:該函數(shù)用于初始化TFT彩屏模塊。
//入口參數(shù): 無(wú)
//出口參數(shù): 無(wú)
void ILI9325_Init(void)
{
//TFT_CMDDIR;
//TFT_CS_1;
//_NOP();
//ILI9325_Delay(20);
//TFT_RST_0;
//_NOP();
//ILI9325_Delay(20);
//TFT_RST_1;
//_NOP();//可以適當(dāng)調(diào)整延時(shí),保障穩(wěn)定顯示
//ILI9325_Delay(1000);
lcd_rst();
ILI9325_WriteCmdData(0x0001,0x0100); //源掃描設(shè)置SS=0, 輸出的移動(dòng)方向是從S1到S720
//(源掃描設(shè)置SS=1, 輸出的移動(dòng)方向是從S720到S1)
//SM=0,逐行掃描(SM=1,隔行掃描)
ILI9325_WriteCmdData(0x0002,0x0700); //B/C=1、EOR=1:行倒置(B/C=0:幀/場(chǎng)倒置)
ILI9325_WriteCmdData(0x0003,0x1030); //AM=0,地址在水平方向自動(dòng)加1
//I/D[1:0] = 11:水平垂直方向均增加
//BGR=1:采用BGR格式
//TRI=0、DFM=*:8位機(jī)、兩次數(shù)據(jù)傳送
ILI9325_WriteCmdData(0x0004,0x0000); //比例縮放設(shè)置:不縮放
//顯示控制
ILI9325_WriteCmdData(0x0008,0x0207); //設(shè)置后邊沿和前沿
ILI9325_WriteCmdData(0x0009,0x0000);//設(shè)置非顯示區(qū)時(shí)間間隔ISC[3:0]
ILI9325_WriteCmdData(0x000A,0x0000); //幀標(biāo)記功能
ILI9325_WriteCmdData(0x000C,0x0000);//RGB顯示接口控制1
ILI9325_WriteCmdData(0x000D,0x0000);//幀標(biāo)記位置
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);
//窗口設(shè)置
ILI9325_WriteCmdData(0x0050,0x0000);//水平起始位置
ILI9325_WriteCmdData(0x0051,0x00EF);//水平終止位置
ILI9325_WriteCmdData(0x0052,0x0000);//垂直起始位置
ILI9325_WriteCmdData(0x0053,0x013F);//垂直終止位置
ILI9325_WriteCmdData(0x0060,0xA700);//門(mén)掃描設(shè)置,GS=1:從G320掃描到G1,320線(xiàn)
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(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);
}
//===============================================================
//設(shè)置窗口
//入口參數(shù): x0 y0,為顯示窗口左上角坐標(biāo);x1,y1為顯示窗口右下角坐標(biāo)。
//出口參數(shù): 無(wú)
//說(shuō)明:該函數(shù)設(shè)置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);//設(shè)置X坐標(biāo)位置
ILI9325_WriteCmdData(GRAM_YADDR,y0);//設(shè)置Y坐標(biāo)位置
ILI9325_WriteCmd(0x22);//LCD_WriteCMD(GRAMWR);
}
//===============================================================
//設(shè)定當(dāng)前顯示坐標(biāo)
//入口參數(shù): x,y為當(dāng)前顯示坐標(biāo)。
//出口參數(shù): 無(wú)
//說(shuō)明:本函數(shù)實(shí)際上是ILI9325_SetWindow函數(shù)的一個(gè)特例,顯示窗口為最小,僅是一個(gè)像素點(diǎn)。
void ILI9325_SetXY(unsigned char x,unsigned int y)
{
ILI9325_SetWindow(x,y,x,y);
}
//===============================================================
//彩條、單色自測(cè)程序
//入口參數(shù): 無(wú)。
//出口參數(shù): 無(wú)
//說(shuō)明:在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);
}
}
//******************************************************************************
//延時(shí)函數(shù)
//******************************************************************************
void ILI9325_Delay(unsigned long n)
{
while(n--) //外部晶振:8M;PLL: 9; 8M * 9=72MHz
delay_u(1100); //1ms延時(shí)補(bǔ)償
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -