找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8433|回复: 14
收起左侧

单片机超声波测距(带PCB工程和Proteus仿真程序)

  [复制链接]
ID:509314 发表于 2019-5-19 15:48 | 显示全部楼层 |阅读模式
使用HC-SR04超声波模块做了个超声波测距器带程序、原理图、PCB和仿真
全部文件见附件
Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)

PCB 3D图

PCB 3D图

PCB图

PCB图

实物图1

实物图1

实物图2

实物图2

原理图

原理图


单片机超声波测距仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png

主程序如下(程序来自互联网,本人仅做了部分修改,如有侵权,请联系删除)

//宏定义
#define uchar unsigned char
#define uint unsigned int
#define ULint unsigned long int
//温度零上与零下的标志位
char flag=0;
//超声波
char flags=0;
//超声波距离
char flag1s=0;
//计算定时间
uint time=0;
//计算距离
ULint L_=0;
//温度
uint t_=0;
//显示模式  0正常  1最小值调整  
uchar mode=0;

//uint Max=490;
uint Min=30;
//按键标志
uchar k=0;
//数值有误
uchar FW=0;
//头函数
#include <reg52.h>
#include <intrins.h>
#include "BJ_Key.h"                    //报警按键
#include "display.h"                         //显示头函数
#include "ultrasonic_wave.h"//超声波头函数
#include "DS18B20.h"                    //温度传感器头函数


//函数声明
void delayms(uint ms);
//主函数
void main()
{
        Init_ultrasonic_wave();
        //屏幕初始化
        Init1602();
        //温度初始化
        tmpchange();
        t_=tmp();
        tmpchange();
        t_=tmp();
        tmpchange();
        t_=tmp();

        //循环显示
        while(1)
        {
                Key();
                //正常显示
                if(mode==0)
                {
                        StartModule();//启动超声波
                        while(!RX);          //当RX为零时等待
                        TR0=1;                  //开启计数
                        while(RX);          //当RX为1计数并等待
                        TR0=0;                  //关闭计数
        
                        delayms(20);  //20MS
                        tmpchange();  //温度转换
                        t_=tmp();     //度温度
                        Conut(t_/10); //计算距离
                        if(L_<Min)
                        {
                                Feng_Start();
                        }
                        
                        
                        
                        /*        if(FW=0)
                                Feng_Stop();
                        */
                        Display_1602(t_/10,L_);
                }
                //调整显示
                else if(mode!=0)
                {
                        //最大最小值
                        Init_MaxMin();
                        while(mode!=0)
                        {
                                
                                Key();
                                /*if(k==1&&mode==1)
                                {
                                        Init_MaxMin();        
                                   write_com(0x8d);//设置位置                                       
                                }
                                */
                                 if(k==1&&mode==1)
                                {
                                        Init_MaxMin();        
                                   write_com(0x89);//设置光标位置        
                                }
                                k=0;
                        }
                        //界面初始化
                        Init1602();
                }
        }
}

void delayms(uint ms)
{
        uchar i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}


//T0中断用来计数器溢出,超过测距范围
/*void CJ_T0() interrupt 1
{
    flags=1;                                                         //中断溢出标志
}*/

0.png

全部资料51hei下载地址:
超声波测距.zip (2.85 MB, 下载次数: 430)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:328014 发表于 2021-1-11 02:13 | 显示全部楼层
134125 发表于 2021-1-11 00:51
请问各位大佬 这种错误是怎么回事?应该怎么解决?

第一个错误解决方法:http://www.51hei.com/bbs/dpj-201373-1.html
第2个错误,需要升级Proteus到8.8版本才能解决,因为你的版本根本就没有超声波这个元件

下图是我修改后的效果图:
51hei.png
51hei.png
回复

使用道具 举报

ID:698602 发表于 2020-2-26 16:15 | 显示全部楼层
请问一下这一段是什么意思呢?
void delayms(uint ms)
{
        uchar i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}
回复

使用道具 举报

ID:562074 发表于 2020-3-22 18:00 | 显示全部楼层
感谢大佬
回复

使用道具 举报

ID:715632 发表于 2020-3-29 15:46 | 显示全部楼层
大佬们下载下来之后仿真文件protues打不开怎么解决啊
回复

使用道具 举报

ID:737796 发表于 2020-4-25 16:09 | 显示全部楼层
感谢大佬,好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:756694 发表于 2020-6-14 11:45 | 显示全部楼层
下载后仿真有温度显示,调整距离没反应是什么情况
回复

使用道具 举报

ID:769694 发表于 2020-6-25 17:38 | 显示全部楼层
非常棒,很有参考价值
回复

使用道具 举报

ID:495287 发表于 2020-6-26 15:17 | 显示全部楼层
非常好的参考资料,谢谢分享。
回复

使用道具 举报

ID:876191 发表于 2021-1-11 00:51 | 显示全部楼层
请问各位大佬 这种错误是怎么回事?应该怎么解决?
Y70}8318JC66P6$2YRBUAZ6.png
回复

使用道具 举报

ID:825679 发表于 2021-2-4 20:50 | 显示全部楼层
感谢大佬分享,收获颇深
回复

使用道具 举报

ID:830316 发表于 2021-2-6 09:11 | 显示全部楼层
2girder 发表于 2020-2-26 16:15
请问一下这一段是什么意思呢?
void delayms(uint ms)
{

延时函数
回复

使用道具 举报

ID:750686 发表于 2021-2-24 13:17 | 显示全部楼层
程序不正确运行不了怎么解决大佬
回复

使用道具 举报

ID:894056 发表于 2021-3-20 09:06 | 显示全部楼层
大佬,修改了端口烧进了普中89系列的板子和超声波模块进行实物仿真,但是不能实现效果,想请问一下,有没有可能是因为超声波模块上的TX,RX没有分别接在单片机的RX ,TX端?
回复

使用道具 举报

ID:92810 发表于 2021-5-26 11:38 | 显示全部楼层
谢谢大佬分享了,下载学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表