#define uchar unsigned char
#define uint unsigned int
#define Byte unsigned char
#define Word unsigned int
#define bool bit
sbit y_rs = P1^0; /*定以寄存器选择信号引脚*/
sbit y_rw = P1^1; /*定义使能引脚*/
sbit y_e = P1^2; /*定义读写引脚*/
sbit y_cs1 = P1^3; /*定义片选1引脚*/
sbit y_cs2 = P1^4; /*定义片选2引脚*/
sbit y_rstb = P1^5; /*定义复位引脚*/
/*P2口为D0-D7数据线*/
uchar code buff[]= /*显示一个重字*/
{
0x10,0x10,0x12,0xF2,0x52,0x52,0x52,0xFE,0x52,0x52,0x51,0x31,0xF1,0x10,0x08,0x08,
0X80,0XA0,0XA0,0XA7,0XA5,0XA5,0XA5,0XFF,0XA5,0XA5,0XA5,0XA5,0XA7,0X90,0X80,0X80
};
/*-----------------------------------------------------------------*/
void init(void);
void L_WriteState(uchar L_WRSTATE);
void L_WriteData(uchar L_WRDATA);
void Clear(void);
void Write(void);
void main(void)
{
y_cs1 = 0;
_nop_();
y_cs1 = 1;
_nop_();
y_cs1 = 0;
init();
Write();
while(1);
}
void init(void)
{
uchar temp;
y_rstb=0; /*显示复位*/
_nop_();
_nop_();
y_rstb=1;
P1 = 0X38; /*使能片选1和2*/
y_rw=1; /*读写允许;读取状态字*/
y_rs=0; /*清除寄存器选择信号口*/
temp=P2 | 0XFF;
while ((temp & 0X10)==0X10) /*复位状态*/
{
while ((temp & 0X80)==0X80) /* 处于忙状态 */
{
P2|=0XFF; /*将P2口全部置1*/
y_e=1; /*使能液晶显示模块*/
temp=P2;
y_e=0;
}
}
temp=0XC0; /*设置起始行*/
L_WriteState(temp);
temp=0X3F; /*开显示*/
L_WriteState(temp);
Clear(); /*清屏*/
}
void L_WriteState(uchar L_WRSTATE) /*写控制信息*/
{ uchar mm;
mm=0X80;
y_rs=0;
y_rw=1;
_nop_();
_nop_();
while(mm==0X80) /*判断是否忙?*/
{
P2|=0XFF;
y_e=1;
mm=P2 & 0X80;
_nop_();
_nop_(); /*取忙标志*/
y_e=0;
}
y_rw=0;
y_rs=0;
P2=L_WRSTATE;
y_e=0;
_nop_();
_nop_();
y_e=1;
_nop_();
_nop_();
y_e=0;
}
void Clear(void) /* 清屏 */
{
uchar rr,ss,cc;
P1=0X38; /*清除 显示 RAM*/
for (cc=0xB8;cc<=0XC0;cc++)
{
rr=cc;
ss=0XC0; /*设置起始行*/
L_WriteState(ss);
ss=rr; /*设置页地址*/
L_WriteState(ss);
ss=0X40; /*设置列地址起始位置*/
L_WriteState(ss);
rr=0X40; /*清64列*/
while(rr--)
{
ss=0X00;
L_WriteData(ss);
}
}
}
void L_WriteData(uchar L_WRDATA) /*输出数据*/
{
uchar mm;
mm=0X80;
y_rs=0;
y_rw=1;
_nop_();
_nop_();
while(mm==0X80) /*判断是否忙?*/
{
P2|=0XFF;
y_e=1;
mm=P2 & 0X80;
_nop_();
_nop_(); /*取忙标志*/
y_e=0;
}
y_rs=1;
y_rw=0;
_nop_();
_nop_();
P2=L_WRDATA; /*端口写数*/
y_e=0;
_nop_();
y_e=1;
_nop_();
y_e=0;
}
void Write(void) /*写数据*/
{
uchar L_Wr1,L_Wr2,L_Wr3,L_Wr4;
int ii;
Clear();
y_cs1=1;
y_cs2=0;
_nop_();
L_Wr1=0XBA; /*第3页*/
L_WriteState(L_Wr1);
L_Wr1=0X50; /*第49列*/
L_WriteState(L_Wr1);
for (ii=0;ii<16;ii++) /*写字的上半部分*/
{
L_Wr3=buff[ii];
L_WriteData(L_Wr3);
}
y_cs1=1;
y_cs2=0;
_nop_();
L_Wr1=0XBB; /*第4页*/
L_WriteState(L_Wr1);
L_Wr1=0X50; /*第49列*/
L_WriteState(L_Wr1);
for(ii=16;ii<32;ii++) /*写下半部分*/
{
L_Wr3=buff[ii];
L_WriteData(L_Wr3);
}
_nop_();
}