delay(6);
Wrdata(0x0,i,j);
}
}
}
/**************写左区***************/
void WrL(uchar x)
{
P0=0xFF;//P0口送FF,准备读
lck = 0;
P1 = 0x2a;//ELCD=1 /W=1(读),CSB=1,CSA=0 lck = 1;
while(P0 & LCDBUZY);//最高位为1,表示忙,则循环lck = 0;
P1 = 0x00;//ELCD=0,R/W=0(读),CSB=0,CSA=0 lck = 1;
P0 = x; //数据送到P0口
lck = 0;
P1 = 0x22;//ELCD=1,RW = 0(写),CSB=1,CSA=0 lck = 1;
lck = 0;
P1 = 0x00;//ELCD=0,RW = 0(写),CSB=0,CSA=0 lck = 1;
}
/**************写右区**************/
void WrR(uchar data x)
{
P0=0xFF;//P0口送FF,准备读
lck = 0;
P1 = 0x29;//ELCD=1,R/W=1(读),CSB=0,CSA=1
lck = 1;
while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
lck = 0;
P1 = 0x00;//ELCD=0,R/W=0(读),CSB=0,CSA=1
lck = 1;
P0=x; //数据送到P0口
lck = 0;
P1 = 0x21;//ELCD=1,RW = 0(写),CSB=0,CSA=1
lck = 1;
lck = 0;
P1 = 0x00;//ELCD=0,RW = 0(写),CSB=0,CSA=0
lck = 1;
}
/*************定位*****************/
void Locatexy(uchar row,uchar col)
{
uchar x, y, right;
switch(col&0xc0)
{
case 0:{
P0=0xFF;//P0口送FF,准备读
lck = 0;
P1 = 0x29;//ELCD=1,R/W=1(读),CSB=0,CSA=1
lck = 1;
while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
lck = 0;
P1 = 0x00;
lck = 1;
right = 1;break;}//置右半屏标志
case 0x40:{
P0=0xFF;//P0口送FF,准备读
lck = 0;
P1 = 0x2a;//ELCD=1,R/W=1(读),CSB=1,CSA=0
lck = 1;
while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
lck = 0;
P1 = 0x00;//ELCD=0,R/W=0(读) CSB=0,CSA=0
lck = 1;
right = 0;break;}//置左半屏标志
}
x=col&0x3f|SETX;//把列数据变成行命令
y=row&0x07|SETY;//把行数据变成行命令
/**********************************/
lck = 0;
if(right)
P1 = 0x29;
else
P1 = 0x2a;
lck = 1;
while(P0 & LCDBUZY);//最高位为1,表示忙,则循环lck = 0;
P1 = 0x00;
lck = 1;
/*********以上为判断忙标志********/
/*********************************/
P0 = y;
lck = 0;
if(right)
P1 = 0x21;
else
P1 = 0x22;
lck = 1;
lck = 0;
P1 = 0x00;
lck = 1;
/**********以上为送行命令***********/
P0=0xFF;
lck = 0;
if(right)
P1 = 0x29;
else
P1 = 0x2a;
lck = 1;
while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
lck = 0;
P1 = 0x00;
lck = 1;
/*********以上为判断忙标志********/
P0 = x;
lck = 0;
if(right)
P1 = 0x21;
else
P1 = 0x22;
lck = 1;
lck = 0;
P1 = 0x00;
lck = 1;
/**********以上为送列命令***********/
if(right)
statu = 1;
else
statu = 0;//置左又半区标志
}
/**************数据写输出***************/
void Wrdata(uchar x,uchar row,uchar col)
{
Locatexy(row,col);//定位显示位置
lck = 0;
if(statu)
P1 = 0x05;//ELCD=0 R/W=0(写),D/I= 1 ,CSB=0,CSA=1 else
P1 = 0x06;//ELCD=0,R/W=0(写),D/I= 1 ,CSB=1,CSA=0 lck = 1;
P0 = x;
lck = 0;
if(statu)
P1 = 0x25;//ELCD=1,R/W=0(写),D/I= 1 ,CSB=0,CSA=1 else
P1 = 0x26;//ELCD=1,R/W=0(写),D/I= 1 ,CSB=1,CSA=0 lck = 1;
lck = 0;
P1 = 0x00;
lck = 1;
}
/****************图形输出******************/
void Putpicture()
{
unsigned char i,j,row, col ;
unsigned int x;
row = 0; col=0;
for(j=0;j<128;j++){
x=j*0x08;
for(i=0;i<8;i++)
{
cbyte=picture[x++];
Wrdata(cbyte,row,col);
row++;
}
row=0;
col++;
}
}
/***************半角数据点阵输出*******************/ void Puthalf(uchar *strch,uchar row,uchar col)
{
uchar i,bakerx;
bakerx = row;
for(i=0;i<16;i++)//上半字输出
{
cbyte=strch[i];
Wrdata(cbyte,bakerx,col);
cbyte=strch[i+1];
Wrdata(cbyte,bakerx+1,col);
col++;
i++;
}
}
/************汉字输出******************/
/*void Puthz(uchar *str,uchar row,uchar col)
{
uchar i,bakerx;
bakerx=row;
for(i=0;i<32;i++)
{
cbyte=str[i];
Wrdata(cbyte,row,col); //上半字节输出
i++;
row=bakerx+1;
cbyte=str[i];
Wrdata(cbyte,row,col); //下半字节输出
row=bakerx;
col=col+1;
}
}
*/
/***********************字符型点阵行--》列转换********************/ void VtoH8x16change(uchar *hzbuf)
{ uchar i,j,k, cash[16];
uchar newbyte, savebit[8];
for(k=0;k<16;k++){
newbyte = 0;
for(i=0;i<8;i++){
savebit[i]=hzbuf[i] & 0x80;
}
for(j=0;j<8;j++){
savebit[j] = savebit[j] >> (7-j);
newbyte = newbyte | savebit[j];
}
cash[k] = newbyte;
newbyte = 0;
for(i=8;i<16;i++){
savebit[i-8]=hzbuf[i] & 0x80;
}
for(j=0;j<8;j++){
savebit[j] = savebit[j] >> (7-j);
newbyte = newbyte |savebit[j];
}
cash[k+1] = newbyte;
for(j=0;j<16;j++){
hzbuf[j] = hzbuf[j] <<1;
}
k++;
}
for(i=0;i<16;i++)
hzbuf[i] = cash[i];
}
/************************显示英文和符号字符********************/
void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag)
{
uchar ucXArray[16],i;
if(flag){ // 反白显示英文
for(i = 0; i < 16; i++)
ucXArray[i] = ~ch[i];
}else{
for(i = 0; i < 16; i++)
ucXArray[i] = ch[i];
}
VtoH8x16change(ucXArray);
Puthalf(ucXArray,row,col);
}
/*****************************结束************************/