博客简介

本次实验是倒车雷达的C任务,在proteus上利用SRF04、BUZZER设计一个能单次启动测距系统电路,一开始我的方案是用单片机设计,但是后来老师要求不用单片机,所以转至其他方案。单片机的方案在这里记录:

实验内容

阅读教材、观察传感器视频(两组特定距离的trig和echo的示波器捕获波形),认识超声波测距传感器工作原理,在Proteus上用SRF04传感器、蜂鸣器BUZZER和数字电路芯片设计一个能单次启动测距系统电路。要求:

  • 分析波形、计算距离并说明。
  • 数码管上显示出距离远近程度(8位距离采样值)
  • 蜂鸣器能根据距离远近发出多种不同频率组合声音。

实验原理

(1)实现echo的高电平计数和距离计算

  • 计算高电平的时间time=TH0*256+TL0
  • 距离S=(time*1.7)/100
void Count(void)
{time=TH0*256+TL0;TH0=0;TL0=0;S=(time*1.7)/100;     //算出来是CMif((S>=700)||flag==1) //超出测量范围显示“-”{  flag=0;l_disbuff[1]=10;   //“-”l_disbuff[2]=10;   //“-”l_disbuff[3]=10;   //“-”}else{l_disbuff[1]=S%1000/100;l_disbuff[2]=S%1000%100/10;l_disbuff[3]=S%1000%10%10;}
}

数码管扫描

  • 根据位选信号l_posit来选择不同的显示位
void display()
{P0=0X00; //switch(l_posit){case 0: //选择千位数码管,关闭其它位//SMG_q=0;SMG_b=1;SMG_s=1;SMG_g=1;P0=table[l_disbuff[0]];break;case 1: //选择百位数码管,关闭其它位//SMG_q=1;SMG_b=0;SMG_s=1;SMG_g=1;P0=table[l_disbuff[1]];//加入小数点要与一下break;case 2: //选择十位数码管,关闭其它位//SMG_q=1;SMG_b=1;SMG_s=0;SMG_g=1;P0=table[l_disbuff[2]];break;case 3: //选择个位数码管,关闭其它位//SMG_q=1;SMG_b=0;SMG_s=0;SMG_g=1;P0=table[l_disbuff[3]];break;}l_posit++;if(l_posit>3)l_posit=0;
}

(3)根据距离选通不同的频率:

给距离分段:

  • 如果0<=S<20,选通clk2
  • 如果20<=S<60,选通clk3
  • 如果60<=S<100,选通clk4
  • 如果100<=S<150,选通clk5
void buzzer()//蜂鸣器
{buzze=0x00;if(0<=S<20){buzze=clk2;//时钟1}else if (20<=S<60){buzze=clk3;//时钟2}else if(60<S<=100){buzze=clk4;//时钟3}else if(100<S<=150){buzze=clk5;//时钟4}else {buzze=0x00;}
}

电路实现

实验仿真验证

生成hex文件并装载

  • 新建工程
  • 点击project,选择option for Target,在output选项中勾选create Hex File
  • F7 编译后在debug目录中生成Hex文件
  • 装载到单片机中

仿真

  • 设置echo回响信号的高电平时间
  • 点击仿真
  • 可以看到数码管显示距离distance
  • 改变echo高电平时间可以听到不同频率的声段

  • 附上代码
#include "reg51.h"
#include <intrins.h>//常变量定义:
code unsigned char table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//表:共阴数码管 0-9 -
unsigned int  time=0;
unsigned int  timer=0;
unsigned long S=0;
bit flag =0;unsigned char l_disbuff[4]={ 0,0,0,0};//显示缓冲
unsigned char l_posit=1; //位选择//引脚定义:
//sbit SMG_q = P2^2; //定义数码管阳级控制脚(千位)本例程只用到三位数码管
sbit SMG_b = P2^2; //定义数码管阳级控制脚(百位)
sbit SMG_s = P2^3; //定义数码管阳级控制脚(十位)
sbit SMG_g = P2^4; //定义数码管阳级控制脚(个位)/**********************蜂鸣器引脚*/
sbit buzze= P2^5;
sbit clk1= P1^2;    //蜂鸣时钟
sbit clk2= P1^3;    //蜂鸣时钟
sbit clk3= P1^4;    //蜂鸣时钟
sbit clk4= P1^5;    //蜂鸣时钟sbit RX = P2^1; //模块引脚
sbit TX = P2^0;
/********************************************************延时*/
void Delay1ms(uint c)//误差 0us
{uchar a,b;for (; c>0; c--){for (b=199;b>0;b--){for(a=1;a>0;a--);}      }
}
/********************************************************/
//显示函数,参数为显示内容
void display()
{P0=0X00; //switch(l_posit){case 0: //选择千位数码管,关闭其它位//SMG_q=0;SMG_b=1;SMG_s=1;SMG_g=1;P0=table[l_disbuff[0]];break;case 1: //选择百位数码管,关闭其它位//SMG_q=1;SMG_b=0;SMG_s=1;SMG_g=1;P0=table[l_disbuff[1]];//加入小数点要与一下break;case 2: //选择十位数码管,关闭其它位//SMG_q=1;SMG_b=1;SMG_s=0;SMG_g=1;P0=table[l_disbuff[2]];break;case 3: //选择个位数码管,关闭其它位//SMG_q=1;SMG_b=0;SMG_s=0;SMG_g=1;P0=table[l_disbuff[3]];break;}l_posit++;if(l_posit>3)l_posit=0;
}/********************************************************/
void Count(void)
{time=TH0*256+TL0;TH0=0;TL0=0;S=(time*1.7)/100;     //算出来是CMif((S>=700)||flag==1) //超出测量范围显示“-”{  flag=0;l_disbuff[1]=10;   //“-”l_disbuff[2]=10;   //“-”l_disbuff[3]=10;   //“-”}else{l_disbuff[1]=S%1000/100;l_disbuff[2]=S%1000%100/10;l_disbuff[3]=S%1000%10%10;}
}
void buzzer()//蜂鸣器
{buzze=0x00;if(0<=S<20){buzze=clk2;//时钟1}else if (20<=S<60){buzze=clk3;//时钟2}else if(60<S<=100){buzze=clk4;//时钟3}else if(100<S<=150){buzze=clk5;//时钟4}else {buzze=0x00;}
}
/********************************************************/
void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
{flag=1; //中断溢出标志
}
/********************************************************/
void  zd3()  interrupt 3 //T1中断用来扫描数码管和计800MS启动模块
{TH1=0xf8;TL1=0x30;display();timer++;if(timer>=400){timer=0;TX=1;        //800MS  启动一次模块_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_();TX=0;}
}
/*********************************************************/
void  main(  void  )
{  TMOD=0x11;   //设T0,T1为方式1TH0=0;TL0=0;          TH1=0xf8;   //2MS定时TL1=0x30;ET0=1;             //允许T0中断ET1=1;   //允许T1中断TR1=1;   //开启定时器EA=1;   //开启总中断while(1){while(!RX); //当RX为零时等待TR0=1;    //开启计数while(RX); //当RX为1计数并等待TR0=0; //关闭计数Count(); //计算buzzer();//蜂鸣}
}
  • hex文件:
:03000000020507EF
:0C050700787FE4F6D8FD75812002054ED7
:0A000E003F065B4F666D7D077F6FB4
:10065000040D0000000002090000020B000004115C
:0906600000000000C100010801C6
:10059300E4F580E50814601414601B14602224033E
:1005A300702CD2A2D2A3D2A4E50D801CC2A2D2A3E6
:1005B300D2A4E50E8012D2A2C2A3D2A4E50F800872
:1005C300C2A2C2A3D2A4E51090000E93F580050841
:0B05D300E508D394034003E4F5082280
:10046200C2A5AF14AE13AD12AC11E4FBFAF9F8D386
:1004720012035F50047F0180027F00C3EF64809407
:10048200945005A29292A522AF14AE13AD12AC11F4
:10049200E47B14FAF9F8D312035F50047F0180025F
:1004A2007F00C3EF648094BC5005A29392A522AF53
:1004B20014AE13AD12AC11E47B3CFAF9F8C312038B
:1004C2005F50047F0180027F00D3EF648094E45088
:1004D20005A29492A522AF14AE13AD12AC11E47B27
:1004E20064FAF9F8C312035F7E0050047F018002B0
:1004F2007F00D3EF9496EE648094805005A295928B
:05050200A522C2A522A4
:10037000AF8CEFFEAD8A7C00E42DFFEC3EFEE4F591
:100380008CF58AAD07AC061201C97B9A7A9979D9A6
:10039000783F12001EE4FBFA79C878421201271256
:1003A00002028F148E138D128C11E47FBC7E02FD2D
:1003B000FCAB14AA13A912A811C312035F50033097
:1003C000000CC200750E0A750F0A75100A22E47B34
:1003D000E87A03F9F8AF14AE13AD12AC111202BFF4
:1003E000AC00AD01AE02AF03E47B64FAF9F812028F
:1003F000BF8F0EE47BE87A03F9F8AF14AE13AD12A9
:10040000AC111202BFAC00AD01AE02AF03E47B64DD
:10041000FAF9F81202BFAC00AD01AE02AF03E47B03
:100420000AFAF9F81202BF8F0FE47BE87A03F9F8B1
:10043000AF14AE13AD12AC111202BFAC00AD01AEE1
:1004400002AF03E47B0AFAF9F81202BFAC00AD0177
:10045000AE02AF03E47B0AFAF9F81202BFAF038FD2
:01046000108B
:010461002278
:03000B00020003ED
:03000300D20032F6
:03001B000205DEFD
:1005DE00C0E0C083C082C0D0758DF8758B30120517
:1005EE0093050CE50C7002050BC39490E50B94017A
:1005FE00401F750B00750C00D2A00000000000001B
:10060E00000000000000000000000000000000C21A
:0A061E00A0D0D0D082D083D0E0320B
:10062800758911E4F58CF58A758DF8758B30D2A92A
:10063800D2ABD28ED2AF30A1FDD28C20A1FDC28C1C
:0806480012037012046280EE3F
:10001E00EC4D6011E8497017ED33EC3304600DE4DC
:10002E00FCFFFEFD22E933E8330470F802026E1283
:10003E00023958046009E4CC248150062850090284
:10004E000278284003020275C0E0EB4A7044B98082
:10005E0006D0E0FB020264EF4E701CBD8008EBFF81
:10006E00EAFEE9FD80EBE98DF0A4FEE5F002010762
:10007E00E9CDF9EAFEEBFFEF89F0A4FCE5F0CE89BD
:10008E00F0A42EFFE435F0CD89F0A42DFEE435F07A
:10009E008067EF4E7005BD80D780C3EF8BF0A4ACA8
:1000AE00F0EE8BF0A42CFCE435F0F8EF8AF0A42CE3
:1000BE00E5F038FCE433CB8DF0A42CFCE5F03BF8F6
:1000CE00EE8AF0A42CFCE5F038F8E433CF89F0A4E6
:1000DE002CFCE5F038CF3400CE89F0A42FFFE5F0EC
:1000EE003EFEE433C98DF0A42EFEE5F039CD8AF044
:1000FE00A42FFFE5F03EFEE43DFD33D0E0FB5007BC
:10010E000BBB000F020278EC2CFCEF33FFEE33FE3C
:06011E00ED33FD0202506A
:10012400020278EC5D046005E85904700302026E73
:10013400120239580460F6EC4860F2EC7004FDFEDB
:10014400FF22C860DB2481C85009C39860025006AE
:100154000202759850CAF582E9294B4A7005AB82B0
:1001640002026475F0007C1A7880C3EF9BEE9AED6E
:1001740099400DC3EF9BFFEE9AFEED99FDE842F026
:10018400DC23ACF0D0E0FFD0E0FED0E0FDAB822079
:10019400E7101BEB60BAEC2CFCEF33FFEE33FEED03
:1001A40033FD020250E803F830E705C0F075F000B3
:1001B400EF2FFFEE33FEED33FD40B830E7C280AAE7
:1001C40075F020800E75F010800575F0087D007EB6
:1001D400007F003392D530D503120351EC33401025
:1001E400EF33FFEE33FEED33FDEC33FCD5F0ED22BF
:0E01F400E5F0247EA2D513CC92E7CDCEFF22FB
:10020200EDD2E7CD33EC3392D524814006E4FFFEF4
:10021200FDFC22FCE4CFCECDCC24E0501174FF8053
:10022200EDC3CC13CCCD13CDCE13CECF13CF0470F0
:07023200F030D5DE0203519C
:10023900E9D2E7C933E833F892D5EDD2E7CD33EC0B
:0702490033FC5002B2D52284
:10025000EC30E7100FBF000C0EBE00080DBD00040F
:100260000BEB6014A2D5EB13FCED92E7FD2274FFBB
:10027000FCFDFEFF22E480F8A2D574FF13FC7D8014
:03028000E480EF28
:10051300020628E493A3F8E493A34003F68001F2D0
:1005230008DFF48029E493A3F85407240CC8C333E9
:10053300C4540F4420C8834004F456800146F6DFB8
:10054300E4800B0102040810204080900650E47EF2
:10055300019360BCA3FF543F30E509541FFEE493AD
:10056300A360010ECF54C025E060A840B8E493A374
:10057300FAE493A3F8E493A3C8C582C8CAC583CA9F
:10058300F0A3C8C582C8CAC583CADFE9DEE780BE57
:010669000090
:1002830075F008758200EF2FFFEE33FECD33CDCC32
:1002930033CCC58233C5829BED9AEC99E5829840B5
:1002A3000CF582EE9BFEED9AFDEC99FC0FD5F0D692
:1002B300E4CEFBE4CDFAE4CCF9A88222B800C1B9BC
:1002C3000059BA002DEC8BF084CFCECDFCE5F0CBFA
:1002D300F97818EF2FFFEE33FEED33FDEC33FCEB33
:1002E30033FB10D703994004EB99FB0FD8E5E4F9EE
:1002F300FA227818EF2FFFEE33FEED33FDEC33FCDB
:10030300C933C910D7059BE99A4007EC9BFCE99ACE
:10031300F90FD8E0E4C9FAE4CCFB2275F010EF2F13
:10032300FFEE33FEED33FDCC33CCC833C810D70713
:100333009BEC9AE899400AED9BFDEC9AFCE899F84E
:0E0343000FD5F0DAE4CDFBE4CCFAE4C8F922E1
:0E035100C3E49FFFE49EFEE49DFDE49CFC22BD
:10035F00EB9FF5F0EA9E42F0E99D42F0E89C45F0F4
:01036F00226B
:00000001FF

单片机——用SRF04、BUZZER设计一个能单次启动测距系统电路相关推荐

  1. 彩灯控制单片c语言程序,彩灯控制器c语言1.设计要求以单片机为核心,设计一个节日彩灯控制? 爱问知识人...

    这个不难,根据你的要求,P1. 2接开关,P0和P2口分别接两排16个LED灯,程序如下: #include #define uchar unsigned char #define uint unsi ...

  2. 单片机怎样用汇编语言设计一个输出为6KHZ,占空比为45%的波形

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一 ...

  3. 以单片机为核心,设计一个节日彩灯控制器

    不辜负每个朝阳,不荒废每个深夜,因平凡而奋斗,因奋斗而不平凡 专接本电子信息二班你超哥 #include <reg52.h> //51头文件 #include <intrins.h& ...

  4. 多个tab可以组成一个表单吗 js_11个表单设计小技巧

    表单设计可能很无聊,用户总是讨厌填写它们. 来源:11 form design guidelines 表单是任何网站的必要组成部分; 无论是通讯表单,付款细节,帐户创建,获取潜在用户等,用户在使用您的 ...

  5. 基于AT89C52单片机的简易电子琴设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87853299?spm=1001.20 ...

  6. 如何设计一个锂电池充电电路(TP4056)

    这个是个单节18650锂电池的充电模块,这个是个18650的锂电池,18指的是它的直径是18mm,65指的是它的高度为65mm. 这个18650电池的标称电压是3.7V,电池充满时电压为4.2V,一般 ...

  7. 设单链表中存放n个字符,试设计一个算法,使用栈推断该字符串是否中心对称...

    版权声明:本文为博主原创文章.未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/28281631 转载请注明出 ...

  8. 设计一个算法,删除一个单链表L中元素值最大的结点(假设最大值结点是唯一的)

    设计一个算法,删除一个单链表L中元素值最大的结点(假设最大值结点是唯一的). #include <stdio.h> #include<malloc.h> typedef str ...

  9. 设计一个线程安全的单例(Singleton)模式

    在设计单例模式的时候.尽管非常easy设计出符合单例模式原则的类类型,可是考虑到垃圾回收机制以及线程安全性.须要我们思考的很多其它.有些设计尽管能够勉强满足项目要求,可是在进行多线程设计的时候.不考虑 ...

最新文章

  1. Linux服务器---安装tftp-server
  2. 3- MySQL数据类型
  3. linux系统中建立网络白名单,Linux下设置防火墙白名单(RHEL 6和CentOS 7)的步骤
  4. Spring Cloud的全局封装实践
  5. Ubuntu 14 配置Android Studio的快捷启动方式
  6. python创建sqlite3数据库_Python之Sqlite3数据库基本操作
  7. 达摩院 2020 预测:工业互联网超融合来袭!
  8. Skin Demo优化之一
  9. Android listview优化以及listview混合itemview
  10. csdn2020年度博客之星 - 直播间(恭喜圆满结束)
  11. java对jna的配置选项_JNA编程之一:入门 | 学步园
  12. Thrift搭建分布式微服务(四)
  13. Http请求之基于HttpUrlConnection,支持Header,Body传值,支持Multipart上传文件:
  14. CAD图纸格式转换怎么操作?如何转换常见图纸格式?
  15. 伦斯勒理工大学计算机专业好申请吗,伦斯勒理工学院申请条件
  16. table表格表头合并单元格问题
  17. word中插入图片,转pdf后,打印的图片出现阴影模糊的问题及处理办法
  18. 水源热泵系统的优点和缺点有哪些?
  19. html 修改浏览器图标大小设置,如何在网页中插入、编辑图像和调整其大小
  20. 崔斯坦和依索德(Tristan and Isolde)

热门文章

  1. Entity Linking with a Knowledge Base:Issues, Techniques, and Solutions笔记
  2. 监狱人员定位,新导定位系统在监狱的应用
  3. 这18条背下来没人敢和你忽悠CPU
  4. js根据文件后缀动态获取blob的type,并将流文件转blob
  5. 求方程的解(简化版)
  6. LeetCode 1334. 阈值距离内邻居最少的城市--堆优化最短路
  7. PhotoScan拼接无人机航拍RGB照片
  8. 技术族谱:从 草根娱乐 到 草根学习
  9. 搜索一篇关于如何将自己的网站主页,提交到百度,使其可以在百度搜索中出现的方法。 方法/步骤1: 在网址输入栏输入【http://www.baidu.com/search/url_submit.html
  10. MyBatisPlus + Oracle 联合查询排序问题整理,2021 年最后一篇