📄 cstn_s6b33b5a.c
字号:
#include "os_api.h"
#include "sci_types.h"
//#include "lcd_api.h"
#include "gpio_api.h"
#include "lcd.h"
#ifdef __cplusplus
extern "C"
{
#endif
/**---------------------------------------------------------------------------*
** Macro Define
**---------------------------------------------------------------------------*/
#define S6B33B5A_WIDTH 96
#define S6B33B5A_HEIGHT 96
#define S6B33B5A_STANDBY_OFF 0x2C
#define S6B33B5A_STANDBY_ON 0x2D
#define S6B33B5A_OSC_MODE 0x02
#define S6B33B5A_OSC_ON 0x01
#define S6B33B5A_AMP_ON 0x09
#define S6B33B5A_DCDC_AMP_MODE 0x26
#define S6B33B5A_DCDC1_ON 0x01
#define S6B33B5A_DCDC2_ON 0x0B
#define S6B33B5A_DCDC3_ON 0x0F
#define S6B33B5A_DCDC_SET_MODE 0x20
#define S6B33B5A_DCDC_SET 0x05
#define S6B33B5A_DRIVER_OUTPUT_MODE 0x10
#define S6B33B5A_DRIVER_OUTPUT_SET 0x15 //MY=0;MX=0;DLN=00;SWP=1;CDIR=1
#define S6B33B5A_TEM_COMPENSATION_MODE 0x28
#define S6B33B5A_TEM_COMPENSATION_SET 0x00
#define S6B33B5A_BIAS_MODE 0x22
#define S6B33B5A_BIAS_SET 0x01 //Set bias 1/5
#define S6B33B5A_DCDC_CLOCK_DIVISION 0x24
#define S6B33B5A_DCDC_CLOCK_DIVISION_SET 0x05 //?
#define S6B33B5A_CONTRAST_CONTROL_MODE_0 0x2A
//#define S6B33B5A_CONTRAST_CONTROL_MODE_0_SET 0xAC //169 USE CF;
//#define S6B33B5A_CONTRAST_CONTROL_MODE_1 0x2B
//#define S6B33B5A_CONTRAST_CONTROL_MODE_1_SET 0xD0 //?
#define S6B33B5A_ADDRESSING_MODE 0x30
#define S6B33B5A_ADDRESSING_MODE_SET 0x00
#define S6B33B5A_ROW_VECTOR_MODE 0x32
#define S6B33B5A_ROW_VECTOR_MODE_SET 0x00
#define S6B33B5A_ROW_ADDRESS_AREA 0x42
#define S6B33B5A_ROW_ADDRESS_AREA_START 0x00
#define S6B33B5A_ROW_ADDRESS_AREA_END 0x5F
#define S6B33B5A_COL_ADDRESS_AREA 0x43
#define S6B33B5A_COL_ADDRESS_AREA_START 0x00
#define S6B33B5A_COL_ADDRESS_AREA_END 0x5F
#define S6B33B5A_SPECIAL_DISPLAY_PATTERN 0x53
#define S6B33B5A_SPECIAL_DISPLAY_PATTERN_SET 0x00
#define S6B33B5A_ENTRY_MODE 0x40
#define S6B33B5A_ENTRY_MODE_SET 0x80
#define S6B33B5A_N_LINE_INVERSION 0x34
#define S6B33B5A_N_LINE_INVERSION_SET 0x1f
#define S6B33B5A_DISPLAY_ON 0x51
#define S6B33B5A_DISPLAY_OFF 0x50
#define DRV_MODE 0x36
#define DRV_MODE_VALUE 0x00
#define S6B33B5A_CONTRAST_CONTROL_MODE_0 0x2A
#define S6B33B5A_CONTRAST_CONTROL_MODE_0_SET 0x95
#define S6B33B5A_Command( cmd ) {*(volatile uint16 *)0x58010000 = cmd;}
#define S6B33B5A_Data( dat ) {*(volatile uint16 *)0x58018000 = dat;}
void waitms (uint32 ms)
{
uint32 t1, t2;
t1 = t2 = SCI_GetTickCount ();
do{
t2 = SCI_GetTickCount ();
}while (t2 < (t1+ms));
}
LOCAL ERR_LCD_E S6B33B5A_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
);
PUBLIC void S6B33B5A_Reset(void);
PUBLIC void S6B33B5A_Close(void);
PUBLIC void S6B33B5A_Clear(uint32 color);
LOCAL ERR_LCD_E S6B33B5A_Invalidate(void);
/*****************************************************************************/
// Description:
// Global resource dependence:
// Author: Jing.Li
// Note:
/*****************************************************************************/
LOCAL ERR_LCD_E S6B33B5A_Init()
{
S6B33B5A_Reset();
S6B33B5A_Clear(0xf25f);
return ERR_LCD_NONE;
}
/*****************************************************************************/
// Description:
// Global resource dependence:
// Author: Jing.Li
// Note:
/*****************************************************************************/
void S6B33B5A_Reset(void)
{
S6B33B5A_Command(S6B33B5A_STANDBY_OFF);
waitms(500);
S6B33B5A_Command(S6B33B5A_DISPLAY_OFF);
waitms(50);
S6B33B5A_Command(S6B33B5A_OSC_MODE);
S6B33B5A_Command(S6B33B5A_OSC_ON);
waitms(50);
S6B33B5A_Command(S6B33B5A_DCDC_CLOCK_DIVISION);
S6B33B5A_Command(S6B33B5A_DCDC_CLOCK_DIVISION_SET);
waitms(50);
S6B33B5A_Command(S6B33B5A_DRIVER_OUTPUT_MODE);
// S6B33B5A_Command(S6B33B5A_DRIVER_OUTPUT_SET); //0x20
S6B33B5A_Command(0x15);
waitms(50);
S6B33B5A_Command(S6B33B5A_BIAS_MODE);
S6B33B5A_Command(S6B33B5A_BIAS_SET);
waitms(50);
S6B33B5A_Command(S6B33B5A_DCDC_SET_MODE);
S6B33B5A_Command(S6B33B5A_DCDC_SET);
waitms(200);
S6B33B5A_Command(S6B33B5A_DCDC_AMP_MODE);
S6B33B5A_Command(S6B33B5A_DCDC1_ON);
waitms(200);
S6B33B5A_Command(S6B33B5A_DCDC_AMP_MODE);
S6B33B5A_Command(S6B33B5A_AMP_ON);
waitms(200);
S6B33B5A_Command(S6B33B5A_DCDC_AMP_MODE);
S6B33B5A_Command(S6B33B5A_DCDC2_ON);
waitms(200);
S6B33B5A_Command(S6B33B5A_DCDC_AMP_MODE);
S6B33B5A_Command(S6B33B5A_DCDC3_ON);
waitms(50);
S6B33B5A_Command(S6B33B5A_TEM_COMPENSATION_MODE);
S6B33B5A_Command(S6B33B5A_TEM_COMPENSATION_SET);
waitms(50);
S6B33B5A_Command(S6B33B5A_CONTRAST_CONTROL_MODE_0);
// S6B33B5A_Command(S6B33B5A_CONTRAST_CONTROL_MODE_0_SET);
S6B33B5A_Command(0x90);
waitms(50);
//S6B33B5A_Command(S6B33B5A_CONTRAST_CONTROL_MODE_1);
//S6B33B5A_Command(S6B33B5A_CONTRAST_CONTROL_MODE_1_SET);
//waitms(50);
S6B33B5A_Command(S6B33B5A_ADDRESSING_MODE);
S6B33B5A_Command(S6B33B5A_ADDRESSING_MODE_SET);
waitms(50);
S6B33B5A_Command(S6B33B5A_ROW_VECTOR_MODE);
S6B33B5A_Command(S6B33B5A_ROW_VECTOR_MODE_SET);
waitms(50);
S6B33B5A_Command(S6B33B5A_ROW_ADDRESS_AREA);
S6B33B5A_Command(S6B33B5A_ROW_ADDRESS_AREA_START);
S6B33B5A_Command(S6B33B5A_ROW_ADDRESS_AREA_END);
waitms(50);
S6B33B5A_Command(S6B33B5A_COL_ADDRESS_AREA);
S6B33B5A_Command(S6B33B5A_COL_ADDRESS_AREA_START);
S6B33B5A_Command(S6B33B5A_COL_ADDRESS_AREA_END);
waitms(50);
S6B33B5A_Command(S6B33B5A_SPECIAL_DISPLAY_PATTERN);
S6B33B5A_Command(S6B33B5A_SPECIAL_DISPLAY_PATTERN_SET);
waitms(50);
S6B33B5A_Command(S6B33B5A_ENTRY_MODE);
// S6B33B5A_Command(S6B33B5A_ENTRY_MODE_SET);
//S6B33B5A_Command(0x00);
S6B33B5A_Command(0x80); //@liangwen.zhen 050601
waitms(50);
S6B33B5A_Command(DRV_MODE);
S6B33B5A_Command(DRV_MODE_VALUE);
waitms(50);
S6B33B5A_Command(S6B33B5A_N_LINE_INVERSION);
S6B33B5A_Command(S6B33B5A_N_LINE_INVERSION_SET);
waitms(500);
//add by Jing.Li
S6B33B5A_Command(0x45);
S6B33B5A_Command(0x00);
S6B33B5A_Command(0x55);
S6B33B5A_Command(0x00);
S6B33B5A_Command(S6B33B5A_DISPLAY_ON);
waitms(500);
}
/*****************************************************************************/
// Description:
// Global resource dependence:
// Author: Jing.Li
// Note:
/*****************************************************************************/
PUBLIC void S6B33B5A_Clear(
uint32 color //color to fill the whole lcd.
)
{
uint32 i;
uint16 *buf_ptr = (uint16 *)LCD_GetSubLCDBuffer();
for(i=0;i<(S6B33B5A_WIDTH*S6B33B5A_HEIGHT);i++)
{
*buf_ptr++ = (uint16)color;
}
}
/*****************************************************************************/
// Description: Get the lcd base information..
// Global resource dependence:
// Author: Jing.Li
// Note:
/*****************************************************************************/
LOCAL ERR_LCD_E S6B33B5A_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 = 0xff;
lcd_info_ptr->contrast_defaut = 0x0A;
lcd_info_ptr->lcd_width = S6B33B5A_WIDTH;
lcd_info_ptr->lcd_height = S6B33B5A_HEIGHT;
lcd_info_ptr->lcdbuff_ptr = (void *)LCD_GetSubLCDBuffer();
return ERR_LCD_NONE;
}
/*****************************************************************************/
// Description:
// Global resource dependence:
// Author: Jing.Li
// Note:
/*****************************************************************************/
LOCAL ERR_LCD_E S6B33B5A_EnterSleep(
BOOLEAN is_sleep //SCI_TRUE: exter sleep mode;SCI_FALSE:exit sleep mode.
)
{
SCI_TRACE_LOW("HD66773_EnterSleep,%d", is_sleep);
/*
if ( is_sleep ) // enter sleep mode.
{
S6B33B5A_Command(S6B33B5A_DISPLAY_OFF);
waitms(100);
S6B33B5A_Command(S6B33B5A_STANDBY_ON);
waitms(100);
}
else // out sleep mode
{
S6B33B5A_Command(S6B33B5A_STANDBY_OFF);
waitms(100);
S6B33B5A_Command(S6B33B5A_DISPLAY_ON);
waitms(100);
}
*/
if ( is_sleep ) // enter sleep mode.
{
S6B33B5A_Command(0x50);
waitms(40);
S6B33B5A_Command(0x26);
S6B33B5A_Command(0x0b);
waitms(40);
S6B33B5A_Command(0x26);
S6B33B5A_Command(0x09);
waitms(40);
S6B33B5A_Command(0x26);
S6B33B5A_Command(0x01);
waitms(40);
S6B33B5A_Command(0x26);
S6B33B5A_Command(0x00);
waitms(40);
S6B33B5A_Command(0x02);
waitms(40);
S6B33B5A_Command(0x00);
waitms(40);
S6B33B5A_Command(0x2d);
waitms(200);
}
else // out sleep mode
{
S6B33B5A_Command(0x2c);
waitms(20);
S6B33B5A_Command(0x02);
waitms(20);
S6B33B5A_Command(0x01);
waitms(20);
S6B33B5A_Command(0x26);
S6B33B5A_Command(0x01);
waitms(20);
S6B33B5A_Command(0x26);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -