#include <reg52.h>
#define  uint unsigned int
#define uchar unsigned char
/* ***************************
PIN 
*************************/
#define LCD1602_DB P0// 
 sbit LCD1602_RS=P2^5;
 sbit LCD1602_RW=P2^6;
 sbit LCD1602_EN=P2^7; 
/* 
*****************************
*/
void LCD1602_check_busy(void)
{
    unsigned char sta;
    LCD1602_DB=0xff;
    LCD1602_RS=0;
    LCD1602_RW=1;
  do
    {
        LCD1602_EN=1;
        sta=LCD1602_DB;
        LCD1602_EN=0;
    }while(sta & 0x80);
}
void wrcmd1602(char cmd)
{
    LCD1602_check_busy();
    LCD1602_RS=0;
    LCD1602_RW=0;
    LCD1602_DB=cmd;
    LCD1602_EN=1;
    LCD1602_EN=0;
}
void wrdata1602(char mdata)
{
    LCD1602_check_busy();
    LCD1602_RS=1;
    LCD1602_RW=0;
    LCD1602_DB=mdata;
    LCD1602_EN=1;
    LCD1602_EN=0;
}
void LcdSetCursor(unsigned char x,unsigned char y)
{
  unsigned char addr;
    if(x==0)
        addr=0x00 + y;
    else
        addr=0x40 + y;
    wrcmd1602(0x80+addr);
}
void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str)
{
    LcdSetCursor(x,y);
    while(*str!='\0')
    {
        wrdata1602(*str++);
    }
}
void InitLcd1602()
{
    LCD1602_RW=0;
    LCD1602_EN=0;
    wrcmd1602(0x38);
    wrcmd1602(0x0c);
    wrcmd1602(0x06);
    wrcmd1602(0x01);
    wrcmd1602(0x80);
}
void LCD1602_cls()
{
  LCD1602_check_busy();
    LCD1602_RS=0;
    LCD1602_RW=0;
    LCD1602_DB=0x01;
    LCD1602_EN=1;
    LCD1602_EN=0;
}
     
/* 
***************?÷oˉêy**************
*/
void main()
{

  InitLcd1602();
    LCD1602_cls();
    LcdShowStr(0,0,"    Hello!zxf");
    LcdShowStr(1,0," Hello!");
 
    while(1);
}