求US-100(模块)超声波测距的C语言程序,基于51单片机的,3Q哦~

求基于51单片机的US-100超声波测距C语言程序。需要详细点的具体设计程序,O(∩_∩)O~ US-100模块参考资料:http://wenku.baidu.com/view/65e63e35a32d7375a41780ce.html
性能要求:实现2--150cm的测距,测得结果保留4位有效数字(取整数),单位:mm。
哪位大神帮帮忙喽,急啊!!!真心谢谢大神了~

第1个回答  推荐于2017-05-18
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};
sbit tr=P1^0;
sbit ec=P1^1;
uint distance,time,tl,th;
void delay_20us(void )
{
uchar a ;
for(a=0;a<100;a++);
}
void delay(uint a )
{
while(a--);
}
void display(void )
{
P2=0xff;
P2=0xfe;
P0=smg[distance/100];
delay(200);
P2=0xff;
P2=0xfd;
P0=smg[distance%100/10];
delay(200);
P2=0xff;
P2=0xfb;
P0=smg[distance%10];
delay(200);
}
void main(void )
{
uchar i;
TMOD=0X10;
while(1)
{
tr=1; //超声波输入端
delay_20us(); //延时20us
tr=0; //产生一个20us的脉冲
while(ec==0); //等待Echo回波引脚变高电平
TH1=0; //定时器1清零
TL1=0; //定时器1清零
TF1=0; //计数溢出标志
TR1=1; //启动定时器1
while(ec==1);
th=TH1;
tl=TL1;
TL1=0;
TH1=0;
TR1=0; //关闭定时器1
time=th*256+tl;
distance=time*0.017; //厘米 */
display();

}
}
不懂M我本回答被网友采纳
第2个回答  2014-09-22
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};
sbit tr=P1^0;
sbit ec=P1^1;
uint distance,time,tl,th;
void delay_20us(void )
{
uchar a ;
for(a=0;a<100;a++);
}
void delay(uint a )
{
while(a--);
}
void display(void )
{
P2=0xff;
P2=0xfe;
P0=smg[distance/100];
delay(200);
P2=0xff;
P2=0xfd;
P0=smg[distance%100/10];
delay(200);
P2=0xff;
P2=0xfb;
P0=smg[distance%10];
delay(200);
}
void main(void )
{
uchar i;
TMOD=0X10;
while(1)
{
tr=1; //超声波输入端
delay_20us(); //延时20us
tr=0; //产生一个20us的脉冲
while(ec==0); //等待Echo回波引脚变高电平
TH1=0; //定时器1清零
TL1=0; //定时器1清零
TF1=0; //计数溢出标志
TR1=1; //启动定时器1
while(ec==1);
th=TH1;
tl=TL1;
TL1=0;
TH1=0;
TR1=0; //关闭定时器1
time=th*256+tl;
distance=time*0.017; //厘米 */
display();

}
}

求US-100(模块)超声波测距的C语言程序,基于51单片机的,3Q哦~
delay(200);P2=0xff;P2=0xfb;P0=smg[distance%10];delay(200);} void main(void ){ uchar i;TMOD=0X10;while(1){ tr=1; \/\/超声波输入端 delay_20us(); \/\/延时20us tr=0; \/\/产生一个20us的脉冲 while(ec==0); \/\/等待Echo回波引脚变高电平 TH1=0; \/\/定时器1清...

51单片机超声波测距代码
include <reg51.h>#define uchar unsigned char#define uint unsigned int#define LCD_DATA P2sbit LCD_BL=P1^0;sbit LCD_RS=P1^1;sbit LCD_RW=P1^2;sbit LCD_EN=P1^3;sbit TRIG=P0^0;sbit ECHO=P0^1;bit flag=0;uchar time,b,s,g;uint l;uchar code num_tab[]="0123456789";v...

求51单片机超声波避障程序
StartModule(); \/\/启动超声波测距Conut(); \/\/计算距离S4=S; push_val_left=14; \/\/舵机归中timer=0;while(timer<=4000); \/\/延时400MS让舵机转到其位置 StartModule(); \/\/启动超声波测距Conut(); \/\/计算距离S1=S; if((S2<20)||(S4<20)) \/\/只要左右各有距离小于20CM小车后退{backrun(); \/\/后退...

51单片机控制的超声波测距程序问题,为什么num一直为0
嗯!这个问题是!你的外部中断使用的是外部中断0,而定时器使用的也是0.在51内,外部中断0的优先级是要大于定时器0的。所以在程序的最后是要先执行外部中断0的!然后你的程序就会先进入外部中断服务,然后你在外部中断中又把定时器中断给关闭了!这样你就不会走到定时器中断的服务项中。所以你的num...

51单片机,用超声波测距,怎么又调不好,大神给看看吧
trig = 1;Delay(20); 这为发射端发射个脉冲信号 trig = 0;while(!echo) 接受端echo不为0时,表示接收到高电平信号,然后就是计算这个高电平的时间了 TR0 = 1; 开定时器 while(echo) 直到echo变为0说明接收的高电平结束了 TR0 = 0; 关定时器 load = TH0 * 256 + TL0...

帮忙做一个超音波测距仪程序,c语言和汇编语言都行
这里有一个超声波测距程序,供参考:#include <reg52.H>\/\/器件配置文件#include <intrins.h>\/\/传感器接口sbit RX = P3^2;sbit TX = P3^3;\/\/按键声明sbit S1 = P1^4;sbit S2 = P1^5;sbit S3 = P1^6;\/\/蜂鸣器sbit Feng= P2^0;sbit W1=P1^0;sbit W2=P1^1;sbit W3=P1^...

51单片机 HC-SR04超声波测距 我写的C语言代码,请问
1、HC-SR04使用方法:给触发端子trig一个10us以上的高电平即可触发,触发后echo端子将接受到高电平,高电平的持续时间就是测距的往返时间。2、例程:include<reg52.h>#define uchar unsigned char#define uint unsigned int\/*位定义*\/sbit CHUFA=P0^1; \/\/位定义超声波触发端(10us以上高电平触发...

51单片机如何控制超声波传感器 求C语言程序(一定要能用)100追加
51单片机如何控制超声波传感器 求C语言程序(一定要能用)100追加 50 型号是DYP-ME007VCC(DC5V)、Trig(发射端)、Echo(接收端)、Out(空)、GND(地)(1)采用IO触发测距,给8--15us的高电平信号即可;(2)模块自动发送8个40khz的方波,自动检测是否有信... 型号是DYP-ME007 VCC(DC5V)、Trig(发射端)、Echo(...

超声波测距程序问题
我贴一个测试成功的51程序,试了多个超声波模块,可以测试0到5米距离。测试结果从串口反馈到PC,也有从数码管显示的。有疑问欢迎Q我。QQ号在最后:include <reg52.h> include "stdio.h"include "MCU_UART.H"define uchar unsigned char define uint unsigned int sbit Trig = P1^0 ;sbit ...

51单片机超声波测距数码管显示为什么示数一直不稳定,而且变化幅度好大...
超声波遇到障碍物会反射,特别是在室内,会多次反射,如果你对发射的频率(只是发射的频率,而非超声波频率)不做限制,前后反射的信号被接收后叠加,自然就会出现你说的那种情况了。你要做的:1、对数据做数字滤波,取几次结果,然后抛弃一些不正常的数据(比如取10个值,去两个最大值,两个最小值...

相似回答