📄 ra8806.c
字号:
/*******************************************************************************
*
* 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 + -