求教lcd1602滚动显示的相关问题,会的大神解答解答

2019-07-15 18:46发布

我想让显示一行滚动显示一行静态显示,如果用移动指令去的话,会两行都移动
用点阵移动方式去的话,在移动完数据后后面会全部显示6,比如0是不显示,p=123456
0000000000000001
0000000000000012
。。。。。。
0000123456666666
会出现这样的状况;如何解决;
#include<reg52.h>
#include<intrins.h>

sbit rs=P2^4;
sbit rw=P2^5;
sbit en=P2^6;

#define uchar unsigned char
//uchar code table[]={}

void delus(uchar t)
{
while(--t);
}
void delms(uchar t)
{
while(t--)
  {
  delus(245);
  delus(245);
  }
}

void lcd_write_com(uchar com)
{
delms(5);
rs=0;
rw=0;
en=1;
P0=com;
_nop_();
en=0;
}

void lcd_write_dat(uchar dat)
{
delms(5);
rs=1;
rw=0;
en=1;
P0=dat;
_nop_();
en=0;
}

void lcd_clear()
{
lcd_write_com(0x01);
delms(5);
}

void lcd_write_char(uchar x,uchar y,uchar dat)
{
if(y==0)
    {
        lcd_write_com(0x80+x);
        }
        else
        {
        lcd_write_com(0xc0+x);
        }
        lcd_write_dat(dat);
}

void lcd_write_string(uchar x,uchar y,uchar *s)
{
if(y==0)
    {
        lcd_write_com(0x80+x);
        }
        else
        {
        lcd_write_com(0xc0+x);
        }
        while(*s)
           {
           lcd_write_dat(*s);
           s++;
           }       
}

void lcd_init()
{
lcd_write_com(0x38);
delms(5);
lcd_write_com(0x38);
delms(5);
lcd_write_com(0x38);
delms(5);
lcd_write_com(0x38);
lcd_write_com(0x08);
lcd_write_com(0x01);
lcd_write_com(0x06);
delms(5);
lcd_write_com(0x0c);
}

void main()
{
uchar i;
lcd_init();
lcd_clear();
while(1)
{
for(i=16;i>0;i--)
   {
   lcd_write_string(i,0,"123456");
   lcd_write_string(3,1,"i love you");
   delms(200);
   }
   i=16;
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
woodmice
1楼-- · 2019-07-15 23:47
 精彩回答 2  元偷偷看……
落尘浅羽
2楼-- · 2019-07-16 01:47
woodmice 发表于 2014-8-17 14:32
无论你采用哪种方式,都必须计算地址后将需要移动的一行从头到尾全部重写一道 ...

能和我讲讲怎么改地址不
我就是木木
3楼-- · 2019-07-16 05:35
那就不移动,通过程序写入显示在不同位置
woodmice
4楼-- · 2019-07-16 06:58
你还是按楼上说的吧,不用计算地址
芦苇鱼
5楼-- · 2019-07-16 10:15
 精彩回答 2  元偷偷看……
EchoEye
6楼-- · 2019-07-16 14:41
不错。。值得学习!!

一周热门 更多>