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

📄 ra8806.c

📁 320x240驱动程序(网上搜集资料).rar
💻 C
📖 第 1 页 / 共 3 页
字号:
/*******************************************************************************
*
*	Filename :	RA8806.c
*
*	Author :	Tony Kan
*	Date :		2007/08/21
*	Company :	RAiO Technology	Inc.
*	Case :		320 x 240 Evaluation board
*	Device :	RA8806 + MXIC MX10E8050IQC at 18.432MHZ
*
*******************************************************************************/

#include "RA8806.h"

//------------------------------------------------------------------------------
//Subroutine Declare
//------------------------------------------------------------------------------
extern void LCD_CmdWrite(uchar);
extern uchar LCD_StatusRead(void);
extern void LCD_DataWrite(uchar);
extern uchar LCD_DataRead(void);

//Delay Function
extern void Delay2us(uchar);
extern void Delay100us(uchar);
extern void Delay1ms(uchar);
extern void Delay10ms(uchar);
extern void Delay100ms(uchar);
/******************************************************************************/
/*Sub Program Area		  													  */
/******************************************************************************/
//==============================================================================
//Subroutine :	LCD_Reset
//Function:		
//==============================================================================
void LCD_Reset(void)
{
	bRST = 0;
 	Delay100ms(1);
	bRST = 1;
	Delay100ms(1);		
}

//==============================================================================
//Subroutine:	LCD_CmdWrite
//Function:		
//==============================================================================
void LCD_CmdWrite(uchar cmd)
{
//	LCD_ChkBusy();
#ifdef Parallel_8080
	bCSZ = 0;
	bA0  = 1;
	bWRZ = 0;
	DATA_BUS = cmd;

	bWRZ = 1;
	bCSZ = 1;
	DATA_BUS = 0xff;				
#endif

#ifdef Parallel_8080_4bit
	bCSZ = 0;
	bA0  = 1;
	DATA_BUS = cmd >> 4;				
	bWRZ = 0;
	bWRZ = 1;
	bCSZ = 1;

	DATA_BUS = 0xff;
	bCSZ = 0;
	DATA_BUS = cmd & 0x0f;				
	bWRZ = 0;
	bWRZ = 1;		
	bCSZ = 1;
	DATA_BUS = 0xff;				
#endif

#ifdef Parallel_6800
	bCSZ = 0;
	bA0  = 1;						
	bWRZ = 0;			//R/W			
	DATA_BUS = cmd;					
	bRDZ = 1;			//EN			
	bRDZ = 0;
	bWRZ = 1;						
	bCSZ = 1;				
	DATA_BUS = 0xff;
#endif

#ifdef Parallel_6800_4bit
	bCSZ = 0;
	bA0  = 1;						
	bWRZ = 0;			//R/W			
	DATA_BUS = cmd >> 4;				
	bRDZ = 1;			//EN			
	bRDZ = 0;
	bWRZ = 1;						
	bCSZ = 1;				
	DATA_BUS = 0xff;

	bCSZ = 0;
	bA0  = 1;						
	bWRZ = 0;			//R/W			
	DATA_BUS = cmd & 0x0f;				
	bRDZ = 1;			//EN			
	bRDZ = 0;
	bWRZ = 1;						
	bCSZ = 1;				
	DATA_BUS = 0xff;
#endif

	bA0  = 0;
}

//==============================================================================
//Subroutine:	LCD_DataWrite
//Function:		
//==============================================================================
void LCD_DataWrite(uchar Data)
{
//	LCD_ChkBusy();
#ifdef Parallel_8080
	bCSZ = 0;
	bA0  = 0;
	bWRZ = 0;	
	DATA_BUS = Data;
	bWRZ = 1;	
	bCSZ = 1;						
	DATA_BUS = 0xff;  				
#endif

#ifdef Parallel_8080_4bit
	bCSZ = 0;
	bA0  = 0;
	DATA_BUS = Data >> 4;				
	bWRZ = 0;						
	bWRZ = 1;
	bCSZ = 1;

	DATA_BUS = 0xff;
	bCSZ = 0;
	DATA_BUS = Data & 0x0f;				
	bWRZ = 0;						
	bWRZ = 1;						
	bCSZ = 1;						
	DATA_BUS = 0xff;  				
#endif

#ifdef Parallel_6800
	bCSZ = 0;
	bA0  = 0;
	DATA_BUS = Data;
	bWRZ = 0;				
	bRDZ = 1;						
	bRDZ = 0;						
	bWRZ = 1;						
	bCSZ = 1;						
	DATA_BUS = 0xff;
#endif	

#ifdef Parallel_6800_4bit
	bCSZ = 0;
	bA0  = 0;
	DATA_BUS = Data >> 4;
	bWRZ = 0;				
	bRDZ = 1;						
	bRDZ = 0;						
	bWRZ = 1;						
	bCSZ = 1;						
	DATA_BUS = 0xff;

	bCSZ = 0;
	bA0  = 0;
	DATA_BUS = Data & 0x0f;
	bWRZ = 0;				
	bRDZ = 1;						
	bRDZ = 0;						
	bWRZ = 1;						
	bCSZ = 1;						
	DATA_BUS = 0xff;
#endif	

	bA0  = 1;
}

//==============================================================================
//Subroutine:	CmdRead
//Function:		
//==============================================================================

uchar LCD_StatusRead(void)
{
	uchar Data;

#ifdef	Parallel_8080
		bCSZ = 0;					
		bA0  = 1;					
		bWRZ = 1;	
		bRDZ = 0;					
		Data = DATA_BUS;
		bRDZ = 1;		
		bCSZ = 1;
		DATA_BUS = 0xff;
#endif

#ifdef Parallel_8080_4bit
       bWRZ = 1;
	   bCSZ = 0;
	   bA0  = 1;
	   bRDZ = 0;
  	   Data = (DATA_BUS << 4) | 0x0f;
	   bRDZ = 1;
	   bCSZ = 1;
	
	   DATA_BUS = 0xff;	
	   bCSZ = 0;
	   bRDZ = 0;
	   Data = DATA_BUS & Data;
	   bRDZ = 1;
	   bCSZ = 1;					
#endif

#ifdef	Parallel_6800
		bCSZ = 0;
		bA0  = 1;
		bRDZ = 1;
		Data = DATA_BUS;
		bRDZ = 0;
		bCSZ = 1;
		DATA_BUS = 0xff;
#endif

#ifdef	Parallel_6800_4bit
		bCSZ = 0;
		bA0  = 1;
		bRDZ = 1;
		Data = (DATA_BUS << 4) | 0x0f;
		bRDZ = 0;
		bCSZ = 1;
		DATA_BUS = 0xff;

		bCSZ = 0;
		bA0  = 1;
		bRDZ = 1;
		Data = DATA_BUS & Data;
		bRDZ = 0;
		bCSZ = 1;
		DATA_BUS = 0xff;
#endif
        bA0  = 0;

	return Data;
}

//==============================================================================
//Subroutine:	LCD_DataRead
//Function:		
//==============================================================================
uchar LCD_DataRead(void)
{
	uchar Data;

#ifdef Parallel_8080
	   bWRZ = 1;
	   bCSZ = 0;
	   bA0  = 0;
	   bRDZ = 0;
	   Data = DATA_BUS;
	   bRDZ = 1;
	   bCSZ = 1;			
#endif

#ifdef Parallel_8080_4bit
       bRDZ = 1;
       bWRZ = 1;
       bCSZ = 0;
       bA0  = 0;
       bRDZ = 0;
   	   Data = (DATA_BUS << 4) | 0x0f;
       bRDZ = 1;
	   bCSZ = 1;
	   	
	   DATA_BUS = 0xff;
	   bCSZ = 0;
       bRDZ = 0;
	   Data = DATA_BUS & Data;
	   bRDZ = 1;
       bCSZ = 1;
#endif

#ifdef Parallel_6800				
       bCSZ = 0;
	   bA0  = 0;
 	   bRDZ = 1;			 
	   Data = DATA_BUS;
	   bRDZ = 0;
	   bCSZ = 1;
#endif

#ifdef Parallel_6800_4bit				
       bCSZ = 0;
	   bA0  = 0;
 	   bRDZ = 1;			 
	   Data = (DATA_BUS << 4) | 0x0f;
	   bRDZ = 0;
	   bCSZ = 1;

	   bCSZ = 0;
	   bA0  = 0;
 	   bRDZ = 1;			 
	   Data = DATA_BUS & Data;
	   bRDZ = 0;
	   bCSZ = 1;
#endif
	   bA0  = 1;

	return Data;
}
//==============================================================================
//Subroutine:	LCD_Initial
//Function:		
//==============================================================================
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(0x00);

	LCD_CmdWrite(CHWI);		//[11H] , Default --> 0x00
	LCD_DataWrite(0x00);

	LCD_CmdWrite(MAMR);		//[12H] , Default --> 0x11 
	LCD_DataWrite(0x11);

	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(0x00);

	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);
}

//==============================================================================
//Subroutine:	LCD_SleepMode
//Function:		
//==============================================================================
void LCD_SleepMode(void)
{
	uchar temp;
	
	LCD_CmdWrite(WLCR);
	temp = LCD_DataRead();
	temp |= cSetb7;
	LCD_CmdWrite(WLCR);
	LCD_DataWrite(temp);
}

//==============================================================================
//Subroutine:	LCD_ChkBusy
//Function:		
//==============================================================================
void LCD_ChkBusy(void)
{
	uchar temp;
	
 	do
	{
	temp = LCD_StatusRead();
	}while((temp & 0x40) == 0x00);

    do
	{
	temp = LCD_StatusRead();
	}while((temp & 0x40) == 0x40);
}

//==============================================================================
//Subroutine:	LCD_On
//Function:
//==============================================================================
void LCD_ON(void)
{
	uchar temp;

	LCD_CmdWrite(WLCR);
	temp = LCD_DataRead();
	temp |= cSetb2;
	LCD_CmdWrite(WLCR);
	LCD_DataWrite(temp);
}

void LCD_OFF(void)
{
	uchar temp;
	
	LCD_CmdWrite(WLCR);
	temp = LCD_DataRead();
	temp &= cClrb2;
	LCD_CmdWrite(WLCR);
	LCD_DataWrite(temp);
}

//==============================================================================
//Subroutine:	LCD_GotoXY
//Function:		LCD Cursor X-Y
//==============================================================================
void LCD_GotoXY(uchar x, uchar y)
{
	LCD_CmdWrite(CURX);
	LCD_DataWrite((x & B0011_1111));
Delay2us(1);
	LCD_CmdWrite(CURY);
	LCD_DataWrite((y & B1111_1111));
Delay2us(1);
}
//==============================================================================
//Subroutine:	LCD_Graphic
//Function:
//==============================================================================
void LCD_Graphic(void)
{
	uchar temp;
	
	LCD_CmdWrite(WLCR);
	temp = LCD_DataRead();
	temp &= cClrb3;
	LCD_CmdWrite(WLCR);
	LCD_DataWrite(temp);
}

void LCD_Text(void)
{
	uchar temp;
	
	LCD_CmdWrite(WLCR);
	temp = LCD_DataRead();
	temp |= cSetb3;
	LCD_CmdWrite(WLCR);
	LCD_DataWrite(temp);
}

//==============================================================================
//Subroutine:	LCD_Cursor_Inc
//Function:
//==============================================================================
void LCD_Cursor_Inc(void)
{
	uchar temp;
	
	LCD_CmdWrite(WCCR);
	temp = LCD_DataRead();
	temp &= cClrb7;
	LCD_CmdWrite(WCCR);
	LCD_DataWrite(temp);	
}

void LCD_Cursor_No_Inc(void)
{
	uchar temp;
	
	LCD_CmdWrite(WCCR);
	temp = LCD_DataRead();
	temp |= cSetb7;
	LCD_CmdWrite(WCCR);
	LCD_DataWrite(temp);	
}

//==============================================================================
//Subroutine:	LCD_Cursor_Inc
//Function:
//==============================================================================
void LCD_GB_Sel(void)
{
	uchar temp;
	
	LCD_CmdWrite(WLCR);
	temp = LCD_DataRead();
	temp |= cSetb4;
	LCD_CmdWrite(WLCR);
	LCD_DataWrite(temp);	
}

//==============================================================================
//Subroutine:	LCD_Cursor_Inc
//Function:
//==============================================================================
void Reverse_Data(void)
{
	uchar temp;
	
	LCD_CmdWrite(WCCR);
	temp = LCD_DataRead();
	temp |= cSetb5;
	LCD_CmdWrite(WCCR);
	LCD_DataWrite(temp);
}

//==============================================================================
//Subroutine:	LCD_Cursor_Inc
//Function:
//==============================================================================
void NoReverse_Data(void)
{
	uchar temp;
	
	LCD_CmdWrite(WCCR);
	temp = LCD_DataRead();
	temp &= cClrb5;
	LCD_CmdWrite(WCCR);
	LCD_DataWrite(temp);
}
//==============================================================================
//Subroutine:	Cursor_Shift_Direct_HV
//Function:
//==============================================================================
void Cursor_Shift_Direct_HV(void)
{
	uchar temp;
	
	LCD_CmdWrite(MAMR);
	temp = LCD_DataRead();
	temp &= cClrb7;
	LCD_CmdWrite(MAMR);
	LCD_DataWrite(temp);
}

//==============================================================================
//Subroutine:	Cursor_Shift_Direct_VH
//Function:
//==============================================================================
void Cursor_Shift_Direct_VH(void)
{
	uchar temp;
	
	LCD_CmdWrite(MAMR);
	temp = LCD_DataRead();
	temp |= cSetb7;
	LCD_CmdWrite(MAMR);
	LCD_DataWrite(temp);
}

//==============================================================================
//Subroutine:	SEG_DIR_0_319

⌨️ 快捷键说明

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