?? tft_driver.c
字號:
//====================================================================================
//文 件 名:TFT_Driver.c
//功能描述: TFT驅動程序(底層驅動)
//維護記錄: 2007年1月17日
//====================================================================================
#include "TFT_Driver.h"
STR_TFT_SETTING TFT_Settings;
//=============================================================
//語法格式: void TFT_SetBufAddr(unsigned short *Buff1, unsigned short *Buff2, unsigned short *Buff3)
//實現功能: 更新TFT緩沖地址
//參數: Buff1 - 緩沖區1首地址
// Buff2 - 緩沖區2首地址
// Buff3 - 緩沖區3首地址
//返回值: 無
//=============================================================
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;
}
//=============================================================
//語法格式: void TFT_SetBufFmt(unsigned int FMT1, unsigned int FMT2)
//實現功能: 更新TFT緩沖區數據格式設置
//參數: FMT1 - 緩沖區格式1
// FMT2 - 緩沖區格式2
//返回值: 無
//=============================================================
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;
}
//=============================================================
//語法格式: unsigned short *TFT_SelDispBuf(unsigned char Buf_Cursor);
//實現功能: 選擇一個緩沖區作為顯示緩沖區
//參數: Buf_Cursor - 作為顯示輸出的緩沖區序號(0~2)
// 大于2的參數可以獲取當前使用的緩沖區首地址
//返回值: 作為顯示輸出的緩沖區起始地址
//=============================================================
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];
}
//=============================================================
//語法格式: unsigned short *TFT_SelWorkBuf(unsigned char Buf_Cursor);
//實現功能: 選擇一個緩沖區作為工作緩沖區(TFT_API中的函數都是對工作緩沖區操作的)
//參數: Buf_Cursor - 作為工作緩沖區的序號(0~2)
// 大于2的參數可以獲取當前使用的緩沖區首地址
//返回值: 作為工作緩沖區的起始地址
//=============================================================
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;
}
//=============================================================
//語法格式: void TFT_InitHardware(void);
//實現功能: 初始化TFT相關硬件寄存器
//參數: 無
//返回值: 無
//=============================================================
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; // 管腳復用,選擇TFT_AUO模式
*P_LCD_CLK_CONF = C_LCD_RST_DIS | C_LCD_CLK_EN; // LCD模式時鐘使能
// 設置TFT-LCD數據模式
*P_TFT_DATA_SEQ = TFT_DATA_SEQ; // TFT-LCD輸出數據格式
*P_TFT_DATA_FMT = TFT_DATA_FMT; // TFT-LCD管腳輸出數據格式
// 設置TFT-LCD的行信號
*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;
// 設置TFT-LCD的場信號
*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;
// 設置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;
// 設置TFT-LCD的控制寄存器
*P_TFT_INT_STATUS = ~C_TFT_INT_EN; // 中斷不使能
// 使能TFT模塊,圖像不放大,選擇6.75MHz時鐘
*P_TFT_MODE_CTRL = C_TFT_CTRL_EN | TFT_CLK_SET;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -