LCD1602显示问题,我试了好几次都没能实现,有没有人交一下


#include"lcd1602.h"
uchar code str1[]="WELCOME TO";
uchar code str2[]="220631 of IoT";
uchar code str3[]="WISH YOU";
uchar code str4[]="STUDY MCU WELL";
void main()
{
    LCD_initial();
    while(1)
    {
        write_string(0x00,str1);
        write_string(0x040,str2);
        delayms(200);
        write_command(0x01);
        delayms(200);
        write_string(0x00,str3);
        write_string(0x40,str4);
        delayms(200);
        write_command(0x01);
        delayms(200);
    }
}





#define uchar unsigned char
#define uint unsigned int 


void LCD_initial(void);        //LCD?????
void check_busy(void);     //???????
void write_command(uchar com);     //?????
void write_data(uchar dat);        //?????
void string(uchar ad ,uchar *s);
void delayms(uint);                //????
void write_string(uchar addr,uchar str[]);//???????????





#include <reg51.h>
#include <intrins.h>
#include <string.h>

#define uchar unsigned char
#define uint unsigned int 

sbit RS=P1^7;                 //λ±äÁ¿
sbit RW=P1^6;                //λ±äÁ¿
sbit E=P1^5;                 //λ±äÁ¿
void delayms(uint n)            //n msÑÓʱ×Ó³ÌÐò
{
    uchar i;
    while(n--)
      for(i=0;i<113;i++);
}

void check_busy(void)     //¼ì²éæ±êÖ¾º¯Êý
{
    uchar dt;
    do
    {
        dt=0xff;
        E=0;
        RS=0;    
        RW=1;
        E=1;
        dt=P0;
        //E=0;//ÓÐÒ²¿ÉÒÔ
    }while(dt&0x80);
    E=0;
}

void write_command(uchar com)      //дÃüÁÊý
{
    check_busy();
    E=0;
    RS=0;
    RW=0;
    P0=com;
    E=1;
    _nop_( );
    E=0;
    delayms(1);
}

void write_data(uchar dat)         //дÊý¾Ýº¯Êý
{
    check_busy();
    E=0;
    RS=1;
    RW=0;
    P0=dat;
    E=1;
    _nop_();
    E=0;
    delayms(1);    
}

void write_string(uchar addr,uchar str[])
{
   uchar i;
   write_command(0x80+addr);
   for(i=0;i<strlen(str);i++)
   {
     write_data(str[i]);
     delayms(60);
   }
    
}

这个代码实现了分屏显示不同的数据,是从左往右显示的
如何实现第一屏的数据保持从左往右显示
第二屏的数据从右往左显示,我试了好几次都没能实现,有没有人交一下

写字符串的时候,根据字符串长度和屏幕宽度,计算出字符串该从第几个位置开始输出,比如字符串长度是8,宽度是16,你从8号位置开始显示,就是右对齐了