本例程为通过用AT89C52芯片操作LCD12864显示的程序,使用的晶振为12M。/**********************************************************程序说明:LCD12864显示主程序程序调试员:莫剑辉调试时间:2010-6-7**********************************************************/#includereg52.h#include12864.cvoidmain(){Ini_Lcd();//液晶初始化子程序Disp(1,0,6,莫剑辉);//显示数据到LCD12864子程序while(1);}这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。/**********************************************************程序说明:LCD12864显示头文件程序调试员:莫剑辉调试时间:2010-6-7**********************************************************///#includereg52.h#defineucharunsignedchar#defineuintunsignedint#defineDATAP2//数据输出端0~7sbitRS=P0^0;//LCD12864RS端sbitRW=P0^1;//LCD12864RW端sbitE=P0^2;//LCD12864E端sbitPSB=P0^3;/*********************************************延时子程序*********************************************/voidDelay_1ms(uintx){uintj,i;for(j=0;jx;j++){for(i=0;i120;i++);//延时X乘以120}}/*********************************************LCD12864液晶测忙子程序(读状态)*********************************************/voidBusy(){ucharbusy;do{E=0;//0为关闭使能端,1为打开使能端RS=0;//1为指令,0为数据RW=1;//1为读,0为写Delay_1ms(20);//延时20乘以120时间E=1;//0为关闭使能端,1为打开使能端busy=P1;//读取P2状态Delay_1ms(20);//延时20乘以120时间E=0;//0为关闭使能端,1为打开使能端}while(busy&0x80);//判断BUSY位是否工作:1为内部在工作,0为正常状态}/*********************************************LCD12864液晶数据写入子程序*********************************************/voidWrite_Data(uchark){Busy();//测忙E=1;//0为关闭使能端,1为打开使能端RS=1;//1为指令,0为数据RW=0;//1为读,0为写DATA=k;//输入数据K到DATADelay_1ms(20);//延时20乘以120时间E=0;//0为关闭使能端,1为打开使能端Delay_1ms(20);//延时20乘以120时间}/*********************************************LCD12864液晶命令写入子程序*********************************************/voidWrite_Cmd(ucharcmd){Busy();//测忙E=1;//0为关闭使能端,1为打开使能端RS=0;//1为指令,0为数据RW=0;//1为读,0为写DATA=cmd;//输入命令cmd到DATADelay_1ms(20);//延时20乘以120时间E=0;//0为关闭使能端,1为打开使能端Delay_1ms(20);//延时20乘以120时间}/*********************************************LCD12864液晶数据显示子程序*********************************************/voidDisp(uchary,ucharx,uchari,uchar*z){ucharAddress;if(y==1){Address=0x80+x;}//Y判断第几行,X判断第几列,0x80为液晶行初始地址if(y==2){Address=0x90+x;}if(y==3){Address=0x88+x;}if(y==4){Address=0x98+x;}Write_Cmd(Address);//写入地址命令到LCD12864while(i)//写入显示数据的大小{Write_Data(*(z++));//写入显示数据到LCD12864i--;}}/*********************************************LCD12864液晶初始化子程序*********************************************/voidIni_Lcd(void){PSB=1;Delay_1ms(20);Write_Cmd(0x30);//基本指令集Delay_1ms(20);Write_Cmd(0x02);//地址归位Delay_1ms(20);Write_Cmd(0x0c);//整体显示打开,游标关闭Delay_1ms(20);Write_Cmd(0x06);//游标右移Delay_1ms(20);Write_Cmd(0x80);//设定显示的起始地址Delay_1ms(20);Write_Cmd(0x01);//清除显示}