课程设计 基于51单片机的超声波测距仪设计.doc

上传人:文库蛋蛋多 文档编号:4150466 上传时间:2023-04-07 格式:DOC 页数:36 大小:9.45MB
返回 下载 相关 举报
课程设计 基于51单片机的超声波测距仪设计.doc_第1页
第1页 / 共36页
课程设计 基于51单片机的超声波测距仪设计.doc_第2页
第2页 / 共36页
课程设计 基于51单片机的超声波测距仪设计.doc_第3页
第3页 / 共36页
课程设计 基于51单片机的超声波测距仪设计.doc_第4页
第4页 / 共36页
课程设计 基于51单片机的超声波测距仪设计.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《课程设计 基于51单片机的超声波测距仪设计.doc》由会员分享,可在线阅读,更多相关《课程设计 基于51单片机的超声波测距仪设计.doc(36页珍藏版)》请在三一办公上搜索。

1、 基于51单片机的超声波测距仪设计摘要: 本方案以stc89c52为核心,通过编程(C语言)来实现该单片机对外围电路的适时控制,并提供给外围电路各种所需的信号和接收超声波反射回来的微小信号,包括频率振荡信号,时钟信号,数据处理信号和显示信号等等。其核心功能是对距离的检测并实时的进行距离的显示,在检测距离方面通过发射端与接收端的时间差来计算,理论上所测距离与其时间差成线性关系,所以可以通过线性回归统计方法求出实际距离与所求距离的关系。该电路简化了一些外围电路,任能做到较为精确的测量工作,由于是采用程控操作,所以其移植性和可扩展性还是较好。在设计时分,分模块进行设计来实现各部分功能,简化了在设计过

2、程中的调试难度。关键词: 超声波测距、单片机控制、液晶显示、距离报警、线性回归Abstract:This program stc89c52 programming (C language) to achieve the timely control of the single-chip peripheral circuits, and made available to the peripheral circuits of the desired signal and receiving the ultrasonic reflected the small signal, including

3、frequency oscillation signal, the clock signal, data signal processing and display signals, and so on. The its core function is to to the detection of pairs the distance and real-time of the carried out the distance the display of goes as follows. In the to calculate the, in the the detection distan

4、ce aspects of through the launch of the-side with the the time of the the receiving end is poor, in theory, the measured distance with its time difference into a linear the relationship between, so can through the the linear regression statistical methods calculate the actual distance of the seek di

5、stance relationship. The circuit simplifies the peripheral circuit, any more accurate measurements can be done, because it is programmed operation, its portability and scalability better. Hours of the design, the sub-module design to achieve the function of each, and simplifies the debugging difficu

6、lty in the design process.Keywords:Ultrasonic Ranging, MCU control, LCD, alarm of distance ,linear regression 目录1前言31.1 课题的研究背景和意义31.2 课题的国内外研究现状32 总体方案设计42.1超声波测距的原理42.2超声波传感器的工作原理及结构图43单元模块设计53.1各单元模块功能介绍及电路设计53.2 AT89S52型单片机介绍63.3各单元模块的联接84 软件设计154.1软件设计分析154.2软件设计思路154.2.1主程序154.2.2 超声波测距子程序164.

7、2.3 超声波延时子程序175系统调试185.1硬件调试185.2硬软件联调195.3测试结果分析205.3.1测试波形205.3.2测试中仪器仪表215.3.3 数据分析215.4超声波测距误差分析225.4.1温度误差225.4.2串扰问题226 结论236.1总结与体会236.2 对设计的进一步完善提出意见或建议23附录一、相关设计程序26附录二、设计图和35附录三、实物图36 1前言1.1 课题的研究背景和意义超声波是指频率高于20KHz的声波,属于机械波的范畴,遵循一般机械波在弹性介质中的传播规律,如在介质的分界面处发生反射和折射现象,在进入介质后被介质吸收而发生衰减等,正是因为有这

8、些性质,使得超声波可以用于距离的测量,随着经济的发展,科技水平的不断提高,电子测量技术应用越来越广泛,超声波测量精度高,成本低,性能稳定则备受青睐,超声波测距技术被广泛的应用于人们生活和工作中。由于超声波测距是一种非接触检测技术,不受光线、被测对象颜色的影响,比其他仪器更卫生,具有不污染、高可靠、长寿命等特点,被广泛应用于纸业、矿业、电厂、化工业、污水处理厂、食品、水文、等行业中,可在不同环境中进行距离的准确度在线标定,可直接用于水酒精、糖等液位控制,能达到工业实用的指标要求。还可以用于移动机器人的视觉系统中,这样可使机器人自动躲避障碍物行走,及时获得障碍物的位置信息,同时超声波测距系统具有以

9、上的这些特点,在汽车倒车雷达的研制方面也得到了广泛应用1。1.2 课题的国内外研究现状目前国际国内,在超声波测距方面的研究方向和水平的不同,主要体现在对测距原理、超声波信号处理方法和超声波测距处理器的选用上。常见的超声波测距原理分为渡越时间法和相位差法两种。信号的处理方法大致分为阈值检验法、互相关延时估计法、伪随机码扩频测距法和最小均方法四种。在处理器方面大多以单片机为主,其中以51系列应用最为广泛,采用运算速度更快,效率更高dsp芯片作为处理器,也正成为一个非常活跃的研究方向。目前已研制的超声波测距仪中,量程一般为3-12m,美国AIRMAR公司生产的airducer AR30超声波传感器的

10、作用距离可达30m,但价格昂贵,准确度方面已控制在测量误差的0.4%左右,与真值的差距在厘米级的范围内,若采用互相关或伪随机法,最高可控制在0.05m内,在提高精确度方面,超声波测距还有很大的发展潜力和上升空间2。2 总体方案设计2.1超声波测距的原理 谐振频率高于20 kHz 的声波称为超声波。超声波为直线传播方式, 频率越高, 反射能力越强, 而绕射能力越弱。利用超声波的这种特性, 常常用渡越时间检测法进行距离的测量。其工作原理是:换能器向介质发射超声波, 声波遇到目标后必然有反射回波作用在换能器上。若已知介质中声速为c, 回波到达时刻与发射波时刻的时间差为t, 就可以计算出发射点与反射点

11、的距离s:s= c.t/2 (1)2.2超声波传感器的工作原理及结构图为了研究和利用超声波, 人们已经设计和制成了许多超声波发生器。总体上讲, 超声波发生器可以分为两大类: 即用电气方式和机械方式产生超声波。前者包括压电型、磁致伸缩型和电动型等; 后者有加尔统笛、液哨和气流旋笛等。它们所产生的超声波的频率、功率和声波特性各不相同, 因而用途也各不相同, 目前较为常用的是压电式超声波发生器,压电式超声波换能器是利用压电晶体谐振来工作的。内部结构如图1所示,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动产生超声波,这

12、时它就是超声波发生器;如没加电压,当共振板接受到超声波时,将压迫压电振荡器作振动,将机械能转换为电信号,这时它就成为超声波接受转换器。超声波发射转换器与接受转换器其结构稍有不同4。共 振 板电极压电晶片图 1 超声波传感器结构 以下为型号T/R40-10的超声波传感器的特性参数(T-发射,R-接收,40-中心频率单位kHZ,10-外壳直径单位mm)3单元模块设计3.1各单元模块功能介绍及电路设计整体电路的控制核心为单片机AT89S52,超声波发射和接收电路都对相应信号进行整形及放大,以保证测量结果尽可能精确。超声波模块传感器实现超声波的发射和接收。整体电路如图6:包括超声波发射电路,超声波接收

13、电路,显示电路等模块组成8。键盘键入估测范围 发射电路 AT89C51 接收电路 LED显示电路 图2.1工作原理超声波测距器工作原理:打开电源,整个电路通电,单片机执行程序,对系统环境初始化,设置定时器T0工作模式,启动T0, 调用超声波发生子程序,等待反射超声波,计算距离,显示距离;重复。工作过程中,相关的子程序和中断程序被执行,相应硬件配合行动,显示测量结果。3.2 AT89S52型单片机介绍AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程 Flash 存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上

14、Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存

15、,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止5。其引脚图如图3所示:P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下, P0不具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验 时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高

16、,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动 4 个 TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用 8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁

17、存器的内容。 在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4 个 TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为AT89S52特殊功能(第二功能)使用。 第二功能: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INTO(外中断0) P3.3 INT1(外中断1) P3.4 TO(定时/计数器0) P3.5 T1(定时/计数器

18、1) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通) 图3.13.3各单元模块的联接3.3.1 系统设计 该系统是以STC89C52型单片机为主体而搭建的,连接了外部矩阵键盘,1602型液晶,稳压电源系统。1、单片机单片机的型号是STC89C52,其主要外部I/O连接如下: 表3.1P0.0-P0.71602显示端口P2.0-P2.21602读写控制P3.0-P3.1程序烧写P3.4口发波端P3.2接收端 图3.23.3.2、矩阵键盘键盘为44的矩阵键盘,每个按键功能和与单片机连接端口如下: 图3.33.3.3、液晶 图3.4使用1602型液晶,在不同的状态下显

19、示不同的内容: 初始化: 预设距离: 测量中: 测量失败: 图3.53.3.4、闪烁灯 图3.63.3.5、程序烧写模块 图3.73.3.6、蜂鸣器模块 图3.83.3.7、稳压电源采用7805稳压芯片,增加了电源的稳定性,降低功耗 图3.93.3.8、测距模块(1) 工作原理 图3.10a. 采用IO口TRIG触发测距,给至少10us的高电平信号;b. 模块自动发送8个40KHZ的方波,自动检测是否有信号返回;c. 有信号返回时,通过IO口ECHO输出一个高电平,高电平持续时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速)/2。(2) 引脚定义VCC供5V电源,TRIG触发控制

20、,信号输入,ECHO回响信号输出,OUT开关量输出(当报警模块使用),GND为地线。(3) 工作时序图 图3.11以上时序图表明,只要提供一个10us以上脉冲触发信号,该模块内部将发出8个40KHZ周期电平并检测回波。一旦检测到回波,信号则输出回响信号。回响信号的脉冲宽度与所测量的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。4 软件设计4.1软件设计分析 完成了系统的硬件设计之后,接下来的就是系统软件设计,此设计所需要完成的主要是针对系统功能的实现及数据的处理和应用。由以上所述系统硬件设计和各个电路功能,系统软件需要实现以下功能:1、信号控制。在系统硬件中,已经完成了

21、发射电路、回拨检测接收电路的设计。在系统软件设计中只需完成发射脉冲信号及输出显示。2、数据存储。测距系统中需要得到发射信号与接收回波的时间差,需要读出计时器的计数值,然后存储在RAM中,而且每次发射周期的开始,需要对计数器清零,以备后续处理。3、信号处理。RAM中存储的计数值并不能作为距离值直接显示出来,有这个时间后,可以通过程序来计算出来。4、距离显示。经过软件处理得到的距离值需要十进制的数码管方式。4.2软件设计思路 超声波软件测距软件设计主要由主程序,发射子程序,外部中断接收子程序及显示子程序12。程序可以由汇编和C来编写,汇编语言虽然有很高的效率和精确度,但使用起来比较难以掌握,本文主

22、要采用C语言程序来完成各个功能。4.2.1主程序主程序流程图如图14所示。主程序首先对系统环境初始化,设置T0工作模式为16位的定时器模式,及计数初值,然后使超声波发射出一串40kHZ的方波。由于采用12MHZ的晶振,机器周期为1us,当主程序检测到接收成功的标志位后,将计数器T0的数(即超声波来回所用的时间)按公式计算可测得被测物体与测距仪之间的距离,测出距离后结果在液晶屏显示,然后再循环进行下一次距离的测量。当所测距离超出设置的最大距离后报警器会报警。开始系统初始化调用测距子程序计算测量结果调用显示子程序结束 图4.14.2.2 超声波测距子程序超声波发射子程序在P3.7口产生40kHZ方

23、波脉冲宽度约12us,作为超声波发射器的输出信号。一旦接收到超声波返回信号后(INT0引脚出现低电平),就立即进入中断程序。进入中断程序后就立即关闭定时器,T0停止计时,并将接收到的标志位为1,,然后在主函数里调用计算距离公式,在显示出来。流程图如图15:开始发射超声波 启动时钟开始计时N外部0是否有中断 Y时钟停止计时计算检测结果返回 图4.24.2.3 超声波延时子程序 在传感器以脉冲发射方式工作下,电压很高的发射电脉冲在激励传感器的同时也进入接收部分,此时,在短时间内放大器的放大倍数会降低,甚至没有放大作用,这种现象成为阻塞。不同的检测仪阻塞成都不一样。根据阻塞区内的缺陷回波高度对缺陷进

24、行定量会使结果偏低,甚至不能发现障碍物,这是需要注意的。由于发射脉冲自身有一定的宽度,加上放大器有阻塞问题,在靠近发射脉冲一段时间范围内,所要求发现的缺陷往往不能被发现,这段时间成为盲区。延时子程序的作用就是在超声波发射的同时延迟一些时间,在打开中断,为了就是防止在超声波发射时接收器就收到发射波,这样就会产生错误,产生比较严重的误差,所以要延迟一定的时间。5系统调试5.1硬件调试超声波测距仪的硬件安装时应保持两换能器中心轴线平行两者之间的距离在3-5cm之内,其余元件没有特殊要求。若能将超声波电路用金属壳屏蔽起来,可以提高抗干扰能力。根据测量范围要求不同,可适当调整与接收换能器并接的滤波电容的

25、大小,以获得合适的接收灵敏度和抗干扰能力。 硬件调试中,首先是线路的检查。焊接完实验后检查是否有错焊、漏焊、虚焊,电解电容是否接反,走线是否正确。检查无误后,再次就是上电检查,在正式上电前,用万用表测量一下电源与地是否短路,短路的话,要耐心检查、排除故障。然后进行显示电路,用同样的方法对显示部分进行调试后,给单片机与1602液晶之间进行调试。最后是对发射和接收电路,用函数发生器吧40kHZ的方波直接加到发射电路的输入端后,用示波器检测超声波发射的换能器,检差是不是有方波信号,再用函数发生器对超声波接收的换能器直接加40kHZ的方波信号,用示波器对接收电路输出端进行检测。通过这些过程,硬件部分的

26、调试就基本完成了,剩下的就只有软件和硬件的联调了。5.2硬软件联调硬件测试好后,便可将程序编译下载到单片机试运行。根据实际情况可以修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要。根据所设计的电路参数和程序,测距仪能测的范围为0.042.10m,测距仪最大误差不超过1cm。系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。图17为在keil_uVision3里编译的情况: 图5.15.3测试结果分析5.3.1测试波形图18、19中的波形为示波器抓拍的发射和接收电路中所得的波形图,上方的波形为发射电路中所得的波形图,

27、下方的波形为接收电路中在cx20106的1引脚处测得波形。图5.2图 5.3由上图可见,接收回路中测得的超声波信号共有两个波束,第一个波束为余波信号,即超声波接收头在发射头发射信号(一组40KHz的脉冲)后,马上就接收到了超声波信号,并持续一段时间。另一个波束为有效信号,即经过被测物表面反射的回波信号。超声波测距时,需要测的是开始发射到接收到信号的时间差,由上图中就可看出,需要检测的有效信号为反射物反射的回波信号,故要尽量避免检测到余波信号,这也是超声波检测中存在最小测量盲区的主要原因。 5.3.2测试中仪器仪表所用仪器仪表如 表5.1表序号名称型号品牌数量备注1直尺/1精度:0.1cm2万用

28、表/13数字示波器GDS-206215.3.3 数据分析基于上面设计的硬件电路和软件,焊接好电路后,经过调试,对系统进行测试,测试的距离数据如表2。测量单位:cm。 表 5.2 单位:cm实际距离5102021253035405060测量距离592020253134384960误 差0101011210实际距离708994105115120140180195200测量距离719091109118118140183194200误 差11343203105.4超声波测距误差分析超声波测距在实际应用也有局限性,其中对超声波测距的精度要求挺高。一是超声波在空气中衰减极大,因为测量距离的不同,造成回波信

29、号的起伏,使回波到达时间的测量产生了较大的误差;二是超声波脉冲回波在接收过程中展宽,影响了测距的分辨率,尤其是对近距离造成较大的影响,还有一些因素,诸如环境温度、风速等也会对测量造成一定地影响,这些因素都限制了超声波测距在一些对测距精度要求较高的场合的应用,如何解决这些问题,提高超声波测距的精度,具有较大的现实意义13。本系统最大测距误差在3cm左右,测距的盲区为5cm。5.4.1温度误差由于超声波也是一种声波,其声速c与温度有关,不同温度下超声波在空气中传播的速度随温度变化的关系: 式中:T为绝对温度(),为331.4m/s。表3列出了不同温度下的超声波声速。在使用时,若果温度变化不大,则可

30、以认为声速是基本不变的,如果测距精度要求很高,则应通过温度补偿的方法加以校正14。 表 5.3 5.4.2串扰问题设计中发射极和接收极距离较近,这样当发射极发射超声波后,有部分超声波经过障碍物反射就直接绕射到接收极上,这部分信号时无用的,会引起系统误差,而且这种误差是不可避免的。设计中采用延时来解决这个问题,经过多次程序校正本设计的盲区为5cm13。6 结论6.1总结与体会在设计之前,参考了许多相关的资料。在设计中又参考了网上的相关超声波测距仪资料,有了基本的思路。但着手设计时,又出现了许多未预料到的问题,例如元件的选择:在选择方案时最初选择了用分立元件搭建,但是在调试过程中遇到了问题,发射端

31、和接收端都正常工作,但是在处理接收端信号时由于CX1206芯片太为敏感,一直不能给出中断低电平,后改方案为全部用分立元件搭建,其中涉及到前级放大,带通滤波,后级放大比较,调试也没能完成,因此暂时放弃了此方案。选择了用超声波模块传感器,在调试过程中就显得容易了许多。在显示问题上,由于要显示字母和数字,因此选择了用1602液晶显示屏。为使单片机正常工作,电源选择了用7805稳压芯片,使用9V干电池供电,达到了便携的效果。在一些设计原理上也遇到了许多问题。如在中断程序和时钟编写上。还有就是在PCB制图和焊接上出现一些错误,经同学以及老师的指证,发现导通的原因,并及时的改正。总之,这次实验过程中我受益

32、匪浅,培养了我的设计思维,增加了动手操作的能力。更让我体会到实现电路功能喜悦。 6.2 对设计的进一步完善提出意见或建议本次设计还是有许多的不足之处,比如说本次设计的测距仪测距范围还不是特别大,只有0-5.4m,测量精度还不是很高,在两米以内为2厘米误差,而之后误差会随着测量距离的增加而增加,比如在五米时误差达到10厘米。在设计上我们还可以做成更小更便携,比如在器件的选择可以改用贴片,处理器可以用430类似的低功耗单片机,达到节能的目的,还可以加上无线通信功能,只需给设备发条短信,就可以知道测量的数据。只是由于时间以及个人的能力问题我们暂时还难以设计出这样的电路,者就有待于今后我们在学习中认真

33、领悟、参透。7致谢在这里,我对我们的带课老师卜云老师表示衷心的感谢。卜老师在这次课程设计过程中对我们的全方位的指导,是我们这次课程设计取得成功的根本保证。卜老师对这次课程设计抱着认真负责的态度,他极力做好安排、指导、答辩等各个环节,只为我们能通过这两周的课程设计学到更多知识,更快地提高我们的能力。在卜老师的指导下,我学到了很多平时没有学到的东西,尤其是学到了很多依托我们的专业知识在实际生活中广泛应用的东西。另外,我还要感谢学校能安排这次课程设计,为我们熟悉我们的专业相关提供了平台。当然,这次课程设计能取得成功,还少不了我们组几个同学的通力合作,大家在设计中献言献策,不积极发挥着个人的聪明与才智

34、。8参考文献1孟立凡等.传感器原理及技术M,北京,国防工艺出版社,2005.2杨永瑞,刘振起.电子测量技术基础M,西安:西安电子科技大学出版社,2004.3栾桂东等.传感器及其应用M,西安,西安电子科技大学出版社,1996.4王子芳.传感器应用技术M,西安,西北工业大学出版社,1996.5张国勋,孙海. 单片机原理及应用(第二版)M,北京:中国电力出版社,2007.6朱爱红,朱宁文.基于AT89C2051的超声波测距系统J,信息技术与信息化,2006, No.5.7翁黎朗.超声波换能器驱动和接收电路的研究J,集美大学学报,白然科学版,1998, No.4: 60-64.8赵广涛 ,程荫杭.基于

35、超声波传感器的测距系统设计J,微计算机信息, 2006,No.1:129-131.9卜英勇,何永强.一种高精度超声波测距仪测量精度的研究J,郑州大学学报(工学版),2006,No.1.10张谦琳.超声波检测原理和方法M,北京:中国科技大学出版社,1993.11翟国富,刘茂恺.一种实时高精度的机器人用超声波测距处理方法J,应用声学,1996,No.1.12谭浩强.程序设计(第二版)M,北京:清华大学出版社,1999.13张红莲.基于单片机的超声波测距系统的设计J. Plc&TA.2008(09):89-91.14Shirley PA. An introduction to ultrasonic

36、sensingJ.sensors.1989(11):15-21.15H.Elmer, H.Schweinzer,G.Magerl. High resolution Supersonic distances measurement for long distancesJ.Technisches Messen .2003,70(04):18-22. 附录一、相关设计程序/* *基于stc89c52的超声波测距仪* *编写日期:2012年4月05日* *改写日期:2012年5月30日* */#include#define uint unsigned int#define uchar unsigned

37、 charsbit RS=P20; /寄存器选择位,将RS位定义为P1.0引脚sbit RW=P21; /读写选择位,将RW位定义为P1.1引脚sbit E=P22; /使能信号位,将E位定义为P1.2引脚sbit send=P34; /发波位sbit LED1=P35;sbit LED2=P23;sbit beep=P36;uchar flag=0,counter=0,mov=0;uchar code num=0123456789;uchar code table1=distance:;uchar code table2=SET:;uchar code table3=cm;uchar cod

38、e table4=Test Fail !;uchar code table5=Welcom to you!;/*函数功能:延时若干微秒*/void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=600;y0;y-); void delaynus(uint z) uint x,y;for(y=5;y0;y-)for(x=z;x0;x-);void delay_key()uint x,y;for(x=100;x0;x-)for(y=180;y0;y-);/*函数功能:写指令*/void write_com(uchar com)RS=0;RW=0;E=0;

39、P0=com;delay(1);E=1;delay(1);E=0;/*函数功能:写数据*/void write_data(uchar da)RS=1;RW=0;E=0;P0=da;delay(1);E=1;delay(1);E=0;/从1跳变到0,液晶开始执行命令/*函数功能: 4*4 键盘扫描程序。进行键盘扫描,P1口*/uchar keyscan(void) uchar temp,i,key_val;while(1) P1=0x0f;if(P1!=0x0f)delay_key();if(P1!=0x0f)P1=0xef; /要检测列输入状态,低四位置1for(i=0;i4;i+) temp=P1&0x0f;switch(temp)case 0x0e:key_val=0;break;case 0x0d:key_val=1;break; case 0x0b:key_val=2;break;case 0x07:key_val=3;break; if(temp!=0x0f) return (i*4+key_val); P1=P11|0x01;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号