引脚图
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit RS=P2^7;
sbit RW=P2^6;
sbit E=P2^5;
void lcd_initial(void); //LCD初始化函数
void check_busy(void); //检查是否忙碌函数
void write_command(uchar com); //写命令函数
void write_data(uchar dat); //写数据函数
void string(uchar ad,uchar *s); //显示字符串函数
void delay(uint); //延时函数
void main(void)
{
lcd_initial(); //调用初始化函数
while(1)
{
string(0x85,"mzf");
string(0xC2,"185*****5260");
delay(100);
write_command(0x01);
delay(100);
}
}
void delay(uint j) //1ms的延时
{
uchar i=250;
for(;j>0;j--)
{
while(--i);
i=249;
while(--i);
i=250;
}
}
void check_busy(void)
{
uchar dt;
do
{
dt=0xff; //dt为变量单元,初值为0xff
E=0;
RS=0; //RS等于0,E=1时,才能够进行读忙碌状态
RW=1;
E=1;
dt=out; //out为P0口,将P0口的状态送给dt;
}while(dt&0x80);
E=0;
}
void write_command(uchar com)
{
check_busy(); //检查是否忙碌,检查BF标志位,如果BF=1,则繁忙
E=0;
RS=0; //RS,E同时为零时,才可以写入命令;
RW=0;
out=com; //将命令com写入P0;
E=1; //按规定执行命令时,E应为正脉冲,即正跳变,所以前面应该先直零
_nop_(); //空操作给硬件反应时间,此函数包含在intrins里面
E=0;
delay(1);
}
void write_data(uchar dat)
{
check_busy();
E=0;
RS=1;
RW=0;
out=dat;
E=1;
_nop_();
E=0;
delay(1);
}
void lcd_initial(void) //液晶显示器初始化函数
{
write_command(0x38); //两行显示,5x7点阵,8位数据
write_command(0x0C); //开整体显示,光标关,无闪烁
write_command(0x06); //写入一个字符后,地址指针加一
write_command(0x01); //清屏
delay(1);
}
void string(uchar ad,uchar *s)
{
write_command(ad);
while(*s>0)
{
write_data(*s++);
delay(100);
}
}