📄 lcd.c
字号:
LCD_CtrlWrite_WSX6396A(0x0034);
LCD_DataWrite_WSX6396A(0x0203);
LCD_CtrlWrite_WSX6396A(0x0035);
LCD_DataWrite_WSX6396A(0x0303);
LCD_CtrlWrite_WSX6396A(0x0036);
LCD_DataWrite_WSX6396A(0x0707);
LCD_CtrlWrite_WSX6396A(0x0037);
LCD_DataWrite_WSX6396A(0x0300);
LCD_CtrlWrite_WSX6396A(0x003f);
LCD_DataWrite_WSX6396A(0x0000);
LCD_CtrlWrite_WSX6396A(0x0041);
LCD_DataWrite_WSX6396A(0x0000);
LCD_CtrlWrite_WSX6396A(0x0042);
LCD_DataWrite_WSX6396A(0xdb00);
LCD_CtrlWrite_WSX6396A(0x0043);
LCD_DataWrite_WSX6396A(0xefed);
LCD_CtrlWrite_WSX6396A(0x0044);
LCD_DataWrite_WSX6396A(0xaf00);
LCD_CtrlWrite_WSX6396A(0x0045);
LCD_DataWrite_WSX6396A(0xdb00);
/************ Display On Function ***************************/
LCD_CtrlWrite_WSX6396A(LCD_Dis_Con_WSX6396A);
LCD_DataWrite_WSX6396A(0x0005);
LCD_Delay(10);
LCD_CtrlWrite_WSX6396A(LCD_Dis_Con_WSX6396A);
LCD_DataWrite_WSX6396A(0x0025);
LCD_CtrlWrite_WSX6396A(LCD_Serial_Transfer_WSX6396A);
LCD_DataWrite_WSX6396A(0x0100);
LCD_Delay(1);
LCD_CtrlWrite_WSX6396A(LCD_Dis_Con_WSX6396A);
LCD_DataWrite_WSX6396A(0x0027);
LCD_Delay(10);
LCD_CtrlWrite_WSX6396A(LCD_Dis_Con_WSX6396A);
LCD_DataWrite_WSX6396A(0x0037);
LCD_Delay(10);
LCD_ClearAll_WSX6396A(0x0000);
LCD_CtrlWrite_WSX6396A(0x0003);
// LCD_DataWrite_WSX6396A(0x1030);
LCD_DataWrite_WSX6396A(0x1230); /* enable high speed write mode */
}
void LCD_PWRON_WSX6396A(kal_bool on)
{
if(on)
{
LCD_ExitSleep_WSX6396A();
}
else
{
LCD_EnterSleep_WSX6396A();
}
}
void LCD_SetContrast_WSX6396A(kal_uint8 level)
{
}
void LCD_ON_WSX6396A(kal_bool on)
{
if (on)
{
/************ Display On Function ***************************/
LCD_CtrlWrite_WSX6396A(LCD_Dis_Con_WSX6396A);
LCD_DataWrite_WSX6396A(0x0005);
LCD_Delay(1);
LCD_CtrlWrite_WSX6396A(LCD_Dis_Con_WSX6396A);
LCD_DataWrite_WSX6396A(0x0025);
LCD_CtrlWrite_WSX6396A(LCD_Serial_Transfer_WSX6396A);
LCD_DataWrite_WSX6396A(0x0100);
LCD_Delay(1);
LCD_CtrlWrite_WSX6396A(LCD_Dis_Con_WSX6396A);
LCD_DataWrite_WSX6396A(0x0027);
LCD_Delay(1);
LCD_CtrlWrite_WSX6396A(LCD_Dis_Con_WSX6396A);
LCD_DataWrite_WSX6396A(0x0037);
}
else
{
/************ Display Off Function ***************************/
LCD_CtrlWrite_WSX6396A(LCD_Dis_Con_WSX6396A);
LCD_DataWrite_WSX6396A(0x0036);
LCD_Delay(1);
LCD_CtrlWrite_WSX6396A(LCD_Dis_Con_WSX6396A);
LCD_DataWrite_WSX6396A(0x0026);
LCD_Delay(1);
LCD_CtrlWrite_WSX6396A(LCD_Dis_Con_WSX6396A);
LCD_DataWrite_WSX6396A(0x0004);
LCD_CtrlWrite_WSX6396A(LCD_Serial_Transfer_WSX6396A);
LCD_DataWrite_WSX6396A(0x0100);
LCD_Delay(1);
}
}
void LCD_BlockWrite_WSX6396A(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
kal_uint16 roi_offset_x,roi_offset_y;
kal_uint16 roi_width,roi_height;
ASSERT(lcd_assert_fail==KAL_FALSE);
lcd_assert_fail = KAL_TRUE;
roi_offset_x=GET_LCD_ROI_WINDOW_OFFSET_X;
roi_offset_y=GET_LCD_ROI_WINDOW_OFFSET_Y;
roi_width=GET_LCD_ROI_WINDOW_SIZE_X;
roi_height=GET_LCD_ROI_WINDOW_SIZE_Y;
roi_offset_x -= (startx&0x03);
roi_width+= (startx&0x03);
roi_width+= (3-(endx&0x03));
SET_LCD_ROI_WINDOW_SIZE(roi_width,roi_height);
SET_LCD_ROI_WINDOW_OFFSET(roi_offset_x,roi_offset_y);
#if (defined(MT6218B) || defined(MT6219) || defined(MT6217))
SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x00);
SET_LCD_CMD_PARAMETER(1,LCD_CMD,0x44);
SET_LCD_CMD_PARAMETER(2,LCD_DATA,endx);
SET_LCD_CMD_PARAMETER(3,LCD_DATA,startx);
SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x00);
SET_LCD_CMD_PARAMETER(5,LCD_CMD,0x45);
SET_LCD_CMD_PARAMETER(6,LCD_DATA,endy);
SET_LCD_CMD_PARAMETER(7,LCD_DATA,starty);
SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x00);
SET_LCD_CMD_PARAMETER(9,LCD_CMD,0x21);
SET_LCD_CMD_PARAMETER(10,LCD_DATA,starty);
// SET_LCD_CMD_PARAMETER(11,LCD_DATA,startx);
SET_LCD_CMD_PARAMETER(11,LCD_DATA,(startx&0xFFFC));
SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x00);
SET_LCD_CMD_PARAMETER(13,LCD_CMD,0x22);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14);
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
#endif /* MT6218B, MT6219 */
lcd_assert_fail = KAL_FALSE;
}
void LCD_Size_WSX6396A(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height)
{
*out_LCD_width = LCD_WIDTH;
*out_LCD_height = LCD_HEIGHT;
}
/*Engineering mode*/
kal_uint8 LCD_GetParm_WSX6396A(lcd_func_type type)
{
switch(type)
{
case lcd_Bais_func:
return 1;
case lcd_Contrast_func:
return 1;
case lcd_LineRate_func:
return 4;
case lcd_Temperature_Compensation_func:
return 4;
default:
ASSERT(0);
return 100;
}
}
void LCD_SetBias_WSX6396A(kal_uint8 *bias)
{
}
void LCD_Contrast_WSX6396A(kal_uint8 *contrast)
{
}
void LCD_LineRate_WSX6396A(kal_uint8 *linerate)
{
}
void LCD_Temp_Compensate_WSX6396A(kal_uint8 *compensate)
{
}
/***********************SSD1773********************************/
#if (defined(DUAL_LCD))
void LCD_EnterSleep_SSD1773(void)
{
LCD_CtrlWrite_SSD1773(LCD_SLEEP_MODE_SSD1773|0x01);
LCD_Delay(100);
}
void LCD_ExitSleep_SSD1773(void)
{
LCD_CtrlWrite_SSD1773(LCD_SLEEP_MODE_SSD1773);
LCD_CtrlWrite_SSD1773(LCD_DISPLAY_ON_SSD1773|0x01);
LCD_Delay(100);
}
void LCD_Partial_On_SSD1773(kal_uint16 start_page,kal_uint16 end_page)
{
LCD_CtrlWrite_SSD1773(LCD_ENTER_PARTIAL_SSD1773);
LCD_DataWrite_SSD1773(start_page);
LCD_DataWrite_SSD1773(end_page);
}
void LCD_Partial_Off_SSD1773(void)
{
LCD_CtrlWrite_SSD1773(LCD_EXIT_PARTIAL_SSD1773);
}
kal_uint8 LCD_Partial_line_SSD1773(void)
{
return 1; /* partial display in 1 line alignment */
}
void LCD_Set_Y_Addr_SSD1773(kal_uint16 start_row, kal_uint16 end_row)
{
//Set Page Address
LCD_CtrlWrite_SSD1773(LCD_SET_PAGE_ADDR_SSD1773);
LCD_DataWrite_SSD1773(start_row); /* KC *///Start Pos
LCD_DataWrite_SSD1773(end_row); /* KC *///End Pos
}
void LCD_Set_X_Addr_SSD1773(kal_uint16 start_column, kal_uint16 end_column)
{
//Set Column Address
LCD_CtrlWrite_SSD1773(LCD_SET_COLUMN_ADDR_SSD1773);
LCD_DataWrite_SSD1773(start_column+8); /* KC */ //Start Pos
LCD_DataWrite_SSD1773(end_column+8); /* KC *///End Pos
}
void LCD_blockClear_SSD1773(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data)
{
kal_uint16 LCD_x, LCD_y;
volatile kal_uint16 delay;
LCD_Set_Y_Addr_SSD1773(y1, y2);
LCD_Set_X_Addr_SSD1773(x1, x2);
LCD_CtrlWrite_SSD1773(LCD_WRITE_DATA_SSD1773);
for(LCD_y=y1;LCD_y<=y2;LCD_y++)
{
for(LCD_x=x1;LCD_x<=x2;LCD_x++)
{
LCD_RAMWrite_SSD1773(data);
}
}
}
/* KC */
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#if (defined(MT6218B)||defined(MT6219)||defined(MT6217))
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#else
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
/* under construction !*/
#endif
void LCD_ClearAll_SSD1773(kal_uint16 data)
{
LCD_blockClear_SSD1773(0,0,SUBLCD_WIDTH-1,SUBLCD_HEIGHT-1,data);
}
void LCD_Init_SSD1773(kal_uint32 bkground, void **buf_addr)
{
volatile kal_uint32 i;
kal_uint16 background = (kal_uint16)bkground;
//start oscillation
LCD_CtrlWrite_SSD1773(0xD1);
//Exit Sleep Mode
LCD_CtrlWrite_SSD1773(0x94);
//Set Power Control Register
LCD_CtrlWrite_SSD1773(0x20);
LCD_DataWrite_SSD1773(0x07); //Boost Level 4X
//Display Control , duty selection
LCD_CtrlWrite_SSD1773(0xCA);
LCD_DataWrite_SSD1773(0x00);
LCD_DataWrite_SSD1773(0x0f); //68Mux , 1/64 Duty
LCD_DataWrite_SSD1773(0x00);
//Set bias ratio
LCD_CtrlWrite_SSD1773(LCD_SET_BIAS_SSD1773);
LCD_DataWrite_SSD1773(0x05); // 1/7
//Set target gain and contrast
LCD_CtrlWrite_SSD1773(LCD_SET_CON_IRRR_SSD1773);
LCD_DataWrite_SSD1773(0x16); /* KC */
LCD_DataWrite_SSD1773(0x04);
//Display Inverse for Panel is negative type
LCD_CtrlWrite_SSD1773(0xA7); /* KC */ //A7
//Data Output Scan Direction , RGB arrangement , Gray Scale selection
//page address to normal display, column address to normal rotation , scan direction to column scan
LCD_CtrlWrite_SSD1773(0xBC);
LCD_DataWrite_SSD1773(0x00); /* KC */ //00
LCD_DataWrite_SSD1773(0x00);
LCD_DataWrite_SSD1773(0x00); //64 Levels gray
//Com Output Scan Direction
LCD_CtrlWrite_SSD1773(0xBB);
LCD_DataWrite_SSD1773(0x01); /* KC */ //01
/* KC
(0 to 79) Specify one of ROW0-ROW79 to which the first display line (COM0) is mapped to. */
LCD_CtrlWrite_SSD1773(0x44);
LCD_DataWrite_SSD1773(0x27); /* KC */
//Clear Window
LCD_CtrlWrite_SSD1773(0x8E);
LCD_DataWrite_SSD1773(0x00); //( Xstart , Ystart)
LCD_DataWrite_SSD1773(0x00);
LCD_DataWrite_SSD1773(0x67); //( Xend , Yend)
LCD_DataWrite_SSD1773(0x4F);
//Display On
LCD_CtrlWrite_SSD1773(0xaf);
LCD_ClearAll_SSD1773(0x0000);
}
void LCD_PWRON_SSD1773(kal_bool on)
{
if(on)
{
LCD_ExitSleep_SSD1773();
}
else
{
LCD_EnterSleep_SSD1773();
}
}
void LCD_SetContrast_SSD1773(kal_uint8 level)
{
LCD_CtrlWrite_SSD1773(LCD_SET_CON_IRRR_SSD1773);
LCD_DataWrite_SSD1773(level);
LCD_DataWrite_SSD1773(0x04);
}
void LCD_SetNBlockInv_SSD1773(kal_uint8 level)
{
LCD_CtrlWrite_SSD1773(LCD_SET_FRAME_NLINE_SSD1773);
LCD_DataWrite_SSD1773(8); //F3~F0 Frame rate
LCD_DataWrite_SSD1773(level); //N6|N4~N0 N Line
}
void LCD_ON_SSD1773(kal_bool on)
{
if (on)
{
LCD_CtrlWrite_SSD1773(LCD_DISPLAY_ON_SSD1773|0x01);
}
else
{
LCD_CtrlWrite_SSD1773(LCD_DISPLAY_ON_SSD1773);
}
}
void LCD_BlockWrite_SSD1773(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
ASSERT(lcd_assert_fail==KAL_FALSE);
lcd_assert_fail = KAL_TRUE;
#if (defined(MT6218B) || defined(MT6219)|| defined(MT6217))
LCD_Set_X_Addr_SSD1773(startx,endx);
LCD_Set_Y_Addr_SSD1773(starty, endy);
LCD_CtrlWrite_SSD1773(LCD_WRITE_DATA_SSD1773);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
DISABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
#endif /* MT6218B, MT6219 */
lcd_assert_fail = KAL_FALSE;
}
void LCD_Size_SSD1773(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height)
{
*out_LCD_width = SUBLCD_WIDTH;
*out_LCD_height = SUBLCD_HEIGHT;
}
/*Engineering mode*/
kal_uint8 LCD_GetParm_SSD1773(lcd_func_type type)
{
switch(type)
{
case lcd_Bais_func:
return 1;
case lcd_Contrast_func:
return 1;
case lcd_LineRate_func:
return 1;
case lcd_Temperature_Compensation_func:
return 1;
default:
ASSERT(0);
return 100;
}
}
void LCD_SetBias_SSD1773(kal_uint8 *bias)
{
//Set bias ratio
LCD_CtrlWrite_SSD1773(LCD_SET_BIAS_SSD1773);
LCD_DataWrite_SSD1773(*bias);
}
void LCD_Contrast_SSD1773(kal_uint8 *contrast)
{
LCD_CtrlWrite_SSD1773(LCD_SET_CON_IRRR_SSD1773);
LCD_DataWrite_SSD1773(*contrast);
LCD_DataWrite_SSD1773(0x04);
}
void LCD_LineRate_SSD1773(kal_uint8 *linerate)
{
LCD_CtrlWrite_SSD1773(LCD_SET_FRAME_NLINE_SSD1773);
LCD_DataWrite_SSD1773(*linerate); //F3~F0 Frame rate
LCD_DataWrite_SSD1773(16); //N6|N4~N0 N Line
}
void LCD_Temp_Compensate_SSD1773(kal_uint8 *compensate)
{
LCD_CtrlWrite_SSD1773(LCD_TC_SSD1773);
LCD_DataWrite_SSD1773(*compensate);
}
#endif /*DUAL_LCD*/
#endif/*WSX6396A*/
//========================================================
//
// HITACH 64k Color LCD, Chip: RENRSAS R61500 , 176x220 Parallel Interface
//
//========================================================
void Delay_us(kal_uint32 times)
{
kal_uint32 delay1;
kal_uint8 delay2;
for(delay1=0;delay1<times;delay1++)
for(delay2=0;delay2<4;delay2++){ } // about 1us
}
//==============================================================
//
// Delay_ms: delay at microsecond level
//
//==============================================================
void Delay_ms(kal_uint32 times)
{
kal_uint32 delay;
for(delay=0; delay<times*4700; delay++){}; // about 1ms
}
#ifdef __SM02_MIKI_DRV_LCD_HITACHI_R61500__
//==============================================================
//
// Delay_us: delay at microsecond level
//
//==============================================================
#if (defined(MT6218B)||defined(MT6219)||defined(MT6217)||defined(MT6226)|| defined(MT6226M))
void init_lcd_interface(void)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -