📄 lcd.c
字号:
#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 + -