求教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;
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。