新人求助关于LCD1602显示

2019-07-15 20:55发布

本帖最后由 shyy 于 2014-2-13 19:11 编辑

这个程序编译没问题,就是烧到单片机后是
"
_00000/0_  000/0000_
00000/0_0 000/_00
"
滚动显示,而且不是从右边滚进来,而是从左边滚进来
请问各位大神,这是什么原因呢?
烧了天翔单片机的例程是没有问题的,基本可以排除硬件问题。
请各位大神驻足帮忙看看,小弟[qq]540037580[/qq]感激不尽!!!
__________________________________________________________________________
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="HELLO EVERYONE!";
uchar code table1[]="WELCOME TO HERE!";
sbit lcden=P2^7;
sbit rs=P2^6;
sbit wr=P2^5;
uint num;

void delay(uint x)
{
  uint i,j;
  for(i=x;i>0;i--)
    for(j=110;j>0;j--);
}

void write_cmd(uchar cmd)
{
  rs=0;
  wr=0;
  P0=cmd;
  delay(90);
  lcden=1;
  delay(80);
  lcden=0;  
}

void write_dat(uchar dat)
{
  rs=1;
  wr=0;
  P0=dat;
  delay(80);
  lcden=1;
  delay(80);
  lcden=0;
}

void initi()
{
  lcden=0;
  write_cmd(0x38);                      //16*2ÏÔʾ£¬5*7µãÕó£¬8λÊý¾Ý
  write_cmd(0x0c);                                  //ÏÔʾ¿ª£¬¹Ø¹â±ê
  write_cmd(0x05);
  write_cmd(0x01);

}

void main()
{
  initi();
  write_cmd(0x80+0x10);
  for(num=0;num<15;num++)
  {
    write_dat(table[num]);
        delay(10);
  }
  write_cmd(0x80+0x50);
  for(num=0;num<16;num++)
  {
    write_dat(table1[num]);
        delay(10);
  }
  for(num=0;num<16;num++)
  {
    write_cmd(0x18);
        delay(200);
  }
  while(1);
}














——————————————————————————————————————————————————————————————————————
这个程序编译没问题,就是烧到单片机后是
"
_00000/0_  000/0000_
00000/0_0 000/_00
"
滚动显示,而且不是从右边滚进来,而是从左边滚进来
请问各位大神,这是什么原因呢?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
依然落叶飘零
1楼-- · 2019-07-16 02:40
经过本人亲身测试,发现我烧进去后和你所描述的不一样,可能是我的LCD1602和你的不一样,但是我已经发现你的问题所在了。是你的初始化出问题了。write_cmd(0x05);这条语句不正确。应该是write_cmd(0x06),另外付链接,你看看,指令3。http://wenku.baidu.com/view/6f2e861eff00bed5b9f31dfc.html

一周热门 更多>