#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS=P3^4; //数据/命令选择端
sbit LCD_RW=P3^6; //读/写选择端
sbit LCD_EN=P3^5; //液晶使能控制
uchar code dis_l1[]={"白日依山尽"}; //定义所要被显示的数据
uchar code dis_l2[]={"黄河入海流"};
uchar code dis_l3[]={"欲穷千里目"};
uchar code dis_l4[]={"更上一层楼"};
void delayms(uint ms)
{
uint i,j;
for(i=ms;i>0;i++)
for(j=110;j>0;j--);
}
/*写指令到LCD中,指令通过单片机的P0口输入,
写指令操作顺序按照RS=0;RW=0;EN=0;延时;EN=1;写指令;延时;EN=0的顺序*/
void write_comd(uchar cmd)
{
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
delayms(5);
LCD_EN=1;
P0=cmd;
delayms(5);
LCD_EN=0;
}
/*写数据到LCD中,数据通过单片机的P0口输入,
写数据操作顺序按照RS=1;RW=0;EN=0;延时;EN=1;写数据;延时;EN=0的顺序*/
void write_dat(uchar dat)
{
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
delayms(5);
LCD_EN=1;
P0=dat;
delayms(5);
LCD_EN=0;
}
/*设定LCD的显示位置 X表示所要显示的行数,Y表示所要显示的列数*/
void lcd_posi(uchar X,uchar Y)
{
uchar posi;
if(X==1)
X=0x80;
else if(X==2)
X=0x90;
else if(X==3)
X=0x88;
else if(X==4)
X=0x98;
posi=X+Y;
write_comd(posi);
}
/*LCD初始化*/
void lcd_init()
{
write_comd(0x30); //LCD功能设定指令,采用八位数据,基本指令集
delayms(5);
write_comd(0x0c); //LCD显示状态开关指令,显示开,游标开,不允许反白显示
delayms(5);
write_comd(0x01); //LCD清除显示指令,清除LCD显示内容,为后面显示做准备
delayms(5);
}
void main()
{
uchar i;
lcd_init(); //初始化
lcd_posi(1,0);//设定显示位置为第一行第一个字符
i=0;
while(dis_l1[i]!='\0')
{
write_dat(dis_l1[i]);//显示字符
i++;
}
lcd_posi(2,0);//设定显示位置为第二行第一个字符
i=0;
while(dis_l2[i]!='\0')
{
write_dat(dis_l2[i]);
i++;
}
lcd_posi(3,0);//设定显示位置为第三行第一个字符
i=0;
while(dis_l3[i]!='\0')
{
write_dat(dis_l3[i]);
i++;
}
lcd_posi(4,0);//设定显示位置为第四行第一个字符
i=0;
while(dis_l4[i]!='\0')
{
write_dat(dis_l4[i]);
i++;
}
}
|