atmega16控制液晶显示屏,怎么一行左移,一行右移


#include 
#include 
#define lcd_rs PORTD.3
#define lcd_rw PORTD.4
#define lcd_en PORTD.6
#define lcd_dataport PORTB
flash char row1[12]={0x49,0x20,0x4c,0x49,0x4b,0x45,0x20,0x41,0x56,0x52,0x20,0x21};
flash char row2[12]={0x49,0x20,0x4c,0x49,0x4b,0x45,0x20,0x50,0x49,0x43,0x20,0x21};
// Declare your global variables here
void write_com(unsigned char com)
{
   lcd_dataport=com;
   lcd_rs=0;
   lcd_rw=0;
   lcd_en=1;
   delay_ms(1);
   lcd_en=0;
}
void write_dat(unsigned char dat)
{
 lcd_dataport=dat;
 lcd_rs=1;
 lcd_rw=0;
 lcd_en=1;
 delay_ms(1);
 lcd_en=0;
}
void main(void)
{
   unsigned char i;
   DDRB=0xFF;
   PORTB=0x00;
   DDRD|=0x58;
   PORTD&=0xA7;
   write_com(0x38);
   delay_ms(5);
   write_com(0x08); 
   delay_ms(5);
   write_com(0x01);
   delay_ms(5);
   write_com(0x02);
   delay_ms(5);
   write_com(0x0D);
   delay_ms(5);
   write_com(0x06);
   delay_ms(5);
   write_com(0x80);
   delay_ms(5);
   
  for(i=0;i<12;i++)
  { 
    write_dat(row1[i]);
    delay_ms(10);
  }              
  write_com(0x80+0x40);
  delay_ms(5);   
  for(i=0;i<12;i++)
  { 
    write_dat(row2[i]);
    delay_ms(10);
  }      
    for(i=0;i<12;i++)
  {  
    write_com(0x30);
    write_com(0x18);
    delay_ms(5);
    write_com(0x30);
    write_com(0x1C);
  }

如何在此基础上,让第一行左移,第二行右移

1,先看液晶屏本身是否支持硬件移屏,如果不支持,就本地计算好新位置的数据,然后用新的数据刷新屏幕