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

📄 lcd_driver.c

📁 CSTN 显示程序,网上找的.参考用.希望有用
💻 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 + -