1602 怎么实现两行同时左移?
时间:10-02
整理:3721RD
点击:
需要 两行同时左移 并且循环
但是 做不到同时左移 分先后的
先上边 左移
然后 上边走了以后
下边才出来
而且不在加一堆空格就会出现一堆乱码
uchar code tab[]="Hello everyone! ";
uchar code tab1[]="Welcome to Harbin "; //字符后面加若干个空格,防止滚动显示时出现不该出现的字符
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]="Hello everyone! ";
uchar code tab1[]="Welcome to Harbin "; //字符后面加若干个空格,防止滚动显示时出现不该出现的字符
sbit LCDE=P2^2;
sbit LCDRW=P2^1;
sbit LCDRS=P2^0;
void WriteCMD(uchar); //定义写命令函数
void init(); //定义初始化函数
void WriteData(uchar); //定义写数据函数
void Delay(); //定义延迟函数
void mydelay(int);
void main()
{
uint i; //定义无符号整形变量
init(); //液晶模块的初始化
while(1) //使之一直进行滚动显示程序,不断循环
{
for(i=0;i<32;i++)
{
WriteData(tab[i]); //显示第一行字符
mydelay(50); //每显示一个字符后停留一会,越过液晶的“忙”状态
}
mydelay(50);
WriteCMD(0x01); //清屏,准备进行下一行显示
WriteCMD(0x80+0x40+15);//改变DDRAM的地址,更改为第二行末尾,从此处开始进入字符
for(i=0;i<33;i++) //开始输入第二行字符
{
WriteData(tab1[i]);
mydelay(50);
}
mydelay(50);
WriteCMD(0x01);
WriteCMD(0x80+15); //DDRAM的地址改回第一行,准备进入下一次循环,显示重新开始
}
}
void Delay()
{
uint uiCount;
for(uiCount=0;uiCount<250;uiCount++);
}
void WriteCMD(uchar Command) //写命令函数,用于修改液晶的状态寄存器
{
Delay(); //先延时,越过液晶“忙”状态
LCDE=1; //使能端先置1
LCDRS=0; //设置RS为0,打开指令寄存器
LCDRW=0; //设置为写寄存器状态
P3=Command; //输出命令
LCDE=0; //使能端由1变0,出现下降沿有效,执行命令
}
void WriteData(uchar dat) //写数据函数,用于提供液晶的显示的字符
{
Delay();
LCDE=1; //把LCD改为写入数据状态
LCDRS=1;
LCDRW=0;
P3=dat; //再输出数据
LCDE=0; //使能端有效,显示数据
}
void init() //初始化程序,模块化使程序更清晰
{
LCDRW=0;
LCDE=0;
WriteCMD(0x38); //设置双行显示、8位数据接口
WriteCMD(0x0c); //设置整体显示开、光标关、字符不闪烁
WriteCMD(0x07); //设置为增量方式,整体显示移动开
WriteCMD(0x01); //清屏
WriteCMD(0x80+15); //设置字符进入屏幕的初始位置
}
void mydelay(int x)
{
int i,j;
for(i=x;i>0;i--)
for(j=255;j>0;j--);
}
但是 做不到同时左移 分先后的
先上边 左移
然后 上边走了以后
下边才出来
而且不在加一堆空格就会出现一堆乱码
uchar code tab[]="Hello everyone! ";
uchar code tab1[]="Welcome to Harbin "; //字符后面加若干个空格,防止滚动显示时出现不该出现的字符
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]="Hello everyone! ";
uchar code tab1[]="Welcome to Harbin "; //字符后面加若干个空格,防止滚动显示时出现不该出现的字符
sbit LCDE=P2^2;
sbit LCDRW=P2^1;
sbit LCDRS=P2^0;
void WriteCMD(uchar); //定义写命令函数
void init(); //定义初始化函数
void WriteData(uchar); //定义写数据函数
void Delay(); //定义延迟函数
void mydelay(int);
void main()
{
uint i; //定义无符号整形变量
init(); //液晶模块的初始化
while(1) //使之一直进行滚动显示程序,不断循环
{
for(i=0;i<32;i++)
{
WriteData(tab[i]); //显示第一行字符
mydelay(50); //每显示一个字符后停留一会,越过液晶的“忙”状态
}
mydelay(50);
WriteCMD(0x01); //清屏,准备进行下一行显示
WriteCMD(0x80+0x40+15);//改变DDRAM的地址,更改为第二行末尾,从此处开始进入字符
for(i=0;i<33;i++) //开始输入第二行字符
{
WriteData(tab1[i]);
mydelay(50);
}
mydelay(50);
WriteCMD(0x01);
WriteCMD(0x80+15); //DDRAM的地址改回第一行,准备进入下一次循环,显示重新开始
}
}
void Delay()
{
uint uiCount;
for(uiCount=0;uiCount<250;uiCount++);
}
void WriteCMD(uchar Command) //写命令函数,用于修改液晶的状态寄存器
{
Delay(); //先延时,越过液晶“忙”状态
LCDE=1; //使能端先置1
LCDRS=0; //设置RS为0,打开指令寄存器
LCDRW=0; //设置为写寄存器状态
P3=Command; //输出命令
LCDE=0; //使能端由1变0,出现下降沿有效,执行命令
}
void WriteData(uchar dat) //写数据函数,用于提供液晶的显示的字符
{
Delay();
LCDE=1; //把LCD改为写入数据状态
LCDRS=1;
LCDRW=0;
P3=dat; //再输出数据
LCDE=0; //使能端有效,显示数据
}
void init() //初始化程序,模块化使程序更清晰
{
LCDRW=0;
LCDE=0;
WriteCMD(0x38); //设置双行显示、8位数据接口
WriteCMD(0x0c); //设置整体显示开、光标关、字符不闪烁
WriteCMD(0x07); //设置为增量方式,整体显示移动开
WriteCMD(0x01); //清屏
WriteCMD(0x80+15); //设置字符进入屏幕的初始位置
}
void mydelay(int x)
{
int i,j;
for(i=x;i>0;i--)
for(j=255;j>0;j--);
}
怎么还在审核。
顶一下 学校昨天停电+断网一天。
不错的资料,值得分享