/*****************************************************************************/Name:LCD1602+US-100+STC89C52HC-SR04超声波测距模块串口程序晶振:11.0592MDesignedby:庶野琴风Date:2016/08/11QQ:397739038接线:模块TRIG接P3.1ECH0接P3.0RS(CS)接P2.0;RW(SID)接P2.1;E(SCLK)接P2.2;BF接P0.7;/*****************************************************************************/#include#include#definenops{_nop_();_nop_();_nop_();_nop_();}/******************************引脚及变量的定义****************************/sbitRS=P2^0;//寄存器选择位sbitRW=P2^1;//读取选择位sbitE=P2^2;//使能信号位sbitBF=P0^7;//忙碌信号位unsignedcharcodeTab[]={"0123456789"};unsignedcharcodestring[]={"range:2cm--4.5m"};charpart,ge,shi,bai;charidataGLengthLoh[2];//接收缓冲区bitsuccess_flag;//定义测试成功标志位/*********************************************************//*********函数名称:delay1ms(void)******************//*********函数功能:延时1毫秒******************//*********函数参数:void******************//*********************************************************/voiddelay1ms(void)//误差-0.651041666667us{chara,b;for(b=102;b>0;b--)for(a=3;a>0;a--);}/*********************************************************//*********函数名称:delaynms(charn)******************//*********函数功能:延时n个1毫秒******************//*********函数参数:n******************//*********************************************************/voiddelaynms(charn){chara;for(a=0;a>n;a--)delay1ms();}/*********************************************************//*********函数名称:BusyTest(void)******************//*********函数功能:判断液晶模块忙碌状态******************//*********函数参数:返回值:result******************//*********************************************************/unsignedcharBusyTest(){bitresult;RS=0;RW=1;//RS为低电平,RW为高电平时,可以读状态E=1;//使能为高电平时可读取信息nops;//延时40us,给硬件反应时间result=BF;//将忙碌标志位电平赋给resultE=0;//使能1到0:执行指令returnresult;}/*********************************************************//*********函数名称:WriteInstruction(chardictate)*******//*********函数功能:将模式设置指令或显示地址写入液晶模块**//*********函数参数:dictate******************//*********************************************************/voidWriteInstruction(chardictate){while(BusyTest()==1);//如果忙碌标志位忙碌则等待RS=0;RW=0;//RS/RW位同时为低电平时可写入指令E=0;//使能0到1:写入指令nops;P0=dictate;//将数据送入P0口,写入数据或地址nops;E=1;//使能0到1:写入指令nops;E=0;//使能1到0:执行指令}/*********************************************************//*********函数名称:WriteAddress(charx)*******//*********函数功能:指定字符显示的实际地址***********//*********函数参数:x******************//*********************************************************/voidWriteAddress(charx){WriteInstruction(x|0x80);//80H+地址码}/*********************************************************//*********函数名称:WriteData(chary)*******//*********函数功能:将数据(字符的标准ASCII码)写入液晶模块*//*********函数参数:y******************//*********************************************************/voidWriteData(chary){while(BusyTest()==1);//如果忙碌标志位忙碌则等待RS=1;RW=0;//RS为高电平,RW为低电平时,可以写入数据E=0;P0=y;nops;E=1;nops;E=0;}/*********************************************************//*********函数名称:LCDInit(void)*******//*********函数功能...