本帖最后由 wangxinaaa 于 2011-11-13 14:22 编辑
void write_cmd(uchar cmd) //写命令write_cmd
{
chkBF();
lcdrw=0;//写操作
lcdrs=0;//命令
P0=cmd;
delay(1);
lcden=1;
delay(1);
lcden=0;
} void write_date(uchar dat) //写数据write_date()
{
chkBF();
lcdrw=0;//写操作
lcdrs=1;//数据
P0=dat;
delay(1);
lcden=1;
delay(1);
lcden=0;
} void setxy(uchar x,uchar y) //设置页地址x,范围0到7;列地址y,范围0到63;
{
write_cmd(SCRCLS); //光标归位,清除显示,地址AC到00H
write_cmd(0xb8+x); //设置页地址
write_cmd(0x40+y); //设置列地址
}
void dis_hz(uchar x,uchar y,uchar *p) //显示一个16x16dot的汉字
{
uint i,j;
if(y<4)
{
lcdcs1=0;lcdcs2=1; // 清除左半屏 welcome_page(0x00);
}
else
{
lcdcs1=1;lcdcs2=0; // 清除右半屏 welcome_page(0x01);
y-=4;
}
for(i=0;i<2;i++)
{
setxy(x*2+i,y*16);
for(j=0;j<16;j++)
{
write_date(p[j+16*i]);
}
}
lcdcs1=0;lcdcs2=0; // 全部清除 welcome_page(0x00);
}
void dis_hzstr(uchar x,uchar y,uchar *p,uchar n) //显示一行汉字串
{
uint i;
for(i=0;i<n;i++)
{
dis_hz(x,y,p+i*32);
y++;
}
} void dis_hz_fb(uchar x,uchar y,uchar *p) //在12864上的x,y处反白显示一个汉字
{
uint i,j;
if(y<4)
{
lcdcs1=0;lcdcs2=1; //welcome_page(0x00);//
}
else
{
lcdcs1=1;lcdcs2=0; y-=4;
}
for(i=0;i<2;i++)
{
setxy(x*2+i,y*16);
for(j=0;j<16;j++)
{
write_date(255-p[j+16*i]);
}
}
l cdcs1=0;lcdcs2=0; }
void clsram() //清屏显示
{
uint i,j;
lcdcs1=0;lcdcs2=1; //清左半行
for(i=0;i<8;i++)
{
setxy(i,0);
for(j=0;j<64;j++)
{
write_date(0x00);
}
setxy(0,0);
}
lcdcs1=1;lcdcs2=0; //清右半行
for(i=0;i<8;i++)
{
setxy(i,0);
for(j=0;j<64;j++)
{
write_date(0x00);
}
setxy(0,0);
}
}
void cls_line(uchar xx) //清除一行汉字 xx:0-3
{
uint i,j;
lcdcs1=0;lcdcs2=1; //清左半行
for(i=0;i<2;i++)
{
setxy(2*xx+i,0);
for(j=0;j<64;j++)
{
write_date(0x00);
}
setxy(0,0);
}
lcdcs1=1;lcdcs2=0; //清右半行
for(i=0;i<2;i++)
{
setxy(2*xx+i,0);
for(j=0;j<64;j++)
{
write_date(0x00);
}
}
} void lcd_init() //LCD初始化lcd_init()
{
lcdres=0; //液晶复位
delay(10);
lcdres=1; //液晶复位结束
write_cmd(DISPLAY_OFF);
write_cmd(DISPLAY_ON);
clsram();
write_cmd(BASIC_INS); //基本指令集
write_cmd(CURSOR_ON); //整体关,游标关,闪烁关
write_cmd(0x06); //DDRAM的地址计数器(AC)加1
write_cmd(SCRCLS);
delay(10); //等待初始化结束
} void welcome_page(bit flagg) //初始化界面进入(欢迎使用)
{
uchar i;
clsram(); if(!flagg)
{
dis_hzstr(1,2,welcome,4); //欢迎使用 delay(700);
// for(i=0;i<8;i++)
// {
// dis_hz(0,i,wuxing);
// dis_hz(3,7-i,wuxing+32);
// delay(100);
// }
// for(i=0;i<8;i++)
// {
// dis_hz_fb(0,i,wuxing);
// dis_hz_fb(3,7-i,wuxing+32);
// delay(100);
// }
// for(i=0;i<8;i++)
// {
// dis_hz(0,i,wuxing);
// dis_hz(3,7-i,wuxing+32);
// delay(100);
// }
}
delay(600);
clsram();
}
void main()
{ bit WFlag=0; //欢迎界面标志
lcd_init();
while(1)
{
welcome_page(WFlag);
}
}
|