超声波测距仪是利用
HC—SR04超声波
测距公式:时间 ✖ 340 m/s ➗2 得出后显示在
8位数码管上,可显示距离由数码管个数决定
所用芯片:AT89C52




主函数main.c

#include "dig.h"       //添加数码管显示程序
#include "HC-SR04.h"
#include "timer.h"//全局变量定义
//段码表,使用于共阴数码管
unsigned int code duan_ma[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,        //0~90x77,0x7c,0x39,0x5e,0x79,0x71};    //A~F
unsigned int dis_buf[3] = {4, 0, 0};unsigned long S = 0;      //距离缓冲变量
unsigned long time = 0;        //时间缓冲变量//函数声明
void count(void);           //计算距离
void dis_distance(void);    //显示距离/* 主函数 */
void main(void)
{InitTimer0();      //定时器0初始化while(1){count();      //测距if(S>=100 || S<=10)     //如果超出10cm-100cm范围,则显示“---”{dis_buf[2] = 0x40;  //显示"---"dis_buf[1] = 0x40;dis_buf[0] = 0x40;dig_scan(dis_buf); }elsedis_distance();    //显示距离}
}
/* 计算测距 */
void count(void)
{start_ranging();   //启动一次超声波while(!Echo);      //等待超声波模块输出IO拉高TR0 = 1;            //开启定时器计时while(Echo);       //等待超声波模块输出IO拉低TR0 = 0;            //关闭定时器计时/* 计算距离 */time = TH0 * 256 + TL0;    //得到时间TH0 = 0;             //定时计数器清零TL0 = 0;S = (time * 1.7) / 100;  //算出来是CM
}
/* 显示距离 */
void dis_distance(void)
{dis_buf[2] = duan_ma[S / 100 % 10]; //取出百位数,并在数码管的第三位显示,从右往左数dis_buf[1] = duan_ma[S / 10 % 10];    //取出十位数,并在数码管的第二位显示,从右往左数dis_buf[0] = duan_ma[S % 10];       //取出个位数,并在数码管的第一位显示,从右往左数dig_scan(dis_buf);                   //送到数码管上显示
}

数码管代码:

#include "dig.h"/* 数码管延时函数,单位“ms” */
static void dig_delayms(unsigned int ms)
{unsigned char a,b,c;while(--ms){for(c=1;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}
}
/* * 数码管扫描* *dat:以数组的方式传值,使用的时候直接填入数组名即可*/
void dig_scan(unsigned int *dat)
{unsigned char i;   //循环变量/* 数码管扫描处理 */for(i = 0; i < 4; i++){switch(i){case 0: {digWei1 = 0;            //选通第一位数码管digDuan = dat[0];        //显示第一位数码管的内容break;}case 1:{digWei2 = 0;           //选通第一位数码管digDuan = dat[1];        //显示第二位数码管的内容break;}case 2:{digWei3 = 0;               //选通第三位数码管digDuan = dat[2] + 0x80;    //显示第三位数码管的内容,顺便也显示小数点break;}case 3:{digWei4 = 0;           //选通第四位数码管digDuan = dat[3];        //显示第四位数码管的内容break; }default: break;}dig_delayms(5);            //数码管扫描延时5ms,根据实际情况可适当调节此延时digWei1 = 1;         //消隐digWei2 = 1;           digWei3 = 1;digWei4 = 1;}
}

超声波的脉冲启动程序:

#include "HC-SR04.h"/* 启动超声波程序*/
void start_ranging(void)
{Ttig = 1;         //启动一次模块_nop_();            //延时一段时间,至少10us以上 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_();Ttig = 0;
}

定时器:

#include "timer.h"/* 定时器0初始化,定时1ms */
void InitTimer0(void)
{TMOD = 0x01;  //配置定时器0为工作方式TH0 = 0;TL0 = 0;TR0 = 0;        //打开定时器0
}

基于AT89C52的超声波测距仪相关推荐

  1. 超声波测距仪编程_基于单片机的超声波测距仪设计

    1 基于单片机的超声波测距仪设计 1 系统要求 我们组选择制作了一套超声波测距系统,功能有:倒车雷达测量的显示距离 在手机 APP 上显示,设定阈值,若小于设定的距离数值,蜂鸣器发出报警声. 2 研究 ...

  2. 【MSP430】基于MSP430G2553的超声波测距仪

    传感器课程设计,基于MSP430G2553 的超声波测距仪. 近几年,随着我国科技水平的提高,测距手段变得十分先进和多样,目前已经有红外测距.激光测距和超声波测距等多种方法,前两种方法制作难度较大,成 ...

  3. 基于51的超声波测距仪代码(截图版)

    之前有文字版本的代码,但觉得不太方便看,就出了个图片版本的,通俗易解而且方便.

  4. 基于stm32的超声波HC-SR04测距仪含距离报警(温度补偿)

         前言:本文主要是紧跟前一篇文章中有关超声波HC-SR04模块进行的扩展实验,主要涉及超声波测距的温度补偿(DHT11),并搭配蜂鸣器的距离报警.整体实验较为简单,为常用的几个传感器模块相互配 ...

  5. 55、基于51单片机的超声波测距仪数码管设计

    毕设帮助.开题指导.技术解答(有偿)见文末 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.程序 部分代码 七.资料包括 摘要 STC89C52是STC系列单片机里应 ...

  6. 电子设计应用超声波测距仪的设计

    电子设计应用超声波测距仪的设计: 超声波测距仪的设计 摘要:电子测距仪要求测量范围在0.10-5.00m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果.由于超声波指向性强,能 ...

  7. 超声波测距仪编程_Arduino轻松学Mixly编程第9课 超声波测距仪

    轻松学Lesson9超声波测距仪 1.课程简介 本节课以超声波测距仪为例,为大家讲解超声波测距的原理及基于IIC通讯协议的LCD液晶屏的使用. 本节课所需硬件:Arduino UNO.IO扩展板.LC ...

  8. [51单片机] HC-SR04超声波测距仪 基础代码

    >_<:超声波测距仪模块: >_<:51单片机,11.0592MHz晶振,将采集数据发送到串口的基础例子: >_<:代码: 1 /***************** ...

  9. 基于Arduino的超声波悬浮

    声悬浮的原理 声悬浮是高强条件下的一种非线性效应,其基本原理是利用声驻波与物体的相互作用产生竖直方向的悬浮力已克服物体的重量,同时产生水平方向的定位力将物体固定于声波节处. 实验现象 超声波悬浮 基于 ...

最新文章

  1. 《编译与反编译技术实战 》一2.3 编译器的设计与实现概述
  2. Java单例模式:饿汉与懒汉区别
  3. Intellij IDEA debug模式下项目启动慢/无法启动的事件解决过程记录
  4. zbb20180827 java获取字符串中所有汉字
  5. linux C++怎么转java?从云计算切入容易么?
  6. 《leetcode》reverse-integer
  7. 兰州大学第一届 飞马杯 体育课排队 二分 + 最大流 + 输出路径
  8. linux分区挂载点在哪个文件,挂载的信息是存放在哪个文件中?
  9. 曼昆微观经济学--十大原理
  10. linux命令关闭浏览器,linux命令行浏览器的使用方法
  11. 档案管理系统项目总结
  12. java8 时间加一秒_都9012了,Java8中的日期时间API你还没有掌握?
  13. 回溯法——旅行商(TSP)问题
  14. 【踩坑日记】python3.9安装paddlepaddle-tiny的时候报错ERROR: Could not find a version
  15. 医学图像中的窗宽、窗位
  16. 网络适配器突然消失的解决办法
  17. Rounded Numbers
  18. 小暑调养宝宝身体的五个方法
  19. 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定
  20. python怎么画长方形_Python如何绘制长方形?

热门文章

  1. 关于spring的aop
  2. split函数python统计英文单词_Python实现统计英文单词个数及字符串分割代码
  3. BERT模型从训练到部署
  4. 25.Odoo产品分析 (三) – 人力资源板块(6) – 工资表(1)
  5. 8.8 Web前端-小米商城项目实战
  6. 怎么制作视频的动态字幕?
  7. python perl lisp_巴别塔-编程语言之旅【转】——C、C++、Lisp、Java、Perl、Ruby、Python核心比较...
  8. ai描边工具怎么打开_AI描边工具命令讲解,教你ai描边功能实用技巧
  9. cocos2dx入门2:安装及基本介绍
  10. STM32 - Printf重定向使用微库、不使用微库(Keil) (转载)