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

📄 tft_sd19501.c

📁 LCD驱动 LCD驱动 LCD驱动 LCD驱动
💻 C
📖 第 1 页 / 共 2 页
字号:

#include "os_api.h"
#include "sci_types.h"
#include "gpio_api.h"
#include "lcd.h"
#include "make.h"
#ifdef   __cplusplus
    extern   "C" 
    {
#endif

#define	S1D19501_WIDTH		176
#define	S1D19501_HEIGHT		220
#define	S1D19501_WIDTH_MP4	176

typedef unsigned char UINT8;


/**---------------------------------------------------------------------------*
 **                         Static Vars
 **---------------------------------------------------------------------------*/
static uint8 g_offset_x;
static uint8 g_offset_y;
static uint8 g_is_init = 0;
/**---------------------------------------------------------------------------*
 **                      External Function  Definitions
 **---------------------------------------------------------------------------*/
extern void *LCD_GetLCDBuffer(void);
extern uint8 MMI_GetLCMId(void);
extern unsigned char w99685CMD_GetLCMControlMode();
extern int W99685CMD_SetLCMControlMode(UINT8 ucMode);

/**---------------------------------------------------------------------------*
 **                      Function  Definitions
 **---------------------------------------------------------------------------*/
LOCAL void 		S1D19501_Clear(uint32 color);
LOCAL void 		S1D19501_Close(void);
LOCAL ERR_LCD_E S1D19501_EnterSleep(BOOLEAN is_sleep );
LOCAL ERR_LCD_E S1D19501_GetInfo(LCD_INFO_T *lcd_info_ptr);	
LOCAL ERR_LCD_E S1D19501_GetMainLcdSpec(LCD_SPEC_T *spec_ptr);
LOCAL ERR_LCD_E S1D19501_Init(void);
LOCAL ERR_LCD_E S1D19501_Invalidate(void);
LOCAL ERR_LCD_E S1D19501_InvalidateRect(uint16 left, uint16 top,uint16 right,uint16 bottom);	
LOCAL ERR_LCD_E S1D19501_SetDisplayWindow(uint16 left, uint16 top,uint16 right,uint16 bottom);
LOCAL ERR_LCD_E   S1D19501_SetContrast(uint16);
LOCAL ERR_LCD_E   S1D19501_SetBrightness(uint16);



#define S1D19501_SEND_COMMAND( c)   			{*(volatile uint16 *)0x58000000 = c;}
#define S1D19501_SEND_DATA(d) 				      {*(volatile uint16 *)0x58008000 = d;}
#define S1D19501_sendcommand1(command, data)  {*(volatile uint16 *)0x58000000 = command;*(volatile uint16 *)0x58008000 = data;}




LOCAL void Delayms (uint32 ms)	
{
	uint32 t1, t2;
	
	t1 = t2 = SCI_GetTickCount ();
	
	do{
		t2 = SCI_GetTickCount ();
	}while (t2 < (t1+ms));
}





void S1D19501_Reset(void)
{ 
uint16 temp=0;

Delayms(200);
S1D19501_SEND_COMMAND(0x99FF);//soft reset
Delayms(4);
S1D19501_SEND_COMMAND(0x97FF);//vdd off
Delayms(4);
S1D19501_SEND_COMMAND(0x96FF);//vdd on
Delayms(10);
S1D19501_SEND_COMMAND(0x99FF);//soft reset
Delayms(10);

S1D19501_SEND_COMMAND(0x31FF);
S1D19501_SEND_DATA(0x00FF);
S1D19501_SEND_DATA(0x00FF);

S1D19501_SEND_COMMAND(0x6fFF);
S1D19501_SEND_DATA(0x00FF);

S1D19501_SEND_COMMAND(0xbcFF);
S1D19501_SEND_DATA(0x00FF);

S1D19501_SEND_COMMAND(0xcaFF);
S1D19501_SEND_DATA(0x40FF);
S1D19501_SEND_DATA(0x00FF);
S1D19501_SEND_DATA(0xdbFF);
S1D19501_SEND_DATA(0x02FF);
S1D19501_SEND_DATA(0x00FF);
S1D19501_SEND_DATA(0x01FF);

S1D19501_SEND_COMMAND(0xa1FF);
S1D19501_SEND_DATA(0x02FF);
S1D19501_SEND_DATA(0x3eFF);
S1D19501_SEND_DATA(0x2fFF);
S1D19501_SEND_DATA(0x3bFF);
S1D19501_SEND_DATA(0x37FF);
S1D19501_SEND_DATA(0x47FF);
S1D19501_SEND_DATA(0x00FF);

S1D19501_SEND_COMMAND(0x21FF);
S1D19501_SEND_DATA(0x00FF);
S1D19501_SEND_DATA(0x00FF);
S1D19501_SEND_DATA(0x3fFF);
S1D19501_SEND_DATA(0x30FF);
S1D19501_SEND_DATA(0x11FF);
S1D19501_SEND_DATA(0x10FF);
S1D19501_SEND_DATA(0xffFF);
S1D19501_SEND_DATA(0xffFF);
S1D19501_SEND_DATA(0x22FF);
S1D19501_SEND_DATA(0x33FF);
S1D19501_SEND_DATA(0x33FF);
S1D19501_SEND_DATA(0x44FF);

S1D19501_SEND_COMMAND(0x8cFF);
S1D19501_SEND_DATA(0x00FF);

S1D19501_SEND_COMMAND(0x8bFF);
S1D19501_SEND_DATA(0x00FF);

S1D19501_SEND_COMMAND(0xabFF);
S1D19501_SEND_DATA(0x00FF);

S1D19501_SEND_COMMAND(0x20FF);
S1D19501_SEND_DATA(0x12FF);
S1D19501_SEND_DATA(0x22FF);
S1D19501_SEND_DATA(0x08FF);
S1D19501_SEND_DATA(0x00FF);
S1D19501_SEND_DATA(0x00FF);
S1D19501_SEND_DATA(0x0cFF);
S1D19501_SEND_DATA(0x03FF);

S1D19501_SEND_COMMAND(0x22FF);
S1D19501_SEND_DATA(0xa3FF);
S1D19501_SEND_DATA(0x77FF);
S1D19501_SEND_DATA(0x77FF);
S1D19501_SEND_DATA(0x27FF);
S1D19501_SEND_DATA(0x24FF);
S1D19501_SEND_DATA(0x05FF);

S1D19501_SEND_COMMAND(0x25FF);
S1D19501_SEND_DATA(0x03FF);
S1D19501_SEND_DATA(0x77FF);
S1D19501_SEND_DATA(0x77FF);
S1D19501_SEND_DATA(0x17FF);
S1D19501_SEND_DATA(0x14FF);
S1D19501_SEND_DATA(0x07FF);

S1D19501_SEND_COMMAND(0x94FF);
Delayms(100);

S1D19501_SEND_COMMAND(0x15FF);
S1D19501_SEND_DATA(0x00FF);
S1D19501_SEND_DATA(0x00FF);

S1D19501_SEND_COMMAND(0x75FF);
S1D19501_SEND_DATA(0xafFF);
S1D19501_SEND_DATA(0xdbFF);

Delayms(200);
S1D19501_SEND_COMMAND(0xafFF);

S1D19501_SEND_COMMAND(0x5cFF);


}

 
LOCAL void S1D19501_Clear(
						uint32 color	//color to fill the whole lcd.
						)
{
	uint32 i;
	uint16 *buf_ptr = (uint16 *)LCD_GetLCDBuffer();
	
	for( i=0; i<(S1D19501_HEIGHT * S1D19501_WIDTH); i++)
	{
		*buf_ptr++ = color;
	}		

	S1D19501_Invalidate();
}

LOCAL ERR_LCD_E S1D19501_Init(void)
{
  
  
	int cord_x,cord_y;
	S1D19501_Reset();

	 for(cord_x = 0 ;cord_x <S1D19501_WIDTH ; cord_x++)
		for(cord_y = 0 ;cord_y <S1D19501_HEIGHT ; cord_y ++)
			S1D19501_SEND_DATA(0xf800);
  S1D19501_Invalidate();

 
	return ERR_LCD_NONE;
}

LOCAL ERR_LCD_E S1D19501_Invalidate(void)
{

     uint16 i,j;
	uint16 *buf_ptr = (uint16 *)LCD_GetLCDBuffer();
	uint8	lcd_mode = 0;		
	if (LCD_GetRefreshFlag() != TRUE )
	{
		return ERR_LCD_OPERATE_FAIL ;
	}


	
	
S1D19501_SEND_COMMAND(0x15FF);
S1D19501_SEND_DATA(0x00FF);
S1D19501_SEND_DATA(0x00FF);

S1D19501_SEND_COMMAND(0x75FF);
S1D19501_SEND_DATA(0xafFF);
S1D19501_SEND_DATA(0xdbFF);

S1D19501_SEND_COMMAND(0x5cFF);


		for(j=0; j<(S1D19501_HEIGHT ); j++)
		{
			for (i = 0; i < S1D19501_WIDTH; i++)
			{
				S1D19501_SEND_DATA( *(buf_ptr + j * S1D19501_WIDTH + i) );
			}
			
		}
	
	return ERR_LCD_NONE;
}


LOCAL  ERR_LCD_E   S1D19501_GetInfo(
								   LCD_INFO_T *lcd_info_ptr	//lcd information struct pointer
								   )
{
	if ( PNULL == lcd_info_ptr )
	{
		return ERR_LCD_POINTER_NULL;	
	}
	
	lcd_info_ptr->r_bitmask			= 0xf800;
	lcd_info_ptr->g_bitmask			= 0x07e0;
	lcd_info_ptr->b_bitmask			= 0x001f;
	lcd_info_ptr->bits_per_pixel	= 16;
	lcd_info_ptr->contrast_min		= 0x00;
	lcd_info_ptr->contrast_max   	= 63;
	lcd_info_ptr->contrast_defaut	= 0x0A;
	
	lcd_info_ptr->lcd_width		= S1D19501_WIDTH;
	lcd_info_ptr->lcd_height	= S1D19501_HEIGHT;
	lcd_info_ptr->lcdbuff_ptr	= (void *)LCD_GetLCDBuffer();
		
	return ERR_LCD_NONE;
}


__inline void S1D19501_set_display_window(
	uint16 left, 	// start Horizon address
	uint16 right, 	// end Horizon address
	uint16 top, 		// start Vertical address
	uint16 bottom	// end Vertical address
	)
{

      S1D19501_SEND_COMMAND(0x15ff);
	  S1D19501_SEND_DATA(left<<8);

	S1D19501_SEND_DATA(top<<8);

	S1D19501_SEND_COMMAND(0x75ff);
	  S1D19501_SEND_DATA(right<<8);

	S1D19501_SEND_DATA(bottom<<8);



}



__inline void S1D19501_set_start_address(
	uint16 left, 
	uint16 top
	)
{

}


LOCAL ERR_LCD_E S1D19501_InvalidateRect(
	uint16 left, 	//the left value of the rectangel
	uint16 top, 	//top of the rectangle
	uint16 right, 	//right of the rectangle
	uint16 bottom	//bottom of the rectangle

⌨️ 快捷键说明

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