历史上的今天
今天是:2024年12月20日(星期五)
2021年12月20日 | 基于STC51单片机超声波测距
2021-12-20 来源:eefocus
基于STC51单片机超声波测距精简设计只需三个元件(测距模块暂且算做是一个元件吧)
1.所需元件:STC单片机+超声波模块+4位共阳数码管
2.原理:单片机向测距模块trig脚发送20us的高电平触发测距,Echo 测距结束时会输出高电平,电平时长为超声波信号往返时间之和。Echo 脚开始输出高电平时启动定时计数器计时,当Echo 脚高电平结束时停止计数,根据定时器的时间可算出距离。
3.连接:单片机插在面包板上数码管直接插在单片机上面(引脚一一对应见原理图)测距模块trig脚接P5.4Echo 脚接P5.5
实物图
参考C程序代码如下:
/***************************************************************
程序名: 51单片机超声波测距()
硬件支持:超声波模块US-020、四位共阳数码管、STC单片机
//
#include #include #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()//主函数 {undefined init();//单片机IO口工作方式初始化 INT_init;//T0初始化 while(1) {undefined dist();//测量距离 disp();//数码管显示距离 delay1ms(20);//两次测量间需要有10ms间隔 } }
史海拾趣
|
最近使用稳压芯片,朋友推荐了一款低价芯片L385可调稳压芯片,先简要介绍给大家。 特点:输出电压可调从1.24~30V; 工作电流从10微安到20豪安; 1% 和2% 初始 ...… 查看全部问答> |
|
在VS2005中设置DIALOG的属性,将滚动条属性设置为TRUE,这样在界面中出现滚动条样式,但不能实现滚动。 在VS2005中设置DIALOG的属性,将滚动条属性设置为TRUE,这样在界面中出现滚动条样式,但不能实现滚动。 … 查看全部问答> |
|
问题1:开发板里有BSP,SDK,可是实验手册里却要我们装PB5,可是开发板提供的光盘里没有啊,是不是要我们自己去网上下一个PB,自己安装呢? 问题2:EVC4,和SDK有什么关系吗?为什么我在安装EVC4的时候看到它自己带了一个SDK,那为什么手册里说还要 ...… 查看全部问答> |
|
我最近准备做一下简易交通灯,利用的主控芯片是AT89C52,时间上是采用定时0的方式1来定时,采用定时器0中断,所采用的语言是C语言,因为定时器0的方式1最多计算65536次,因此我需要放一变量在中断处理函数里,每次相应一次中断后,就在中断处理 ...… 查看全部问答> |
|
UCB0I2COA中的地址是让主设备寻址到这个从设备的设备地址还是说是让主设备寻址的数据地址,寻址设备地址的在另外寄存器上? 假如说 UCB0I2COA中的是设备地址的话,那么读取的数据是从从设备哪个地址开始的,0X0吗?那样的话怎么读从设备某个特定地 ...… 查看全部问答> |









