📄 tft_sd19501.c
字号:
#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 + -