#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++;
}
}
|