/*========================LCD12864液晶并行驱动程序==========================程序名称:12864液晶驱动程序(并行模式)============================================================================*/#includeat89x52.h#defineucharunsignedchar#defineuintunsignedintuchart,p;/********************************引脚定义***********************************/#defineRSP1_0//RS=0为执行指令;RS=1为执行数据;#defineRWP1_1//读写#defineEP1_2//使能#definePSBP1_3//低电平(串口驱动);高电平(并口驱动)#defineRSTP1_4//LCD复位/********************************定义数组***********************************/ucharcodetitle[]={LCD并行接口测试};ucharcodewebsite[]={qwertyuioopplkjh};ucharcodedig[]={0123456789};ucharcodedig2[]={0,1,2,3,':'};///*******************************相关子程序**********************************/voidInit_lcd();//初始化液晶voidlcd_busy();//忙标志查询voiddelay100us();//100us延时程序voidwrite(ucharx,ucharData);//写单字节函数voidShow(ucharaddress,ucharL,ucharSTR1[]);voidShow_dig(ucharaddress,uintnumber);/*******************************延时子程序**********************************/voiddelay100(intn){unsignedchari;while(n--)for(i=0;i100;i++);}/*******************************LCD忙标志查询******************************/voidlcd_busy(void){ucharbusy;P0=0xff;RS=0;RW=1;do{E=1;busy=P0;E=0;}while(busy0x7f);}/*****************************写指令或数据**********************************/voidwrite(ucharx,ucharData){lcd_busy();//忙查询if(x==0){RS=0;RW=0;//写单字节命令字}elseif(x==1){RS=1;RW=0;//写单字节数据}E=1;P0=Data;E=0;P0=0xff;}/*******************************初始化LCD**********************************/voidInit_lcd(void){delay100(20);//启动等待,等LCM讲入工作状态PSB=1;//并口驱动模式RST=0;delay100(4);RST=1;//复位LCDwrite(0,0x30);//8位介面,基本指令集write(0,0x0c);//显示打开,光标关,反白关write(0,0x01);//清屏,将DDRAM的地址计数器归零}/*******汉字和字符显示,参数入口:Show(地址,显示宽度,汉字数组)************/voidShow(ucharaddress,ucharL,ucharSTR1[]){uchari;write(0,address);for(i=0;iL;i++)write(1,STR1[i]);}/************纯阿拉伯数字显示,参数入口:Show_dig(地址,数字)**************/voidShow_dig(ucharaddress,uintnumber){ucharshi,ge;shi=number/10;ge=number%10;write(0,address);delay100(20);write(1,dig[shi]);delay100(20);write(1,dig[ge]);}/************************************主程序**********************************/voidmain(void){Init_lcd();TMOD=0X01;TH0=0xdc;TL0=0x00;ET0=1;TR0=1;EA=1;P3_6=0;delay100(30);Show(0x83,4,梁浩);//写数组里的内容write(0,0x0d);delay100(30);Show(0x90,16,电子科技协会会长);delay100(30);Show(0x88,16,TEL15281642659);//写英文delay100(30);while(1){Show_dig(0x99,p);//写实时数组}}voidexter()interrupt1{TH0=0xdc;TL0=0x00;t++;if(t==20){t=0;p++;}if(p==60)p=0;}/***************************************end***********************************/