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

📄 lcd.c

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

/****************************************************************************
	FUNCTION NAME		: LCD_EntireDis

  	PURPOSE			: This function is to set normal display or entire display
  				 
	INPUT PARAMETERS	: kal_bool. KAL_TRUE, entire display
					    KAL_FALSE, normal display
	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_EntireDis_UC1602(kal_bool ON)		//Validate
{
	if (ON == KAL_TRUE)
	{
		LCD_CtrlWrite_UC1602(LCD_ENTIREDIS_ON_UC1602);
	}
	else
	{
		LCD_CtrlWrite_UC1602(LCD_ENTIREDIS_OFF_UC1602);
	}
}

/****************************************************************************
	FUNCTION NAME		: LCD_blockClear

  	PURPOSE			: This function is to
  				 
	INPUT PARAMETERS	: kal_uint8(x, y, width, height, data)
	
	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_blockClear_UC1602(kal_uint8 x, kal_uint8 y, kal_uint8 width, kal_uint8 height,kal_uint8 data)
{
	kal_uint8  page; /* store total pages */
	kal_uint8  i, j; /* temp for loop counter flags */

	page = height/8; /* which page */
	LCD_iniDisplayLine_UC1602(0x00);

	for(i=0;i<page;i++)
	{
		LCD_GotoXY_UC1602(x, i);
		for(j = 0; j< width; j++)
		{
			LCD_DataWrite_UC1602(data);
      }
	}
}

/****************************************************************************
	FUNCTION NAME		: LCD_IndicatorON

  	PURPOSE			: This function is to set Static Indicator ON.
  				 
	INPUT PARAMETERS	: void
	
	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_IndicatorON_UC1602(void)		//Fail
{
	LCD_CtrlWrite_UC1602(LCD_CURSOR_SETON_UC1602);
	LCD_CtrlWrite_UC1602(LCD_CURSOR_ALLON_UC1602);
}

/****************************************************************************
	FUNCTION NAME		: LCD_IndicatorOFF

  	PURPOSE			: This function is to set Static Indicator OFF.
  				 
	INPUT PARAMETERS	: void
	
	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_IndicatorOFF_UC1602(void)	//Fail
{
	LCD_CtrlWrite_UC1602(LCD_CURSOR_SETOFF_UC1602);
}

/****************************************************************************
	FUNCTION NAME		: LCD_Suspend

  	PURPOSE			: This function is to Suspend LCD or Stop suspending LCD.
  				 
	INPUT PARAMETERS	: kal_uint8. KAL_TRUE, enter suspend mode
					     KAL_FALSE, leave suspend mode
	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_Suspend_UC1602(kal_uint8 ON)		//Validate
{
	if (ON == KAL_TRUE)
	{
		LCD_IndicatorOFF_UC1602();
		LCD_CtrlWrite_UC1602(LCD_DISPLAY_OFF_UC1602);
		LCD_EntireDis_UC1602(KAL_TRUE);
	}
	else
	{
		LCD_IndicatorON_UC1602();
		LCD_CtrlWrite_UC1602(LCD_DISPLAY_ON_UC1602);
		LCD_EntireDis_UC1602(KAL_FALSE);
		LCD_IndicatorOFF_UC1602();
	}
}

/******************************/
/* Sub_LCD Interface          */
/******************************/

/****************************************************************************
	FUNCTION NAME		: LCD_Init

  	PURPOSE			: This function is to initialize Sub_LCD.
  				 
	INPUT PARAMETERS	: (kal_uint32, void)
		
	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_Init_UC1602(kal_uint32 bkground, void **buf_addr)		//Validate
{
	kal_uint8  i;
	kal_uint8 background = (kal_uint8)bkground;
	if( buf_addr )
	
	LCD_CtrlWrite_UC1602(LCD_RESET_UC1602);		// 0xE2
	
	for(i=0;i<100;i++);
	
	LCD_CtrlWrite_UC1602(LCD_BIAS_SELECT_UC1602|0x02);	// 0xA2 | 0x00 bias=0, 0x01 bias=1
	
	LCD_CtrlWrite_UC1602(LCD_COM_REVERSE_UC1602);		// 0xC8 COM63 △ COM0
	
	LCD_CtrlWrite_UC1602(LCD_ADC_NORMAL_UC1602);		// 0xA0 SEG0 △ SEG131
	
	LCD_iniDisplayLine_UC1602(0x00);
	//LCD_CtrlWrite_UC1602(LCD_SLineData_UC1602);		// 0x40
	
	LCD_CtrlWrite_UC1602(0x2F);				// (Vc, Vr, Vf)=(1,1,1)
	
	for(i=0;i<100;i++);
	
	LCD_CtrlWrite_UC1602(0x24);				// regulator resistor = 100
	
	LCD_CtrlWrite_UC1602(LCD_BRIGHT_SET_UC1602);		// 0x81
	LCD_CtrlWrite_UC1602(0x2F);
	
	LCD_CtrlWrite_UC1602(LCD_ENTIREDIS_OFF_UC1602);	// 0xA4
	
	LCD_CtrlWrite_UC1602(LCD_NORMDIS_UC1602);		// 0xA6
	
	LCD_CtrlWrite_UC1602(LCD_DISPLAY_ON_UC1602);		// 0xAF
	
	//LCD_CtrlWrite_UC1602(LCD_ENTIREDIS_ON_UC1602);
	
	#ifndef DUAL_LCD
/* under construction !*/
	#else /*DUAL_LCD*/
	   LCD_blockClear_UC1602(0+3, 0, (SUBLCD_WIDTH)+3, (SUBLCD_HEIGHT),background);
	#endif   /*DUAL_LCD*/
	
	
}

/****************************************************************************
	FUNCTION NAME		: LCD_PWRON

  	PURPOSE			: This function is to turn on/off Sub_LCD power.

	INPUT PARAMETERS	: kal_bool

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

void LCD_PWRON_UC1602(kal_bool on)
{
	if (on == KAL_TRUE)
	{
		LCD_DRV_PWRON_UC1602();
	}
	else
	{
		LCD_DRV_PWROFF_UC1602();
	}
}

/****************************************************************************
	FUNCTION NAME		: LCD_SetVoltLevel (LCD_SetContrast)

  	PURPOSE			: This function is to set LCD brightness(contrast).

	INPUT PARAMETERS	: kal_uint8

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

void LCD_SetVoltLevel_UC1602(kal_uint8 voltage)
{
	if (voltage > 63)
	voltage = 63;
	LCD_CtrlWrite_UC1602(LCD_BRIGHT_SET_UC1602);
	LCD_CtrlWrite_UC1602((voltage&0x3F) | 0x40);
}

/****************************************************************************
	FUNCTION NAME		: LCD_ON

  	PURPOSE			: This function is to turn on/off Sub_LCD panel.

	INPUT PARAMETERS	: void

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

void LCD_ON_UC1602(kal_bool on)
{
	if(on == KAL_TRUE)
	{
		LCD_CtrlWrite_UC1602(LCD_DISPLAY_ON_UC1602);
	}
	else
	{
		LCD_CtrlWrite_UC1602(LCD_DISPLAY_OFF_UC1602);;
	}
}

/****************************************************************************
	FUNCTION NAME		: LCD_BlockWrite

  	PURPOSE			: This function is to write block on Sub_LCD.
  				 
	INPUT PARAMETERS	: kal_uint16(startx, starty, endx, endy)
	
	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_BlockWrite_UC1602(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
   kal_uint16 x, line_pos;
   kal_uint16 l_startx=startx, l_startline=(starty), l_endx=endx, l_endline=(endy);
   kal_uint8 temp,bitmask;
   kal_uint32 addr, frame_buff_ptr;
   
   LCD_iniDisplayLine_UC1602(0x00);

   addr=get_lcd_frame_buffer_address();
   ASSERT((endy>=starty)&&(endx>=startx));
   
  	for(x=l_startx ;x<=l_endx; x++)
  	{
		for(line_pos = (starty/8)*8; line_pos<=endy ; line_pos+=8)
		{
			frame_buff_ptr = addr+(line_pos/8)*SUBLCD_WIDTH+x;
            		temp = (*((kal_uint8 *)frame_buff_ptr));

			LCD_GotoXY_UC1602(x+3, line_pos/8);
			LCD_DataWrite_UC1602(temp);
     	         }
	}
}

/****************************************************************************
	FUNCTION NAME		: LCD_Size

  	PURPOSE			: This function is used to retrieve the size of LCD
  				 
	INPUT PARAMETERS	: (kal_uint16, kal_uint16) out_LCD_width : Pointer to LCD width
							   out_LCD_height: Pointer to LCD height
	OUTPUT PARAMETERS	: void
	
*****************************************************************************/

void LCD_Size_UC1602(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height)
{
	*out_LCD_width = SUBLCD_WIDTH;
	*out_LCD_height = SUBLCD_HEIGHT;
}

/****************************************************************************
	FUNCTION NAME		: LCD_EnterSleep_UC1602

  	PURPOSE			: This function is to let Sub_LCD enter sleep-mode.

	INPUT PARAMETERS	: void

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

void LCD_EnterSleep_UC1602(void)
{
}

/****************************************************************************
	FUNCTION NAME		: LCD_ExitSleep_UC1602

  	PURPOSE			: This function is to let Sub_LCD exit sleep-mode.

	INPUT PARAMETERS	: void

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

void LCD_ExitSleep_UC1602(void)
{
}

/* 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_UC1602(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_UC1602(kal_uint8 *bias)
{
	LCD_CtrlWrite_UC1602(LCD_BIAS_SELECT_UC1602| (*bias&0x03));
}

/****************************************************************************
	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_UC1602(kal_uint8 *contrast)
{
	if (*contrast>63)
	*contrast=63;
	LCD_CtrlWrite_UC1602(LCD_BRIGHT_SET_UC1602);
   	LCD_CtrlWrite_UC1602(*contrast | 0x40);
}

/****************************************************************************
	FUNCTION NAME		: LCD_LineRate

  	PURPOSE			: This function is to setup LCD frame refresh
  				  rate.

	INPUT PARAMETERS	: kal_uint8

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

void LCD_LineRate_UC1602(kal_uint8 *linerate)
{
}

/****************************************************************************
	FUNCTION NAME		: LCD_Temp_Compensate

  	PURPOSE			: This function is to setup LCD temperature.

	INPUT PARAMETERS	: kal_uint8

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

void LCD_Temp_Compensate_UC1602(kal_uint8 *compensate)
{
    }


#endif

/*===================The above is LCD dependent==========*/

#if ( (defined(MT6205B)) || (defined(MT6218)) )
void LCD_memcpy(void *dst /*s1*/, const void *src /*s2*/, kal_uint16 size)
{
   #ifdef LCD_DMAENABLE
      kal_uint32 srcaddr=(kal_uint32)src;
      kal_uint32 dstaddr=(kal_uint32)dst;
      kal_uint16 size_MSB = (kal_uint16)(size >> 9);
      kal_uint16 size_LSB = (kal_uint16)(size & 0x01ff);

      ASSERT(lcd_assert_fail==KAL_FALSE);
      lcd_assert_fail = KAL_TRUE;
      ASSERT(DRV_Reg(LCD_REFR)==0x00);

      if(size_MSB)
      {
         DRV_WriteReg(LCD_MSBSRC,(kal_uint16)(srcaddr >> 16));
         DRV_WriteReg(LCD_LSBSRC,(kal_uint16)srcaddr);
         DRV_WriteReg(LCD_REFR,0x0000);
         DRV_WriteReg(LCD_MSBDST,(kal_uint16)(dstaddr >> 16));
         DRV_WriteReg(LCD_LSBDST,(kal_uint16)(dstaddr));
         DRV_WriteReg(LCD_CADDRSET,512);
         DRV_WriteReg(LCD_PADDRSET,size_MSB);
         DRV_WriteReg(LCD_CHOP,0);
         DRV_WriteReg(LCD_PCON,LCD_PCON_DINC);
         DRV_WriteReg(LCD_START,LCD_START_BIT);

         while(DRV_Reg(LCD_GSTA)&LCD_GSTA_PRUN);
         DRV_WriteReg(LCD_START,LCD_STOP_BIT);
      }
      if (size_LSB)
      {
         srcaddr = (srcaddr + size - size_LSB);
         dstaddr = (dstaddr + size - size_LSB);
         DRV_WriteReg(LCD_MSBSRC,(kal_uint16)(srcaddr >> 16));
         DRV_WriteReg(LCD_LSBSRC,(kal_uint16)srcaddr);
         DRV_WriteReg(LCD_REFR,0x0000);
         DRV_WriteReg(LCD_MSBDST,(kal_uint16)(dstaddr >> 16));
         DRV_WriteReg(LCD_LSBDST,(kal_uint16)(dstaddr));
         DRV_WriteReg(LCD_CADDRSET,size_LSB);
         DRV_WriteReg(LCD_PADDRSET,1);
         DRV_WriteReg(LCD_CHOP,0);
         DRV_WriteReg(LCD_PCON,LCD_PCON_DINC);
         DRV_WriteReg(LCD_START,LCD_START_BIT);

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

      lcd_assert_fail = KAL_FALSE;
   #else /*!LCD_DMAENABLE*/
      kal_mem_cpy(dst,src,size);
   #endif   /*LCD_DMAENABLE*/
}
#else /*!(MT6205B,MT6218)*/
void LCD_memcpy(void *dst /*s1*/, const void *src /*s2*/, kal_uint16 size)
{
	kal_mem_cpy(dst,src,size);
}
#endif   /*(MT6205B,MT6218)*/

LCD_Funcs LCD_func_SSD1779 = {
   LCD_Init_SSD1779,
   LCD_PWRON_SSD1779,
   LCD_SetContrast_SSD1779,
   LCD_ON_SSD1779,
   LCD_BlockWrite_SSD1779,
   LCD_Size_SSD1779,
   LCD_EnterSleep_SSD1779,
   LCD_ExitSleep_SSD1779,
   0,
   0,
   0,
   /*Engineering mode*/
   LCD_GetParm_SSD1779,
   LCD_SetBias_SSD1779,
   LCD_Contrast_SSD1779,
   LCD_LineRate_SSD1779,
   LCD_Temp_Compensate_SSD1779
};

#ifdef DUAL_LCD
   LCD_Funcs LCD_func_UC1602 = {
      LCD_Init_UC1602,
      LCD_PWRON_UC1602,
      LCD_SetVoltLevel_UC1602,
      LCD_ON_UC1602,
      LCD_BlockWrite_UC1602,
      LCD_Size_UC1602,
      LCD_EnterSleep_UC1602,
      LCD_ExitSleep_UC1602,
      0,
      0,
      0,
      /*Engineering mode*/
      LCD_GetParm_UC1602,
      LCD_SetBias_UC1602,
      LCD_Contrast_UC1602,
      LCD_LineRate_UC1602,
      LCD_Temp_Compensate_UC1602
};
#endif

void LCD_FunConfig(void)
{
      MainLCD = &LCD_func_SSD1779;
	#ifdef DUAL_LCD
		SubLCD = &LCD_func_UC1602;
	#endif
}

⌨️ 快捷键说明

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