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

📄 lcddev_ra8806.c

📁 RA8806底层驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
** 作 者  : 严  俊  生
** 日 期  : 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 + -