|
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS=P3^4; //數(shù)據(jù)/命令選擇端
sbit LCD_RW=P3^6; //讀/寫(xiě)選擇端
sbit LCD_EN=P3^5; //液晶使能控制
uchar code dis_l1[]={"白日依山盡"}; //定義所要被顯示的數(shù)據(jù)
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--);
}
/*寫(xiě)指令到LCD中,指令通過(guò)單片機(jī)的P0口輸入,
寫(xiě)指令操作順序按照RS=0;RW=0;EN=0;延時(shí);EN=1;寫(xiě)指令;延時(shí);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;
}
/*寫(xiě)數(shù)據(jù)到LCD中,數(shù)據(jù)通過(guò)單片機(jī)的P0口輸入,
寫(xiě)數(shù)據(jù)操作順序按照RS=1;RW=0;EN=0;延時(shí);EN=1;寫(xiě)數(shù)據(jù);延時(shí);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;
}
/*設(shè)定LCD的顯示位置 X表示所要顯示的行數(shù),Y表示所要顯示的列數(shù)*/
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功能設(shè)定指令,采用八位數(shù)據(jù),基本指令集
delayms(5);
write_comd(0x0c); //LCD顯示狀態(tài)開(kāi)關(guān)指令,顯示開(kāi),游標(biāo)開(kāi),不允許反白顯示
delayms(5);
write_comd(0x01); //LCD清除顯示指令,清除LCD顯示內(nèi)容,為后面顯示做準(zhǔn)備
delayms(5);
}
void main()
{
uchar i;
lcd_init(); //初始化
lcd_posi(1,0);//設(shè)定顯示位置為第一行第一個(gè)字符
i=0;
while(dis_l1[i]!='\0')
{
write_dat(dis_l1[i]);//顯示字符
i++;
}
lcd_posi(2,0);//設(shè)定顯示位置為第二行第一個(gè)字符
i=0;
while(dis_l2[i]!='\0')
{
write_dat(dis_l2[i]);
i++;
}
lcd_posi(3,0);//設(shè)定顯示位置為第三行第一個(gè)字符
i=0;
while(dis_l3[i]!='\0')
{
write_dat(dis_l3[i]);
i++;
}
lcd_posi(4,0);//設(shè)定顯示位置為第四行第一個(gè)字符
i=0;
while(dis_l4[i]!='\0')
{
write_dat(dis_l4[i]);
i++;
}
}
|
|