900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 创意发明: 基于STC51单片机超声波测距(精简设计只需三个元件)

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

时间:2020-05-31 10:52:30

相关推荐

创意发明: 基于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(Echo1); //等待Echo回波引脚高电平结束

TR0=0;//程序运行到此处时说明Echo脚变成了低电平,此时T0停止计时

time=TH0256+TL0;

distance=time0.170; //测量距离

distance=distance-2;//测量起点不同减去的数值不同

TH0 = 0; //重置计时器

TL0 = 0;

}

void main()//主函数

{

init();//单片机IO口工作方式初始化

INT_init;//T0初始化

while(1)

{

dist();//测量距离

disp();//数码管显示距离

delay1ms(20);//两次测量间需要有10ms间隔

}

}

//鉴于篇幅有限,C完整源码 及所有技术文件,

最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,

如果需要 完整代码或设计文件,请在下方留言或者私信我,看到后会第一时间回复。

谢谢!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。