?? tft_driver.c
字號(hào):
//====================================================================================//文 件 名:TFT_Driver.c//功能描述: TFT驅(qū)動(dòng)程序(底層驅(qū)動(dòng))//維護(hù)記錄: 2007年1月17日//====================================================================================#include "TFT_Driver.h"STR_TFT_SETTING TFT_Settings;//=============================================================//語(yǔ)法格式: void TFT_SetBufAddr(unsigned short *Buff1, unsigned short *Buff2, unsigned short *Buff3)//實(shí)現(xiàn)功能: 更新TFT緩沖地址//參數(shù): Buff1 - 緩沖區(qū)1首地址// Buff2 - 緩沖區(qū)2首地址// Buff3 - 緩沖區(qū)3首地址//返回值: 無(wú)//=============================================================void TFT_SetBufAddr(unsigned short *Buff0, unsigned short *Buff1, unsigned short *Buff2){ TFT_Settings.Buf[0] = (unsigned short *)(*P_LCD_BUFFER_SA1 = (unsigned int)Buff0); TFT_Settings.Buf[1] = (unsigned short *)(*P_LCD_BUFFER_SA2 = (unsigned int)Buff1); TFT_Settings.Buf[2] = (unsigned short *)(*P_LCD_BUFFER_SA3 = (unsigned int)Buff2); TFT_Settings.WorkBuf = TFT_Settings.DispBuf = *P_LCD_BUFFER_SEL = 0;}//=============================================================//語(yǔ)法格式: void TFT_SetBufFmt(unsigned int FMT1, unsigned int FMT2)//實(shí)現(xiàn)功能: 更新TFT緩沖區(qū)數(shù)據(jù)格式設(shè)置//參數(shù): FMT1 - 緩沖區(qū)格式1// FMT2 - 緩沖區(qū)格式2//返回值: 無(wú)//=============================================================void TFT_SetBufFmt(unsigned int FMT1, unsigned int FMT2){ TFT_Settings.Buf_Format1 = *P_TFT_FRAME_FMT1 = FMT1; TFT_Settings.Buf_Format2 = *P_TFT_FRAME_FMT2 = FMT2;}//=============================================================//語(yǔ)法格式: unsigned short *TFT_SelDispBuf(unsigned char Buf_Cursor);//實(shí)現(xiàn)功能: 選擇一個(gè)緩沖區(qū)作為顯示緩沖區(qū)//參數(shù): Buf_Cursor - 作為顯示輸出的緩沖區(qū)序號(hào)(0~2)// 大于2的參數(shù)可以獲取當(dāng)前使用的緩沖區(qū)首地址//返回值: 作為顯示輸出的緩沖區(qū)起始地址//=============================================================unsigned short *TFT_SelDispBuf(unsigned char Buf_Cursor){ switch(Buf_Cursor) { case 0: TFT_Settings.DispBuf = *P_LCD_BUFFER_SEL = 0; break; case 1: TFT_Settings.DispBuf = *P_LCD_BUFFER_SEL = 1; break; case 2: TFT_Settings.DispBuf = *P_LCD_BUFFER_SEL = 2; break; default: return TFT_Settings.Buf[TFT_Settings.DispBuf]; break; } return TFT_Settings.Buf[Buf_Cursor];}//=============================================================//語(yǔ)法格式: unsigned short *TFT_SelWorkBuf(unsigned char Buf_Cursor);//實(shí)現(xiàn)功能: 選擇一個(gè)緩沖區(qū)作為工作緩沖區(qū)(TFT_API中的函數(shù)都是對(duì)工作緩沖區(qū)操作的)//參數(shù): Buf_Cursor - 作為工作緩沖區(qū)的序號(hào)(0~2)// 大于2的參數(shù)可以獲取當(dāng)前使用的緩沖區(qū)首地址//返回值: 作為工作緩沖區(qū)的起始地址//=============================================================unsigned short *TFT_SelWorkBuf(unsigned char Buf_Cursor){ switch(Buf_Cursor) { case 0: TFT_Settings.WorkBuf = 0; break; case 1: TFT_Settings.WorkBuf = 1; break; case 2: TFT_Settings.WorkBuf = 2; break; default: return TFT_Settings.Buf[TFT_Settings.WorkBuf]; break; } return TFT_Settings.Buf[Buf_Cursor];}void TFT_SetWorkBufSize(short WorkBufWidth, short WorkBufHeight){ TFT_Settings.WorkBufWidth = (WorkBufWidth >= TFT_WIDTH ? WorkBufWidth : TFT_WIDTH); TFT_Settings.WorkBufHeight = (WorkBufHeight >= TFT_HEIGHT ? WorkBufHeight : TFT_HEIGHT); TFT_Settings.RowStart = *P_TFT_ROW_START = 0; TFT_Settings.ColStart = *P_TFT_COL_START = 0; *P_TFT_DUMMY_WIDTH = TFT_Settings.WorkBufWidth - TFT_WIDTH;}void TFT_GetWorkBufSize(short *WorkBufWidth, short *WorkBufHeight){ *WorkBufWidth = TFT_Settings.WorkBufWidth; *WorkBufHeight = TFT_Settings.WorkBufHeight;}void TFT_SetDispOffset(unsigned short OffX, unsigned short OffY){ if((OffX + TFT_WIDTH) > TFT_Settings.WorkBufWidth) OffX = TFT_Settings.WorkBufWidth - TFT_WIDTH; TFT_Settings.ColStart = *P_TFT_COL_START = OffX; TFT_Settings.RowStart = *P_TFT_ROW_START = OffY; *P_TFT_DUMMY_WIDTH = TFT_Settings.WorkBufWidth - OffX - TFT_WIDTH;}//=============================================================//語(yǔ)法格式: void TFT_InitHardware(void);//實(shí)現(xiàn)功能: 初始化TFT相關(guān)硬件寄存器//參數(shù): 無(wú)//返回值: 無(wú)//=============================================================extern void *memset(void *s, int c, unsigned int n);void TFT_InitHardware(void){ *P_BUFCTRL_CLK_CONF = 0x03; *P_LCD_INTERFACE_SEL |= TFT_INTERFACE; // 管腳復(fù)用,選擇TFT_AUO模式 *P_LCD_CLK_CONF = C_LCD_RST_DIS | C_LCD_CLK_EN; // LCD模式時(shí)鐘使能 // 設(shè)置TFT-LCD數(shù)據(jù)模式 *P_TFT_DATA_SEQ = TFT_DATA_SEQ; // TFT-LCD輸出數(shù)據(jù)格式 *P_TFT_DATA_FMT = TFT_DATA_FMT; // TFT-LCD管腳輸出數(shù)據(jù)格式 // 設(shè)置TFT-LCD的行信號(hào) *P_TFT_HOR_ACT = TFT_HOR_ACT; *P_TFT_HOR_FRONT = TFT_HOR_FRONT; *P_TFT_HOR_BACK = TFT_HOR_BACK; *P_TFT_HOR_SYNC = TFT_HOR_SYNC; // 設(shè)置TFT-LCD的場(chǎng)信號(hào) *P_TFT_VER_ACT = TFT_VER_ACT; *P_TFT_VER_FRONT = TFT_VER_FRONT; *P_TFT_VER_BACK = TFT_VER_BACK; *P_TFT_VER_SYNC = TFT_VER_SYNC; // 設(shè)置TFT-LCD顯示的起始位置 *P_TFT_COL_WIDTH = TFT_WIDTH; TFT_SetWorkBufSize(TFT_WINDOW_WIDTH, TFT_WINDOW_HEIGHT); TFT_SetBufFmt(TFT_FRAME_FMT1, TFT_FRAME_FMT2); TFT_SetBufAddr((unsigned short*)TFT_BUFFER0_SA, (unsigned short*)TFT_BUFFER1_SA, (unsigned short*)TFT_BUFFER2_SA); memset(TFT_Settings.Buf[0], 0, TFT_Settings.WorkBufWidth * TFT_Settings.WorkBufHeight * 2); memset(TFT_Settings.Buf[1], 0, TFT_Settings.WorkBufWidth * TFT_Settings.WorkBufHeight * 2); memset(TFT_Settings.Buf[2], 0, TFT_Settings.WorkBufWidth * TFT_Settings.WorkBufHeight * 2); *P_BUFCTRL_CLK_CONF = 0x03; // 設(shè)置TFT-LCD的控制寄存器 *P_TFT_INT_STATUS = ~C_TFT_INT_EN; // 中斷不使能 // 使能TFT模塊,圖像不放大,選擇6.75MHz時(shí)鐘 *P_TFT_MODE_CTRL = C_TFT_CTRL_EN | TFT_CLK_SET;}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -