#include<reg51.h>
#define uchar unsigned char
sbit LCD_EN=P2^5;
sbit LCD_RW=P2^6;
sbit LCD_RS=P2^7;
sbit bflag=P1^7;
void WaitLcd(void) // 检查忙信号
{
P1=0xff;
LCD_RS=0;
LCD_RW=1; // 读BF
LCD_EN=1; // EN的置位必须在RS和RW之后
while(bflag==1) ;
LCD_EN=0;
}
void WR_INST(uchar a)
{ // 写控制字
WaitLcd();
LCD_RS=0;
LCD_RW=0;
LCD_EN=1;
P1=a;
LCD_EN=0;
}
void WR_DATA(uchar a)
{ // 写显示字符
WaitLcd();
LCD_RS=1;
LCD_RW=0;
LCD_EN=1;
P1=a;
LCD_EN=0;
}
void WR_String(uchar *s)
{ // 写显示串
while(*s!=0x00)
{
WR_DATA(*s);
s++;
}
}
void Init_Lcd(void) // 初始化
{
WR_INST(0x38); // 2行 5*7 字符
WR_INST(0x08); // 关显示屏
WR_INST(0x01); // 清显示
WR_INST(0x0c); // 显示开,显示光标,闪烁
WR_INST(0x06); // 输入模式 地址增量,显示屏不移动
}
void Delay(uchar MS)
{
uchar us,usn;
while(MS!=0)
{
usn = 2; //for 12M
while(usn!=0)
{
us=0xf6;
while (us!=0){us--;};
usn--;
}
MS--;
}
}
void main(void)
{
uchar i=0;
Init_Lcd();
WR_INST(0x00);
WR_String("GOOD");
WR_INST(2|0xc0);
WR_String("good");
while(1)
{
for(i=0;i<10;i++)
{
WR_INST(0x1c);
Delay(250);
}
for(i=0;i<10;i++)
{
WR_INST(0x18);
Delay(250);
}
}
}