|
#include<reg51.h>
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
unsigned char code tab1[]="welcome AT89S51!";
unsigned char code tab2[]="LCD1602test..OK";
bit lcd1602_read_status();
void lcd1602_write_cmd(unsigned char cmd);
void lcd1602_write_dat(unsigned char dat);
void lcd1602_init();
void delay(unsigned int i);
void delay(unsigned int i)
{while(i--);}
bit lcd1602_read_status()
{ unsigned char temp;
RS=0;
RW=1;
temp=P0;
delay(20);
E=1;
delay(20);
E=0;
return (bit)(temp&0x80);
}
void lcd1602_write_cmd(unsigned char cmd)
{
while(lcd1602_read_status()!=0);
E=0;
RS=0;
RW=0;
P0=cmd;
delay(20);
E=1;
delay(20);
E=0;
}
void lcd1602_write_dat(unsigned char dat)
{
while(lcd1602_read_status()!=0);
E=0;
RS=1;
RW=0;
P0=dat;
delay(20);
E=1;
delay(20);
E=0;
}
void lcd1602_init()
{
E=0;
lcd1602_write_cmd(0x38);
lcd1602_write_cmd(0x0c);
lcd1602_write_cmd(0x01);
lcd1602_write_cmd(0x06);
delay(200);
}
void lcd1602_display()
{
unsigned char i,j;
lcd1602_write_cmd(0x80+0x00);
for(i=0;i<15;i++)
{lcd1602_write_dat(tab1[i]);delay(20);}
lcd1602_write_cmd(0x80+0x40);
for(j=0;j<14;j++)
{lcd1602_write_dat(tab2[j]);delay(20);}
}
void main()
{
lcd1602_init();
lcd1602_display();
while(1);
}
|
|