#include
#include
#define uchar unsigned char
#define uint unsigned int
#define DATA_ADDR XBYTE[0xF000] //数据口地址
#define COM_ADDR XBYTE[0xF100] //命令口地址
uchar xdata *C_ADDR,*D_ADDR;//指向命令口和数据口的地址指针
uchar count=0;
uchar second=0,fen=58,hour=23,mounth=2,day=25;
uint year=2017;
uchar k2;
uchar zifuma[10]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19};
uchar data COM; //存放命令的变量
uchar data DAT1; //存放第一参数的变量
uchar data DAT2; //存放第二参数的变量
void clear(void);
void LCD_DISP(uchar y,uchar x,uchar zifu);
void LCD_InIt();
void DELAY();
void WRITE_COM_DATA0();
void WRITE_COM_DATA1();
void WRITE_COM_DATA2();
void WRITE_ZIFU();
//上电延时子程序
void DELAY()
{ uint i,j;
for(i=0;i<2;i++)
{
for(j=0;j<5;j++);
}
}
//向LCD写入要显示的字符的函数
void WRITE_ZIFU()
{
D_ADDR=&DATA_ADDR;//取数据口地址
*D_ADDR=DAT2;//将显示的字符写入LCD的数据单元
DELAY();
C_ADDR= &COM_ADDR;//取命令口地址
*C_ADDR=COM;//将命令写入LCD的命令单元
DELAY();
}
//向LCD写入无参数命令的函数
void WRITE_COM_DATA0()
{ C_ADDR=&COM_ADDR;//取命令口地址
*C_ADDR=COM;//将命令写入LCD的命令单元
DELAY();
}
//向LCD写入只有一个参数命令的函数
void WRITE_COM_DATA1()
{ D_ADDR= &DATA_ADDR;//取数据口地址
*D_ADDR=DAT1;//将参数或者数据写入LCD的数据单元
DELAY();
C_ADDR= &COM_ADDR;//取命令口地址
*C_ADDR=COM;//将命令写入LCD的命令单元
DELAY();
}
//向LCD写入有2个参数命令的函数
void WRITE_COM_DATA2()
{ D_ADDR=&DATA_ADDR;//取数据口地址
*D_ADDR=DAT1;//将参数1或者数据1写入LCD的数据单元
DELAY();
*D_ADDR=DAT2;//将参数2或者数据2写入LCD的数据单元
DELAY();
C_ADDR=&COM_ADDR;//取命令口地址
*C_ADDR=COM;//将命令写入LCD的命令单元
DELAY();
}
//LCD初始化函数
void LCD_InIt()
{
//显示区域设置
DAT1=0x00;//设置文本显示区首地址,首地址为屏幕的左上角
DAT2=0x00;
COM=0x40;//设置文本显示区首地址的命令
WRITE_COM_DATA2();//双参数函数。将文本显示区首地址写入LCD
DAT1=16;//设置文本显示区域宽度,即一行显示所占字节数.每行16个字符<