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

📄 lcd.c

📁 手机S6B33BG_LCM___lcd driver
💻 C
📖 第 1 页 / 共 3 页
字号:

#ifdef LCD_DMAENABLE
      DRV_WriteReg(LCD_REFR,0x0000);
#endif /*LCD_DMAENABLE*/
}

/****************************************************************************
	FUNCTION NAME		: LCD_PWRON
  	PURPOSE			: This function is to power on/off LCD.
	INPUT PARAMETERS	: kal_bool
	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_PWRON_SSD1779(kal_bool on)
{
   if(on)
   {
      LCD_ExitSleep_SSD1779();
   }
   else
   {
      LCD_EnterSleep_SSD1779();
   }
}

/****************************************************************************
	FUNCTION NAME		: LCD_SetContrast
  	PURPOSE			: This function is to set LCD contrast.
	INPUT PARAMETERS	: kal_uint8
	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_SetContrast_SSD1779(kal_uint8 voltage)
{
   LCD_CtrlWrite_SSD1779(LCD_CONTRAST_CTRL_SSD1779);
   LCD_DataWrite_SSD1779(voltage);
   LCD_DataWrite_SSD1779(0x06);
}

/****************************************************************************
	FUNCTION NAME		: LCD_ON
  	PURPOSE			: This function is to turn on/off LCD panel.
	INPUT PARAMETERS	: kal_bool
	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_ON_SSD1779(kal_bool on)
{
  	if (on)
	   {
      LCD_CtrlWrite_SSD1779(LCD_DISPLAY_ON_SSD1779);
}
	   else
   {
      LCD_CtrlWrite_SSD1779(LCD_DISPLAY_OFF_SSD1779);
   }
	   }
void Blockwrite_main_lcd(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy,kal_uint16* osd)
{
#if 1
   kal_uint16 l_startx=startx, l_starty=starty, l_endx=endx, l_endy=endy;
   kal_uint32 addr;
   kal_uint16 temp;
   kal_uint32 frame_buff_ptr;

	#if ( (defined(MT6205B)) || (defined(MT6218)) )
		#ifndef LCD_DMAENABLE
			kal_uint16 x, y;
	   #else /*LCD_DMAENABLE*/
		#endif	/*LCD_DMAENABLE*/
	#endif	/* (defined(MT6205B)) || (defined(MT6218)) */

	ASSERT(lcd_assert_fail==KAL_FALSE);
	lcd_assert_fail = KAL_TRUE;

#ifdef LCD_PRINTF
LCD_PrintOut();
#endif

//pap1302_setbypass();

   LCD_Set_X_Addr_SSD1779(l_startx,l_endx);
   LCD_Set_Y_Addr_SSD1779(l_starty+4, l_endy+4);
   LCD_CtrlWrite_SSD1779(LCD_WRITE_DATA_SSD1779);
   addr = (kal_uint32)osd;// lilinjun move //+((starty*LCD_WIDTH+ startx)<<1);

	//addr |= 0x00800000;//longfei 

	#if ( (defined(MT6205B)) || (defined(MT6218)) )
		#ifdef LCD_DMAENABLE
			ASSERT(DRV_Reg(LCD_REFR)==0x00);
			#ifdef MT6218
				DRV_WriteReg(LCD_MSBSRC,(kal_uint16)(addr >> 16));
			#else /*!MT6218*/
	 			DRV_WriteReg(LCD_MSBSRC,(kal_uint16)((addr >> 16)|0x0080));
			#endif   /*!MT6218*/
			DRV_WriteReg(LCD_LSBSRC,(kal_uint16)addr);

			DRV_WriteReg(LCD_REFR,0x0000);
			DRV_WriteReg(LCD_MSBDST,(kal_uint16)(LCD_DATAAddr >> 16));
			DRV_WriteReg(LCD_LSBDST,(kal_uint16)(LCD_DATAAddr));

			DRV_WriteReg(LCD_CADDRSET,(kal_uint16)((endx - startx + 1)));//longfei
			DRV_WriteReg(LCD_PADDRSET,(kal_uint16)(endy - starty + 1));
			DRV_WriteReg(LCD_CHOP,(kal_uint16) ((LCD_WIDTH - (endx - startx + 1))) );//longfei

			/*8 bit bus*/
		//	DRV_WriteReg(LCD_PCON,(0x0000));
      DRV_WriteReg(LCD_PCON,(LCD_PCON_ACC|0x0001));//longfei

			DRV_WriteReg(LCD_START,LCD_START_BIT);
			while(DRV_Reg(LCD_GSTA)&LCD_GSTA_PRUN);
				DRV_WriteReg(LCD_START,LCD_STOP_BIT);

		//		DRV_WriteReg(LCD_PCON,(0x0000));
       DRV_WriteReg(LCD_PCON,(0x0001));//longfei

		#else /*!LCD_DMAENABLE*/

                 for(y=l_starty;y<=l_endy;y++) 
                 for(x=l_startx;x<=l_endx;x++)
					{
                        frame_buff_ptr = addr + (y*LCD_WIDTH+x)*2;      //lilinjun modify  for fresh bug
                        temp=(*((kal_uint16*)frame_buff_ptr));
                        _LCD_RAMWrite_SSD1779((temp));
					}
		#endif	/*LCD_DMAENABLE*/
	#endif	/*(defined(MT6205B)) || (defined(MT6218))*/

	lcd_assert_fail = KAL_FALSE; 
	

#endif
    
             }
/****************************************************************************
	FUNCTION NAME		: LCD_BlockWrite
  	PURPOSE			: This function is to
	INPUT PARAMETERS	: kal_uint16(startx, starty, endx, endy)
	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_BlockWrite_SSD1779(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
#if 1
   kal_uint16 l_startx=startx, l_starty=starty, l_endx=endx, l_endy=endy;
   kal_uint32 addr;
   kal_uint16 temp;
   kal_uint32 frame_buff_ptr;

	#if ( (defined(MT6205B)) || (defined(MT6218)) )
		#ifndef LCD_DMAENABLE
			kal_uint16 x, y;
	   #else /*LCD_DMAENABLE*/
		#endif	/*LCD_DMAENABLE*/
	#endif	/* (defined(MT6205B)) || (defined(MT6218)) */

	ASSERT(lcd_assert_fail==KAL_FALSE);
	lcd_assert_fail = KAL_TRUE;

#ifdef LCD_PRINTF
LCD_PrintOut();
#endif

//pap1302_setbypass();

   LCD_Set_X_Addr_SSD1779(l_startx,l_endx);
   LCD_Set_Y_Addr_SSD1779(l_starty+4, l_endy+4);
   LCD_CtrlWrite_SSD1779(LCD_WRITE_DATA_SSD1779);
   addr = get_lcd_frame_buffer_address();// lilinjun move //+((starty*LCD_WIDTH+ startx)<<1);

	//addr |= 0x00800000;//longfei 

	#if ( (defined(MT6205B)) || (defined(MT6218)) )
		#ifdef LCD_DMAENABLE
			ASSERT(DRV_Reg(LCD_REFR)==0x00);
			#ifdef MT6218
				DRV_WriteReg(LCD_MSBSRC,(kal_uint16)(addr >> 16));
			#else /*!MT6218*/
	 			DRV_WriteReg(LCD_MSBSRC,(kal_uint16)((addr >> 16)|0x0080));
			#endif   /*!MT6218*/
			DRV_WriteReg(LCD_LSBSRC,(kal_uint16)addr);

			DRV_WriteReg(LCD_REFR,0x0000);
			DRV_WriteReg(LCD_MSBDST,(kal_uint16)(LCD_DATAAddr >> 16));
			DRV_WriteReg(LCD_LSBDST,(kal_uint16)(LCD_DATAAddr));

			DRV_WriteReg(LCD_CADDRSET,(kal_uint16)((endx - startx + 1)));//longfei
			DRV_WriteReg(LCD_PADDRSET,(kal_uint16)(endy - starty + 1));
			DRV_WriteReg(LCD_CHOP,(kal_uint16) ((LCD_WIDTH - (endx - startx + 1))) );//longfei

			/*8 bit bus*/
		//	DRV_WriteReg(LCD_PCON,(0x0000));
      DRV_WriteReg(LCD_PCON,(LCD_PCON_ACC|0x0001));//longfei

			DRV_WriteReg(LCD_START,LCD_START_BIT);
			while(DRV_Reg(LCD_GSTA)&LCD_GSTA_PRUN);
				DRV_WriteReg(LCD_START,LCD_STOP_BIT);

		//		DRV_WriteReg(LCD_PCON,(0x0000));
       DRV_WriteReg(LCD_PCON,(0x0001));//longfei

		#else /*!LCD_DMAENABLE*/

                 for(y=l_starty;y<=l_endy;y++) 
                 for(x=l_startx;x<=l_endx;x++)
					{
                        frame_buff_ptr = addr + (y*LCD_WIDTH+x)*2;      //lilinjun modify  for fresh bug
                        temp=(*((kal_uint16*)frame_buff_ptr));
                       _LCD_RAMWrite_SSD1779((temp));
			  // LCD_RAMWrite_SSD1779((temp));
					}
		#endif	/*LCD_DMAENABLE*/
	#endif	/*(defined(MT6205B)) || (defined(MT6218))*/

	lcd_assert_fail = KAL_FALSE; 
	

#endif
    
             } 
/*Engineering mode*/
/****************************************************************************
	FUNCTION NAME		: LCD_GetParm
  	PURPOSE			: This function is to obtain the parameter numbers
  				  for engineering mode APIs.
	INPUT PARAMETERS	: lcd_func_type
	OUTPUT PARAMETERS	: kal_uint8
*****************************************************************************/
kal_uint8 LCD_GetParm_SSD1779(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;
   }
}

/****************************************************************************
	FUNCTION NAME		: LCD_SetBias
  	PURPOSE			: This function is to setup LCD bias.
	INPUT PARAMETERS	: kal_uint8
	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_SetBias_SSD1779(kal_uint8 *bias)
{
   LCD_CtrlWrite_SSD1779(LCD_BIAS_CTRL_SSD1779);
    LCD_DataWrite_SSD1779(*bias);
}

/****************************************************************************
	FUNCTION NAME		: LCD_Contrast
  	PURPOSE			: This function is setup LCD contrast. Basically,
				  it is the same as BrightLevel function.
	INPUT PARAMETERS	: kal_uint8
	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_Contrast_SSD1779(kal_uint8 *contrast)
{
   LCD_CtrlWrite_SSD1779(LCD_CONTRAST_CTRL_SSD1779);
   LCD_DataWrite_SSD1779(*contrast);
   LCD_DataWrite_SSD1779(0x06);
}

/****************************************************************************
	FUNCTION NAME		: LCD_LineRate
  	PURPOSE			: This function is to setup LCD frame refresh
  				  rate.
	INPUT PARAMETERS	: kal_uint8
	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_LineRate_SSD1779(kal_uint8 *linerate)
{
   	
 	LCD_CtrlWrite_SSD1779(LCD_NLINE_INVERSION_CTRL_SSD1779);
 	LCD_DataWrite_SSD1779((*linerate)&0x0F);
 	LCD_DataWrite_SSD1779(0x07)
        // always reset n-line counter

    }

/****************************************************************************
	FUNCTION NAME		: LCD_Temp_Compensate
  	PURPOSE			: This function is to setup LCD temperature compensation.
	INPUT PARAMETERS	: kal_uint8
	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_Temp_Compensate_SSD1779(kal_uint8 *compensate)
    {
   LCD_CtrlWrite_SSD1779(LCD_TEMP_COMPENSATION_CTRL_SSD1779);
   LCD_DataWrite_SSD1779(*compensate&0x03);
}

#ifdef DUAL_LCD
/* Ultra Chip UC1602 *******************************************************/
/* 96x64 (Mono), Serial i/o, COG Type                                      */
/***************************************************************************/
/****************************************************************************
	FUNCTION NAME		: LCD_RWMode

  	PURPOSE			: This function is used to enter modify-read mode.
  				 
	INPUT PARAMETERS	: kal_uint8. KAL_TRUE, enter modify-read mode
					     KAL_FALSE, release modify-read mode
	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_RWMode_UC1602(kal_uint8 ON)
{
	if (ON == KAL_TRUE)
	{
		LCD_CtrlWrite_UC1602(LCD_RModifyW_UC1602);
   }
	else
	{
		LCD_CtrlWrite_UC1602(LCD_RModifyW_END_UC1602);
   }
}

/****************************************************************************
	FUNCTION NAME		: LCD_Reset

  	PURPOSE			: This function is to reset LCD module to initial state.

	INPUT PARAMETERS	: void

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_Reset_UC1602(void)
{
	LCD_CtrlWrite_UC1602(LCD_RESET_UC1602);
}

/****************************************************************************
	FUNCTION NAME		: LCD_DRV_PWRON

  	PURPOSE			: This function is to open LCD power.

	INPUT PARAMETERS	: void

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_DRV_PWRON_UC1602(void)		//Validate
{
	kal_uint8 pwrdata;

	pwrdata = (LCD_PWRData_UC1602 | 0x04);	//open VC
	LCD_CtrlWrite_UC1602(pwrdata);
	LCD_Delay(10);

	pwrdata = (LCD_PWRData_UC1602 | 0x06);	//open VR,and VC
	LCD_CtrlWrite_UC1602(pwrdata);
	LCD_Delay(10);

	pwrdata = (LCD_PWRData_UC1602 | 0x07);	//open VF,VR,and VC
	LCD_CtrlWrite_UC1602(pwrdata);
}

/****************************************************************************
	FUNCTION NAME		: LCD_DRV_PWROFF

  	PURPOSE			: This function is to close LCD power.

	INPUT PARAMETERS	: void

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_DRV_PWROFF_UC1602(void)		//Validate
{
	kal_uint8 pwrdata;
	LCD_CtrlWrite_UC1602(LCD_DISPLAY_OFF_UC1602);

	pwrdata = (LCD_PWRData_UC1602 | 0x05);	//close VR
	LCD_CtrlWrite_UC1602(pwrdata);
	LCD_Delay(10);

	pwrdata = (LCD_PWRData_UC1602 | 0x04);	//close VR,and VF
	LCD_CtrlWrite_UC1602(pwrdata);
	LCD_Delay(10);

	pwrdata = (LCD_PWRData_UC1602);	//close VF,VR,and VC
	LCD_CtrlWrite_UC1602(pwrdata);

}

/****************************************************************************
	FUNCTION NAME		: LCD_SetRatio

  	PURPOSE			: This function is to select internal resistance
  				  ratio of the regulator resistor.

	INPUT PARAMETERS	: kal_uint8 ratio 0-7

	OUTPUT PARAMETERS	: void
	
*****************************************************************************/

void LCD_SetRatio_UC1602(kal_uint8 ratio)
{
	LCD_CtrlWrite_UC1602(LCD_RARBData_UC1602|ratio);
}

/****************************************************************************
	FUNCTION NAME		: LCD_iniDisplayLine

  	PURPOSE			: This function is to specify DDRAM line for COM1.
  				 
	INPUT PARAMETERS	: kal_uint8 linenum 0-63

	OUTPUT PARAMETERS	: void
	
*****************************************************************************/

void LCD_iniDisplayLine_UC1602(kal_uint8 linenum)
{
	LCD_CtrlWrite_UC1602(LCD_SLineData_UC1602|linenum);
}

/****************************************************************************
	FUNCTION NAME		: LCD_GotoY

  	PURPOSE			: Setup the Cursor to Y Pages.
  				 
	INPUT PARAMETERS	: kal_uint8 y: page index

	OUTPUT PARAMETERS	: void
	
*****************************************************************************/

void LCD_GotoY_UC1602(kal_uint8 y)			//Validate
{
	kal_uint8 page;
	page = (LCD_PageData_UC1602 | y);
	LCD_CtrlWrite_UC1602(page);
}

/****************************************************************************
	FUNCTION NAME		: LCD_GotoX

  	PURPOSE			: Setup the Cursor to X Pages.
  				 
	INPUT PARAMETERS	: kal_uint8 x: position index

	OUTPUT PARAMETERS	: void
	
*****************************************************************************/

void LCD_GotoX_UC1602(kal_uint8 x)			//Validate
{
	kal_uint8 hi, lo;
	kal_uint8 column;

	lo = x & 0x0f; /* low  4 bits: 0001111 */
	hi = x & 0xf0; /* high 4 bits: 1111000 */
  	hi >>=4;

	/* write high */
	column = LCD_ColHiData_UC1602;
	column |= hi;
 	LCD_CtrlWrite_UC1602(column);

	/* write low first */
	column = LCD_ColLoData_UC1602;
	column |= lo;
	LCD_CtrlWrite_UC1602(column);

	//LCD_Delay();
}

/****************************************************************************
	FUNCTION NAME		: LCD_GotoXY

  	PURPOSE			: Setup the Cursor to X,Y Position.
  				 
	INPUT PARAMETERS	: (kal_uint8, kal_uint8) x: position index, y: page index

	OUTPUT PARAMETERS	: void
	
*****************************************************************************/

void LCD_GotoXY_UC1602(kal_uint8 x, kal_uint8 y)		//Validate
{
	LCD_GotoX_UC1602(x);
	LCD_GotoY_UC1602(y);
}

/****************************************************************************
	FUNCTION NAME		: LCD_INVERSE

  	PURPOSE			: This function is to set inverse display.
  				 
	INPUT PARAMETERS	: void

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_INVERSE_UC1602(void)
{
	LCD_CtrlWrite_UC1602(LCD_REVDIS_UC1602);
}

/****************************************************************************
	FUNCTION NAME		: LCD_NORMAL

  	PURPOSE			: This function is to set normal display
  				 
	INPUT PARAMETERS	: void

	OUTPUT PARAMETERS	: void
	
*****************************************************************************/

void LCD_NORMAL_UC1602(void)
{
	LCD_CtrlWrite_UC1602(LCD_NORMDIS_UC1602);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -