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

📄 cstn_s6b33b5a.c

📁 展讯平台多款LCD驱动:cstn_nt7526/cstn_S1D15G24/cstn_S6B33B5A
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -