创意发明: 基于STC51单片机超声波测距(精简设计只需三个元件)

基于STC51单片机超声波测距精简设计只需三个元件(测距模块暂且算做是一个元件吧)
1.所需元件:STC单片机+超声波模块+4位共阳数码管
2.原理:单片机向测距模块trig脚发送20us的高电平触发测距,Echo 测距结束时会输出高电平,电平时长为超声波信号往返时间之和。Echo 脚开始输出高电平时启动定时计数器计时,当Echo 脚高电平结束时停止计数,根据定时器的时间可算出距离。
3.连接:单片机插在面包板上数码管直接插在单片机上面(引脚一一对应见原理图)测距模块trig脚接P5.4Echo 脚接P5.5

实物图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
参考C程序代码如下:

/***************************************************************

程序名: 51单片机超声波测距()

硬件支持:超声波模块US-020、四位共阳数码管、STC单片机
//
#include <STC15w.H>// 单片机头文件
#include <intrins.h>
#include <4LED_YANG.h>//包含共阳数码管驱动程序
#define uchar unsigned char
#define uint unsigned int
uint timeH,timeL;//定义2个存储计时器值的变量
uint distance;//定义测量值的变量
uint time;//定义Echo脚返回的高电平时间变量
//
sbit Echo = P5 ^ 5; //超声波测距模块Echo连接的IO
sbit Trig = P5 ^ 4; //超声波测距模块Trig连接的IO
/
/
void delay1ms (unsigned int a){ // 1ms延时程序
unsigned int i;
while( --a != 0){
for(i = 0; i < 630; i++);//STC单片机在晶振为12MHz时i值上限为630
} //AT89C51单片机在外部晶振为12MHz时i值上限为125
}
/
/
void delay_20us() //@12.000MHz
{
unsigned char i;
nop();
nop();
i = 57;
while (–i);
}
/*********************************************************************************************
函数名:定时器初始化函数
调 用:INT_init();
/
/
void INT_init (void){
TMOD=0x01; //定时器0,16位工作方式计数模式
TH0=0; //定时器0清零
TL0=0; //定时器0清零
EA = 1; //总中断开
Trig=0;//拉低为下次触发做准备
}
//
*********
void dist (void){//测量距离程序
Trig=1; //
delay_20us(); //延时20us
Trig=0; //Trig输出20us高电平触发测距
while(Echo0); //等待Echo回波引脚变高电平
TR0=1;//程序运行到此处时说明Echo脚变成了高电平,此时启动T0开始计时
while(Echo
1); //等待Echo回波引脚高电平结束
TR0=0;//程序运行到此处时说明Echo脚变成了低电平,此时T0停止计时
time=TH0256+TL0;
distance=time
0.170; //测量距离
distance=distance-2;//测量起点不同减去的数值不同
TH0 = 0; //重置计时器
TL0 = 0;

}
void main()//主函数
{

init();//单片机IO口工作方式初始化
INT_init;//T0初始化
while(1)
{
dist();//测量距离
disp();//数码管显示距离
delay1ms(20);//两次测量间需要有10ms间隔
}
}
//鉴于篇幅有限,C完整源码 及所有技术文件,

最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,
如果需要 完整代码或设计文件,请在下方留言或者私信我,看到后会第一时间回复。

谢谢!

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值