如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
一个超声波测距的程序源码下面是一个超声波测距的程序,硬件电路由于电脑格盘已丢失,下面的代码是从样机上复制的。硬件电路包括液晶显示、超声波的发射、超声波的接受、滤波、单片机处理。液晶显示采用LCD1602模块,下面的代码里有液晶的驱动,可以拷贝用于它处。超声波发射电路包括压电换能器及其支持电路,发射约44KHz的超声波。超声波的接收电路包含一块CD40106处理芯片。技术指标大约是测距范围在三米左右,测量精度约在厘米级别。大量用于倒车雷达的测距中。#include<reg51.h>#include<intrins.h>#defineBusy0x80//用于检测LCM状态字中的Busy标识#defineLCM_DataP0#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlongexternvoidcs_t(void);externvoiddelay(uint);voidLCMInit(void);voidDisplayOneChar(ucharX,ucharY,ucharDData);voidDisplayListChar(ucharX,ucharY,uchar*DData);voidDelay5Ms(void);voidDelay100Ms(void);voidWriteDataLCM(ucharWDLCM);voidWriteCommandLCM(ucharWCLCM,BuysC);datafloatdistant=0.0;ucharReadDataLCM(void);ucharReadStatusLCM(void);ucharcdle_net[]={"--Daoche_Leida--"};ucharemail[]={"Juli:"};ucharcls[]={""};ucharDIS[7];dataulongtime;floatdistant;sbitLCM_RS=P1^1;//定义LCD引脚sbitLCM_RW=P1^2;sbitLCM_E=P1^3;sbitP10=P1^0;dataucharflag;voidzhuanhuan(floatjuli){unsignedlongjuli1;juli1=juli*100;DIS[6]=juli1%10+0x30;juli1=juli1/10;DIS[5]=juli1%10+0x30;juli1=juli1/10;DIS[4]='.';DIS[3]=juli1%10+0x30;juli1=juli1/10;DIS[2]=juli1%10+0x30;juli1=juli1/10;DIS[1]=juli1%10+0x30;DIS[0]=juli1/10+0x30;}voidmain(void){Delay100Ms();//启动等待,等LCM讲入工作状态P10=1;TMOD=0x01;//计数器0工作在方式1TH0=0;TL0=0;//计数值初始化IT1=0;//低电平触发中断EA=1;//开总中断//IP=0x04;//设置外部中断1为高优先级中断flag=0;LCMInit();//LCM初始化while(1){cs_t();Delay5Ms();ET0=1;//打开计数器0中断EX1=1;//打开外部中断1TR0=1;while(!flag){DisplayListChar(0,0,cdle_net);DisplayListChar(0,1,email);}if(flag==1){time=TH0;time=(time<<8)|TL0;distant=time*1.72/100;zhuanhuan(distant);if(DIS[0]=='0')DisplayOneChar(5,1,'');elseDisplayOneChar(5,1,DIS[0]);if((DIS[0]=='0')&&(DIS[1]=='0'))DisplayOneChar(6,1,'');elseDisplayOneChar(6,1,DIS[1]);if((DIS[0]=='0')&&(DIS[1]=='0')&&(DIS[2]=='0'))DisplayOneChar(7,1,'');elseDisplayOneChar(7,1,DIS[2]);DisplayOneChar(8,1,DIS[3]);DisplayOneChar(9,1,DIS[4]);DisplayOneChar(10,1,DIS[5]);DisplayOneChar(11,1,DIS[6]);DisplayOneChar(12,1,'c');DisplayOneChar(13,1,'m');flag=0;}else{DisplayListChar(5,1