void LCD_write_command(uchar command); //写指令函数

void LCD_write_data(uchar dat);

//写数据函数

void LCD_disp_char(uchar x,

uchar y,uchar dat);

//在某个屏幕位置上显示一个字符,X(0-16),y(1-2)

void delay_n40us(uint n);//延时函数

//********************************

//*******液晶初始化函数***************

void LCD_init(void)

{

LCD_write_command(0x38);

//设置 8 位格式,2 行,5x7

LCD_write_command(0x0c);

//整体显示,关光标,不闪烁

LCD_write_command(0x06);

//设定输入方式,增量不移位

LCD_write_command(0x03);

//清除屏幕显示

delay_n40us(100);

}

//********************************

//*******定时器初始化函数**********

void timerinit()

{

TMOD=0x01;

TH0=-50000/256;

TL0=-50000%6;

EA=1;

ET0=1;

}

//********************************

//********写指令函数************

void LCD_write_command(uchar dat)

{

LCD_DB=dat;

LCD_RS=0;//指令

LCD_RW=0;//写入

LCD_E=1;//允许

delay_n40us(1);

LCD_E=0;

delay_n40us(1);

}

//*******************************

//********写数据函数*************

void LCD_write_data(uchar dat)

{

LCD_DB=dat;

LCD_RS=1;//数据

LCD_RW=0;//写入

LCD_E=1;//允许

delay_n40us(1);

LCD_E=0;

delay_n40us(1);

}

//********************************

//*******显示一个字符函数*********

void LCD_disp_char(uchar x,

uchar y,uchar dat)

{

uchar address;

if(y==1)

address=0x80+x;

else

address=0xc0+x;

LCD_write_command(address);

LCD_write_data(dat);

}

//********************************

//********延时函数***************

void delay_n40us(uint n)

{

uint i;

uchar j;

for(i=n;i》0;i--)

for(j=0;j《2;j++);

}

voidDelay_10us(void)

{

U8 i;

i--;

i--;

i--;

i--;

i--;

i--;

}

void Delay(U16 j)

{

U8 i;

for(;j》0;j--)

for(i=0;i《27;i++);

}

//*******一字节数据传送函数*********

voidCOM(void)

{

U8 i;

for(i=0;i《8;i++)

{

U8FLAG=2;

while((!io)&&U8FLAG++);

Delay_10us();

Delay_10us();

Delay_10us();

U8temp=0;

if(io)U8temp=1;

U8FLAG=2;

while((io)&&U8FLAG++);

//超时则跳出for循环

if(U8FLAG==1)break;

//判断数据位是0还是1

// 如果高电平高过预定0高电平值则数据位为 1

U8comdata《《=1;

U8comdata|=U8temp;

}