#define LCDCOM1 XBYTE[0x2600]//lcd命令寄存器地址A0=0,CS1=0,CS2=1,CL=0,RES=0,P2.2=1;
#define LCDCOM2 XBYTE[0x4600]//lcd命令寄存器地址A0=0,CS1=1,CS2=0,CL=0,RES=0,P2.2=1;
#define LCDDAT1 XBYTE[0xA600]//LCD数据寄存器地址A0=1,CS1=0,CS2=1,CL=0,RES=0,P2.2=1
#define LCDDAT2 XBYTE[0xC600]//LCD数据寄存器地址A0=1,CS1=1,CS2=0,CL=0,RES=0,P2.2=1;
/* #define LCDREAD1 XBYTE[0x4000] //读取数据A0=0,CS1=1,CS2=0,CL=0,RES=0
#define LCDREAD2 XBYTE[0x2000] //读取数据A0=0,CS1=0,CS2=1,CL=0,RES=0 */
sbit busy_flag=ACC^7;
sbit lcd_reset=P2^3;
// sbit lcd_read=P3^7;
// sbit lcd_write=P3^6;
sbit lcd_cl=P2^4;
typedef unsigned char uchar;
// typedef unsigned int uint;
uchar code
lcd_line1[16]={0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00}; //"大"字上半边
uchar code
lcd_line2[16]={0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00}; //"大"字下半边
//延时1*d ms
void delay(unsigned int d)
{uchar j;
while(d--){
for(j=0;j <125;j++){;}
}
}
//复位
void reset(void)
{ lcd_reset=0;
delay(5);
lcd_reset=1;
delay(5);
lcd_reset=0;
}
//时钟产生
void clock(void) interrupt 1
{
lcd_cl=!lcd_cl;
}
//time0 产生中断
//测试lcd1边忙
void wait_lcd1(void)
{do {//lcd_read=0;
ACC=LCDDAT1;}
while(busy_flag==1);
}
//测试lcd2边忙
void wait_lcd2(void)
{do {//lcd_read=0;
ACC=LCDDAT2;}
while(busy_flag==1);
}
//送lcd1边命令字
void I_SEND1(uchar y)
{wait_lcd1();
// lcd_read=1;lcd_write=0;
LCDCOM1=y;
}
//送lcd2边命令字
void I_SEND2(uchar y)
{wait_lcd2();
// lcd_read=1;lcd_write=0;
LCDCOM2=y;
}
//送lcd1边数据
void D_SEND1(uchar x)
{wait_lcd1();
// lcd_read=1;lcd_write=0;
LCDDAT1=x;
}
//送lcd2边数据
void D_SEND2(uchar x)
{wait_lcd2();
// lcd_read=1;lcd_write=0;
LCDDAT2=x;
}
//lcd1边初始化
void start_lcd1()
{
delay(5); //等待2ms的时间或更长时间,使电压稳定
I_SEND1(0XE2); //soft reset
I_SEND1(0xAE); //关显示
I_SEND1(0xc0); //start line
I_SEND1(0xA4); //清除显示 static drive off
I_SEND1(0X00); //COLUMN ADDRESS SET:0
// I_SEND1(0XB8); //PAGE SET :0
I_SEND1(0xA9); //占空比
I_SEND1(0xA0); //ADC模式
I_SEND1(0xEE);
I_SEND1(0XAF); //开显示
}
//lcd2边初始化
void start_lcd2()
{
delay(5); //等待2ms的时间或更长时间,使电压稳
I_SEND2(0xAE); //关显示
I_SEND2(0xc0);
I_SEND2(0xA4); //清除显示
I_SEND2(0X00); //COLUMN ADDRESS SET:0
// I_SEND2(0XBA); //PAGE SET : 2
I_SEND2(0xA9); //占空比
I_SEND2(0xA0); //ADC模式
I_SEND2(0xEE); //开显示
I_SEND2(0XAF);
}
//清lcd1
void lcd_clr1(uchar page1)
{ int i;
i=0;
I_SEND1(page1);
I_SEND1(0x00);
do{
D_SEND1(0X00);
i++;}
while(i <79);
}
//清lcd2
void lcd_clr2(int page1)
{ int i;
i=0;
I_SEND2(page1);
I_SEND2(0);
do{
D_SEND2(0X00);
i++;}
while(i <79);
}
void lcd_display1()
{start_lcd1();
lcd_clr1(0xb8);
lcd_clr1(0xb9);
lcd_clr1(0xba);
lcd_clr1(0xbb);
start_lcd2();
lcd_clr2(0xb8);
lcd_clr2(0xb9);
lcd_clr2(0xba);
lcd_clr2(0xbb);
I_SEND1(0XB8);
I_SEND1(0X00);
// D_SEND1(lcd_line1);
D_SEND1(lcd_line1[0]);
D_SEND1(lcd_line1[1]);
D_SEND1(lcd_line1[2]);
D_SEND1(lcd_line1[3]);
D_SEND1(lcd_line1[4]);
D_SEND1(lcd_line1[5]);
D_SEND1(lcd_line1[6]);
D_SEND1(lcd_line1[7]);
D_SEND1(lcd_line1[8]);
D_SEND1(lcd_line1[9]);
D_SEND1(lcd_line1[10]);
D_SEND1(lcd_line1[11]);
D_SEND1(lcd_line1[12]);
D_SEND1(lcd_line1[13]);
D_SEND1(lcd_line1[14]);
D_SEND1(lcd_line1[15]);
I_SEND1(0XB9);
I_SEND1(0X00);
// D_SEND1(lcd_line2);
D_SEND1(lcd_line2[0]);
D_SEND1(lcd_line2[1]);
D_SEND1(lcd_line2[2]);
D_SEND1(lcd_line2[3]);
D_SEND1(lcd_line2[4]);
D_SEND1(lcd_line2[5]);
D_SEND1(lcd_line2[6]);
D_SEND1(lcd_line2[7]);
D_SEND1(lcd_line2[8]);
D_SEND1(lcd_line2[9]);
D_SEND1(lcd_line2[10]);
D_SEND1(lcd_line2[11]);
D_SEND1(lcd_line2[12]);
D_SEND1(lcd_line2[13]);
D_SEND1(lcd_line2[14]);
D_SEND1(lcd_line2[15]);
}
void main(void)
{
TMOD=0x22;
TL0=TH0=173;
TCON=0x00;
ET0=1;
TR0=1;
EA=1;
reset();
for(;;)
lcd_display1();
/* while(1)
{} */
}