LCD1602滚动屏幕显示遇到的问题

2019-03-24 16:54发布

LCD1602模块在两行的滚动显示的编程过程中产生了一些小疑问,希望各位大佬可以帮忙解答一下
谢谢大家了。
#include"intrins.h"
#include"reg52.h"
typedef unsigned char uchar;
uchar a[23]="It's very interesting !";
uchar b[18]="This is the world.";
void delay(int i)  //1us
{
while(i--);
}
sbit RW=P2^5;
sbit RS=P2^6;
sbit  E=P2^7;
void wc(unsigned char c)
{
E=0;
RS=0;
RW=0;

P0=c;
E=1;
delay(10);
E=0;
} //写指令
void wd(unsigned char d)
{
E=0;
RS=1;
RW=0;

P0=d;
E=1;
delay(10);
E=0;
}//写数据
void Init()
{
wc(0x0c);
wc(0x38);
wc(0x01);

} //初始化
void display()
{
unsigned char i=0;

wc(0x40+0x80);
for(i=0;i<=22;i++)
{
  wd(a[i]);
}  
wc(0x00+0x80);
for(i=0;i<=17;i++)
{
  wd(b[i]);
}
   wc(0x07);
}
void main()
{
unsigned char i=0;
Init();
display();
while(1)
{
/* wc(0x00+0x80);
for(i=0;i<=17;i++)
{
  wd(b[i]);
  delay(30000);
}
*/ //如果改成这一段程序,LCD1602就只有第一行的内容在滚动了
wc(0x40+0x80);
for(i=0;i<=22;i++)
{
  wd(a[i]);
}//如果写这一段程序,会有两行在滚动

}
}

可以告诉我为什么吗?

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
tiankai001
1楼-- · 2019-03-24 21:19
看看是不是LCD1602的控制指令的区别
hujj
2楼-- · 2019-03-25 01:30
LCD1602第一行对应的地址是从0x80开始的16个字节、第二行对应的地址是从0xC0开始的16个字节,只要向这些地址写入字库的编码数据,屏幕对应位置就显示出什么字符。楼主程序中开始设置的地址是0x00+0x80=0x80,则表明向第一行的起始位置开始写入字符,后一段设置的地址是0x40+0x80=0xC0,则表明向第二行的起始位置开始写入字符,这没有任何问题呀。
沁馨百合
3楼-- · 2019-03-25 02:18
 精彩回答 2  元偷偷看……
沁馨百合
4楼-- · 2019-03-25 05:35
十五年创新“智”造优品,南京罗姆液晶致力于液晶显示屏、液晶显示模组的研发与生产已有十五年之久,品质来源于责任!,具体需要了解技术问题电联:13851618912   一个有梦想的80后,为您解答设计时带来的困扰
Li_Lei
5楼-- · 2019-03-25 11:27
你的程序比较乱,看不出什么问题。

1602内部有sram和AC指针指向地址,每个显示单元对应一个sram地址,第一行最后一个和第二行第一个单元的地址并不连续,中间还有若干单元,只是不能显示,通过1602的移位指令可以把它移出来,但是这个移位指令是全屏移位。
通过指令设置AC每次写入数据都是写到AC指向的单元,写完后自动+1。


一周热门 更多>