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

📄 cf8051f120.c

📁 C8051F120控制RA8803(320X240)
💻 C
字号:
/*********************************************
程序名称:中文版电脑灯控制台程序
创建日期:2007年04月30日 01:08:00
CPU型号 :C8051F120 100MHZ
通讯方式:SP1
LCD 320X240带触摸
**********************************************/
 #include <c8051f120.h>
 #include <dmxlight.h>
 #include <INTRINS.H>
/*/////////////////////////////////////////////////////
  LCD函数及端口定义
//////////////////////////////////////////////////////*/

#define   LCD_P2DATA          P2       //
sbit      LCD_RS     =		 P3^0;
sbit      LCD_WR     =		 P3^1;
sbit      LCD_RD     =		 P3^2;
sbit      LCD_CS1    =		 P3^3;
sbit      LCD_CS2    =		 P3^4;
sbit      LCD_BUSY   =		 P3^5;
sbit      LCD_INT    =       P3^6;
sbit      LCD_RSET   =	     P3^7;
uchar     data     REG_Read	;
/****************************************/
void LCD_Initial();							  //LCD	初始化,清屏,复位LCD屏,开触摸,开8X8键盘扫描
void LCD_Clear();  //
void LCD_CmdWrite(uchar cmdReg, uchar cmdData);	                          //清除显示内存 子程序
void GotoXY(uchar x1,uchar y1);                //设定 显示坐标 (内存地址) 子程序
void LCD_DataWrite(uchar WrData);

////////////////////////////////////////////////////////
void CPU_Initial();	                          //CPU初始化,开SP1通讯,开外部中断0。
void delay(uint i);                            // 延迟时间子程序
void LCD_WR20TA(uchar menu_a);
code uchar MENU_Chinese[][40];
code uchar LCD_Initial_data[78];
///////////////////////////////////////////////////////
void main()
{
LCD_RSET=0;
CPU_Initial();
delay(60000);
LCD_RSET=1;
delay(60000);
 LCD_CS2=1;
LCD_Initial();
LCD_Clear();
LCD_CmdWrite(0x00,0xcd);
GotoXY(0,0);
LCD_WR20TA(1);
while(1);
}
//*******************************************************************************//
// *** 缓存器 写入 子程序 *******************************************************//
//*******************************************************************************//
void LCD_CmdWrite(uchar cmdReg, uchar cmdData)
{

	LCD_P2DATA = cmdReg; // 写入缓存器的地址
	LCD_CS1=0;// 致能 RA8803 读写动作
	LCD_RD=1; // 禁能读取动作
	LCD_RS=0; // 设定为写入资至缓存器模式
	LCD_WR=0; // 开始写入缓存器的地址
	delay(50);
	LCD_WR=1;
	LCD_RS=1;
	LCD_CS1=1; // 致能 RA8803 读写动作
	//…………………………………………………………….
	LCD_P2DATA = cmdData; // 写入缓存器的数据
	LCD_CS1=0; // 致能 RA8803 读写动作
	LCD_RD=1; // 禁能读取动作
	LCD_RS=0; // 设定为写入数据至缓存器模式
	LCD_WR=0; // 开始写入缓存器的数据
	delay(50);
	LCD_WR=1;
	LCD_RS=1;
	LCD_CS1=1; // 致能 RA8803 读写动作
}
//*******************************************************************************//
// *** 缓存器 读取 子程序 *******************************************************//
//*******************************************************************************//
uchar LCD_CmdRead(uchar cmdReg)
{
	LCD_P2DATA=cmdReg; // 写入缓存器的地址
	LCD_CS1=0; // 致能 RA8803 读写动作
	LCD_RD=1; // 禁能读取动作
	LCD_RS=0; // 设定为写入数据至缓存器模式
	LCD_WR=0; // 开始写入缓存器的地址
    delay(50);
	LCD_WR=1;
	LCD_RS=1;
	LCD_CS1=1; // 致能 RA8803 读写动作
	LCD_P2DATA=0xff;
	LCD_CS1=0; // 致能 RA8803 读写动作
	LCD_WR=1; // 禁能写入动作
	LCD_RS=0; // 设定从缓存器读取数据模式
	LCD_RD=0; // 开始读取缓存器的数据
    delay(50);
	REG_Read=LCD_P2DATA;
	LCD_RD=1; // 致能读取缓存器
	LCD_RS=1;
	LCD_CS1=1; // 禁能 RA8803 读写动作
	return REG_Read; // 回传读取缓存器的数据
}
//*******************************************************************************//
// *** 写入数据至显示内存 子程序 ************************************************//
//*******************************************************************************//
void LCD_DataWrite(uchar WrData)
{
	while(LCD_BUSY == 1); // 判断 RA8803 是否忙碌中
	LCD_P2DATA =WrData; // 准备预写入显示内存的数据
	LCD_CS1=0; // 致能 RA8803 读写动作
	LCD_RD=1; // 禁能读取动作
	LCD_RS=1; // 设定为写入数据至显示内存模式
	LCD_WR=0; // 开始写数据至显示内存
	delay(50);
	LCD_WR=1;
	LCD_RS=1;
	LCD_CS1=1; // 禁能 RA8803 读写动作
}

//*******************************************************************************//
// *** 清除显示内存 子程序 ******************************************************//
//*******************************************************************************//
void LCD_Clear()
{
	uchar READ_REG;
	LCD_CmdWrite(0xE0,0x00); // 设定将显示内存的数据全部写入”0x00”
	READ_REG = LCD_CmdRead(0xF0);
	READ_REG &= 0xF7;
	READ_REG |= 0x08;
	LCD_CmdWrite(0xF0,READ_REG); // 当缓存器[0xF0]之位3 设定为”1”时,
	delay(50000); // 硬件自动将显示内存全部写入缓存器[E0]的资料
}
//*******************************************************************************//
// *** 设定 显示坐标 (内存地址) 子程序 *******************************************//
//*******************************************************************************//
void GotoXY(uchar x1,uchar y1)
{
	LCD_CmdWrite(0x60,x1); // 设定水平坐标地址
	LCD_CmdWrite(0x70,y1); // 设定垂直坐标地址
}
//*******************************************************************************//
// *** 延迟 子程序 *************************************************************//
//*******************************************************************************//
void delay(uint i) // 延迟时间子程序
{
	uint k ;
	for ( k=0;k>i;k++ );
}
/////////////////////////////////////////////////////////////////////////
void LCD_WR20TA(uchar menu_a) //八个字同时写
{
	uchar a,b;
 	a=0;
	do{
	b=MENU_Chinese[menu_a][a];
	LCD_DataWrite(b);
	a++ ;
	if(a==40)return;
	}
	while(1);
 	}

 
/////////////////////////////////////
code uchar MENU_Chinese[][40]={
							{"      做擦除全部Wipe ALL(清控制台)      "},//0
							{"1.将控制台钥匙转向(SYSTEM)位置。      "},//1
							{"2.按A(Service)服务键。                "},//2
							{"3.按F(Wipe)擦除键。                   "},//3
							{"4.此时LCD屏幕功能对应为如下(A到G键)。 "},//4
							{"  A: Cancel      取消                   "},//5
							{"  B: Patch       配接                   "},//6
							{"  C: Palettes    素材                   "},//7
							{"  D: Programming 程序                   "},//8
							{"  F: Wipe ALL    擦除全部               "},//9
							{"  G: OK          确认                   "},//10
							{"5.按F(Wipe ALL)擦除全部。             "},//11
							{"6.如需单独擦除某一项执行第三步后选择B,C "},//012
							{"  D做相应擦除。选择后按G(OK)。        "},//13
							{"  控制台会重新起动清除所有程序          "},//14
							};


 /****************************************
//CPU初始化,开SP1通讯,开外部中断0。
****************************************/
 void CPU_Initial()
 {
    SFRPAGE   = CONFIG_PAGE;
	WDTCN=0xDE;
    WDTCN=0xAD;
    OSCICN    = 0x83;
    CCH0CN    &= ~0x20;
    SFRPAGE   = LEGACY_PAGE;
    FLSCL     = 0xB0;
    SFRPAGE   = CONFIG_PAGE;
    CCH0CN    |= 0x20;
    PLL0CN    |= 0x01;
    PLL0DIV   = 0x01;
    PLL0FLT   = 0x01;
    PLL0MUL   = 0x04;
    delay(5000);
    PLL0CN    |= 0x02;
    while ((PLL0CN & 0x10) == 0);
    CLKSEL    = 0x02;
    XBR0      = 0x03;  //开SPI,IC2,INT0
    XBR1      = 0x04;
	XBR2      = 0x40;
	P0MDOUT   = 0xFF;
	P1MDOUT   = 0x00;
	P2MDOUT   = 0x00;
	P3MDOUT   = 0x00;
	P0=0x00;
	P1=0x00;
	P2=0xFF;
	P3=0xFF;
	P4=0x00;
	P5=0;
	P6=0;
	P7=0;
	WDTCN = 0XDE;
	WDTCN = 0X67;
	SFRPAGE   = SPI0_PAGE;	  //SPI
    SPI0CFG   = 0x40;
    SPI0CN    = 0x05;
	SFRPAGE   = 0x00;
	SFRPAGE   = CONFIG_PAGE;
 }
//*******************************************************************************//
// *** 定义LCD所有缓存器的初始值 **************************************************//
//*******************************************************************************//
void LCD_Initial()
{uchar a,b,c;
	a=0;
	do{
     b=LCD_Initial_data[a];
	 a++;
	 c=LCD_Initial_data[a];
	 LCD_CmdWrite(b,c);
	 a++;
	 if(a==78)return;
	 }
	while(1);
}
code uchar LCD_Initial_data[78]={
                               0x00,0xC9,0x01,0xF3,0x02,0x10,0x03,0x81,0x10,0x2B,
							   0x11,0x00,0x12,0x91,0x21,0x27,0x31,0xEF,0x41,0x00,
							   0x51,0x00,0x20,0x27,0x30,0xEF,0x40,0x00,0x50,0x00,
							   0x60,0x00,0x61,0x00,0x70,0x00,0x71,0x00,0x72,0xEF,
							   0x80,0xAA,0x81,0x00,0x91,0x00,0x90,0x06,0xA0,0x11,
							   0xA1,0x00,0xA2,0x00,0xA3,0x00,0xB0,0x27,0xB1,0xEF,
							   0xC0,0x00,0xC1,0x0A,0xC8,0x80,0xC9,0x80,0xCA,0x00,
							   0xD0,0x80,0xE0,0x00,0xF0,0xA0,0xF1,0x0F,
                               };

/*************************************************************************************/
void   INT0DAT(void)interrupt 0
{
}
void   INT2DAT(void)interrupt 2
{
}
void   INT1DAT(void)interrupt 1
{
}
void   INT3DAT(void)interrupt 3
{
}
void   INT6DAT(void)interrupt 6
{
}
void   INT7DAT(void)interrupt 7
{
}
void   INT8DAT(void)interrupt 8
{
}
void   INT9DAT(void)interrupt 9
{
}
void   INT10DAT(void)interrupt 10
{
}
void   SPI_MAIN_DATA()interrupt 5
{
}
void   INT11DAT(void)interrupt 11
{
}

⌨️ 快捷键说明

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