源代码如下:
#include<reg51.h>
#include<intrins.h>
#define out P0
sbit RS=P2^0;
sbit RW=P2^1;
sbit E =P2^2; //定义控制引脚
//延时函数
void delay(unsigned long n)
{
while(n)
{
_nop_();
n--;
}
}
//检查当前1602是否处于忙状态
void LCDcheckbusy(void)
{
unsigned char dt;
do
{
dt=0xff;
E=0;
RS=0;
RW=1;
E=1;
dt=out;
}while(dt&0x80);
E=0;
}
//LCD写命令函数
void LCDwritecmd(unsigned char com)
{
LCDcheckbusy();
E=0;
RS=0;
RW=0;
out=com;
E=1;
_nop_();
E=0;
delay(1);
}
//LCD显示函数
void LCDwritedata(unsigned char dat)
{
LCDcheckbusy();
E=0;
RS=1;
RW=0;
out=dat;
E=1;
_nop_();
E=0;
delay(1);
}
void LCDstr(char *str)
{
while(*str)
{
LCDwritedata(*str);
str++;
}
}
//LCD初始化函数
void LCDinitial(void)
{
LCDwritecmd(0x38);
LCDwritecmd(0x0c);
LCDwritecmd(0x06);
LCDwritecmd(0x01);
delay(1);
}
//主函数,1602显示单个字符和字符串
void main()
{
unsigned char *str="hello world!"; //定义要显示的字符串
unsigned char code temp[]="hello world!"; //定义要显示的字符串
LCDinitial();
LCDwritecmd(0x80); //在第一行显示
LCDwritedata('1'); //显示单个字符
LCDwritecmd(0x80+0x40); //在第二行显示
// LCDstr("hello world!");
// LCDstr(str);
LCDstr(temp);
while(1);
}
电路图及运行结果如下: