📄 lcddev_ra8806.c
字号:
** 作 者 : 严 俊 生
** 日 期 : 2009-01-26
*******************************************************************************************************/
void LCD_GotoXY(unsigned char X1,unsigned char Y1)
{
LCD_CmdWrite(CURX);
LCD_DataWrite((X1 & 0x3F)); // 设定水平坐标地址
LCD_Delay(1);
LCD_CmdWrite(CURY);
LCD_DataWrite((Y1 & 0xFF)); // 设定垂直坐标地址
LCD_Delay(1);
}
/*******************************************************************************************************
** 名 称: void LCD_Initial(void)
** 功 能:初始化LCD,定义所有缓存器的初始值
** 入口参数:无
** 出口参数:无
**----------------------------------------------------------------------------------------------------
** 作 者 : 严 俊 生
** 日 期 : 2009-01-26
*******************************************************************************************************/
#define XCK_FREQUENCY 0x08
#define IDLE_TIME 87
void LCD_Initial(void)
{
LCD_CmdWrite(WLCR); //[00H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(MISC); //[01H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(ADSR); //[03H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(INTR); //[0FH] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(WCCR); //[10H] , Default --> 0x00
LCD_DataWrite(0x06);
LCD_CmdWrite(CHWI); //[11H] , Default --> 0x00
LCD_DataWrite(0xF5);
LCD_CmdWrite(MAMR); //[12H] , Default --> 0x11
LCD_DataWrite(0x12);
LCD_CmdWrite(AWRR); //[20H] , Default --> 0x27
LCD_DataWrite(0x27);
LCD_CmdWrite(DWWR); //[21H] , Default --> 0x27
LCD_DataWrite(0x27);
LCD_CmdWrite(AWBR); //[30H] , Default --> 0xEF
LCD_DataWrite(0xef);
LCD_CmdWrite(DWHR); //[31H] , Default --> 0xEF
LCD_DataWrite(0xef);
LCD_CmdWrite(AWLR); //[40H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(AWTR); //[50H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(CURX); //[60H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(BGSG); //[61H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(EDSG); //[62H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(CURY); //[70H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(BGCM); //[71H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(EDCM); //[72H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(BTMR); //[80H] , Default --> 0x00
LCD_DataWrite(0x20);
LCD_CmdWrite(ITCR); //[90H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(KSCR1); //[A0H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(KSCR2); //[A1H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(KSDR0); //[A2H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(KSDR1); //[A3H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(KSDR2); //[A3H] , Default --> 0x00
LCD_DataWrite(0x00);
// LCD_CmdWrite(MWCR); //[B0H] , Default --> NA
// LCD_CmdWrite(MRCR); //[B1H] , Default --> NA
LCD_CmdWrite(TPCR); //[C0H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(TPXR); //[C1H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(TPYR); //[C2H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(TPZR); //[C3H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(PCR); //[D0H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(PDCR); //[D1H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(PNTR); //[E0H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(FNCR); //[F0H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(FVHT); //[F1H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_GotoXY(0,0);
LCD_CmdWrite(MISC);
LCD_DataWrite(XCK_FREQUENCY);
LCD_CmdWrite(ITCR);
LCD_DataWrite(IDLE_TIME);
}
void Lcd_DispText(unsigned char X1,
unsigned char Y1,
unsigned char *pTextStr,
unsigned char Textlen)
{
INT8U i;
Access_Page1();
Only_Show_Page1();
LCD_Text();
LCD_GotoXY( X1, Y1);
LCD_CmdWrite(0xB0);
for(i=0; i<Textlen; i++)
LCD_DataWrite(pTextStr[i]);
}
void Lcd_Picture(unsigned char X1,
unsigned char Y1,
unsigned char *pDispStr,
unsigned int DispLenX,
unsigned int DispLenY)
{ unsigned int i,j;
if(X1 > 39) return;
if(Y1 > 239) return;
//LCD_Graphic();
//LCD_CmdWrite(WLCR); //[00H] , Default --> 0x00
//LCD_DataWrite(0x24);
LCD_GotoXY(0,0);
for(j=0; j<DispLenY; j++)
{
LCD_GotoXY(X1,Y1 + j);
LCD_StringWrite(&pDispStr[j*(DispLenX/8) + i],DispLenX/8,1);
}
}
void Lcd_RevsePicture(unsigned char X1,
unsigned char Y1,
unsigned char *pDispStr,
unsigned int DispLenX,
unsigned int DispLenY)
{ unsigned char i,j;
if(X1 > 39) return;
if(Y1 > 239) return;
//LCD_CmdWrite(WLCR); //[00H] , Default --> 0x00
//LCD_DataWrite(0x24);
LCD_GotoXY(0,0);
for(j=0; j<DispLenY; j++)
{
LCD_GotoXY(X1,Y1 + j);
LCD_StringWrite(&pDispStr[j*(DispLenX/8) + i],DispLenX/8,0);
}
}
/******************************************************************************************************
**
** 16x32或者是32x32操作函数驱动
**
*******************************************************************************************************/
void Lcd_Hz32x32(INT16U UniCode,INT8U X0,INT8U Y0, INT8U DispMode)
{
INT16U CodeID;
INT8U j;
if(X0 > 39) return;
if(Y0 > 239) return;
//==================================================== 在字库里搜索汉字
for(CodeID=0; CodeID < hzNum; CodeID++)
{
//----------------------------------------------- 找到 指定汉字的 Index 后, 跳出循环
if ( (hzIndex[2*CodeID] == UniCode/256) && (hzIndex[2*CodeID+1] == UniCode%256) )
break;
else if(CodeID == (hzNum-1)) //未检索到的汉字,显示个"##"提示吧
{
//GUI_DispCharAt('#',x0,y0);
//GUI_DispCharAt('#',x0+Char_XSIZE,y0);
return;
}
}
//==================================================== 根据搜索到汉字代码显示汉字
for(j=0; j<32; j++)
{
LCD_GotoXY(X0, Y0 + j);
LCD_StringWrite( &hzdot[CodeID*4*32+j*4], 4, DispMode);
}
}
///*
void Lcd_Char16x32(INT8U UniCode,INT8U X0,INT8U Y0, INT8U DispMode)
{
INT16U CodeID;
INT8U j;
if(X0 > 39) return;
if(Y0 > 239) return;
//==================================================== 在字库里搜索汉字
for(CodeID=0; CodeID < charNum; CodeID++)
{
//----------------------------------------------- 找到指定汉字的 Index 后, 跳出循环
if (charIndex[CodeID] == UniCode) break;
else if(CodeID == (charNum-1)) //未检索到的汉字,显示个"##"提示吧
{
//GUI_DispCharAt('#',x0,y0);
//GUI_DispCharAt('#',x0+Char_XSIZE,y0);
return;
}
}
//==================================================== 根据搜索到字符代码显示字符
for(j=0; j<32; j++)
{
LCD_GotoXY(X0, Y0 + j);
LCD_StringWrite( &chardot[CodeID*2*32+j*2], 4, DispMode);
}
}
/*******************************************************************************************************
** 名 称: void Lcd_Graphic_Str32x32(INT8U *HzCode, INT8U X0, INT8U Y0, INT8U DispMode)
** 功 能:显示48x48点阵字符串数据
** 入口参数:HzCode 字符串首地址
** X0 显示字符串X轴坐标
** Y0 显示字符串Y轴坐标
** DispMode 显示模式设置
** 出口参数:无
**----------------------------------------------------------------------------------------------------
** 作 者 : 严 俊 生
** 日 期 : 2009-01-26
*******************************************************************************************************/
void Lcd_Graphic_Str32x32(INT8U *HzCode, INT8U X0, INT8U Y0, INT8U DispMode)
{
INT8U i = 0;
while(HzCode[i] != '\0')
{
if(HzCode[i] > 0x80)
{
Lcd_Hz32x32(HzCode[i]*256+HzCode[i+1],X0 + i*2, Y0, DispMode);
i++;
i++;
}
else
{
Lcd_Char16x32(HzCode[i],X0 + i*2, Y0, DispMode);
i++;
}
}
}
/******************************************************************************************************
**
** 24x48或者是48x48操作函数驱动
**
*******************************************************************************************************/
void Lcd_Hz48x48(INT16U UniCode,INT8U X0,INT8U Y0, INT8U DispMode)
{
INT16U CodeID;
INT8U j;
if(X0 > 39) return;
if(Y0 > 239) return;
//==================================================== 在字库里搜索汉字
for(CodeID=0; CodeID < hzNum48; CodeID++)
{
//----------------------------------------------- 找到 指定汉字的 Index 后, 跳出循环
if ( (hzIndex48[2*CodeID] == UniCode/256) && (hzIndex48[2*CodeID+1] == UniCode%256) )
break;
else if(CodeID == (hzNum48-1)) //未检索到的汉字,显示个"##"提示吧
{
//GUI_DispCharAt('#',x0,y0);
//GUI_DispCharAt('#',x0+Char_XSIZE,y0);
return;
}
}
//==================================================== 根据搜索到汉字代码显示汉字
for(j=0; j<48; j++)
{
LCD_GotoXY(X0, Y0 + j);
LCD_StringWrite( &hzdot48[CodeID*6*48+j*6], 6, DispMode);
}
}
///*
void Lcd_Char24x48(INT8U UniCode,INT8U X0,INT8U Y0, INT8U DispMode)
{
INT16U CodeID;
INT8U j;
if(X0 > 39) return;
if(Y0 > 239) return;
//==================================================== 在字库里搜索汉字
for(CodeID=0; CodeID < charNum48; CodeID++)
{
//----------------------------------------------- 找到 指定汉字的 Index 后, 跳出循环
if (charIndex48[CodeID] == UniCode) break;
else if(CodeID == (charNum48-1)) //未检索到的汉字,显示个"##"提示吧
{
//GUI_DispCharAt('#',x0,y0);
//GUI_DispCharAt('#',x0+Char_XSIZE,y0);
return;
}
}
//==================================================== 根据搜索到字符代码显示字符
for(j=0; j<48; j++)
{
LCD_GotoXY(X0, Y0 + j);
LCD_StringWrite( &chardot48[CodeID*3*48+j*3], 6, DispMode);
}
}
/*******************************************************************************************************
** 名 称: void Lcd_Graphic_Str48x48(INT8U *HzCode, INT8U X0, INT8U Y0, INT8U DispMode)
** 功 能:显示48x48点阵字符串数据
** 入口参数:HzCode 字符串首地址
** X0 显示字符串X轴坐标
** Y0 显示字符串Y轴坐标
** DispMode 显示模式设置
** 出口参数:无
**----------------------------------------------------------------------------------------------------
** 作 者 : 严 俊 生
** 日 期 : 2009-01-26
*******************************************************************************************************/
void Lcd_Graphic_Str48x48(INT8U *HzCode, INT8U X0, INT8U Y0, INT8U DispMode)
{
INT8U i = 0;
while(HzCode[i] != '\0')
{
if(HzCode[i] > 0x80)
{
Lcd_Hz48x48(HzCode[i]*256+HzCode[i+1],X0 + i*3, Y0, DispMode);
i++;
i++;
}
else
{
Lcd_Char24x48(HzCode[i],X0 + i*3, Y0, DispMode);
i++;
}
}
}
// */
/*------------------------------- End -----------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -