📄 lcd_driver.c
字号:
//////////////////////////////////////////////////////////////////////////////////////
//LCD driver file
//FILE TYPE: *.C
//////////////////////////////////////////////////////////////////////////////////////
extern uint pg_adr1;
extern uchar xdata rd_mem[528];
/*****************************/
void Send_Lcd_Cmd (uchar LCD_CMD)
{
LCDCS = 0;
LCDRD = 1;
LCDRS = 0;
LCD_LOW_BUS = LCD_CMD;
//LCD_HIG_BUS = 0Xff;
_nop_ ();
LCDWR = 0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
LCDWR = 1;
LCDCS = 1;
}
void Send_Lcd_Data (uchar byte)
{
LCDRD = 1;
LCDRS = 1;
LCDCS = 0;
LCD_LOW_BUS = byte;
//LCD_HIG_BUS = higher_byte;
_nop_ ();
LCDWR = 0;
_nop_ ();
LCDWR = 1;
LCDCS = 1;
}
void delay (uint delaytime)
{
uint i;
for (i = 0; i< delaytime; i++);
}
/*********************************************************************
Name: LCD initialization
Parameters:
Returns:
Description: This routine initial the LCD
**********************************************************************/
void LCD_Initial_8020 (void)
{
Send_Lcd_Cmd(0x2C); //STANDBY MODE OFF
delay (1000);
Send_Lcd_Cmd(0x02); //OSCILLATION SETTING
Send_Lcd_Cmd(0x01); //INTERNAL CLOCK MODE
Send_Lcd_Cmd(0x20); //DC-DC1 SET
Send_Lcd_Cmd(0x0a); //DC1 AND DC2 STEP UP:X2.0
Send_Lcd_Cmd(0x24); //DC-DC CLOCK DIVISION
Send_Lcd_Cmd(0x21);
Send_Lcd_Cmd(0x26); //DC-DC and Amplifier setting
Send_Lcd_Cmd(0x01); //DC-DC1 ON
delay (1000); //Delay for stable
Send_Lcd_Cmd(0x26);
Send_Lcd_Cmd(0x09); //Amplifier on
delay (1000); //Delay for stable
Send_Lcd_Cmd(0x26);
Send_Lcd_Cmd(0x0B); //DC-DC2 on
delay (1000);
Send_Lcd_Cmd(0x26);
Send_Lcd_Cmd(0x0F); //DC-DC3 on
delay (1000);
//========================================
Send_Lcd_Cmd(0x22) ; // BIAS SET
Send_Lcd_Cmd(0x02); // 1/5 bias
Send_Lcd_Cmd(0x10); // DRIVER OUTPUT MODE
Send_Lcd_Cmd(0x20);
Send_Lcd_Cmd(0x30); // ADDRESSING MODE,65K color set
Send_Lcd_Cmd(Addressing);
Send_Lcd_Cmd(0x32); //Row vector setting
Send_Lcd_Cmd(Rowvector);
Send_Lcd_Cmd(0x40); // ENTRY MODE SET
Send_Lcd_Cmd(0x02); // X ADDRESSING MODE
//Send_Lcd_Cmd(0x0); // Y ADDRESSING MODE
Send_Lcd_Cmd(0x34); // N-BLOCK INVERSION
Send_Lcd_Cmd(nline);
Send_Lcd_Cmd(0x36); // Frame frequency control
Send_Lcd_Cmd(0x00); // Low frequency set off
Send_Lcd_Cmd(0x53); //SPECIFIED DISPLAY PATTERN
Send_Lcd_Cmd(0x00); //Normal display
Send_Lcd_Cmd(0x28); //TEMPERATURE COMPENSATION
Send_Lcd_Cmd(0x01);
Send_Lcd_Cmd(0x2A); //CONTRAST SETTING
Send_Lcd_Cmd(contrast);
Send_Lcd_Cmd(0x51); //DISPLAY ON
}
/*******************************************************************************************
Name : def_window
Parameters : X0, X1, Y0, Y1
Returns : No
Description: This routine define a window area by the parameter
X0, Y0, X1, Y1
*******************************************************************************************/
void def_window(uchar X0, uchar Y0,
uchar X1, uchar Y1) reentrant
{
Send_Lcd_Cmd(0x43); //SEG address set
Send_Lcd_Cmd(X0);
Send_Lcd_Cmd(X1);
Send_Lcd_Cmd(0x42); //COM address set
Send_Lcd_Cmd(Y0);
Send_Lcd_Cmd(Y1);
}
/******************************************************************
Name : LCD_Clear_Window
Parameters : X0, Y0, X1, Y1, filling_color
Returns : No
Description: Filling color in the area defined by X0, Y0, X1, Y1
*******************************************************************/
void LCD_Clear_Window (uchar X0, uchar Y0, uchar X1,
uchar Y1, uint filling_color) reentrant
{
uint i, pixel;
uchar higher_byte, lower_byte;
pixel = (X1 - X0 + 1) * (Y1 - Y0 + 1);
higher_byte = (filling_color >>8) & 0xff;
lower_byte = filling_color & 0xff;
def_window(X0, Y0, X1, Y1);
for (i=0; i <pixel; i++)
{
Send_Lcd_Data (higher_byte);
Send_Lcd_Data (lower_byte);
}
}
/********************************************************************************
My defination color fill funtion
*********************************************************************************/
/*void LCD_colorfill (uchar X0, uchar Y0, uchar X1,
uchar Y1, uchar * ptr) reentrant
{
uint i, pixel;
uchar higher_byte, lower_byte;
pixel = (X1 - X0 + 1) * (Y1 - Y0 + 1);
higher_byte = (filling_color >>8) & 0xff;
lower_byte = filling_color & 0xff;
def_window(X0, Y0, X1, Y1);
for (i=0; i <pixel; i++)
{
Send_Lcd_Data (ptr[2*i]);
Send_Lcd_Data (ptr[2*i+1]);
}
}*/
/*************************************************************************************
Photo 128*160 fill function
**************************************************************************************/
void LCD_Photo(uchar X0, uchar Y0, uchar X1,
uchar Y1, uint * ptr) reentrant
{
uint i;
uchar j;
def_window(X0,Y0,X1,Y1);
pg_adr1 = *ptr;
for(j=0;j<80;j++)
{
pg_rd_161();
if((pg_adr1 + 1)%20)
for(i=0;i<264;i++)
{
Send_Lcd_Data (*(rd_mem+2*i));
Send_Lcd_Data (*(rd_mem+2*i+1));
}
else
for(i=0;i<104;i++)
{
Send_Lcd_Data (*(rd_mem+2*i));
Send_Lcd_Data (*(rd_mem+2*i+1));
}
pg_adr1++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -