微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求教lcd1602滚动显示的相关问题,会的大神解答解答

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

时间:10-02 整理:3721RD 点击:
我想让显示一行滚动显示一行静态显示,如果用移动指令去的话,会两行都移动
用点阵移动方式去的话,在移动完数据后后面会全部显示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;
}

无论你采用哪种方式,都必须计算地址后将需要移动的一行从头到尾全部重写一道

能和我讲讲怎么改地址不

那就不移动,通过程序写入显示在不同位置

你还是按楼上说的吧,不用计算地址

同意楼上的说法  不移动  然后写入程序的方法比较好

不错。值得学习!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top