📄 lcd.c
字号:
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))
#elif (defined(LCD_9BIT_MODE))
#elif (defined(LCD_16BIT_MODE))
#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&0xFF00)>>8);
*((volatile unsigned char *) LCD_HX8306A_DATA_ADDR)=(kal_uint8)(data&0xFF);
#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;
// *((volatile unsigned int *) LCD_HX8306A_DATA_ADDR)=(kal_uint16) data;
#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_set_reg(kal_uint16 reg_index, kal_uint16 reg_data)
{
LCD_CtrlWrite_HX8306A(reg_index);
LCD_DataWrite_HX8306A(reg_data);
}
void LCD_Init_HX8306A(kal_uint32 bkground, void **buf_addr)
{
volatile kal_uint32 i;
kal_uint16 background = (kal_uint16)bkground;
kal_uint16 read_data;
lcd_check = 0;
CLEAR_LCD_CTRL_RESET_PIN;
LCD_Delay(0x1000);
SET_LCD_CTRL_RESET_PIN;
LCD_Delay(0x1000);
LCD_set_reg(0x0000,0x0001);
LCD_Delay(0x200); /* delay 10ms */
LCD_set_reg(0x0001,0x011B);
LCD_set_reg(0x0002,0x0700);
LCD_set_reg(0x0003,0x1200);//1230
// LCD_set_reg(0x0003,0x1030);
LCD_set_reg(0x0004,0x0000);
LCD_set_reg(0x0005,0x0000);
// LCD_set_reg(0x0007,0x0003);
LCD_set_reg(0x0007,0x0007);
LCD_set_reg(0x0008,0x0202);
LCD_set_reg(0x0009,0x0000);
LCD_set_reg(0x000B,0x0000);
LCD_set_reg(0x000C,0x0003);
LCD_set_reg(0x0040,0x0000);
LCD_set_reg(0x0041,0x00EF);
LCD_set_reg(0x0042,0xDB00);
LCD_set_reg(0x0043,0xDB00);
LCD_set_reg(0x0044,0xAF00);
LCD_set_reg(0x0045,0xDB00);
LCD_set_reg(0x0010,0x0000);
LCD_set_reg(0x0011,0x0000);
LCD_set_reg(0x0012,0x0000);
LCD_set_reg(0x0013,0x0000);
LCD_set_reg(0x0013,0x1611);
LCD_set_reg(0x0012,0x0003);
LCD_Delay(0x800);
LCD_set_reg(0x0010,0x4140);
LCD_set_reg(0x0012,0x0013);
LCD_Delay(0x800);
LCD_set_reg(0x0010,0x4140);
LCD_Delay(0x800);
LCD_set_reg(0x0013,0x3611);
LCD_Delay(0x800);
LCD_set_reg(0x0030,0x0005);
LCD_set_reg(0x0031,0x0607);
LCD_set_reg(0x0032,0x0107);
LCD_set_reg(0x0033,0x0506);
LCD_set_reg(0x0034,0x0304);
LCD_set_reg(0x0035,0x0003);
LCD_set_reg(0x0036,0x0707);
LCD_set_reg(0x0037,0x0402);
LCD_set_reg(0x0038,0x0100);
LCD_set_reg(0x0039,0x0400);
LCD_set_reg(0x0007,0x0005);
LCD_Delay(0x800);
LCD_set_reg(0x0007,0x0025);
LCD_set_reg(0x0007,0x0027);
LCD_Delay(0x800);
LCD_set_reg(0x0007,0x0037);
LCD_Delay(0x800);
//readreg_HX8306A(0x0039);
LCD_ClearAll_HX8306A(0xFFFF);
lcd_power_ctrl_shadow1=0x4140;
lcd_power_ctrl_shadow3=0x0013;
lcd_power_ctrl_shadow4=0x3611;
LCD_Delay(0x80000);
/* turn on backlight */
// *((volatile unsigned short *) 0x80120150) &= 0xF3FF;
// *((volatile unsigned short *) 0x80120000) |= 0x20;
// *((volatile unsigned short *) 0x801200C0) |= 0x20;
lcd_check = 1;
}
void LCD_Init_S1D19122(kal_uint32 bkground, void **buf_addr)
{
volatile kal_uint32 i;
kal_uint16 background = (kal_uint16)bkground;
kal_uint16 read_data;
unsigned short int temp, LUT;
lcd_check = 0;
CLEAR_LCD_CTRL_RESET_PIN;
LCD_Delay(0x1000);
SET_LCD_CTRL_RESET_PIN;
LCD_Delay(0x1000);
LCD_CtrlWrite_HX8306A(0x01); //SOFT RESET
LCD_CtrlWrite_HX8306A(0xb0); //display control
LCD_DataWrite_HX8306A(0x05);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0xf0);
LCD_DataWrite_HX8306A(0x0a);
LCD_DataWrite_HX8306A(0x38);
LCD_DataWrite_HX8306A(0x02);
LCD_DataWrite_HX8306A(0x0a);
LCD_DataWrite_HX8306A(0x2a);
LCD_DataWrite_HX8306A(0x2b);
LCD_DataWrite_HX8306A(0x30);
LCD_DataWrite_HX8306A(0x31);
LCD_DataWrite_HX8306A(0x37);
LCD_DataWrite_HX8306A(0x02);
LCD_DataWrite_HX8306A(0x36);
LCD_DataWrite_HX8306A(0x40);
LCD_DataWrite_HX8306A(0x02);
LCD_DataWrite_HX8306A(0x81);
LCD_DataWrite_HX8306A(0x04);
LCD_DataWrite_HX8306A(0x05);
LCD_DataWrite_HX8306A(0x64);
LCD_CtrlWrite_HX8306A(0xfc); //gamma set 0
LCD_DataWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x42);
LCD_DataWrite_HX8306A(0x42);
LCD_DataWrite_HX8306A(0x22);
LCD_DataWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x22);
LCD_DataWrite_HX8306A(0x99);
LCD_DataWrite_HX8306A(0xaa);
LCD_DataWrite_HX8306A(0xaa);
LCD_DataWrite_HX8306A(0xaa);
LCD_DataWrite_HX8306A(0xbb);
LCD_DataWrite_HX8306A(0xbb);
LCD_DataWrite_HX8306A(0xaa);
LCD_DataWrite_HX8306A(0x33);
LCD_DataWrite_HX8306A(0x33);
LCD_DataWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0xfd); //gamma set 0
LCD_DataWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x42);
LCD_DataWrite_HX8306A(0x42);
LCD_DataWrite_HX8306A(0x22);
LCD_DataWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x22);
LCD_DataWrite_HX8306A(0x99);
LCD_DataWrite_HX8306A(0xaa);
LCD_DataWrite_HX8306A(0xaa);
LCD_DataWrite_HX8306A(0xaa);
LCD_DataWrite_HX8306A(0xbb);
LCD_DataWrite_HX8306A(0xbb);
LCD_DataWrite_HX8306A(0xaa);
LCD_DataWrite_HX8306A(0x33);
LCD_DataWrite_HX8306A(0x33);
LCD_DataWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x11);
LCD_CtrlWrite_HX8306A(0xb8);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0xbc);
LCD_Delay(300);
LCD_CtrlWrite_HX8306A(0xbe); //EVR set
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x15);
LCD_DataWrite_HX8306A(0x0d);
LCD_DataWrite_HX8306A(0x06);
LCD_DataWrite_HX8306A(0x08);
LCD_DataWrite_HX8306A(0x15);
LCD_DataWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0xc0); //lcd modle definition
LCD_DataWrite_HX8306A(0x0e); //if parallel set oe
LCD_DataWrite_HX8306A(0x00); //
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0xc1); //power definition
LCD_DataWrite_HX8306A(0x2f);
LCD_DataWrite_HX8306A(0x23);
LCD_DataWrite_HX8306A(0xb4);
LCD_DataWrite_HX8306A(0xff);
LCD_DataWrite_HX8306A(0x24);
LCD_DataWrite_HX8306A(0x03);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x04);
LCD_DataWrite_HX8306A(0x04);
LCD_DataWrite_HX8306A(0x04);
LCD_DataWrite_HX8306A(0x20);
LCD_DataWrite_HX8306A(0x20);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0xbc);
LCD_Delay(300);
LCD_CtrlWrite_HX8306A(0xc2); //interface mode select
LCD_DataWrite_HX8306A(0x13);
LCD_CtrlWrite_HX8306A(0xd0); //lcdc interface
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x11); //sleep out
LCD_Delay(1000);
LCD_CtrlWrite_HX8306A(0x26); //gamma set
LCD_DataWrite_HX8306A(0x08);
LCD_CtrlWrite_HX8306A(0x35); //TE line on
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x36); //memory access control
LCD_DataWrite_HX8306A(0xd0);
LCD_CtrlWrite_HX8306A(0x38);
LCD_Delay(100);
LCD_CtrlWrite_HX8306A(0x3a); //65k color
LCD_DataWrite_HX8306A(0x05);
LCD_CtrlWrite_HX8306A(0x2a); //column address set
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x3f);
LCD_CtrlWrite_HX8306A(0x2b); //page address set
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0xef);
LCD_CtrlWrite_HX8306A(0x2d);
temp=0;
for (LUT=0;LUT<64; LUT++)
{
LCD_DataWrite_HX8306A(temp);
temp+=8;
}
temp=0;
for (LUT=0;LUT<64; LUT++)
{
LCD_DataWrite_HX8306A(temp);
temp+=4;
}
temp=0;
for (LUT=0;LUT<64; LUT++)
{
LCD_DataWrite_HX8306A(temp);
temp+=8;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -