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

📄 lcddrive.c

📁 基于zlg SmartARM2300平台的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************************
* 文件名:LCDDRIVE.C
* 功能:TFT4137液晶模块驱动。驱动芯片为S6D0139 (片内172800字节GRAM,即240*320*18/8),
*                                  
*  RGB对应值(16位数据,分First,Second两次传输,Fd7--Fd0,Sd7--Sd0):
*  Fd7--Fd3		          R色
*  Fd2--Fd0,Sd7--Sd5      G色
*  Sd4--Sd0		          B色
*  写操作时地址计数器会自动增长,而读操作则不会自动增长。读操作时,读第2个数
*  据才是有效的数据
****************************************************************************************/
#include "config.h"


#define  USE_GPIO_BUS		0


#if  USE_GPIO_BUS == 1

// 总线控制口定义
#define  GP_nCS0		(1<<30)
#define  GP_nCS1		(0x80000000)
#define  GP_nWE			(1<<25)
#define  GP_nOE			(1<<24)

#define  GP_A1			(1<<1)
#define  GP_A14			(1<<14)
#define  GP_A15			(1<<15)


// 总线控制信号函数
//#define  SET_nCS()		FIO4SET = GP_nCS0
//#define  CLR_nCS()		FIO4CLR = GP_nCS0
#define  SET_nCS()		FIO4SET = GP_nCS1
#define  CLR_nCS()		FIO4CLR = GP_nCS1

#define  SET_nWE()		FIO4SET = GP_nWE
#define  CLR_nWE()		FIO4CLR = GP_nWE

#define  SET_nOE()		FIO4SET = GP_nOE
#define  CLR_nOE()		FIO4CLR = GP_nOE

#define  OP_DR()		FIO4SET = GP_A1
#define  OP_IR()		FIO4CLR = GP_A1

#define  WR_DATA8(dat)	FIO3MASK = 0xFFFFFF00; FIO3PIN = dat


/*
void  GPIO_test(void)
{
	SET_nCS();
 	CLR_nCS(); 	 	
 	
 	SET_nWE();
 	CLR_nWE();
 	
 	
 	SET_nOE();
 	CLR_nOE();
 	
 	
 	OP_DR();
 	OP_IR();
 	
 	SET_nCS();
 	SET_nWE();
 	SET_nOE();
 	OP_DR();
 	
 	WR_DATA8(0x05);
 	WR_DATA8(0xA0);
}
*/


/*******************************************************
* 名称: DelayuS
* 功能: 软件延时(uS级,与系统时钟有关)。
* 入口参数: no   延时控制(uint32),值越大延时越长
* 出口参数: 无
*******************************************************/
//void  DelayuS(uint32 no)
//{//	uint32  i;

//	for(; no>0; no--)
//	{	
//		for(i=0; i<1; i++);
//	}
//}

#define DelayuS(s) 


/*******************************************************
* 名称: TftSendCom
* 功能: 向TFT液晶模块发送命令字。
* 入口参数: com   命令字(uint16)
* 出口参数: 无
*******************************************************/
void  TftSendCom(uint16 com)
{   uint8  data;
	 	
	OP_IR();			// 发命令
	SET_nOE();
 	CLR_nCS();		 	 	
	data = (com >> 8);
	WR_DATA8(data);
	CLR_nWE();		
	DelayuS(2);
	SET_nWE();
	DelayuS(1);	
	SET_nCS();
	DelayuS(1);
	    		
	CLR_nCS();		 	 	
	data = com & 0x00FF;
	WR_DATA8(data);
	CLR_nWE();		
	DelayuS(2);
	SET_nWE();
	DelayuS(1);	
	SET_nCS();
	DelayuS(1);
}


/*******************************************************
* 名称: TftSendDat
* 功能: 向TFT液晶模块发送数据。
* 入口参数: dat   待发送的数据(uint16)
* 出口参数: 无
*******************************************************/
void  TftSendDat(uint16 dat)
{  uint8  data;
	
	OP_DR();			// 发数据
	SET_nOE();
 	CLR_nCS();		 	 	
	data = (dat >> 8);
	WR_DATA8(data);
	CLR_nWE();		
	DelayuS(2);
	SET_nWE();
	DelayuS(1);	
	SET_nCS();
	DelayuS(1);
			
	CLR_nCS();		 	 	
	data = (dat & 0x00FF);
	WR_DATA8(data);
	CLR_nWE();		
	DelayuS(2);
	SET_nWE();
	DelayuS(1);	
	SET_nCS();
	DelayuS(1);
	
}


/*******************************************************
* 名称: TftRcvDat
* 功能: 读取TFT液晶模块的数据。
* 入口参数: 无
* 出口参数: 返回值即是读出的数据
*******************************************************/
uint16  TftRcvDat(void)
{  uint16  ret, bak;

	FIO3DIR = 0x00000000;	
	OP_DR();			// 读数据
	SET_nWE();
 	CLR_nCS();		 	 	 		
	CLR_nOE();		
	DelayuS(2);
 	bak = FIO3PIN & 0x000000FF;	
 	ret = (bak << 8);
	SET_nOE();
	SET_nCS();
	DelayuS(1);
		
		
	CLR_nCS();		 	 	 		
	CLR_nOE();		
	DelayuS(2);
 	bak = FIO3PIN & 0x000000FF;	
 	ret = ret | bak;
	SET_nOE();
	SET_nCS();			
	FIO3DIR = 0x000000FF;
	DelayuS(1);
	
   	return(ret);
}


#else

/*******************************************************
* 名称: TftSendCom
* 功能: 向TFT液晶模块发送命令字。
* 入口参数: com   命令字(uint16)
* 出口参数: 无
*******************************************************/
void  TftSendCom(uint16 com)
{   uint8  data;

	data = (com >> 8);
	S6D0139_IR = data;
	
	data = com & 0x00FF;
	S6D0139_IR = data;
}


/*******************************************************
* 名称: TftSendDat
* 功能: 向TFT液晶模块发送数据。
* 入口参数: dat   待发送的数据(uint16)
* 出口参数: 无
*******************************************************/
void  TftSendDat(uint16 dat)
{  uint8  data;

	data = (dat >> 8);
	S6D0139_DR = data;
	
	data = (dat & 0x00FF);
	S6D0139_DR = data;
}


/*******************************************************
* 名称: TftRcvDat
* 功能: 读取TFT液晶模块的数据。
* 入口参数: 无
* 出口参数: 返回值即是读出的数据
*******************************************************/
uint16  TftRcvDat(void)
{  uint16  ret, bak;

   bak = S6D0139_DR;
   ret = (bak << 8);
   
   bak = S6D0139_DR;
   ret = ret | bak;
  
   return(ret);
}

#endif 	// USE_GPIO_BUS


/*******************************************************
* 名称: TftSetAddr
* 功能: 设置数据地址指针(坐标值)。
* 入口参数: x		横坐标的值 (0-239)
*           y       纵坐标的值 (0-319)
* 出口参数: 设置正确返回TRUE,参数超出范围返回FALSE
*******************************************************/
uint8  TftSetAddr(uint16 x, uint16 y)
{  TftSendCom(SET_ADDR_X);		// 设置地址低8位
   TftSendDat(x);
   
   TftSendCom(SET_ADDR_Y);		// 设置地址高9位
   TftSendDat(y);
   
   if((x<240) && (y<320)) return(TRUE);
     else  return(FALSE);
}


/*******************************************************
* 名称: TftSetWrite
* 功能: 设置数据地址指针(坐标值),并发送写数据命令。
*       接着不断的写入数据即可,GRAM地址会自动增加。
* 入口参数: x		横坐标的值 (0-239)
*           y       纵坐标的值 (0-319)
* 出口参数: 设置正确返回TRUE,参数超出范围返回FALSE
*******************************************************/
uint8  TftSetWrite(uint16 x, uint16 y)
{  uint8  ret;

   ret = TftSetAddr(x, y);
   TftSendCom(WR_RD_DATA);		// 写数据
   return(ret);
}


/*******************************************************
* 名称: TftSetWindow
* 功能: 设置数据填充窗口大小。
* 入口参数: x0,y0		窗口左上角从标
*           x1,y1	    窗口右上角从标
* 出口参数: 设置正确返回TRUE,参数错误返回FALSE
*******************************************************/

⌨️ 快捷键说明

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