51单片机关于lcd12864显示的问题

lcd12864只能显示第一行的“aa",其他都没有显示#include<reg51.h>#include<intrins.h>#include<stdlib.h>#de... lcd12864只能显示第一行的“aa",其他都没有显示
#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
#define uint unsigned int
#define uchar unsigned char
#define LCD_data P0
sbit LCD_EN=P2^2;
sbit LCD_RW=P2^1;
sbit LCD_RS=P2^0;
sbit LCD_PSB=P2^3;
sbit LCD_RST=P2^5;
char code dx516[3] _at_ 0x003b;
uchar code dis1[]={"aasdsf"};
uchar code dis2[]={"oed"};
uchar code dis3[]={"yyyyy"};
uchar code dis4[]={"ooo"};
uint i,j,k;
void delay(uint xms)
{
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void lcd_busy()
{

LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delay(8);
P0=0xff;
while(P0&0x80==0x80);
LCD_EN=0;

}
void lcd_cmd(uchar cmd)
{
lcd_busy();
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P0=cmd;
delay(30);
LCD_EN=1;
delay(30);
LCD_EN=0;
}
void lcd_data(uchar _data)
{
lcd_busy();
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P0=_data;
delay(50);
LCD_EN=1;
delay(50);
LCD_EN=0;
}
void init()
{
LCD_PSB=1;
LCD_RST=0;
delay(3);
LCD_RST=1;
delay(3);
lcd_cmd(0x34);
delay(5);
lcd_cmd(0x30);
delay(5);
lcd_cmd(0x0C);
delay(5);
lcd_cmd(0x01);
delay(5);
}
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if(X==1)
{X=0x80;}
else if(X==2)
{X=0x90;}
else if(X==3)
{X=0x88;}
else if(X==4)
{X=0x98;}
pos=X+Y;
lcd_cmd(pos);
}

void main()
{
delay(100);
init();
while(1)
{
lcd_pos(1,0); //设置显示位置为第一行
for(k=0;k<16;k++)
{
lcd_data(dis1[k]);
delay(30);
}
lcd_pos(2,0); //设置显示位置为第二行
for(k=0;k<16;k++)
{
lcd_data(dis2[k]);
delay(30);
}
lcd_pos(3,0); //设置显示位置为第三行
for(k=0;k<16;k++)
{
lcd_data(dis3[k]);
delay(30);
}
lcd_pos(4,0); //设置显示位置为第四行
for(k=0;k<16;k++)
{
lcd_data(dis4[k]);
delay(30);
}
delay(1000);
}
}
求助各位帮忙看一下问题出在哪里
展开
 我来答
heluozhijian
2014-09-10 · TA获得超过587个赞
知道小有建树答主
回答量:630
采纳率:100%
帮助的人:257万
展开全部
dis1,dis2,dis3,dis4这4个数组在定义时没有指定数组长度,默认的长度是你数组里数据的个数。而在主循环调用时,循环到了15,超出了数组范围,数据越界了,结果就未知了。
可以这样:

k = 0;

while(dis1[k] != 0)

{
lcd_data(dis1[k]);
delay(30);

}

dis2,dis3,dis4类似
试试看吧
追问
不行,还是老样子。为什么第一行也显示不完整?
一万光年MEGn0
2014-09-10 · TA获得超过3712个赞
知道大有可为答主
回答量:4602
采纳率:67%
帮助的人:1066万
展开全部
问个问题:

for(k=0;k<16;k++)
{
lcd_data(dis2[k]);
delay(30);
}

这里的dis2[] 有16个字节长度吗?
追问
不是字节长度问题,为什么第一行也显示不完整?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
北hYI44OG
2014-09-10 · 超过67用户采纳过TA的回答
知道答主
回答量:185
采纳率:100%
帮助的人:65.1万
展开全部
在Lcd_pos(3,0);上面加上i=0;
i没初始化的结果

在固定数组里面可以用sizeof(table1)可以直接获取到字符串长度的
Write_char(sizeof(table1),table1);
追问
不行,还是老样子。为什么第一行也显示不完整?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式