📄 ra8806.c
字号:
/*******************************************************************************
*
* Filename : RA8806.c
*
* Author : Tony Kan
* Author Date : 2007/08/21
* Company : RAiO Technology Inc.
* Case : 320 x 240
* Device : MXIC MX10E8050IQC at 18.432MHZ
* Modifier :
* Modify Date :
* Visions : X
* Compiled Using Keil C v7.50
*
*******************************************************************************/
#include "RA8806.h"
//------------------------------------------------------------------------------
//Subroutine Declare
//------------------------------------------------------------------------------
extern void LCD_CmdWrite(uchar);
extern uchar LCD_CmdRead(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(5);
bRST = 1;
Delay100ms(2);
}
//==============================================================================
//Subroutine: LCD_CmdWrite
//Function:
//==============================================================================
void LCD_CmdWrite(uchar cmd)
{
// LCD_ChkBusy();
#ifdef Parallel_8080
// DATA_BUS = cmd;
bCSZ = 0;
bA0 = 1;
// DATA_BUS = cmd;
bWRZ = 0;
DATA_BUS = cmd;
// Delay2us(3);
bWRZ = 1;
// bCSZ = 0;
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
// DATA_BUS = Data;
bCSZ = 0;
bA0 = 0;
// DATA_BUS = Data;
bWRZ = 0;
DATA_BUS = Data;
bWRZ = 1;
// bCSZ = 0;
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_CmdRead(void)
{
uchar Data;
#ifdef Parallel_8080
bCSZ = 0;
bA0 = 1;
bWRZ = 1;
// Data = DATA_BUS;
bRDZ = 0;
Data = DATA_BUS;
bRDZ = 1;
// bCSZ = 0;
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;
// Data = DATA_BUS;
bRDZ = 0;
Data = DATA_BUS;
bRDZ = 1;
// bCSZ = 0;
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_CmdRead();
}while(temp & 0xc0);
}
//==============================================================================
//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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -