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

📄 tft_driver.c

📁 用OV7720制作摄像头的详细电路原理图
💻 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 + -