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);
}
}
求助各位帮忙看一下问题出在哪里 展开
#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);
}
}
求助各位帮忙看一下问题出在哪里 展开
展开全部
问个问题:
for(k=0;k<16;k++)
{
lcd_data(dis2[k]);
delay(30);
}
这里的dis2[] 有16个字节长度吗?
for(k=0;k<16;k++)
{
lcd_data(dis2[k]);
delay(30);
}
这里的dis2[] 有16个字节长度吗?
追问
不是字节长度问题,为什么第一行也显示不完整?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在Lcd_pos(3,0);上面加上i=0;
i没初始化的结果
在固定数组里面可以用sizeof(table1)可以直接获取到字符串长度的
Write_char(sizeof(table1),table1);
i没初始化的结果
在固定数组里面可以用sizeof(table1)可以直接获取到字符串长度的
Write_char(sizeof(table1),table1);
追问
不行,还是老样子。为什么第一行也显示不完整?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |