C51单片机12864的显示问题

本意是这样的:要12864液晶显示一首诗,共8句,第一次屏山显示3句,间隔5s显示第二个4句。问题是:要求能满足,但是刚开始上电时第一个四句,第二个四句就无故多了几个乱码... 本意是这样的:要12864液晶显示一首诗,共8句,第一次屏山显示3句,间隔5s显示第二个4句。
问题是:要求能满足,但是刚开始上电时第一个四句,第二个四句就无故多了几个乱码,当过了5s时,再次显示第一个四句也有乱码?还有,由于数码管和液晶显示屏是共用单片机的P0口,当液晶屏上显示的时候,数码管上有乱码,我试图吧数码管关掉,没成功!求解。。。。
源程序如下,期待大虾解答,感激不尽:
#include <REGX52.H>
#define uchar unsigned char
#define uint unsigned int
#include <intrins.h>
#define lcd_data P0
int i;
uchar code table1[]="粉堕百花州,";
uchar code table2[]="香残燕子楼。";
uchar code table3[]="一团团逐对成逑。";
uchar code table4[]="飘泊亦如人命薄。";
uchar code table5[]="空缱绻,说风流。";
uchar code table6[]="草木也知愁,";
uchar code table7[]="韶华竟白头!";
uchar code table8[]="叹今生谁舍谁收?";
sbit rs=P3^5;
sbit rw=P3^6;
sbit e=P3^4;
sbit psb=P3^7;
sbit dula=P2^7;
sbit wela=P2^6;
void delay(int xms)
{
int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com)
{
rw=0;
rs=0;
delay(10);
P0=com;
e=1;
delay(10);
e=0;
delay(10);
}

void write_date(uchar date)
{
rw=0;
rs=1;
delay(10);
P0=date;
e=1;
delay(10);
e=0;
delay(10);
}
void display1()
{

uchar i;
i=0;
write_com(0x80+0);
while(table1[i]!='\0')
{
write_date(table1[i]);
i++;
}
i=0;
write_com(0x90+0);
while(table2[i]!='\0')
{
write_date(table2[i]);
i++;
}
i=0;
write_com(0x88+0);
while(table3[i]!='\0')
{
write_date(table3[i]);
i++;
}
i=0;
write_com(0x98+0);
while(table4[i]!='\0')
{
write_date(table4[i]);
i++;
}
}
void display2()
{
char i=0;
i=0;
write_com(0x80+0);
while(table5[i]!='\0')
{
write_date(table5[i]);
i++;
}
i=0;
write_com(0x90+0);
while(table6[i]!='\0')
{
write_date(table6[i]);
i++;
}
i=0;
write_com(0x88+0);
while(table7[i]!='\0')
{
write_date(table7[i]);
i++;
}
i=0;
write_com(0x98+0);
while(table8[i]!='\0')
{
write_date(table8[i]);
i++;
}
}
void init()
{
psb=1;
delay(50);
write_com(0x30);
delay(1);
write_com(0x30);
delay(1);
write_com(0x0f);
delay(1);
write_com(0x0c);
delay(20);
write_com(0x06);
delay(50);
}
void main()
{
init();
dula=0;
wela=0;
while(1)
{
dula=0;
wela=0;
delay(10);
display1();
delay(5000);
display2();
delay(5000);
}
}
展开
 我来答
望大虾多多指教
2010-08-14
知道答主
回答量:27
采纳率:0%
帮助的人:21.1万
展开全部
首先,数码管和液晶显示屏共用P0口肯定会相互影响,有时单把12864液晶接在P0口就会产生花屏现象,建议你把液晶接在其他口上。
其次,你每次赋值之前最好都清一下屏,效果会好一点。就是在display1()和;display2();之间清屏。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友def5e1a
2010-08-12
知道答主
回答量:28
采纳率:0%
帮助的人:12.9万
展开全部
用什么软件 keil吗?!这个软件对中文支持有点不好!你在软件上选择一下你的中文句子,如果没有变化说明是正确的!如果变乱码就好好修改吧!!然后看看你的坐标给的对不对!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
宴秋慢水
2010-08-23 · 超过10用户采纳过TA的回答
知道答主
回答量:17
采纳率:0%
帮助的人:0
展开全部
在开始初始化时把数码管关掉,dula=0,wela=0;这样开始数码管就没有显示了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-08-11
展开全部
到西安英达的单片机群里问问,那里高手多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式