您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 51单片机超声波测距C程序
51单片机超声波测距C程序(2010-01-2614:09:10)超声波检测原理超声波测距的程序流程图程序如下://超声波模块程序//超声波模块程序//Trig=P2^0//Echo=P3^2#includereg52.h#defineucharunsignedchar#defineuintunsignedint//voiddelay(uintz){uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}//voiddelay_20us(){uchara;for(a=0;a100;a++);}//***************************************************************//显示数据转换程序voiddisplay(uinttemp){ucharge,shi,bai;bai=temp/100;shi=(temp%100)/10;ge=temp%10;wela=1;P0=0xf7;wela=0;dula=1;P0=table[bai];dula=0;delay(1);dula=1;P0=0x00;//关位码dula=0;wela=1;P0=0xef;wela=0;dula=1;P0=table[shi];dula=0;delay(1);dula=1;P0=0x00;//关位码dula=0;dula=1;P0=table[ge];dula=0;wela=1;P0=0xdf;wela=0;delay(1);dula=1;P0=0x00;//关位码dula=0;}//***************************************************************voidmain(){uintdistance;test=0;Trig=0;//首先拉低脉冲输入引脚EA=1;//打开总中断0TMOD=0x10;//定时器1,16位工作方式while(1){EA=0;//关总中断Trig=1;//超声波输入端delay_20us();//延时20usTrig=0;//产生一个20us的脉冲while(Echo==0);//等待Echo回波引脚变高电平succeed_flag=0;//清测量成功标志EA=1;EX0=1;//打开外部中断0TH1=0;//定时器1清零TL1=0;//定时器1清零TF1=0;//计数溢出标志TR1=1;//启动定时器1delay(20);//等待测量的结果TR1=0;//关闭定时器1EX0=0;//关闭外部中断0if(succeed_flag==1){time=timeH*256+timeL;distance=time*0.172;//厘米display(distance);}if(succeed_flag==0){distance=0;//没有回波则清零test=!test;//测试灯变化}}}//***************************************************************//外部中断0,用做判断回波电平voidexter()interrupt0//外部中断0是0号{timeH=TH1;//取出定时器的值timeL=TL1;//取出定时器的值succeed_flag=1;//至成功测量的标志EX0=0;//关闭外部中断}//****************************************************************//定时器1中断,用做超声波测距计时voidtimer1()interrupt3//{TH1=0;TL1=0;}
本文标题:51单片机超声波测距C程序
链接地址:https://www.777doc.com/doc-4228982 .html