www.pudn.com > TFT.rar > TFTdriver.c


/*------------------------------------------------------------------------------ 
//	TFTdriver.C 
// 
//  TFT LCD: CASIO CMD777 
//  Min flash rate : 50Hz 
// 
------------------------------------------------------------------------------*/ 
#include "Main.h" 
#include "TFTdriver.h" 
#include "Delay.h" 
 
extern unsigned char *Bmp_Buffer; 
 
void Test_TFT_Lcd(void) 
{ 
    unsigned int i; 
	unsigned char value; 
	 
 	Init_TFT_Port(); 
 
	CLR_FLM_FP(); 
	CLR_CL1_LP(); 
	CLR_CL2_CP(); 
	delay_1ms(); 
 
  	while(1) 
   	{   
//		TFT_clear_screen(0x00249249); // 0 is off,1 is on											   
		TFT_show_screen(Bmp_Buffer); 
    } 
} 
 
void Init_TFT_Port(void) 
{ 
	//TFT LCD PORT INIT 
	DDRD = 0xFF;		//PORTD output for TFT LCD control signal 
	DDRB = 0xFF;		//PORTB output for TFT LCD data signal	   
 
	SET_C_VLCD_VCCFL(); 
	SET_DISPLAY_ON_OFF(); 
} 
 
/////////////////////////////////////////////////////////////////////////////// 
//图形化处理 
/////////////////////////////////////////////////////////////////////////////// 
//用固定颜色清除整屏 
void TFT_clear_screen(unsigned long color) 
{   
	unsigned char i,j; 
	unsigned char a,b,c; 
 
	SET_FLM_FP();				// Start-up signal 
	a=(color&0xFF0000)>>16; 
	b=(color&0xFF00)>>8; 
	c=color&0xFF; 
	delay_500us(); 
	delay_200us(); 
	j=40; 
	do							// 320*3/8 = 120/3 =40 
	{ 
		PORTB=a; 
		SET_CL2_CP(); 
		NOP(); 
		CLR_CL2_CP();			// CL2大于500ns 
		NOP(); 
		PORTB=b; 
		SET_CL2_CP(); 
		NOP(); 
		CLR_CL2_CP();			// CL2大于500ns 
		NOP(); 
		PORTB=c; 
		SET_CL2_CP(); 
		j--; 
		NOP(); 
		CLR_CL2_CP();			// CL2大于500ns 
	}while(j); 
	SET_CL1_LP(); 
	CLR_CL1_LP();	 			// CL1大于150ns 
    CLR_FLM_FP(); 
	for (i=1;i<=240;i++) 
	{ 
		j=40; 
		do						// 320*3/8 = 120/3 = 40 
		{ 
			PORTB=a; 
			SET_CL2_CP(); 
			NOP(); 
			CLR_CL2_CP();		// CL2大于500ns 
			NOP(); 
			PORTB=b; 
			SET_CL2_CP(); 
			NOP(); 
			CLR_CL2_CP();		// CL2大于500ns 
			NOP(); 
			PORTB=c; 
			SET_CL2_CP(); 
			j--; 
			NOP(); 
			CLR_CL2_CP();		// CL2大于500ns 
		}while(j); 
		SET_CL1_LP(); 
		CLR_CL1_LP(); 
	} 
} 
 
//整屏显示图像 
void TFT_show_screen(unsigned char *buff) 
{   
	unsigned char i,j; 
	unsigned int k=0; 
 
	SET_FLM_FP(); 
	delay_500us(); 
	delay_200us(); 
	j=0; 
	do  
	{ 
		PORTB=*(buff+k); 
		SET_CL2_CP(); 
		k++; 
		CLR_CL2_CP(); 
		j++; 
	}while(j<120);	  	  	  // 320*3/8 = 120 
	SET_CL1_LP(); 
	CLR_CL1_LP(); 
   	CLR_FLM_FP(); 
	for (i=1;i<=240;i++) 
	{ 
		j=0; 
		do  
		{ 
			PORTB=*(buff+k); 
			SET_CL2_CP(); 
			k++; 
			CLR_CL2_CP(); 
			j++; 
		}while(j<120);	   	  // 320*3/8 = 120 
		SET_CL1_LP(); 
		CLR_CL1_LP(); 
	} 
}