基于AT89C51单片机超声波测距仪设计_第1页
基于AT89C51单片机超声波测距仪设计_第2页
基于AT89C51单片机超声波测距仪设计_第3页
基于AT89C51单片机超声波测距仪设计_第4页
基于AT89C51单片机超声波测距仪设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于AT89C51单片机的超声波测距仪的设计【摘要】AT89C51是一个低功耗,高性能CMOS位单片机,片内含4k Bytes ISP(ln-system programmable)的可反复擦写10000次的Flash只读程序存储器,器件采用 ATME公司 的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯将AT89C51作为主控制芯片,利用超声波对物体的感 然后单片机处理运算,与设定的报警距离值进行比较 AT89C51发出指令控制蜂鸣器报警。HC-SR04超声波传感器、蜂鸣器片内集成了通用8位中央处理器和ISP Flash存储单元,AT89C51在众多嵌入式

2、控制应 用系统中得到广泛应用。这次设计主要是利用AT89C51单片机、HC-SR04超声波传感器、 蜂鸣器完成测距报警系统的制作, 应,将前方物体的距离探测出来, 判断,当测得距离小于设定值时,【关键词】:AT89C51单片机、ABSTRACTAT89C51 is a low power consumption,high performanee CMOS 8-bit microc on troller, tablet containing 4 k Bytes of ISP (In system p rogrammable) can wipe aga in and aga in 1000 tim

3、es of Flash memory read-only app licatio ns, device adopts high den sity of ATMEL company, nonv olatile storage tech no logy,80 c51 pincomp atible with sta ndardMCS - 51 structure, in structi on system andchip integrates general8-bit CPUand ISP Flash memory cell, AT89C51 is widely applied In manyemb

4、eddedcontrol applications.This design is mainly madeusingAT89C51 SCM, HC-SR04 ultrasonic sensor, buzzer completed ranging alarm system,the AT89C51 as the main con trol chi p,the use of ultras onic sensing of object ,the detected objects in front of the distance,then the MCU processing operations,and

5、 the set alarm distanee to compare the value of judgment,when the measuri ng dista nee is smaller tha n the set value,AT89C51 sends out a comma nd to con trol the buzzer alarm.【KEYWORDS AT89C51Single chip microcomputer、HC-SR04jltrasonic sensor、-41 -Buzzer目录一、绪论1.1课题研究背景及意义 二、总体设计方案及论证总体方案设计三、硬件实现及单元

6、电路设计主控制模块电源设计超声波测试模块超声波传感器原理测距分析时钟电路的设计复位电路的设计声音报警电路的设计 显示模块四、软件设计2.13.13.23.33.43.53.63.73.83.94.1附件附件主程序工作流程图 五、总结参考文献.录原理图实物图八、附1 :2:.8.9101010101213141415、绪论1.1课题研究背景及意义随着社会的发展,人们对于距离的敏感度越来越高,生活上对距离的感知也越来越 敏感,因此测距仪也受到了极大的欢迎。它主要有三类,一类是激光测距仪,是根据光 电元件接收目标反射的激光束来计算出测距者到目标的距离。另一类是红外测距仪,利用红外线传播不扩散的原理进

7、行测距, 但方向性差。还有一类是超声波测距仪,但也有 局限性,传播需要介质,超声波发射器向某一方向发射超声波,在发射的同时开始计时, 碰到障碍物后就立即返回来,超声波接收器收到反射波就立即停止计时。超声波测距是一种非接触可直接检测技术,它对光线和被测对象的颜色等没有要 求,与其它仪器相比更卫生,更耐高温、等恶劣环境,具有少维护、可靠性高、寿命长 等优点。禾用超声波检测往往比较快捷、性能稳定、能够实现实时检测等优点,所以它 广泛的应用在全自动机器人,汽车倒车雷达等研制方面。、总体设计方案及论证2.1 总体方案设计本设计主要包括了硬件和软件设计两部分。按模块可划分为数据采集、按键控制、数码 管显示

8、、蜂鸣器报警四个子模块。电路结构可划分为:超声波传感器、蜂鸣器、单片机 控制电路。就此设计的核心模块来说,单片机就是设计的中心单元,所以此系统也是单 片机应用系统的一种应用。单片机应用系统也是有硬件和软件组成。硬件包括单片机、 输入/输出设备、以及外围应用电路等组成的系统,软件是各种工作程序的总称。单片 机应用系统的研制过程包括总体设计、硬件设计、软件设计等几个阶段。系统采用STC89C5单片机作为核心控制单元,当测得的距离小于设定距离时,主控芯片将测得的 数值与设定值进行比较处理。然后控制蜂鸣器报警。系统总体的设计方框图如图1所示。按键控制4位数码管 显示模块电源蜂 器 警 块超声波传感器

9、模块鸣 报 模痢主控制器模块C89C51图1系统方框图Jl:图2最小系统硬件电路 总设计见图 3,从以上的分析可知在 STc89C5r声波传感器、按键四位数 为电源工作指示灯。电路中用到3个按键,中D1管、蜂鸣器到如下器件:片机外围应用电路。其一个是设定键D一个加键,一个减键。3.2电源设计ill图3总设计电路图电源部分的设计采用3节5号干电池4.5V供电。3.3超声波测试模块超声波模块采用现成的HCSR04超声波模块,该模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm包括超声波发射器、接收器与控制电路。基本工作原理:采用10 口 TRIG一血发测距,给至少10us的

10、高电平信号;模 块自动发送8个40khz的方波,赫检测是否有信号返回;有信号返回,通过I0 口ECHO俞出一个高电平,高电平持续的时间就是靛波从发射到返回的时间。测试距离 =(高电平时间*声速(340M/S)/2。实物如下图"4。其中VCC供5V电源,GND为地线, TRIG触发控制信号输入,ECHO回响信号输出等四支线。图4超声波模块实物图超声波探测模块HC-SR04的使用方法如下:10 口触发,给Trig 口至少10us的高 电平,启动测量;模块自动发送8个40Khz的方波并随时检测是否有信号返回, 有信号 返回,通过Echo输出一个高电平,高电平持续的时间就是超声波从发射到返回

11、的时间, 测试距离=(高电平时间*340)/ 2,单位为m程序中测试功能主要由两个函数完成。实现中采用定时器0进行定时测量,8分频,TCNTT®设值0XCE当timer。溢出 中断发生2500次时为125ms计算公式为(单位:ms):T =(定时器 0 溢出次数 * ( 0XFF - 0XCE)/ 1000其中定时器0初值计算依据分频不同而有差异。3.4 超声波传感器原理市面上常见的超声波传感器多为开放型,其内部结构如图 5所示,一个复合式振动 器被灵活地固定在底座上。该复合式振动器是由谐振器以及一个金属片和一个压电陶瓷 片组成的双压电晶片元件振动器。 谐振器呈喇叭形,目的是能有效地

12、辐射由于振动而产 生的超声波,并且可以有效地使超声波聚集在振动器的中央部位。当电压作用于压电陶瓷时,就会随电压和频率的变化产生机械变形。 另一方面,当 振动压电陶瓷时,则会产生一个电荷。利用这一原理,当给由两片压电陶瓷或一片压电 陶瓷和一个金属片构成的振动器,所谓叫双压电晶片元件,施加一个电信号时,就会因弯曲振动发射出超声波。相反,当向双压电晶片元件施加超声振动时,就会产生一个电 信号。基于以上作用,便可以将压电陶瓷用作超声波传感器。外壳金厲丝网甲压电晶片谁形共掘盘外壳Z / /:蔚験綴國SSH椎形共振盘-压电晶片引线端子i 1 T: L 7 .-引线端r匹配器分横向振荡和纵向 它有折射和反射

13、图5超声波内部结构超声波是一种在弹性介质中的机械振荡,其频率超过 20KHZ, 振荡两种,超声波可以在气体、液体及固体中传播,其传播速度不同。 现象,且在传播过程中有衰减。3.5 测距分析超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波 在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即 停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(S),即:s=340t/2最常用的超声测距的方法是回声探测法,超声波发射器向某一方向发射超声波, 在发射时刻的同时计数器开始计时,碰到障碍物的阻挡就立即反射回来,

14、超声波接收器收 到反射回的超声波就立即停止计时并计算出距离。以超声波在空气中的传播速度为 340m/s计算,根据定时器算出的时间t,就可以计算出发射点距障碍物面的距离 S,即: s=340t /2。由于超声波也是一种声波,其声速V与温度有关。在使用时,如果传播介质温度变 化不大,则可近似认为超声波速度在传播的过程中是基本不变的。 如果对测距精度要求 很高,则应通过温度补偿的方法对测量结果加以数值校正。 声速确定后,只要测得超声 波往返的时间,即可求得距离。这就是超声波测距的基本原理。如图 6所示:ct障碍物图6超声波的测距原理H =Scos&(3-1 )9 =arctg(舟H(3-2)

15、式中:L-两探头之间中心距离的一半. 又知道超声波传播的距离为:2S =vt式中:V 超声波在介质中的传播速度;t超声波从发射到接收所需要的时间.将(3 2)、( 33)代入(3-1 )中得:(3-3)1LH =?vtcosarctg 亓(3-4)其中,超声波的传播速度V在一定的温度下是一个常数(例如在温度T=30度 时,V=349m/s);当需要测量的距离H远远大于L时,则(3 4)变为:H=2vt(3-5)所以,只要需要测量出超声波传播的时间t,就可以得出测量的距离H.3.6 时钟电路的设计AT89C51虽然有内部振荡电路,但要形成时钟,必须外部附加电路。AT89C51单片机的时钟产生方法

16、有两种。内部时钟方式和外部时钟方式。本设计采用内部时钟方式,利用芯片内部的振荡电路,在XTAL1、XTAL2引脚上外接定时元件,内部的振荡电路便产生自激振荡。本设计采用最常用的内部时钟方式, 即用外接晶体和电容组成的并联谐振回路。振荡晶体可在1.2MHZ到12MHZ之间选择。电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度 有少许影响,CX1、CX2可在20pF到lOOpF之间取值,但在60pF到70pF时振荡器有 较高的频率稳定性。所以本设计中,振荡晶体选择12MHZ,电容选择20pF。因为一个机器周期含有6个状态周期,而每个状态周期为2个振荡周期,所以一个 机器周

17、期共有12个振荡周期,如果外接石英晶体振荡器的振荡频率为 12MHZ个振 荡周期为1/12US,故而一个机器周期为1us。如图7所示为时钟电路。图7时钟电路图3.7复位电路的设计复位方法有上电自动复位和手动复位两种, 单片机在时钟电路工作以后,在RESET 端持续给出2个机器周期的高电平时就可以完成复位操作。例如使用晶振频率为12MHz时,则复位信号持续时间应不小于2us。本设计采用的是自动复位电路。如图 8示为复 位电路。VCC£-lOuFKST单片机9脚10KGXD图8复位电路图3.8声音报警电路的设计如下图所示,用一个蜂鸣器和三极管、电阻接到单片机的P13 口上,构成声音报警

18、电路,如图9示为声音报警电路。图9报警模块电路3.9 显示模块显示模块采用8段数码管显示,用四个8550三极管对电流进行放大,来驱动四位 数码管正常工作。图10数码管电路四、软件设计4.1主程序工作流程图按上述工作原理和硬件结构分析可知系统主程序工作流程图如下图11所示;图11主程序工作流程图超声波探测程序流程图:开始关闭定时器1将计数器1清0Yf HO瑞口是低电平启动定时器1WSio端口是孟7147关闭定时器1关闭定时器11返回true1 '("返回 falseN图12超声波探测程序流程图五、总结本设计研究了一种基于单片机技术的超声波智能测距报警系统。该系统通过以 ATC8

19、9C51单片机为工作处理器核心,超声波传感器,它是一种新颖的被动式超声波探 测器件,能够以非接触测出前方物体距离,并将其转化为相应的电信号输出.该报警器的最大特点就是使用户能够操作简单、易懂、灵活;且安装方便、智能性高、误报率低。 随着现代人们安全意识的增强以及科学技术的快速发展,相信报警器必将在更广阔的领域得到更深层次的应用。六、参考文献1234吴政江. 宋文绪. 余锡存. 唐桃波,单片机控制红外线防盗报警器J.锦州师范学院学报,2001.传感器与检测技术M.北京:高等教育出版社,2004.单片机原理及接口技术M.西安:西安电子科技大学出版社,2000. 陈玉林.基于AT89C51的智能无线

20、安防报警器J.电子设计应用,2003,51.5(6): 49李全利.单片机原理及接口技术M.北京:北京航空航天大学出版社,2004.6 薛均义,张彦斌.MCS-51系列单片微型计算机及其应用M.西安:西安交通大学 出版社,2005.7 徐爱钧,彭秀华.单片机高级语言C51应用程序设计M.北京:北京航空航天大 学出版社,2006.8 康华光.电子技术基础(模拟部分)M.北京:高等教育出版社,2004.附件1:原理图aaas.1U附件2 :实物图Jifsasfli7.,. ' ':-二理> _ - b 存 r . k-nA*'完盂凄血老麻 注墓环覆吐33品她畫 +in

21、r <> S' 4亠角FMdB F谶*首- J d-W. yn* ¥ 一 _hh«hhh * £ H -:巴 y ;二- - I- - ei;二卡 X :-F5JT辿:la附件3 :程序#in elude <reg51.h>#in elude vintrin s.h>#in elude "ee po m52.h"#defi ne uchar un sig ned char/数码管段选定义0123 4#defi ne uint un sig ned int9 uchar code smg_du=0xc0,0x

22、f9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff;/ 断码/数码管位选定义uchar code smg_we=0xe0,0xd0,0xb0,0x70;uchar dis_smg8 =0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8;/数码管位选定义sbit smg_we1 = P 3八4; sbit smg_we2 = P 3八5; sbit smg_we3 = P 3八6; sbit smg_we4 = P 3八7;/sbit c_se nd = P 3八

23、2; sbit c_recive = P 3八3; uchar flag_hc_value;/超声波发射/超声波接收超声波中间变量sbit bee p = P 2八3; /bit flag_key_b_e n,flag_key_set_e n; /蜂鸣器IO 口定义按键蜂鸣器使能uchar smg_i = 3; bit flag_300ms ;/显示数码管的个位数bit key_500ms ;/long dista nee; uint set_d;bit flag_esb_juli; ui nt flag_time0;距离距离超声波超出量程用来保存定时器0的时候的/ 按键的IO变量的定义uch

24、ar key_ean;/按键值的变量uchar zd_break_e n,zd_break_value; / 自动退出设置界面 uchar me nu_shudu = 10; /用来控制连加的速度bit flag_lj_en;/按键连加使能/用做连加的中间变量菜单设计的变量bit flag_lj_3_en;/按键连3次连加后使能 加的数就越大了uchar key_time,flag_value;uchar menu_1; /延 时函*/uchar a_a;/*1msvoid delay_1ms( uint q) "uint i,j;for(i=0;ivq;i+) for(j=0;j&

25、lt;120;j+);/*处理距离函数 */void smg_dis pl ay()dis_smg0 = smg_dudista nee % 10;dis_smg1 = smg_dudista nee / 10 % 10;dis_smg2 = smg_dudista nee / 100 % 10 & 0x7f; " "/*void write_ee pom()SectorErase(0x2000);byte_wnte(0x2000, set_d % 256);byte_write(0x2001, set_d / 256);byte_write(0x2058, a_a

26、);" "把数据保存到单片机内部 eepom中*/*void read_ee pom()set_d = byte_read(0x2001);set_d <<= 8;set_d |= byte_read(0x2000);a_a = byte_read(0x2058); 把数据从单片机内部eepom中读出来*/*void init_eepom() "read_ee pom(); if(a_a != 1) 开机自检 eepom初始化 */先读/新的单片机初始单片机内问EEPOMset_d = 100; a_a = 1; write_ee po m();/*独

27、立按键处理函*/void key()static uehar key_ new = 0,key_old = 0,key_value = 0; if(key_ new = 0)-/按键松开的时候做松手检测if(P2 & 0x07) = 0x07)key_value +;elsekey_value = 0; if(key_value >= 5) "key_value = 0; key_ new = 1; flag_lj_e n = 0; flag_lj_3_en = 0; flag_value = 0; key_time = 0; write_ee pom();/关闭连加使

28、能/关闭3秒后使能/清零elseif(P2 & 0x07) != 0x07)key_value +; /elsekey_value = 0;if(key_value >= 5)key_value = 0; key_ new = 0; flag_lj_e n = 1; zd_break_e n = 1; /按键按下的时候zd_break_value = 0; / flag_key_b_e n = 1; /"""key_ca n = 20; if(key_500ms = 1)/ 连加key_500ms = 0; key_ new = 0; key_old

29、 = 1; zd_break_value = 0; if(key_new = 0) && (key_old = 1)switch( P2 & 0x07)case 0x06: key_ca n = 3; break; case 0x05: key_ca n = 2; break; case 0x03: key_ca n = 1; break;/连加使能自动退出设置界使能 自动退出设置界变量清零 按键蜂鸣器使能/得到k2键值得到k3键值得到k4键值/dis_smg3 = smg_dukey_ca n % 10; key_old = key_ new;" "

30、; void smg_we_switch(uchar i)""switch(i)smg_we2 = 1; smg_we3 = 1; smg_we2 = 0; smg_we3 = 1; smg_we2 = 1; smg_we3 = 0;smg_we2 = 1; smg_we3 = 1;case 0: smg_we1 = 0; case 1: smg_we1 = 1; case 2: smg_we1 = 1;case 3: smg_we1 = 1;smg_we4 = 1; break; smg_we4 = 1; break; smg_we4 = 1; break; smg_we

31、4 = 0; break;/*void dis playOstatic uchar i;i+;if(i >= smg_i)i = 0;/码显示函*/P1 = 0xff;/ 段选P3 = 0xf0 I (P3 & 0x0f); /P3 = smg_wei | (P3 & 0x0f); / smg_we_switch(i); P1 = dis_smgi;位选位选/段选/执行一条_nop_()指令就是1usvoid delay() nop(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();/*void sen d_w

32、ave()c_send =1;delayO;c_se nd = 0;TH0 = 0;TL0 = 0;TR0 = 0;flag_hc_value = 0;while(!c_recive);TR0=1;while(c_recive)"/超声波测距程序 */10us/的高电平触发给定时器0清零关定时器0定时当c_recive 为零时等待/ 当c_recive为1计数并等待flag_time0 = TH0 * 256 + TL0;if(flag_hc_value > 1) | (flag_time0 > 65000)/量范围时,显示3个888TR0 = 0; flag_csb_j

33、uli = 2; dista nee = 888; flag_hc_value = 0; break ;elseflag_csb_juli = 1;if(flag_csb_juli = 1)TR0=0;dista nee = TH0;dista nee = dista nee * 256 + TL0;dista nee +=( flag_hc_value * 65536);/位是msdistanee *= 0.017;出来是米if(dista nee > 350)dista nee = 888;/关定时器0定时 /读出定时器0的时间/当超声波超过测算出超声波测距的时间得到单0.017 =

34、 340M/ 2 = 170M= 0.017M 算距离=速度*时间如果大于3.8m就超出超声波的量程/*定时器0、定时器1初始化void time_i ni t()rEA = 1;/开总中断TMOD = 0X11;/定时器0、定时器1工作方式1ET0 = 1;/开定时器0中断TR0 = 1;/允许定时器0定时ET1 = 1;/开定时器1中断TR1 = 1;/允许定时器1定时*/按键处理数码管显示函数*/*void key_with()"if(key_ca n = 1)"menu_1 +;if(me nu_1 >= 2)"menu_1 = 0; "i

35、f(me nu_1 = 0)menu _shudu = 20;dis_smg0 = smg_dudista nee % 10;dis_smg1 = smg_dudista nee / 10 % 10;dis_smg2 = smg_dudista nee / 100 % 10 & 0x7f; smg_i = 3;if(me nu_1 = 1)"menu _shudu = 1;dis_smgO = smg_duset_d % 10;dis_smg1 = smg_duset_d / 10 % 10;dis_smg2 = smg_duset_d / 100 % 10 & 0x

36、7f ;dis_smg3 = 0x88;smg_i = 4;/设置咼温报警if(me nu_1 = 1)if(flag_lj_3_en = 0) II三次连加之后速度加快me nu_shudu = 10 ; /500ms加减一次elsemen u_shudu = 1; /250ms加减一次if(key_ca n = 2)set_d + ;/按键按下未松开自动加三次if(set_d > 350)set_d = 350;dis_smg0 = smg_duset_d % 10;dis_smg1 = smg_duset_d / 10 % 10;/dis_smg2 = smg_duset_d /

37、100 % 10 & 0x7f; dis_smg3 = 0x88;/a"if(key_ca n = 3)/取小数显示取个位显示取十位显示set_d - ;/按键按下未松开自动加三次if(set_d <= 1)set_d = 1;/dis_smg0 = smg_duset_d % 10;dis_smg1 = smg_duset_d / 10 % 10 ; /dis_smg2 = smg_duset_d / 100 % 10 & 0x7f ;取小数显示取个位显示/ 取十位显示/write_ee po m();dis_smg3 = 0x88;/a/*扌艮警函*/void clock_h_l() ""static uchar value;i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论