基于单片机的带有汉字显示及语音播报的超声波测距系统设计-毕业_第1页
基于单片机的带有汉字显示及语音播报的超声波测距系统设计-毕业_第2页
基于单片机的带有汉字显示及语音播报的超声波测距系统设计-毕业_第3页
基于单片机的带有汉字显示及语音播报的超声波测距系统设计-毕业_第4页
基于单片机的带有汉字显示及语音播报的超声波测距系统设计-毕业_第5页
已阅读5页,还剩99页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

最新基于单片机的带有汉字显示及语音播报的超声波测距系统设计--毕业摘要测量作为各领域一个重要的工具,有着悠久的历史。在我国,早在秦始皇时期就已经统一了度量衡,推行“一法度衡量丈尺,车同轨,书同文字”,并制定了一套严格的管理制度。同样,测量的方法及使用的仪器也有着纷繁复杂的选择,比如有游标式测量仪器,机械式测量仪器,电学式测量仪器等。随着科学技术的发展,超声波测量法在众多测量方法中脱颖而出,由于超声波具有方向性好,穿透性强,尤其是在光不透明的固体中,它碰到杂质或分界面就有显著的反射等优点,超声波测距在测量中的应用越来越广泛,笔者设计的是一个多功能的带有汉字显示及语音播报的超声波测距系统。本文系统介绍了一种基于单片机CC2530的带有汉字显示及语音播报的超声波测距系统。整个电路采用模块化设计,硬件部分由超声波测距模块、单片机模块、温度传感器模块、语音播报模块、LCD显示模块组成,软件部分由测距发送模块,播报显示模块组成。本文给出了详细的软,硬件设计方案。本超声波测距仪测量距离0.20m~5.00m,测距精度±1㎝,具有汉字显示及语音播报等功能,测量时与待测物体无直接接触,具有整体性好,精度高,可靠性好,控制简单方便等特点。本设计完成实物的制作,实物效果能达到设计要求。关键词:测距仪,单片机,超声波,TMP275温度传感器,Nokia5110液晶显示器,WT588D

ABSTRACTAsasignificanttoolinvariousfields,measuringhasalonghistory.InChina,itcandatebacktotheperiodofQinShiHuang,whostandardizedthesystemofweightsandmeasures,promoted“Applythesamesystemofmeasuringmethodsandtools,thesameroadwidthandthesamewrittenlanguage”,andalsoformulatedasetofstrictmanagementsystem.Similarly,measuringmethodsandequipmentalsohaveacomplicatedchoice,suchasverniermeasuringequipment,mechanicalmeasuringequipmentandelectricalmeasuringequipmentetc.Withthedevelopmentofscienceandtechnology,theultrasonicmeasurementmethodhasstoodoutfromnumerousmeasuringmethods.Asithastheadvantagesofgooddirectionandstrongpenetrability,especiallyintheopaqueobjects,itcanreflectwhenitencounterimpurityorinterface.Theapplicationofultrasonicdistancemeasurementinmeasuringbecomesincreasinglyextensiveinmeasuring.TheauthorhasdesignedamultifunctionalultrasonicdistancemeasurementsystemwithChinesedisplayandvoicebroadcast.ThispapersystematicallyintroducesanultrasonicdistancemeasurementsystemwithChinesedisplayandvoicebroadcastbasedonCC2530singlechipmicrocomputer.Thewholecircuitadoptsmodulardesign;thehardwarepartconsistsofultrasonicrangingmodule,singlechipmicrocomputermodule,temperaturesensingmodule,voicebroadcastingmoduleandLCDdisplayingmodule;thesoftwarepartconsistsofdistancemeasurementandwirelesstransmittingmoduleaswellasvoicebroadcastinganddisplayingmodule.Thispaperpresentsthedetaileddesignschemeofsoftwareandhardware.Theultrasonicdistancemeasurementsystemcanmeasurethedistancefrom0.2mto5mandhastheprecisionof±1cm,whichhasChinesedisplayandvoicebroadcastfunction.Thereisnodirectcontactwhenmeasuringthedistanceofthespecificobjectwithgoodintegrity,highprecision,goodreliabilityincontrol,simpleandgreatconvenient.Thisdesignhascompletedthemanufactureofthephisicalproduction,theeffectcanmeetthedesignrequirements.Keywords:Rangefinder,Singlechipmicrocomputer,Ultrasonicwave,TMP275temperaturesensor,Nokia5110LCDmonitor,WT588D目录TOC\o"1-2"\h\u250751绪论1305791.1课题设计目的及意义1195941.2超声波测距系统的现状和发展1183582系统的总体方案设计4300302.1系统的主要功能491812.2硬件总体设计框图:4297202.3测距发送模块框图4107182.4播报及显示模块框图598832.5硬件的选型5250623系统的硬件结构设计8144463.1主控芯片CC2530单片机及最小外围电路812303.2超声波收发模块US-020接口设计及性能分析12133713.3温度补偿模块TMP275接口设计及性能分析1469093.4LCD显示模块Nokia5110接口设计及性能分析17121693.5LED电路接口设计18244723.6语音播报模块WT588D接口设计及性能分析19280994系统软件设计22291654.1系统总程序设计22318364.2超声波测距仪的设计原理22285404.3超声波测距方法的选择2264724.4超声波测距仪的算法设计2389754.5测距发送模块流程图23322984.6播报及显示模块流程图2565855结论2615834参考文献2713501致谢283891附录一设计原理图2918339附录二程序清单31绪论1.1课题设计目的及意义随着科学技术的快速发展,超声波将在测距仪中的应用越来越广。但就目前的急速水平来说,人们可以使用特定的测距技术仍然是非常有限的,所以这是一个有无限前景的技术和产业[1]。展望未来,超声波测距仪在各方面都将是非常重要和有用的工具,作为一种新型的超声波测距仪,将有很大的发展空间,并向更高精度的定位方向发展,满足日益发展的社会需求,如声纳的发展基本趋势:研制具有更高定位精度的被动测距声纳,以满足水中武器实施全隐蔽攻击的需求;继续发展采用低频线谱检测的潜艇拖拽线列阵声纳,实现超远程的被动探测和识别;研制更适合与前还工作的潜艇声纳,特别是解决浅海水中目标识别问题;搭理降低潜艇自噪声,改善潜艇声纳的工作环境[2]。毋庸置疑,无线的超声波测距仪将于自动化智能化接轨,与其他的测距仪集成和融合,形成多测距仪。随着测距仪的技术进步,测距仪将从具有单纯判断功能发展到具有学习功能,最终发展到具有创造力。在新的世纪里,面貌一新的测距仪将发挥更大的作用。随着科学技术的发展,人们生活水平的提高,城市发展建设加快,拥有汽车的市民越来越多,而倒车后视不良一直是困扰驾驶员,特别是新手的难题。倒车测距仪能以语音或者更为直观的文字形式告知驾驶员车与周围障碍物的具体距离,帮助驾驶员扫除视野死角和消除视线模糊所带来不可预知的后果,提高驾驶的安全性。倒车测距仪是一个由单片机控制的汽车泊车安全辅助装置。该测距仪讲单片机的实时控制及数据处理功能与超声波的测距技术、传感器技术相结合能够测量并显示车辆后部障碍物里车辆的距离驾驶员不但可以直接观察到显示的距离还可以凭听觉判断车后障碍物离车辆的远近解除了驾驶员泊车和起动车辆时前后左右探视所引起的困扰并可以帮助驾驶员扫除视野死角和视线模糊的缺陷提高驾驶的安全性。因此,设计好的超声波测距仪就显得非常重要了。这就是我设计超声波测距仪的意义。1.2超声波测距系统的现状和发展我国,关于超声的大规模研究始于1956年。迄今,在超声的各个领域都开展了研究和应用,其中有少数项目已接近或达到了国际水平。《超声波测距原理及实践技术》的作者中国测试技术研究所李茂山在文章中详细地阐述了超声波的测距原理,并给出了具体的超声波测距框图,讨论超声波距离测量精度的影响,并列出了几个原因。在这篇文章中,他并没有具体地提及一些超声波测距仪所需的电路,只是给了平常所需的电路的名称,也没各种电路之间的兼容。1998年,曼内斯德马泰克(秦皇岛)有限公司推出了一种数字式超声波位移测量仪,李忠杰在《数字式超声波位移测量仪的研究》一文中阐述了数字超声波位移计的结构,工作原理和功能,通过单片微型计算机处理其数据,在文章的程序框图中,详细描述了仪器的硬件电路的各部分,并且给出了的仪器测得的数据,和分析的产生误差的根本。在这篇文章中给出在对液压缸位移进行测量时与其它位移传感器利用超声波测距仪和优点,并列出了一个单片微型计算机程序框图。《双频超声波测距》的作者中国科学院上海声学实验室王润田提出了双频超声波测距的方法和原理,由于空气对超声波的平方与超声波的吸收成正比,因此,用来测量距离的超声波的频率应保持在一个适中的范围,不能太高[3];但另一方面,频率越低,波长越长,测量距离时的绝对误差就越大,测量精度与加大测距范围实际上是很矛盾的。他提出,为了在一个较长的范围内达到测距的精度,在测距时同时发射两个频率的超声波,频率较大的测较近的距离,频率较小的测较长的距离,这样在较大的范围内实现较高的测距精度。而国外关于超声波测距研究的主力是莱卡公司。1996莱卡Power型迪士通在日光下也能进行长距离测量。1998莱卡迪士通推出basic型产品。作为第二代的迪士通,它不仅代表了新的技术飞跃,在设计上也跃上新的台阶:多功能底座、电池供电、快速测距等无不体现了莱卡对创新的执着。

1998莱卡迪士通推出memo和pro型,增加了数据存储功能和应用程序。再次引发测量技术革命。迪士通memo型能存储1000个测量值,实现智能化的测量,pro型则答应应用相关的程序进行高精密测量,成为莱卡迪士通家族中顶级的手持激光产品。带内存的pro不光能直接用于测量,也能进行联机操作[4]。

1999莱卡迪士通第三代classic产品诞生。莱卡测量系统的手持激光测距仪取得了新的技术突破。classic3取代basic,仍旧沿袭着手持测距技术世界领先的地位。它保留了basic型诸如可靠、易于使用、精度高等使之成为行业首选产品的知名性能,又取得了要害性的进步:体积更小、重量更轻、测距更快和价格更优。耐用、防水的classic3堪称30m到100m乃至更远距离测量应用的理想工具。2001创新不断,莱卡测量系统又创立了新的技术标准,率先在手持激光测距仪上采用字母数字单片机毕业论文式混合键盘。新一代迪士通成为迪士通发展历程上新的里程碑。它包括四类产品:莱卡迪士通lite、迪士通classic4、迪士通pro4和迪士通pro4a。

2002测量从未如此简单。莱卡测量系统推向市场的第五代迪士通产品中,新增了两款独特的型号,莱卡迪士通lite5和classci5。一键按发使测量变得前所未及的简单便捷,在0.2m到200m之间,单次测量时间用不到1秒。用lite5,每项工作如测距、计算面积或体积都能用已明确定义的按键容易实现。classic5则以轻触式的键盘和为方便长距离测量而内置的望远镜给人留下深刻印象。事实上,作为多年的市场领先者,莱卡测量系统深得信赖。随着时代的发展,电子领域出现了超声波测距,微波雷达测距,激光测距。微波雷达测距法和激光测距法由于难度和造价高,通常只在军工领域中使用,超声波测距法适用于民用是因为它难度低,成本少。这项技术也可用于工业测量领域。由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波常常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现[5]。因为超声波检测快速、方便、计算容易、实现实时控制简单的特点,并且超声波检测在测量精度方面也能达到工业生产的标准,因此在移动机器人的研制上也得到了非常多的应用。随着自动测量和微机技术的发展,超声波测距的理论已经成熟,超声波测距的应用也非常广泛。非接触方式是超声波测距的检测方法。比较其他方法,如光学或电磁的方法,要被测量的对象的颜色或光的明亮,都不是影响超声波测距的因素。能适应如被测物体在黑暗中,烟雾,电磁的干扰,粉尘和有毒有害气体的场合。所以在目标识别,智能控制,GPS自动导航,测量液体在密封容器或开口容器中的高低等领域有广泛使用。尤其是在空气测距的应用,由于在空气中超声波的速度相对在其他介质中的速度慢,因此检测出其返回时超声波信号中包含的沿传播方向上的结构信息相对简单,分辨精度很高,因而比其他方法测得的数据更为准确;同时结构清晰简易、仪器自身比较小、信号处理可靠等都是超声波感应器相比其他测距方法的优点。因此本设计也是利用超声波来测量距离。

系统的总体方案设计2.1系统的主要功能具有超声波测距功能,测量距离0.20m~5.00m测距精度±1㎝。具有测量距离数值无线传输功能。实时显示测量的距离,显示格式为:X.XXm。汉字提醒显示:距离在0.40m~1.00m,显示“危险距离”并用红色LED灯指示;距离在1.00m~2.00m,显示“保持距离”,并用黄色LED灯指示;距离在2.00m以上,显示“安全距离”并用蓝色LED灯指示。具有实时语音播报功能,实时播报测量距离数值,格式:X.XXm,实时播报时间间隔≤10s,实时播报声音清晰明亮、无明显失真,在1m距离处人耳能准确分辨。语音播报要与显示同步。2.2硬件总体设计框图:超声波测距器系统设计框图如图2-1所示详情如下:图2-1超声波测距器系统设计框图2.3测距发送模块框图测距发送模块如图2-2所示详情如下:图2-2测距发送模块设计框图2.4播报及显示模块框图播报及显示模块如图2-3所示详情如下:图2-3播报及显示模块设计框图2.5硬件的选型方案一:采用AT89C51,数据RAM大小128B,程序存储器大小4KB,2个定时/计数器,直插40个引脚,可采用C语言编程,引脚多,使用方便,但没有无线收发功能。方案二:采用CC2530单片机,CC2530提供了101dB的链路质量,优秀的接收器灵敏度和健壮的抗干扰性,四种供电模式,多种闪存尺寸,以及一套广泛的外设集——包括2个USART、12位ADC和21个通用GPIO,除了通过优秀的RF性能、选择性和业界标准增强8051MCU内核,支持一般的低功耗无线通信,CC2530还可以配备TI的一个标准兼容或专有的网络协议栈(RemoTI,Z-Stack,或SimpliciTI)来简化开发。CC2530可以用于的应用包括远程控制、消费型电子、家庭控制、计量和智能能源、楼宇自动化、医疗等领域。因考虑到本设计中有测量距离数值无线传输功能,故选择方案二。方案一:采用分立元件制作,成本低廉但耗时耗力,需要CD4049,NE5532等元件。方案二:采用超声波发射和接收整体模块US-020,测距精度3mm,但本设计要求精度为1mm,故需添加温度补偿模块。模块包括超声波发生器,接收器,控制电路,该产品使用简便,体积小,质量牢靠。因系统中对模组需要体积小,产品牢固,所以权衡两种方案,选择方案二。方案一:采用AD590JH温度传感器,感应温度-55℃~+150℃,精确度±5℃,工作电压4V-30V/DC,价格高。方案二:采用TMP275温度传感器,测温范围-40℃~+125℃。在-20℃~+100℃测温范围内,精度为±0.5°C,工作电压3V-5V/DC,其双线串行接口与I2C相兼容。芯片采用小巧的8引脚MSOP封装。,价格低廉,易使用,测温范围广。综合制作难度及精度考虑,故采用方案二,使用TMP275温度传感器。方案一:采用MXH040-8S/8P芯片,该芯片语音长度可达40秒PWM和DAC两种音频输出方式最多可加载63段地址的语音,成本低廉,但是只能一次烧入。方案二:采用WT588D语音模块,最多可加载500段用于编辑的语音,其中WT588D芯片具有,功能多音质好应用范围广性能稳定等特点,同时具有MP3控制模式、按键控制模式、按键组合控制模式、并口控制模式、一线串口控制模式、三线串口控制模式以及三线串口控制I/O口扩展输出模式,可控制的语音地址位能达到220个,但该模块成本较高。由于试验中可能需要多次烧入程序并从制作实物时间考虑,选择方案二。方案一:采用静态显示方法,静态显示模块的硬件制作较复杂及功耗大,要用到多个并行口,成本较高,但是亮度高,字形稳定。方案二:采用动态显示方法,用4个数码管显示。动态显示模块的硬件制作简单,段扫描和位扫描各占用一个端口,采用间断扫描法功耗小、硬件成本低及整个硬件系统体积相对减小。方案三:采用LCD的方法,具有硬件制作简单可直接与单片机接口,显示内容多,功耗小,成本低等优点,Nokia5110是飞利浦公司生产的图像液晶,显示范围84*48,使用内置驱动芯片PCD8544,串口速率达到4Mbit/s。比较以上三种方案:方案一硬件复杂体积大、功耗大;方案二硬件简单、功耗小;方案三具有硬件简单,显示内容多,功耗小,成本低等优点。本系统设计要求达到功耗小、体积小、成本低,显示信息多等要求,权衡三种方案,选择方案三。

系统的硬件结构设计硬件电路的设计主要包括单片机系统及显示电路、语音播报电路、温度补偿电路、无线传输、超声波发射电路和超声波检测接受电路五部分。以下将逐个阐述说明各模块的设计原理及性能。3.1主控芯片CC2530单片机及最小外围电路CC2530是一种SoC片上系统解决方案,主要应用于RF4CE、ZigBee和IEEE等片上系统。其具有成本低、资料消耗少等优点,能够搭建性能优良的网络节点。CC2530具有RF收发器的优势,包括系统内可编程闪存,采用增强型8051CPU,具有很强的运算和处理能力以及8-KBRAM,保证了系统的稳定和高效。CC2530主要有CC2530F32/64/128/256四个闪存版本,其闪存容量分别为32/64/128/256KB。CC2530能够满足对超低功耗系统的需求,能够根据实际需求合理选择运行模式。CC2530转换不同运行模式消耗的能量很低,转换速度高,保证了系统的实时性。CC2530F256以ZigBee协议栈(Z-Stack™)为基础,是一套功能完善、性能优良的ZigBee解决方案,对ZigBee提供了很好的支撑。CC2530F64结合了德州仪器的黄金单元RemoTI,更好地提供了一个强大和完整的ZigBeeRF4CE远程控制解决方案。6-mm×6-mm的QFN40封装;2个USART、12位ADC和21个通用GPIO;主动模式RX(CPU空闲):24mA;供电模式1(4µs唤醒):0.2mA;供电模式2(睡眠定时器运行):1µA;供电模式3(外部中断):0.4µA;宽电源电压范围(2V–3.6V);适应2.4-GHzIEEE的RF收发器;极高的接收灵敏度和抗干扰性能;可编程的输出功率高达4.5dBm;只需极少的外接元件;优良的性能和具有代码预取功能的低功耗8051微控制器内核;8-KBRAM;具备在各种供电方式下的数据保持能力;强大的5通道DMA;IEEEMAC定时器,通用定时器(一个16位定时器,一个8位定时器);图3-1CC2530引脚图CC253x芯片的CPU内核选用8051,与单周期8051相互兼容,具有很强的可移植性和可扩展性。CC253x芯片有CODE/XDATA、DATA和SFR三种内存访问总线,能够对主SRAM、DATA和SFR进行单周期访问,还具有18输入的扩展中断单元和1个调试接口。中断控制器共有中断组6个,中断源18个,每个中断组包括3个中断源,并对应于4个中断优先级。中断服务请求在设备回到空闲模式时被自动触发,并将处于睡眠模式的设备唤醒。内存仲裁器在系统中心,将外部设备、物理存储器、DMA控制器和CPU利用SFR总线连接起来。内存仲裁器有4个内存访问点,可以在三个物理存储器上进行映射,即:XREG/SFR寄存器、闪存存储器和8-KBSRAM。仲裁的执行由内存仲裁器实现,并对访问物理存储器的顺序进行排序。8-KBSRAM是一个SRAM,具有超低功耗的特点,可以映射到部分XDATA和DATA存储空间,能够保存掉电部分的信息。对于低功耗应用来讲,这一功能十分便捷。32/64/128//256KB闪存块能够映射到XDATA之中,提供了非易失性程序存储器,为内电路编程提供了便利条件。非易失性存储器不仅能存储常量和程序代码,还支持应用程序对必要数据的存储,提高了这些数据的安全性和稳定性,即便设备重启以后仍能继续使用。该项功能十分实用,简化了加入、网络寻找和完全启动等过程,将具体数据直接保存起来,保证了数据的安全性。外围设备、数字内核、时钟利用低压稳压器进行供电,其电压约为1.8V。支持电源的管理功能,能够在低功耗模式下进行供电,延长了电池使用寿命。复位设备可以通过5种复位源实现复位。CC2530有种类繁多的外围设备,提供了多样化的服务和支持,对各种应用有很好的支持,为程序开发者提供了便利的条件。调试接口负责执行专有的两线串行接口,并检验内部电路。调试接口能够擦除闪存存储器的内容、对振荡器进行控制、设置代码断电、但不调试内核指令、执行指令操作、停止和开始用户程序等。利用上述技术,能够减轻编写外部闪存程序和试验内部电路的工作量。程序代码可以通过闪存存储器进行存储。可通过用户软件和调试闪存存储器接口编程。其允许4字节编程I/O控制器负责所有通用I/O引脚和页面擦除。CPU可以配置外部设置模块是否控制具体某个引脚或它们受软件的控制,条件为真,每个引脚配置为一个输出或输入,连接衬垫里的一个上拉或下拉电阻。每个引脚上使能可以使用CPU中断。每个连接到I/O引脚的外设可以选择在两个不同的I/O引脚位置之间,以确保在不同应用程序中的保持灵活性。CC2530具有一个IEEE兼容无线收发器。RF内核控制模拟无线模块。另外,它提供了MCU和无线设备之间的一个接口,这使得可以发出命令,读取状态,自动操作和确定无线设备事件的顺序。无线设备还包括一个数据包过滤和地址识别模块。输入/输出匹配当使用例如单极子的一个不平衡天线,则最优化性能应该使用一个巴伦。可以使用低成本的分立电感元件和电容元件实现巴伦。显示的推荐巴伦有C262,L261和L252。如果使用了像折叠偶极子这样的平衡天线,则可以忽略巴伦。32-MHz晶振使用了一个外部32-MHz振荡器XTAL1和两个负载电容(C221和C231)。详细信息见32-MHz晶振一节。32-MHz晶振看到的负载电容由下式给定:(3-1)XTAL2是一个可选的32.768-kHz晶振,有两个负载电容(C321和C331)用于32.768-kHz晶振。32.768-kHz晶振用于要求非常低的睡眠电流消耗和精确唤醒时间的应用。32.768-kHz晶振看到的负载电容由下式给定:(3-2)通过查阅相关资料并结合该系统设计要求,把CC2530的最小外围电路设计为下图:图3-2CC2530最小系统复位电路本设计中的复位电路分为上电复位电路和手动复位电路两种,并都接在CC2530的RESET接口上。上电复位电路通过电容C32来实现的,电源VCC的上升时间不超过0.5ms即可实现上电复位。手动复位端是复位端通过电容C21与接地相连来实现的,所需时间同样小于0.5ms。时钟振荡电路根据系统设计要求,采用32Mhz晶体振荡器,并添加两个负载电容,均为37pF。图3-3CC2530退耦电容电路在CC2530每个电源接口放置0.1微法的电容(即104),用于退耦,即滤掉其他芯片工作电流的波动造成的电源波动对该芯片的的影响,总电源输入处放一个比较大的电解电容。3.2超声波收发模块US-020接口设计及性能分析US-020超声波测距模块可实现2cm~7m的非接触测距功能,供电电压为5V,静态功耗低于3mA,支持GPIO通信模式,内带看门狗,工作稳定可靠。本模块如图3-4,3-5所示:图3-4US-020正面图图3-5US-020背面图本模块有一个接口,4pin供电及通信接口。4pin接口为2.54mm间距的弯排针,如图3-6所示图3-64pin接口从左到右依次编号1,2,3,4。它们的定义为:1号Pin:接VCC电源(直流5V)。2号Pin:接外部电路的Trig端,向此管脚输入一个10μS以上的高电平,可触发模块测距。3号Pin:接外部电路的Echo端,当测距结束时,此管脚会输出一个高电平,电平宽度为超声波往返时间之和。4号Pin:接外部电路的地。US-020只需要在Trig管脚输入一个10μS以上的高电平,系统便可发出8个40KHZ的超声波脉冲,然后检测回波信号。当检测到回波信号后,通过Echo管脚输出。根据Echo管脚输出高电平的持续时间可以计算距离值。即距离值为:(高电平时间*340m/s)/2。图3-7超声波测距电路Trig端,向此管脚输入一个10uS以上的高电平,可触发模块测距。Echo端,当测距结束时,此管脚会输出一个高电平,电平宽度为超声波往返时间之和。3.3温度补偿模块TMP275接口设计及性能分析TMP275的高度精确性可使散热与电源管理更加高效,而其低功耗能够延长电池使用寿命并最小化自加热(selfheating)。在-20℃~+100℃范围内,TMP275的精确度为0.5℃(最大值)。其双线串行接口与I2C相兼容。芯片采用小巧的8引脚MSOP封装。该器件的其他特性包括:50μA低电流、9至12位可编程分辨率、0.1μA关机电流模式、整个温度范围内出色的稳定性,以及-40℃~+125℃的广泛工作温度范围。另外,该器件还允许多达8个不同地址,以实现接口总线设计的高灵活性。其引脚排列图如图2-4所示:图3-8TMP275引脚排列(1)8个地址;(2)数字输出:两个两线制串行接口;(3)分辨率:9位至12位,用户可选;(4)精度:-20℃至100℃时为±0.5℃(最大值);(5)低静态电流:50μA,0.1μA待机电流;(6)宽电源范围:2.7V至5.5V;(7)没有加电排序要求;在V+前可以两线总线上拉。上、下限温度寄存器、配置寄存器、温度寄存器和指针寄存器共同实现了TMP275的功能,通过寄存器的合理配置实现TMP275的正常工作。如表2-2所示,为数据在配置寄存器的存储格式。表3-1TMP275配置寄存器的数据格式D7D6D5D4D3D2D1D0OSR1R0F1F0POLTMSD如下所示,为各数据位的含义:SD设置器件的工作模式是否为关断模式。SD处于正常工作模式用0来表示;SD处于关断工作模式用1来表示。其中,中断和比较模式都属于正常模式。TM设置期间的工作模式。TM处于比较模式用0来表示;TM处于中断模式用1来表示。POLALERT极性位。ALERT和控制器的输出极性是否一致可以通过POL设置来实现。F1/F0错误队列配置位。报警会再连续n次温度超限的条件下输出。通过F0和F1设置参数n的值。避免报警输出受环境噪声的影响是设置错误队列的主要目标。表3-2错误队列配置F1F0连续错误数n/次001012104116R1/R0温度传感器分辨率配置位。通过对其配置,可以控制温度传感器的转换分辨率,同时也可以控制时间;分辨率越高,转换时间越长。具体配置参数如表2-4所列。表3-3分辨率配置R1R0分辨率/位(温度/℃)转换时间/ms009(0.5)27.50110(0.25)551011(0.125)1101112(0.0625)220I2C总线综述

主设备是指初始化传输的设备,对总线接入进行控制,SCL串行时钟也通过主设备产生;从设备是指受主设备控制的设备。数据在总线空闲的时候进行传输。启动和停止条件也通过主设备进行控制。SDA数据线除了在启动/停止信号到来时候发生变化以外,在时钟信号处于高电平的数据传输期间,始终保持不变。TMP275是从设备,在启动信号发送过来以后,设备开始工作。如果正确的地址发送过来,会发送确认信号,表示工作正常进行,并根据R/W位的状态进行读/写操作。当停止信号到来后,所有工作结束。主器件必须首先通过一个从器件地址字节来寻找从器件的地址,才能与TMP275进行通信,从器件地址有8位,7个为地址位,最后一位表明希望执行读取还是写入操作的方向位,其中前4位是固定位1001,后三位则由引脚A0,A1,A2接地或接高电平决定。TMP的地址引脚和从器件地址见表3-4表3-4TMP的地址引脚和从器件地址A2A1A0从器件地址000001010011100101110111图3-9温度采集电路TMP275通过芯片本身感测温度,其中芯片的SCL为时钟线,SDA为数据线,与I2C总线接口兼容,因此直接与CC2530相连,SCL与CC2530的P0_5连接,SDA与CC2530的P0_6连接,SDA,SCL,ALERT3个引脚在连接中需要上拉电阻。引脚A0、A1、A23个地址引脚均接地,则TMP275器件的写地址为0x91,读地址为0x90。3.4LCD显示模块Nokia5110接口设计及性能分析Nokia5110性能简介Nokia5110是飞利浦公司生产的图像液晶,显示范围84*48,使用内置驱动芯片PCD8544,使用一个串行接口与主机处理器通信,接口的信号线数量显著减少,只有9条包括电源和接地的信号线。支持多种串行通信协议(如AVR单片机的SPI、MCS51的串口模式0等),传送数据的速度达4Mbps,写入显示数据可全速,没有等待时间。连接模块与印制版则可通过导电胶粘接,而不使用连接电缆,用模块上的金属钩可将模块固定到印制板上,因而非常便于安装和更换。图3-10LCD显示电路SCE为片选引脚使能引脚充许输入数据,低电平有效与MCU的P1_4相连,D/C为数据和命令切换脚,当D/C收到低电平信号时,当前字节解释为命令字节,如果D/C收到高电平信号,数据将存储到显示数据RAM中。DIN为数据输入,与MCU的P1_6相连,SCLK为时钟引脚,与CC2530的P1_7相连。3.5LED电路接口设计图3-11LED和按键电路根据本系统的设计要求,LED灯共占用单片机CC2530三个接口,分别接在CC2530的P0_4,P0_5,P0_6。按键电路接在单片机的P1_1口,用于检测系统是否正常运作。3.6语音播报模块WT588D接口设计及性能分析WT588D系列语音单片机是广州唯创科技有限公司联合台湾华邦共同研发出来的集单片机和语音电路于一体的可编辑语音芯片。功能多音质好应用范围广性能稳定是WT588D系列语音单片机的特长,适用范围狭小是以往各类语音芯片的缺陷,为了补偿这一缺点,该芯片的MP3控制模式、按键组合控制模式、并口控制模式、一线串口控制模式、三线串口控制模式等,满足了应用人员对该产品投放各种场所的需求。WT588D是一款功能强大的可重复擦除烧写的语音单片机芯片。WT588D让语音芯片不再为控制方式而寻找合适的外围单片机电路,高度集成的单片机技术足于取代复杂的外围控制电路。配套WT-APP上位机操作软件可随意更换WT588D语音单片机芯片的任何一种控制模式,把信息下载到SPI-Flash上即可。软件操作方式简洁易懂,撮合了语音组合技术,大大减少了语音编辑的时间。引脚图如图2-7所示图3-12WT588D引脚图其管脚描述如表3-5所示表3-5WT588D引脚描述封装引脚引脚编号简述功能描述1VDDVDD电源输入脚,可接DC2.8~5.5V2P00K1按键13CVDDCVDDVDD电源调准脚4OSCIOSCIRC震荡输入脚5P02K3/CS按键3/三线串口CS6PWM+/DACPWM+/DACPWM+/DAC音频输出脚,视功能设置而定7VDD_SPKVDD_SPK音频电源输入脚8PWM-PWM-PWM-音频输出脚9VSS_SPKVSS-SPK音频电源地线脚10VCCVCC电源输入脚,可接DC2.8~3.6V11GNDGND空地12NCNC空13F_CSSPI-FLASH_CS下载音频数据用,接P1514F_DOSPI-FLASH_DO下载音频数据用,接P1315/WP/WPFLASH-ROM写保护脚16GNDGND接地17F_CLKSPI-FLASH_CLK下载音频数据用,接P1618F_DISPI-FLASH_DI下载音频数据用,接P1419P13P13下载音频数据用,接F_DO20P14P14下载音频数据用,接F_DI续表3-5封装引脚引脚编号简述功能描述21P15P15下载音频数据用,接F_CS22P16P16下载音频数据用,接F_CLK23VDD-SIMVDD-SIM芯片内部串口电源管理输入脚,接VCC24P17BUSYBUSY信号输出脚25P03K4/CLK/DATA按键4/三线串口CLK/一线串口DATA26/RESET/RESET复位脚,低电平保持≥5ms有效27P01K2/DATA按键2/三线串口DATA28P04K5按键5图3-13语音模块电路引脚1接3.3V电源,6号和8号引脚为音频输出脚与扩音器相连,引脚24号与单片机的P0_0相连,引脚25和引脚26分别与单片机CC2530的P0_1,P0_2相连。单片机设计原理图见附录一。

系统软件设计4.1系统总程序设计通过软件控制单片机的功能是单片机的主要特点和优点,程序的设计要考虑合理性和可读性,遵循模块化设计的原则,采用自顶向下的设计方法。模块化设计使程序的可读性好、修改及完善方便。软件部分由测距发送模块,播报显示模块组成。4.2超声波测距仪的设计原理发射器发出的超声波以速度v在空气中传播,在到达被测物体是被反射返回,由接受器接受,其往返时间为t,有s=vt/2即可算出被测物体的距离。因为超声波的速度v与传播介质的温度有关,表2-1给出了不同的摄氏度下不同的超声波的速度。在使用时,如果空气的温度变化幅度较小,就近似当作声速是基本不变的。如果对测量距离精度要求很高,则应该通过温度补偿的方法加以校正。表4-1超声波波速与温度的关系表温度(℃)-30-20-100102030100声速(m/s)313319325323338344349386单片机发出40khz的信号,经放大后通过超声波发射器输出;超声波接受器将接受到得超声波信号经放大器放大,用锁相环电路进行检波处理后,启动单片机中断程序,测得时间为t,再由软件进行辨别、计算,得出距离数并送LCD显示并送语音播报模块播报。4.3超声波测距方法的选择超声波测距的原理一般采用渡越时间法TOF(timeofflight)。首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离。测量距离的方法的种类很多,用尺可以测量短距离,激光测距等则可以测量远距离,尔高精度的中长距离测量就可以用超声波测距适来实现。因为超声波在标准空气中的传播速度为331.45米/秒,由单片机负责计时,单片机使用32.0MHZ晶振,所以在理论上,此系统的测量精度可以达到毫米级。由于超声波能量消耗缓慢,指向性强,在介质中传播距离远,因而超声波可以用于距离的测量。利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也能达到要求[6]。根据设计任务、控制对象和现有条件本系统硬件电路采用由单片机最小系统、温度补偿电路、超声波发射电路、超声波接收电路、显示电路无线通信电路以及语音播报电路构成。本超声波测距仪的具体工作过程如下,先由被单片微型计算机机控制的振荡源发出40kHz的频率信号来打开超声波感应器。其中一次发射出8个左右的脉冲信号,当第一个脉冲信号发出后,单片机中的计数器开始计数,当单片机感应到到第一个回波脉冲的瞬间,单片机中的计数器则停止计数,测出时间t即从发射第一个脉冲到接收第一个回波脉冲信号的时间后,单片机开始读取温度值补偿声速,被测距离就可使用测距公式推算出,同时测量数据通过无线通信模块传到下位机进行语音播报及显示。4.4超声波测距仪的算法设计超声波测距的原理为超声波收发模块在T时间发出一个超声波信号,当这个脉冲信号碰到待测物体后反弹回来,就被超声波收发模块收到。这样只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波收发模块与待测物体的距离。距离的计算公式为:(4-1)其中,d为待测物体与超声波测距仪器的距离,s为声波的来回的路程,c为超声波声速,t为声波来回所用的时间[7]。由于本设计对测距精度要求较高,上述公式不能满足精度要求,所以需通过温度补偿的方法对精度加以校正,上式中的超声波波速则应按下式进行计算:(4-2)式中,c为超声波在空气中的传播速度,323m/s为超声波在介质为空气,环境温度为0℃时的传播速度。4.5测距发送模块流程图图4-1测距发送模块流程图4.6播报及显示模块流程图图4-2播报及显示模块流程图软件的调试程序见附录三

结论本文系统介绍了一种基于单片机CC2530的带有汉字显示及语音播报的超声波测距系统。整个电路采用模块化设计,硬件部分由超声波测距模块、单片机模块、温度传感器模块、语音播报模块、LCD显示模块组成,软件部分由测距发送模块,播报显示模块组成。本文将软,硬件整体地结合起来,同时给出了软,硬件的设计方案。本超声波测距仪测量距离0.20m~5.00m测距精度±1㎝,具有汉字显示及语音播报等功能,测量时与待测物体无直接接触,具有整体性好,精度高,可靠性好,控制简单方便等特点。但由于自己经验不足,在软件和硬件方面还有许多需要完善的地方,我会在今后的工作和学习中不断改进。总体来说,在此次毕业设计中我学到了许多有用的知识,令我受益匪浅,这不仅有专业知识,比如超声波的测距原理,各种外围电路的分析,设计以及单片机的开发过程都有了更深入的理解;还有对自己的学习方法有了很大的改进,经过这次毕业设计后,我由原本被动地接受知识转变为主动地寻求知识,比如在做毕业设计过程中,我查了大量相关文献资料,并对市场上的超声波测距产品做了一些调查,对现有的同类测距产品的发展状况和普及程度都有了一定的了解。在实际操作中发现,书本上理论的知识和实际运用的是有差别的,所以有些问题除了深层次的理解之外,更需要不断更正过去错误的思维,歌德曾说过,光有知识是不够的,还应当运用;光有理想是不够的,还应当行动。因此,我们必须将理论知识与实践相结合,这样才能更好的解决问题。挫折是一份财富,经历是一份拥有,这次毕业设计必将是我人生中一个美好的回忆。

参考文献[1]胡萍.超声波测距仪的研制[J].计算机与现代化,2003,(10):20-23.[2]戴曰章,吴志勇.基于AT89C51单片机的超声波测距系统设计[J].计量与测试技术,2005,(02):17-18.[3]王莹.高精度超声波测距仪的研究设计[D].北京:华北电力大学,2006:10-15.[4]王福瑞.单片机测控系统设计大全[M].北京航空航天大学出版社,2001.[5]马忠梅,籍顺心等.单片机的C语言应用程序设计[M].北京航空航天大学出版社,2001.[6]张荣等.工业监控超声波测距器设计[J].企业技术开发(下半月),2010,(12):7-9.[7]单丹等.基于PIC16F877A单片机超声波测距器的设计[J].广西轻工业,2010,(05):33-35.[8]张涛.基于CC2530的温度监测模块设计与应用[D].南昌:南昌大学,2012,24-26.[9]刘笃仁.PIC软硬件系统设计:基于PIC16F87X系列[M].西安:电子工业出版社,2005.[10]WendtE,KlausKW.Anewtypeofhydraulicactuatorusingelectrorheologicalfluids[J].InternationalJModernPhysicsB,1999,(14):2176.[11]潘永雄.电子线路CAD实用教程(第二版)[M].西安电子科技大学出版社,2004.[12]谢嘉奎.电子线路[M].高等教育出版社,1999.[13]李广弟.单片机原理及应用[M].北京航空航天大学出版社,2004.[14]赵亮.单片机c语言编程与实例[M].人民邮电出版社,2003.[15]R.Raya,A.Frizera,R.Ceres,etal.Designandevaluationofafastmodel-basedalgorithmforultrasonicrangemeasurements[J].SensorsandActuatorsA:Physical,2008,148(1):335~341.[16]TsungNanChou,CatherineWykes.Anintegratedultrasonicsystemfordetection,recognitionandmeasurement[D].DepartmentofManufacturingEngineeringandOperationsManagement,UniversityofNottingham,UK,2000,26(3):179~190.

致谢本文研究工作是在我的导师付贵阳老师的精心指导和悉心关怀下完成的。付贵阳老师作为一名优秀的、经验丰富的教师,有着丰富的经验和专业理论,在整个毕业设计过程中,付老师对我进行了耐心的指导和帮助,提出严格要求,引导我不断开阔思路,为我答疑解惑,鼓励我大胆创新,从开题伊始到论文结束,我所取得的每一个进步、编写的每一段程序都无不倾注着导师辛勤的汗水和心血。从尊敬的导师身上,我不仅学到了扎实、宽广的专业知识,也学到了为人处世的道理。在今后的学习工作中,我将铭记恩师对我的教诲和鼓励,取得更好的成绩。在此我要向我的导师付贵阳老师致以最衷心的感谢和深深的敬意。不积小流,无以成江海,本设计能够顺利的完成,也归功于各位任课老师的谆谆教导,使我能够很好掌握在学校中所学到的知识,并运用到本次设计当中。正是有了他们的悉心帮助和支持,才使我的毕业设计工作顺利完成,在此向全体老师表示衷心的谢意。感谢他们四年来的辛勤栽培。同时,我也要感谢和我一起做毕业设计的同学们。在毕业设计的这段时间里,你们给我提出很多宝贵的意见,给予了我不少帮助还有工作上的支持,在此也真诚的谢谢你们。在此,向所有关心和帮助过我的老师、同学和朋友表示由衷的谢意。衷心感谢在百忙之中评阅论文和参加答辩的各位专家、教授。附录一设计原理图附录二程序清单测距发送模块#include"hal_mcu.h"#include"hal_defs.h"#include"hal_types.h"#include"OSAL.h"#include"My_Timer.h"#include"SerialApp.h"volatileuint8flag=0;//T1STAT(0xAF)–定时器1状态#defineTIMER1_OVFIF0X20//定时器1计数器溢出中断标志。#defineTIMER1_CH4IF0X10//定时器1通道4中断标志。#defineTIMER1_CH3IF0X08//定时器1通道3中断标志。#defineTIMER1_CH2IF0X04//定时器1通道2中断标志。#defineTIMER1_CH1IF0X02//定时器1通道1中断标志。#defineTIMER1_CH0IF0X01//定时器1通道0中断标志。//定时器标记输出设置。不能高于通过OSC位设置的系统时钟设置。#defineTICKSPD_32MHz0X00#defineTICKSPD_16MHz0X08#defineTICKSPD_8MHz0X10#defineTICKSPD_4MHz0X18#defineTICKSPD_2MHz0X20#defineTICKSPD_1MHz0X28#defineTICKSPD_500KHz0X30#defineTICKSPD_250KHz0X38#defineTICKSPD_SET(val)(CLKCONCMD=((CLKCONCMD&0xc7)|val))//TimerPERCFG(0xF1)–外设控制#defineTIMER1_IO10X00#defineTIMER1_IO20X40#defineTIMER3_IO10X00#defineTIMER3_IO20X20#defineTIMER4_IO10X00#defineTIMER4_IO20X10#definePERCFG_SET(val)(PERCFG=((PERCFG&0x0f)|val))//P2SEL(0xF5)–端口2功能选择#defineTIMER3_FIRST0x20//PRI2P1#defineTIMER4_FIRST0x10//PRI1P1#defineTIMER1_FIRST0x08//PRI0P1#defineTIMER1_ENABLE_OVERFLOW_INT(val)\do{TIMIF=(val)?TIMIF|0x40:TIMIF&~0x40;\EA=1;\T1IE=1;\}while(0)#defineTIMER1_COUNTER_CLEAR()(T1CNTL=0xaa)//#defineTIMER1_SET_CLOCK_DIVIDE(val)\do{\T1CTL&=0xf3;\(val==0)?(T1CTL|=0X00):/*不分频*/\(val==8)?(T1CTL|=0X04):/*8分频*/\(val==32)?(T1CTL|=0X80):/*32分频*/\(T1CTL|=0X0c);/*128分频*/\}while(0)//SelectthemodeforTimer1tostartorsuspendedTimer1#defineTIMER1_MODE_SUSPENDED0X00#defineTIMER1_MODE_FREE0X01#defineTIMER1_MODE_MODULO0X02#defineTIMER1_MODE_UP_DOWN0X03#defineTIMER1_SET_MODE_START(val)\do{\T1CTL&=~0X03;\(val==1)?(T1CTL|=0X01):/*Free*/\(val==2)?(T1CTL|=0X02):/*Modulo*/\(val==3)?(T1CTL|=0X03):/*UP/DOWN*/\(T1CTL|=0X00);/*suspended*/\}while(0)//Timer1Channel0/1/2/3/4Capture/CompareControl//interruptmask#defineCHANNEL_INTERRUPT_ENABLE0x40#defineCHANNEL_INTERRUPT_DISABLE0x00//通道比较输出模式选择#defineCMP_0_MODE0x00//在比较设置输出#defineCMP_1_MODE0x08//在比较清除输出#defineCMP_2_MODE0x10//在比较切换输出#defineCMP_3_MODE0x18//正计数比较时设置输出,在0清除#defineCMP_4_MODE0x20//在正计数比较清除输出,在0设置#defineCMP_5_MODE0x28//在比较设置输出,在0xFF清除#defineCMP_6_MODE0x30//在比较清除输出,在0x00设置#defineCMP_7_MODE0x38//初始化输出引脚。CMP[2:0]不变//SelectTimerchannelmode#defineCHANNEL_CAPTURE_MODE0x00//捕获模式#defineCHANNEL_COMPARE_MODE0x04//比较模式//Capturemodeselect#defineNO_CAPTURE0x00//无捕获#defineRISING_EDGE_CAPTURE0x01//在上升沿捕获#defineFALLING_EDGE_CAPTURE0x02//在下降沿捕获#defineBOTH_EDGE_CAPTURE0x03//在两个沿都捕获#defineTIMER1_SET_CONTROL(chan,val)(T1CCTL##chan=val)//Timer1Channel0/1/2/3/4Capture/CompareValue#defineTIMER1_SET_VALUE(chan,val)(T1CC##chan##L=(val&0xff);T1CC##chan##H=((val>>8)&0xff);)voidInit_My_Timer1(void){TICKSPD_SET(TICKSPD_16MHz);//16MHz/*P1DIR&=~0x04;//P1.2Input//P2INP|=0x40;//端口1下拉选择//P1INP&=~0x04;//P1.2上拉/下拉P1INP|=0x04;//P1.2三态P1SEL|=0x04;//P1.2外设功能PERCFG_SET(TIMER1_IO2);//Timer1使用备用位置2--P1.2P2SEL|=TIMER1_FIRST;//定时器1优先*/P0DIR&=~0x80;//P0.7Input//P2INP&=~0x40;//端口1上拉选择//P1INP&=~0x04;//P0.7上拉/下拉P0INP|=0x80;//P0.7三态P0SEL|=0x80;//P0.7外设功能PERCFG_SET(TIMER1_IO2);//Timer1使用备用位置2--P0.7//P2SEL|=TIMER1_FIRST;//定时器1优先/*//查询法P1SEL&=~0x04;//P1.2通用I/OP1DIR&=~0x04;//P1.2Input//P2INP|=0x40;//端口1下拉选择P1INP|=0x04;//P1.2三态*///脉冲发生口初始化P0SEL&=~0x01;//P0.0通用I/OP0DIR|=0x01;//P0.0输出P0_0=0;TIMER1_SET_CLOCK_DIVIDE(8);//8分频//查询法屏蔽此TIMER1_SET_CONTROL(3,(CHANNEL_INTERRUPT_ENABLE|CHANNEL_CAPTURE_MODE|BOTH_EDGE_CAPTURE));//IRCON&=~0x20;//clearintflagTIMER1_ENABLE_OVERFLOW_INT(TRUE);//openoverflowT1中断TIMER1_COUNTER_CLEAR();TIMER1_SET_MODE_START(TIMER1_MODE_SUSPENDED);//suspended}voidStart_My_Timer1(void){TIMER1_COUNTER_CLEAR();TIMER1_SET_MODE_START(TIMER1_MODE_FREE);//startTimer1}voidStopt_My_Timer1(void){TIMER1_SET_MODE_START(TIMER1_MODE_SUSPENDED);//suspended}HAL_ISR_FUNCTION(My_Timer1_ISR,T1_VECTOR){//IRCON&=~0x20;//清中断标志,硬件自动完成EA=0;//HAL_DISABLE_INTERRUPTS();uint8k=T1STAT;if((k&TIMER1_CH3IF)){if((flag==0)||(flag==2)){flag++;}}if((k&TIMER1_OVFIF)){flag=4;}EA=1;//HAL_ENABLE_INTERRUPTS();}TMP275#include"TMP275.h"//Temperature_Resolution:已扩大10000倍,与Converter_Resolution对应uint16Temp_Resolution[4]={5000,2500,1250,625};/*功能:总线开始参数:void返回值:void*/staticinlinevoidTMP275_Start(void){TMP275_SDA_L; //HoldtimeafterrepeatedSTARTconditionmin_t:100nsdelay_us(1);}/*功能:总线结束参数:void返回值:void*/staticinlinevoidTMP275_Stop(void){TMP275_SCL_L;delay_us(1);TMP275_SDA_L;delay_us(1);TMP275_SCL_H; //STOPConditionSetupTimemin_t:100nsdelay_us(1);TMP275_SDA_H; //BusFreeTimeBetweenSTOPandSTARTConditionmin_t:600nsdelay_us(1);}/*功能:write8bitdataandcheckACK参数:8bitdata返回值:1-成功 0-失败*/uint8TMP275_WriteNumb(uint8numb){uint8i;for(i=0;i<8;i++){TMP275_SCL_L; //SCLClockLOWPeriodmin_t:1300nsTMP275_SDA_SetOut;if(numb&(0x80>>i)){TMP275_SDA_H;}else{TMP275_SDA_L;}delay_us(2);//DataSetupTimemin_t:100nsTMP275_SCL_H; //SCLClockHIGHPeriodmin_t:600nsdelay_us(1);}TMP275_SCL_L; //SCLClockLOWPeriodmin_t:1300nsTMP275_SDA_SetRead;delay_us(2);TMP275_SCL_H; //SCLClockHIGHPeriodmin_t:600nsif(TMP275_SDA_Read) //ACKByTMP275{i=0; //error}else {i=1; //success}delay_us(1);TMP275_SCL_L;TMP275_SDA_SetOut;return(i);}/*功能:read8bitdataandACK参数:void返回值:8bitdata*/uint8TMP275_ReadNumb(void){uint8i,numb=0x00;for(i=0;i<8;i++){TMP275_SCL_L; //SCLClockLOWPeriodmin_t:1300nsTMP275_SDA_SetRead;numb=numb<<1;delay_us(2);TMP275_SCL_H; //SCLClockHIGHPeriodmin_t:600nsif(TMP275_SDA_Read){numb++;}delay_us(1);}//ACKByMasterTMP275_SCL_L; //SCLClockLOWPeriodmin_t:1300nsTMP275_SDA_SetOut;TMP275_SDA_L;delay_us(2);TMP275_SCL_H; //SCLClockHIGHPeriodmin_t:600nsdelay_us(1);TMP275_SCL_L;TMP275_SDA_SetOut;return(numb);}/*功能:TMP275写pointerregister指向的register的内容参数:TMP275指针返回值:1-成功 0-失败*/uint8TMP275_Write(TMP275*p){uint8i;TMP275_Start(); //StartWritei=TMP275_WriteNumb(p->slave_addr); //WriteSlaveAddressi+=TMP275_WriteNumb(p->pointer_reg); //WritePointerRegisteri+=TMP275_WriteNumb((p->reg_data[p->pointer_reg])>>8); //WriteData1i+=TMP275_WriteNumb((p->reg_data[p->pointer_reg])&0xff);//WriteData2TMP275_Stop(); //StopWriteif(i==4)return(1); //successelsereturn(0); //error}/*功能:TMP275读pointerregister指向的register的内容参数:TMP275指针返回值:1-成功 0-失败*/uint8TMP275_Read(TMP275*p){uint8i;TMP275_Start(); //Starti=TMP275_WriteNumb(p->slave_addr); //WriteSlaveAddressi+=TMP275_WriteNumb(p->pointer_reg); //WritePointerRegisterTMP275_Stop(); //StopTMP275_Start(); //StartWritei+=TMP275_WriteNumb(((p->slave_addr)|0x01)); //WriteSlaveAddressp->reg_data[p->pointer_reg]=(((uint16)(TMP275_ReadNumb()))<<8);//ReadData1p->reg_data[p->pointer_reg]+=TMP275_ReadNumb();//ReadData2TMP275_Stop

温馨提示

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

评论

0/150

提交评论