#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号位置开始显示,就是右对齐了