关于12864液晶的显示问题
时间:10-02
整理:3721RD
点击:
求大神帮忙看一下该程序为什么仅显示第一行,而后两行不显示,谢谢了
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define lcd_data P0
sbit en=P1^6;
sbit rs=P2^0;
sbit rw=P2^1;
sbit cs1=P2^2;
uchar code table[]="湖师电子俱乐部";
uchar code table1[]="ceet.hbnu.edu";
uchar code table2[]="0123456789";
uchar code table3[]="ABCDEFGHIJKLM";
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
/*忙查询*/
void chk_busy()
{ rs=0;
rw=1;
en=1;
_nop_();
P0=0xff;
while((P0&0x80)==0x80);
en=0;
}
/*写指令数据到LCD*/
void write_cmd(uchar cmd)
{
chk_busy();
rw=0;
rs=0;
P0=cmd;
delay(5);
en=1;
delay(5);
en=0;
}
/*写显示数据到LCD*/
void write_data(uchar date)
{
chk_busy();
rw=0;
rs=1;
P0=date;
delay(5);
en=1;
delay(5);
en=0;
}
/*设定显示位置*/
void lcd_pos(uchar x,uchar y)
{
uchar pos;
if(x==0)
{x=0x80;}
else if(x==1)
{x=0x90;}
else if(x==2)
{x=0x88;}
else if(x==3)
{x=0x98;}
pos=x+y;
write_cmd(pos);
}
void init()
{
rw=0;
cs1=1;
en=0;
write_cmd(0x30);
delay(5);
write_cmd(0x0c);
delay(5);
write_cmd(0x01);
delay(5);
write_cmd(0x06);
delay(5);
}
void main()
{
uchar i;
delay(20);
init();
lcd_pos(0,1); //设置显示位置为第一行第一个字符
i=0;
while(table[i]!='\0')
{
write_data(table[i]); //显示字符
i++;
delay(200);
}
lcd_pos(1,0);
i=0;
while(table1[i]!='\0');
{
write_data(table1[i]);
i++;
delay(2000);
}
lcd_pos(2,0);
i=0;
while(table2[i]!='\0');
{
write_data(table2[i]);
i++;
delay(200);
}
lcd_pos(3,0);
i=0;
while(table3[i]!='\0');
{
write_data(table3[i]);
i++;
delay(200);
}
while(1);
}
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define lcd_data P0
sbit en=P1^6;
sbit rs=P2^0;
sbit rw=P2^1;
sbit cs1=P2^2;
uchar code table[]="湖师电子俱乐部";
uchar code table1[]="ceet.hbnu.edu";
uchar code table2[]="0123456789";
uchar code table3[]="ABCDEFGHIJKLM";
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
/*忙查询*/
void chk_busy()
{ rs=0;
rw=1;
en=1;
_nop_();
P0=0xff;
while((P0&0x80)==0x80);
en=0;
}
/*写指令数据到LCD*/
void write_cmd(uchar cmd)
{
chk_busy();
rw=0;
rs=0;
P0=cmd;
delay(5);
en=1;
delay(5);
en=0;
}
/*写显示数据到LCD*/
void write_data(uchar date)
{
chk_busy();
rw=0;
rs=1;
P0=date;
delay(5);
en=1;
delay(5);
en=0;
}
/*设定显示位置*/
void lcd_pos(uchar x,uchar y)
{
uchar pos;
if(x==0)
{x=0x80;}
else if(x==1)
{x=0x90;}
else if(x==2)
{x=0x88;}
else if(x==3)
{x=0x98;}
pos=x+y;
write_cmd(pos);
}
void init()
{
rw=0;
cs1=1;
en=0;
write_cmd(0x30);
delay(5);
write_cmd(0x0c);
delay(5);
write_cmd(0x01);
delay(5);
write_cmd(0x06);
delay(5);
}
void main()
{
uchar i;
delay(20);
init();
lcd_pos(0,1); //设置显示位置为第一行第一个字符
i=0;
while(table[i]!='\0')
{
write_data(table[i]); //显示字符
i++;
delay(200);
}
lcd_pos(1,0);
i=0;
while(table1[i]!='\0');
{
write_data(table1[i]);
i++;
delay(2000);
}
lcd_pos(2,0);
i=0;
while(table2[i]!='\0');
{
write_data(table2[i]);
i++;
delay(200);
}
lcd_pos(3,0);
i=0;
while(table3[i]!='\0');
{
write_data(table3[i]);
i++;
delay(200);
}
while(1);
}
