📄 lcd.c
字号:
LCD_Init_HX8306A(0, 0);
#elif (defined(LCD_9BIT_MODE))
#elif (defined(LCD_16BIT_MODE))
LCD_Init_HX8306A(0, 0);
#elif (defined(LCD_18BIT_MODE))
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0012&0xFF00)<<2)|((0x0012&0xFF)<<1));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((lcd_power_ctrl_shadow3&0xFF00)<<2)|((lcd_power_ctrl_shadow3&0xFF)<<1));
SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0013&0xFF00)<<2)|((0x0013&0xFF)<<1));
SET_LCD_CMD_PARAMETER(3,LCD_DATA,((lcd_power_ctrl_shadow4&0xFF00)<<2)|((lcd_power_ctrl_shadow4&0xFF)<<1));
SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0010&0xFF00)<<2)|((0x0010&0xFF)<<1));
SET_LCD_CMD_PARAMETER(5,LCD_DATA,((lcd_power_ctrl_shadow1&0xFF00)<<2)|((lcd_power_ctrl_shadow1&0xFF)<<1));
LCD_SEND_DMA_CMD(6);
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0007&0xFF00)<<2)|((0x0007&0xFF)<<1));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0x0005&0xFF00)<<2)|((0x0005&0xFF)<<1));
LCD_SEND_DMA_CMD(2);
LCD_Delay(0x1000);
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0007&0xFF00)<<2)|((0x0007&0xFF)<<1));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0x0025&0xFF00)<<2)|((0x0025&0xFF)<<1));
LCD_SEND_DMA_CMD(2);
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0007&0xFF00)<<2)|((0x0007&0xFF)<<1));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0x0027&0xFF00)<<2)|((0x0027&0xFF)<<1));
LCD_SEND_DMA_CMD(2);
LCD_Delay(0x1000);
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0007&0xFF00)<<2)|((0x0007&0xFF)<<1));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0x0037&0xFF00)<<2)|((0x0037&0xFF)<<1));
LCD_SEND_DMA_CMD(2);
LCD_Delay(0x1000);
#endif
#else
LCD_CtrlWrite_HX8306A(0x0010);
LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow1);
LCD_CtrlWrite_HX8306A(0x0012);
LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow3);
LCD_CtrlWrite_HX8306A(0x0013);
LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow4);
LCD_CtrlWrite_HX8306A(0x0007);
LCD_DataWrite_HX8306A(0x0005);
LCD_Delay(0x1000);
LCD_CtrlWrite_HX8306A(0x0007);
LCD_DataWrite_HX8306A(0x0025);
LCD_CtrlWrite_HX8306A(0x0007);
LCD_DataWrite_HX8306A(0x0027);
LCD_Delay(0x1000);
LCD_CtrlWrite_HX8306A(0x0007);
LCD_DataWrite_HX8306A(0x0037);
LCD_Delay(0x1000);
#endif
}
void LCD_Partial_On_HX8306A(kal_uint16 start_page,kal_uint16 end_page)
{
#if (defined(LCD_CMD_DMA_MODE))
#if (defined(LCD_8BIT_MODE))
SET_LCD_CMD_PARAMETER(0,LCD_CMD, (0x0007 >> 8));
SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x0007 & 0x00FF));
SET_LCD_CMD_PARAMETER(2,LCD_DATA, (0x003F & 0x00FF));
SET_LCD_CMD_PARAMETER(3,LCD_DATA, (0x003F & 0x00FF));
SET_LCD_CMD_PARAMETER(4,LCD_CMD, (0x0042 >> 8));
SET_LCD_CMD_PARAMETER(5,LCD_CMD, (0x0042 & 0x00FF));
SET_LCD_CMD_PARAMETER(6,LCD_DATA, (end_page & 0x00FF));
SET_LCD_CMD_PARAMETER(7,LCD_DATA, (start_page & 0x00FF));
LCD_SEND_DMA_CMD(8);
#elif (defined(LCD_9BIT_MODE))
#elif (defined(LCD_16BIT_MODE))
LCD_set_reg(0x0007, 0x003f);
SET_LCD_CMD_PARAMETER(0,LCD_CMD,(0x0042&0xFF00) | (0x0042&0xFF));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((end_page&0xFF)<<8)|(start_page&0xFF));
LCD_SEND_DMA_CMD(2);
#elif (defined(LCD_18BIT_MODE))
LCD_CtrlWrite_HX8306A(0x0007);
LCD_DataWrite_HX8306A(0x003f);
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0042&0xFF00)<<2)|((0x0042&0xFF)<<1));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((end_page&0xFF)<<10)|((start_page&0xFF)<<1));
LCD_SEND_DMA_CMD(2);
#endif
#else
LCD_set_reg(0x0007, 0x003f);
LCD_set_reg(0x0042, (start_page & 0xFF) | ((end_page & 0xFF) << 8));
#endif
}
void LCD_Partial_Off_HX8306A(void)
{
#if (defined(LCD_CMD_DMA_MODE))
#if (defined(LCD_8BIT_MODE))
SET_LCD_CMD_PARAMETER(0,LCD_CMD, (0x0007 >> 8));
SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x0007 & 0x00FF));
SET_LCD_CMD_PARAMETER(2,LCD_CMD, (0x0042 >> 8));
SET_LCD_CMD_PARAMETER(3,LCD_CMD, (0x0042 & 0x00FF));
SET_LCD_CMD_PARAMETER(4,LCD_DATA, (0xDB00 >> 8));
SET_LCD_CMD_PARAMETER(5,LCD_DATA, (0xDB00 & 0x00FF));
LCD_SEND_DMA_CMD(6);
#elif (defined(LCD_9BIT_MODE))
#elif (defined(LCD_16BIT_MODE))
LCD_set_reg(0x0007,0x0037);
SET_LCD_CMD_PARAMETER(0,LCD_CMD,(0x0042&0xFF00)|(0x0042&0xFF));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,(0xDB00&0xFF00)|(0xDB00&0xFF));
LCD_SEND_DMA_CMD(2);
#elif (defined(LCD_18BIT_MODE))
LCD_CtrlWrite_HX8306A(0x0007);
LCD_DataWrite_HX8306A(0x0037);
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0042&0xFF00)<<2)|((0x0042&0xFF)<<1));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0xDB00&0xFF00)<<2)|((0xDB00&0xFF)<<1));
LCD_SEND_DMA_CMD(2);
#endif
#else
LCD_set_reg(0x0007, 0x0037);
LCD_set_reg(0x0042, 0xDB00);
#endif
}
kal_uint8 LCD_Partial_line_HX8306A(void)
{
return 1; /* partial display in 1 line alignment */
}
void LCD_blockClear_HX8306A(kal_uint16 x1, kal_uint16 y1, kal_uint16 x2, kal_uint16 y2, kal_uint16 data)
{
kal_uint16 LCD_x;
kal_uint16 LCD_y;
kal_uint8 r_color, g_color, b_color;
x1 -= (x1 & 0x03);
x2 += (3 - (x2 & 0x03));
r_color = (data & 0xF800) >> 10; /* transfer to RGB666 */
g_color = (data >> 5) & 0x3F;
b_color = (data & 0x1F) << 1;
#if (defined(LCD_CMD_DMA_MODE))
#if (defined(LCD_8BIT_MODE))
SET_LCD_CMD_PARAMETER(0,LCD_CMD, (0x0044 >> 8));
SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x0044 & 0x00FF));
SET_LCD_CMD_PARAMETER(2,LCD_DATA, (x2 & 0x00FF));
SET_LCD_CMD_PARAMETER(3,LCD_DATA, (x1 & 0x00FF));
SET_LCD_CMD_PARAMETER(4,LCD_CMD, (0x0045 >> 8));
SET_LCD_CMD_PARAMETER(5,LCD_CMD, (0x0045 & 0x00FF));
SET_LCD_CMD_PARAMETER(6,LCD_DATA, (y2 & 0x00FF));
SET_LCD_CMD_PARAMETER(7,LCD_DATA, (y1 & 0x00FF));
SET_LCD_CMD_PARAMETER(8,LCD_CMD, (0x0021 >> 8));
SET_LCD_CMD_PARAMETER(9,LCD_CMD, (0x0021 & 0x00FF));
SET_LCD_CMD_PARAMETER(10,LCD_DATA, (y1 & 0x00FF));
SET_LCD_CMD_PARAMETER(11,LCD_DATA, (x1 & 0x00FF));
SET_LCD_CMD_PARAMETER(12,LCD_CMD, (0x0022 >> 8));
SET_LCD_CMD_PARAMETER(13,LCD_CMD, (0x0022 & 0x00FF));
LCD_SEND_DMA_CMD(14);
#elif (defined(LCD_9BIT_MODE))
#elif (defined(LCD_16BIT_MODE))
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0044&0xFF00))|((0x0044&0xFF)));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((x2&0xFF)<<8)|((x1&0xFF)));
SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0045&0xFF00))|((0x0045&0xFF)));
SET_LCD_CMD_PARAMETER(3,LCD_DATA,((y2&0xFF)<<8)|((y1&0xFF)));
SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0021&0xFF00))|((0x0021&0xFF)));
SET_LCD_CMD_PARAMETER(5,LCD_DATA,((y1&0xFF)<<8)|((x1&0xFF)));
SET_LCD_CMD_PARAMETER(6,LCD_CMD,((0x0022&0xFF00))|((0x0022&0xFF)));
LCD_SEND_DMA_CMD(7);
#elif (defined(LCD_18BIT_MODE))
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0044&0xFF00)<<2)|((0x0044&0xFF)<<1));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((x2&0xFF)<<10)|((x1&0xFF)<<1));
SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0045&0xFF00)<<2)|((0x0045&0xFF)<<1));
SET_LCD_CMD_PARAMETER(3,LCD_DATA,((y2&0xFF)<<10)|((y1&0xFF)<<1));
SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0021&0xFF00)<<2)|((0x0021&0xFF)<<1));
SET_LCD_CMD_PARAMETER(5,LCD_DATA,((y1&0xFF)<<10)|((x1&0xFF)<<1));
SET_LCD_CMD_PARAMETER(6,LCD_CMD,((0x0022&0xFF00)<<2)|((0x0022&0xFF)<<1));
LCD_SEND_DMA_CMD(7);
#endif
#else
LCD_CtrlWrite_HX8306A(0x0044);
LCD_DataWrite_HX8306A((((x2&0xFF)<<8)|(x1&0xFF)));
LCD_CtrlWrite_HX8306A(0x0045);
LCD_DataWrite_HX8306A((((y2&0xFF)<<8)|(y1&0xFF)));
LCD_CtrlWrite_HX8306A(0x0021);
LCD_DataWrite_HX8306A((((y1&0xFF)<<8)|(x1&0xFF)));
LCD_CtrlWrite_HX8306A(0x0022);
#endif
for (LCD_y = y1; LCD_y <= y2; LCD_y++) {
for (LCD_x = x1; LCD_x <= x2; LCD_x++) {
#if (defined(LCD_8BIT_MODE))
*((volatile unsigned char *) LCD_HX8306A_DATA_ADDR) = (kal_uint8)(data >> 8);
*((volatile unsigned char *) LCD_HX8306A_DATA_ADDR) = (kal_uint8)(data & 0x00FF);
#elif (defined(LCD_16BIT_MODE))
*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR) = data;
#elif (defined(LCD_18BIT_MODE))
*((volatile unsigned int *) LCD_HX8306A_DATA_ADDR)=(r_color<<12)|(g_color<<6)|b_color;
#elif (defined(LCD_9BIT_MODE))
*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=(r_color<<6)|(g_color>>3);
*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=((g_color&0x07)<<6)|b_color;
#endif
}
}
}
void LCD_ClearAll_HX8306A(kal_uint16 data)
{
LCD_blockClear_HX8306A(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1, data);
}
void LCD_Init_HX8306A(kal_uint32 bkground, void **buf_addr)
{
lcd_check = 0;
LCD_set_reg(0x0007,0x0040);//turn off power,display off
LCD_set_reg(0x0012,0x0000);//power control 3
LCD_set_reg(0x0013,0x0000);//power control 4
LCD_Delay(10);
LCD_set_reg(0x0001,0x011b);
LCD_set_reg(0x0002,0x0700);
LCD_set_reg(0x0003,0x0030);//bgr=0
LCD_set_reg(0x0004,0x0000);
LCD_set_reg(0x0005,0x0000);
LCD_set_reg(0x000b,0x4000);
/*********power setting*********/
LCD_set_reg(0x0011,0x0000);
LCD_set_reg(0x0012,0x0008);
LCD_set_reg(0x0013,0x1014);//VCOMH
LCD_set_reg(0x0010,0x4040);
LCD_Delay(10);
LCD_set_reg(0x0012,0x0018);
LCD_Delay(10);
LCD_set_reg(0x0013,0x3014);//VCOMH
LCD_Delay(10);
/********Gamma Adjustment*********/
LCD_set_reg(0x0030,0x0000);
LCD_set_reg(0x0031,0x0207);
LCD_set_reg(0x0032,0x0000);
LCD_set_reg(0x0033,0x0401);
LCD_set_reg(0x0034,0x0707);
LCD_set_reg(0x0035,0x0005);
LCD_set_reg(0x0036,0x0707);
LCD_set_reg(0x0037,0x0000);
LCD_set_reg(0x0038,0x0000);
LCD_set_reg(0x0039,0x0000);
////////////////////////////////////
LCD_set_reg(0x0040,0x0000);
LCD_set_reg(0x0041,0xef00);
LCD_set_reg(0x0042,0x00db);
LCD_set_reg(0x0043,0xdb00);
LCD_set_reg(0x0044,0xaf00);
LCD_set_reg(0x0045,0xdb00);
/////////////////////////////////////
LCD_set_reg(0x0007,0x0141);
LCD_Delay(10);
LCD_set_reg(0x0007,0x0161);
LCD_Delay(10);
LCD_set_reg(0x0007,0x0163);
LCD_Delay(10);
LCD_set_reg(0x0007,0x0f77);
LCD_Delay(10);
LCD_set_reg(0x0008,0x0202);
LCD_ClearAll_HX8306A(0x001F);
lcd_check = 1;
}
void LCD_PWRON_HX8306A(kal_bool on)
{
}
void LCD_SetContrast_HX8306A(kal_uint8 level)
{
}
void LCD_ON_HX8306A(kal_bool on)
{
}
void LCD_BlockWrite_HX8306A(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
while (LCD_IS_RUNNING);
// ASSERT(lcd_assert_fail==KAL_FALSE);
lcd_assert_fail = KAL_TRUE;
#ifdef LCD_CMD_DMA_MODE
#if (defined(LCD_8BIT_MODE))
SET_LCD_CMD_PARAMETER(0,LCD_CMD, (0x0044 >> 8));
SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x0044 & 0x00FF));
SET_LCD_CMD_PARAMETER(2,LCD_DATA, (endx & 0x00FF));
SET_LCD_CMD_PARAMETER(3,LCD_DATA, (startx & 0x00FF));
SET_LCD_CMD_PARAMETER(4,LCD_CMD, (0x0045 >> 8));
SET_LCD_CMD_PARAMETER(5,LCD_CMD, (0x0045 & 0x00FF));
SET_LCD_CMD_PARAMETER(6,LCD_DATA, (endy & 0x00FF));
SET_LCD_CMD_PARAMETER(7,LCD_DATA, (starty & 0x00FF));
SET_LCD_CMD_PARAMETER(8,LCD_CMD, (0x0021 >> 8));
SET_LCD_CMD_PARAMETER(9,LCD_CMD, (0x0021 & 0x00FF));
SET_LCD_CMD_PARAMETER(10,LCD_DATA, (starty & 0x00FF));
SET_LCD_CMD_PARAMETER(11,LCD_DATA, (startx & 0x00FF));
SET_LCD_CMD_PARAMETER(12,LCD_CMD, (0x0022 >> 8));
SET_LCD_CMD_PARAMETER(13,LCD_CMD, (0x0022 & 0x00FF));
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14);
#elif (defined(LCD_9BIT_MODE))
#elif (defined(LCD_16BIT_MODE))
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0044&0xFF00))|((0x0044&0xFF)));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((endx&0xFF)<<8)|((startx&0xFF)));
SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0045&0xFF00))|((0x0045&0xFF)));
SET_LCD_CMD_PARAMETER(3,LCD_DATA,((endy&0xFF)<<8)|((starty&0xFF)));
SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0021&0xFF00))|((0x0021&0xFF)));
SET_LCD_CMD_PARAMETER(5,LCD_DATA,((starty&0xFF)<<8)|((startx&0xFF)));
SET_LCD_CMD_PARAMETER(6,LCD_CMD,((0x0022&0xFF00))|((0x0022&0xFF)));
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(7);
#elif (defined(LCD_18BIT_MODE))
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0044&0xFF00)<<2)|((0x0044&0xFF)<<1));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((endx&0xFF)<<10)|((startx&0xFF)<<1));
SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0045&0xFF00)<<2)|((0x0045&0xFF)<<1));
SET_LCD_CMD_PARAMETER(3,LCD_DATA,((endy&0xFF)<<10)|((starty&0xFF)<<1));
SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0021&0xFF00)<<2)|((0x0021&0xFF)<<1));
SET_LCD_CMD_PARAMETER(5,LCD_DATA,((starty&0xFF)<<10)|((startx&0xFF)<<1));
SET_LCD_CMD_PARAMETER(6,LCD_CMD,((0x0022&0xFF00)<<2)|((0x0022&0xFF)<<1));
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(7);
#endif
ENABLE_LCD_TRANSFER_COMPLETE_INT;
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
// SET_LCD_ROI_CTRL_NUMBER_OF_CMD(7);
START_LCD_TRANSFER;
#else /* LCD_CMD_DMA_MODE */
LCD_CtrlWrite_HX8306A(0x0044);
LCD_DataWrite_HX8306A((((endx&0xFF)<<8)|(startx&0xFF)));
LCD_CtrlWrite_HX8306A(0x0045);
LCD_DataWrite_HX8306A((((endy&0xFF)<<8)|(starty&0xFF)));
LCD_CtrlWrite_HX8306A(0x0021);
LCD_DataWrite_HX8306A((((starty&0xFF)<<8)|(startx&0xFF)));
LCD_CtrlWrite_HX8306A(0x0022);
DISABLE_LCD_TRANSFER_COMPLETE_INT;
DISABLE_LCD_ROI_CTRL_CMD_FIRST;
START_LCD_TRANSFER;
#endif /* LCD_CMD_DMA_MODE */
lcd_assert_fail = KAL_FALSE;
}
void LCD_Size_HX8306A(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_HX8306A(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_HX8306A(kal_uint8 *bias)
{
}
void LCD_Contrast_HX8306A(kal_uint8 *contrast)
{
}
void LCD_LineRate_HX8306A(kal_uint8 *linerate)
{
}
void LCD_Temp_Compensate_HX8306A(kal_uint8 *compensate)
{
}
kal_bool LCD_ESD_check_HX8306A()
{
volatile kal_uint16 data_value = 0;
kal_uint16 data_addr = 0;
kal_uint8 i, reg_start_idx, reg_end_idx;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -