#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P3^5;     //位定义液晶数据命令选择端
sbit wr=P3^6;    //位定义液晶读写选择端
sbit leden=P3^4;  //位定义液晶使能端
uint i,j;

void delay(uint x)  //延时函数
{
	for(i=x;i>0;i--)
	{
	for(j=120;j>0;j--);
	}
}

void write_com(uchar com)  //写命令函数
{
	rs=0;      //数据命令选择端，写命令时设为0
	wr=0;     //读写选择端，写时设为0
	leden=0;  
	P0=com;   //将要写的命令送到数据总线上
	leden=1;   //使能端电平变换，形成一个高脉冲将命令写入到液晶控制器
	delay(5);   //延时
	leden=0;		
}

void write_data(uchar dat)  //写数据函数
{
	rs=1;      //数据命令选择端，写数据时设为1
	wr=0;     //读写选择端，写时设为0
	leden=0;
	P0=dat;   //将要写的数据送到数据总线上
	leden=1;  //使能端电平变换，形成一个高脉冲将命令写入到液晶控制器
	delay(5);  //延时
	leden=0;	
}

void init()  //1602液晶初始化设置函数
{
	write_com(0X38);  //显示模式设置,设置16×2显示、5×7点阵、8位数据口
	write_com(0X08);  //显示关闭
	write_com(0X01);  //显示清屏:数据指针清零，所有显示清零
	write_com(0X06);  //显示光标移动设置:写一个字符后地址指针加一，且光标加一
	write_com(0X0F);  //显示开及光标设置:开显示，显示光标，把光标设置为闪烁	
}

void main()
{
	init();  //1602液晶初始化设置
	write_data('A') ;   //显示A，用单引号把A刮起来
	while(1);
}
