给个51单片机128*64液晶的C程序


就显示一个字好了,液晶型号说一下,谢了
#include "AT89x51.h"
#define uchar unsigned char
#define LCD_Data P2 //DO-D7数据总线
#define Busy 0x80 //用于检测LCM状态字中的贺桥绝Busy标识

sbit LCD_RS=P0^0; //定义引脚
sbit LCD_RW=P0^1;
sbit LCD_E=P0^2;
sbit LCD_PS=P0^3;

uchar show[]="12864液晶测试程序0123456789ABCDEFGHIJKLMNOPQ";

/////////延时程序/////////
void delay(second) //second=1时,延时5ms子程序
unsigned char second;
{
unsigned char i,j,k;
for(i=second;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--) ;
}

////////读状态////////
void ReadStatusLCD(void)
{
LCD_E=0; //使能 取消选择
LCD_Data=0xFF;
LCD_RS=0; //instruction
LCD_RW=1; //read
LCD_E=1; //使能 选择
while (LCD_Data&0x80); //检测忙信号
LCD_E=0;
}

////////写指令////////
void WriteCommandLCD(uchar Command,BuysC) //BuysC为0时忽略忙检测
{
LCD_E=0;
if (BuysC) ReadStatusLCD(); //根禅姿据需要检测忙
LCD_RS=0;
LCD_RW=0;
LCD_Data=Command;
LCD_E=1;
LCD_E=0;
}

////////写数据////////
void WriteDataLCD(uchar Data,BuysC)
{
LCD_E=0;
if (BuysC) ReadStatusLCD(); //根据需要检测忙
LCD_RS=1;
LCD_RW=0;
LCD_Data=Data;
LCD_E=1;
LCD_E=0;
}

void LCDInit(void) //LCD初始化
{
WriteCommandLCD(0x01,1); //清除显示
delay(1);
WriteCommandLCD(0x03,1); //地址归位
delay(1);
WriteCommandLCD(0x0f,1); //开显示
// WriteCommandLCD(0x1c,1); //游标右移
WriteCommandLCD(0x30,1); //基本指令消搜集动作
}

//显示一个汉字
void Display(uchar show[])
{
uchar *p,i=0;
p=show;
WriteCommandLCD(0x80,1);
while(*p!='\0')
{
WriteDataLCD(*p++,1);
i++;
if(i==16) WriteCommandLCD(0x90,1);
else if(i==32) WriteCommandLCD(0x88,1);
else if(i==48) WriteCommandLCD(0x98,1);
}
}

void main(void)
{
LCD_PS=1;
delay(8); //启动等待,等LCM讲入工作状态
LCDInit(); //LCM初始化

Display(show);
delay(250);
//WriteCommandLCD(0xa7,1);
delay(250);
while(1);
}
中文带字库液晶
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit RS =P1^4;
sbit WRD=P1^3;
sbit E = P1^2;
sbit PSB=P1^1;
//sbit RES=P2^0;

uchar discode1[]={"LCD12864液晶驱银吵动程序"};
void delay(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void write_com(uchar com)
{
RS=0;
WRD=0;
delay(1);
P2=com;
delay(10);
E=1;
delay(1);
E=0;
}
void write_date(uchar date)
{

WRD=0;
RS=1;
delay(1);
P2=date;
delay(10);
E=1;
delay(1);
E=0;
}
void init()
{
PSB=1;
delay(1);
// RES=0;
// delay(1);
// RES=1;
delay(1);
write_com(0x01);//清屏
delay(2);
// write_com(0x02);//地址归位
// delay(2);
write_com(0x0c);/锋锋侍/显示状态开关
delay(2);
write_com(0x30);//功基碧能设定:8位数据,基本指令
delay(2);
}
void main()
{
uint i;
init();
delay(10);
while(1)
{
write_com(0x80);
for(i=0;i<20;i++)
{
write_date(discode1[i]);
delay(2);
}

}

}