📄 disklight.c
字号:
#include <c8051f120.h>
#include <dmxlight.h>
#include <INTRINS.H>
/*/////////////////////////////////////////////////////
LCD函数及端口定义
//////////////////////////////////////////////////////*/
#define LCD_P2DATA P2 //
sbit LCD_BUSY = P3^0;
sbit LCD_CS1 = P3^1;
sbit LCD_RD = P3^2;
sbit LCD_WR = P3^3;
sbit LCD_RS = P3^4;
sbit LCD_INT = P1^4;
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()
{
delay(60000);
CPU_Initial();
delay(60000);
LCD_Initial();
LCD_Clear();
LCD_CmdWrite(0x00,0xcd);
GotoXY(0,0);
LCD_WR20TA(0);
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++ ;
}
while(a<40);
}
/////////////////////////////////////
code uchar MENU_Chinese[][40]={
{" 做擦除全部Wipe ALL(清控制台) "},//0
};
/****************************************
//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 = TIMER01_PAGE;
TMOD = 0x0A;
CKCON = 0x08;
SFRPAGE = CONFIG_PAGE;
IE = 0x02;
EIE1 = 0x03;
}
//*******************************************************************************//
// *** 定义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++;
}
while(a<78);
}
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,0x40,0x91,0x00,0x90,0x06,0xA0,0x11,//0x81,0x00
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 INT0(void)interrupt 0
{
}
void TOINT(void)interrupt 2
{
}
void INT1(void)interrupt 1
{
}
void T1(void)interrupt 3
{
}
void UART0()interrupt 4
{
}
void T2()interrupt 5
{
}
void SPI_MAIN_DATA(void)interrupt 6
{
}
void SMBUS(void)interrupt 7
{
}
void ADC0(void)interrupt 8
{
}
void PCA(void)interrupt 9
{
}
void INT10DAT(void)interrupt 10
{
}
void INT11DAT(void)interrupt 11
{
}
void INT12DAT(void)interrupt 12
{
}
void T3(void)interrupt 13
{
}
void ADC0A(void)interrupt 14
{
}
void INT15DAT(void)interrupt 15
{
}
void INT16DAT(void)interrupt 16
{
}
void INT17DAT(void)interrupt 17
{
}
void INT18DAT(void)interrupt 18
{
}
void INT19DAT(void)interrupt 19
{
}
void INT20DAT(void)interrupt 20
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -