电气工程毕业论文

来源:执业医师 发布时间:2020-09-09 点击:

 编号

 20113011 57

 毕

 业

 设

 计

 (

 2015 5

 届本科)

  设计题目:

 基于单片机的超声波视力保护仪的设计

 学

 院:

 电气工程学院

 专

 业:

 电气工程及其自动化

 班

 级:

 1 11 级电气(1 1 )班

 作者姓名:

 赵

 学

 琴

 指导教师:

 吴治荣

 职称:

 讲

 师

 完 成日期:

 年

 月

 日

 --

 目

 录 陇东学院本科生毕业设计诚信声明................................. (1)

 基于单片机的超声波视力保护仪的设计............................. (2)

 摘要........................................................... (2)

 关键词......................................................... (2)

 Abstract ....................................................... (2)

 1 引言......................................................... (3)

 1.1

 研究的背景................................................ (3)

 1.2 研究的主要内容............................................. (3)

 1.3 应解决的关键问题........................................... (4)

 2 总体方案设计................................................. (4)

 2.1

 硬件设计.................................................. (5)

 2.1.1 电源稳压电路设计......................................... (5)

 2.1.2 主控制器模块............................................. (5)

 2.1.3 光照强度检测模块......................................... (5)

 2.1.4 报警提示模块............................................. (5)

 2.1.5 坐姿检测模块............................................. (5)

 2.1.6 显示模块................................................. (5)

 2.2 最终方案................................................... (6)

 3 硬件实现及单元电路设计....................................... (6)

 3.1 主控制模块 ................................................. (6)

 主控制最小系统电路如图 3.1 所示] 9 [。

 .......................... (6)

 3.3 蜂鸣器报警驱动电路......................................... (7)

 3.4 按键电路................................................... (8)

 3.5 光照强度检测电路........................................... (8)

 3.6 显示模块................................................... (9)

 3.7 超声波坐姿测距模块......................................... (9)

 -- 3.8 定时报警电路.............................................. (11)

 4 系统软件设计方案............................................ (11)

 4.1 系统主程序流程图.......................................... (12)

 5 系统分析.................................................... (13)

 5.1 测试结果及误差分析 ........................................ (13)

 7 优点和不足 .................................................. (14)

 结

  论....................................................... (15)

 参考文献...................................................... (15)

 致 谢......................................................... (16)

 附录 1 总电路图 ............................................... (17)

 附录 2 成品展示................................................ (18)

 附录 3(单片机 C 源程序清单) .................................... (19)

 精品文档 -- 陇东学院本科生毕业设计诚信声明

  本人郑重声明:所呈交的本科毕业设计,是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议,除文中已经注明引用的内容外,本设计不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。

  作者签名:

  二 O 一 五年 月 日

 精品文档 --

 基于单片机的超声波视力保护仪的设计 赵学琴,吴志荣 (陇东学院 电气工程学院 甘肃 庆阳 745000)

 摘要 : : 本设计主要内容是人体视力与桌面距离检测电路的设计与制作,该电路的工作原理是由 AT89C52 单片机为控制的核心部分,通过超声波传感器测距,能实现使用者距离与学习时间进行定时并通过报警来提示时间已到的功能和使用者注意用眼卫生的功能。通过 LCD 显示各种参数信息,并能在线修改各个参数初值来适应不同使用者的需求。软件利用 C 语言进行编程,并采用模块化的设计思路。该系统具有简单实用的特征,对青少年视力保护具有很好的效果。

 本设计通过实践证明该视力保护器可行且可靠性很好,使用方便。本设计期望通过该电子的制作和理论的研究,能为后期进一步设计多功能视力保护器并采取合理措施提高视力保护的有效性提供可靠和有效的数据源和信息依据。

 关键词 :单片机;液晶显示;报警;测距

  Ultrasonic distance measurement based on single chip

  ZHAO Xue-qin,WU Zhi-rong

 (Electrical Engineering College,longdong University,Qingyang 745000,Gs)

 Abstract: This design is the main content of human vision and desktop distance detection circuit design and production, the working principle of the circuit is controlled by AT89C51 single chip microcomputer as the core, through the ultrasonic sensor range, can realize user distance and the learning time for timing and by the time has come to prompt the alarm function and user attention with eye health function. Through the LCD display various parameters, and can modify the parameters of the initial value on-line to meet the needs of different users. Software using C language programming, and USES the modular design thinking. The system has the characteristics of simple and practical, has the very good effect to teenagers vision protection.

  This design through the practice has proved the vision protector feasible and good reliability, easy to use. This design expectations through the theoretical study of the electronic production and late for further design of multifunctional vision protector and take reasonable measures to improve the effectiveness of eye protection to provide reliable and effective data and information basis. Keywords: microcontroller; LCD display; alarm; ranging

 精品文档 -- 1 引言 1.1

 研究的背景 单片机技术的迅速兴起与蓬勃发展,其稳定、安全、高效、经济等优点十分突出,所以其应用也十分广泛。单片机已经无处不在、与我们生活息息相关,并且渗透到生活的方方面面,如空调、VCD 机、手机、微波炉、自动洗衣机及汽车电子设备等。单片机的特点是体积较小,也就是其集成特性,其内部结构是普通计算机系统的简化,增加一些外围电路,就能够组成一个完整的小系统,单片机具有很强的可扩展性。它具有和普通计算机类似的、强大的数据处理功能,通过使用一些科学的算法,可以获得很强的数据处理能力。所以单片机在工业应用中,可以极大地提高工业设备的智能化、数据处理能力和处理效率,而且单片机无需占用很大的空间。

 当前由于电视、网络的高速发展、学习压力的加重等诸多因素,使得青少年长时间不卫生、超负荷用眼,造成了青少年近视率大大提高。据国家统计局最近的一项调查显示,目前我国学生视力低下的状况令人担忧。小学生近视比例为 34%,初中生为 68%,重点高中生为 90%左右,在校大学生视力合格者更少。而在高考体检中由于自身缺陷原因被限考的学生当中有 74%为近视。据卫生部、教育部联合调查,目前我国学生近视发病率居世界第二,人数居世界之首,全国近视及眼疾患者近 3 亿人,已经成为全社会关注的公共卫生和社会问题。

 视力下降不仅影响青少年的日常生活和学习,对青少年的身心健康造成极大的影响,同时给青少年的成长与发育造成极大的障碍] 1 [。

 在这种情况下,亟须开发一种智能视力保护器。通过创造健康的读写环境和科学方式,避免因长期读写而导致的近视、驼背、脊柱侧弯、斜视、颈椎病等疾病的发生和发展,用非医药的手段,防范和解除不良读写习惯,避免给人们身体带来伤害。

 1.2 研究的主要内容 自 1992 年全国防近视专家指导小组成立以来,防近视产品经历了一个由简单到复杂、由单一到多元、由科技含量低到科技含量高的历程。在此基础上,科学家们进行了大量艰苦的研制开发工作,推向市场的产品多达几百种,给防近视工作带来了无限的生机。

 在国内新疆乌鲁木齐市旭之龙科技有限公司生产的“学生 1.5 视力保护器” 又名称坐视宝,它能对使用者的坐姿不当进行提示。还有深圳市华恒电子有限公司生产的型号为 MS-3023 的坐姿矫正器。可以纠正看书,写字的不良坐姿。总体看来,国内生产的视力保护器功能特点比较单一,

 精品文档 -- 与人们的个性化需求尚有很大的差距,故不能很好的满足广大使用者的需求。

 国外也致力于对保护视力的研究,但是他们更侧重于对近视原因的研究。美国德克萨斯大学西南医学中心何于光博士表示,吃鱼和新鲜蔬菜能够保护视力,降低发生近视的概率。他们认为通过合理的饮食营养搭配,以及正确的学习习惯,对视力的保护能起到事半功倍的作用。

 研究证明,现有的产品只是侧重视力保护的单一方面,功能尚不全面,不能从多个角度保护使用者的视力。

 课题由 51 单片机最小系统、超声波测距模块、显示电路、温度传感器等组成。利用超声波测距模块 HC-SR04 测量距离,并对数据进行分析处理,传给 51 单片机,再通过 1602 LCD 显示出来,同时电源部分采用 5V 直流电源。

 1.3 应解决的关键问题 1、对主要硬件电路设计、制作实物时拟解决的关键问题是:温度等外界干扰对测距精度的影响。

 2、超声波测距采用软件编程实现,通过仿真验证其正确性。

 2 总体方案设计 系统采用 STC89C52 单片机作为多功能视力保护器的核心控制单元,本系统通过光敏电阻采集光线信号,通过 AD 采集光线信号的强弱,把光线强度等级化,通过设定报警等级来实现报警;利用超声波测距传感器测出人脸部与桌面的距离,当小于设定距离时发出报警声提醒;通过单片机内部定时器计时,当使用达到 45 分钟时电路自动发出声音提示,提醒使用者注意休息;系统采用的报警电路由三极管驱动蜂鸣器组成。系统总体的设计方框图如图 2.1 所示] 2 [。

  STC89C52 超声波模块 复位电路 晶振电路 蜂鸣器报警模块 光线强度检测模块 按键模块 电源供电模块

 精品文档 -- 图 2.1 系统总体方框图 2.1

 硬件设计 2.1.1 电源稳压电路设计 本系统采用电池供电,我们考虑了如下方案为系统供电:

 电源电压通过 7805 稳压芯片为单片机及其它模块提供+5V 电压。经过实验验证系统工作时,单片机、传感器的工作电压稳定能够满足系统的要求,而且电池更换方便。

 2.1.2 主控制器模块

  系统采用 STC89C52 单片机作为智能视力保护器的核心控制单元,充分分析系统,其关键在于实现系统的自动报警与提醒,处理超声波测得的信号,以及处理光照强度信息,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源、有较为强大的控制功能和运算功能,I/O 口均可按位寻址,同时 STC89C52 单片机价格非常低廉,这是一种较为理想的方案。

 2.1.3 光照强度检测模块

  光强检测系统采用光敏电阻。光敏电阻的工作原理是当有光线照射时,电阻内原本处于稳定状态的电子受到激发,成为自由电子,所以光线越强,产生的自由电子也就越多,电阻就会越小。光敏电阻的优点有内部的光电效应和电极无关,即可以使用直流电源。灵敏度和半导体材料、以及入射光的波长有关,价格低廉,性价比高] 7 [。

  2.1.4 报警提示模块

  报警系统采用蜂鸣器报警。蜂鸣器,体积小,重量轻,装配简单,使用方便。价格实惠,对推动视力保护器的普及有很好的优势,能够较好的满足设计的要求。

 2.1.5 坐姿检测模块

  坐姿检测系统采用超声波传感器测距,通过测量人脸与桌面的距离来确定坐姿。当距离小于设定距离时就发出警报提醒。超声波传感器体积小,重量轻,使用方便。价格实惠,是一种较为理想的方案

 2.1.6 显示模块 显示界面采用 LCD1602 液晶进行显示。LCD1602 由于其显示清晰,显示内容丰富、清晰,

 精品文档 -- 显示信息量大,使用方便,显示快速而得到了广泛的应用。在本设计中很好的发挥其优势。

 2.2 最终方案 经过反复论证,我们最终确定了如下方案:

 (1)电源采用 6 节 5 号电池。

 (2)采用 STC89C52 单片机作为主控制器。

 (3)用光敏电阻检测光照强度。

 (4)用超声波传感器检测坐姿。

 (5)用 LCD1602 液晶显示。

 (6)用蜂鸣器实现报警。

 3 硬件实现及单元电路设计 3.1 主控制模块

  主控制最小系统电路如图 3.1 所示] 9 [。

  图 3.1 单片主控电路 (1)中央处理器(CPU)。它是单片机的核心,包括运算器和控制器两个主要组成部分,用于实现运算和控制功能。

 (2)数据存储器。89C52 单片机芯片数据存储器共有 128 个存储单元,用于存放可读写的数据。

 (3)定时器/计数器。89C52 单片机共有两个

  位的定时器/计数器,以实现定时和计数功能。

 (4)并行 I/O 口。89C52 单片机共有四个 8 位的 I/O 口(即 P0、P1、P2 和 P3),用以完成数据的并行输入/输出。

 精品文档 -- (5)串行 I/O 口。89C52 单片机有一个全双工串行口,以实现单片机和其他计算机或设备之间的串行数据传送。

 (6)程序存储器。

 (7)中断控制系统。

 3.2 电源电路设计

  供电模块电路如图 3.2 所示。

 图 3.2 电源电路 电源采用 7805 稳压芯片稳压成 5V 给传感器,单片机供电。

 3.3 蜂鸣器报警驱动电路

  报警模块如图 3.3 所示。

 图 3.3 报警电路

 精品文档 --

 蜂鸣器采用三极管驱动,当实际的距离小于设定的距离或实际的光强小于设定值时就会报警。

 3.4 按键电路

 系统采用 4 个按键来设定参数,和设定光照强度及超声波测距模块测得距离报警值。电路如图 3.4 所示] 6 [。

 图 3.4 按键电路 第一个键:设置键,能在测距和光强功能间转换 第二个键:加键(设置界面)/学习时间清零键(正常显示界面)

 第三个键:减键(设置界面)/暂停学习键(正常显示界面)

 第四个键:开始学习键 3.5 光照强度检测电路

  光照强度检测电路电路如图 3.5 所示。

 图 3.5 光照采集电路

 精品文档 -- 3.6 显示模块

 显示采用 LCD1602 液晶显示,显示电路如图 3.6 所示。

 图 3.6 显示电路 显示模块显示的超声波测距模块测的距离、显示的光线强度 、显示学习的时间。

 3.7 超声波坐姿测距模块 测距模块采用 HC-SR04 超声波测距模块,该模块可提供 2cm-250cm 的非接触式距离感测功能,测距精度可达高到 3mm。模块包括超声波发射器、接收器与控制电路] 10 [。

 基本工作原理:采用 IO 口 TRIG 触发测距,给至少 10us 的高电平信号;模块自动发送 8 个 40KHZ 的方波,自动检测是否有信号返回;有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2。实物如下图 3.7 所示。其中 VCC 供 5V 电源,GND 为地线,TRIG 触发控制信号输入,ECHO 回响信号输出等四支线。

 图 3.7 超声波模块实物 常见的超声波传感器多为开放型,其内部结构如图3.8所示,一个复合式振动器被灵活地固定

 精品文档 -- 在底座上。该复合式振动器是由谐振器以及一个金属片和一个压电陶瓷片组成的双压电晶片元件振动器。谐振器呈喇叭形,目的是能有效地辐射由于振动而产生的超声波,并且可以有效地使超声波聚集在振动器的中央部位。

 当电压作用于压电陶瓷时,就会随电压和频率的变化产生机械变形。另一方面,当振动压电陶瓷时,则会产生一个电荷。利用这一原理,当给由两片压电陶瓷或一片压电陶瓷和一个金属片构成的振动器,所谓叫双压电晶片元件,施加一个电信号时,就会因弯曲振动发射出超声波。相反,当向双压电晶片元件施加超声振动时,就会产生一个电信号。

 图 3.8 超声波传感器内部结构图 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为 340m/s,根据计时器记录的时间 t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2就是所谓的时间差测距法。如图 3.9 所示

 图 3.9 避障原理 入射波 反射波

 S=C×1/2 障碍物

 精品文档 -- 3.8 定时报警电路 报警电路分为单片机控制电路和报警发声电路。它主要通过单片机的定时计数功能完成定时45 分钟并使报警电路发出报警声,用以提醒学生休息。89c52 单片机内有两个可编程的定时器/计数器,满足诸如对外部脉冲进行记数,产生精确的定时时间,作串行口的波特性发生器等功能的需要。它们具有两种工作模式(计数器模式和定时器模式)及 4 种工作方式(方式 0,方式 1,方式 2,方式 3)。

  当定时器/计数器为定时工作方式时,计数器的加 1 信号由振荡器的 12 分频信号产生,即每过一个机器周期,计数器加 1,直至计数满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。因一个机器周期等于 12 个振荡周期,所以计数频率 fount=1/12osc。如果晶振为 12MHz,则计数周期为:T=1/(12×106)Hz×1/12=1μs 这是最短的定时周期。若要延长定时时间,则需要改变定时器的初值,并要适当选择定时器的长度(如 8 位、13 位、16 位等)。当定时器/计数器为计数工作方式时,通过引脚 T0 和 T1 对外部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的 S5P2 期间采样引脚输入电平。若一个机器周期采样值为 1,下一个机器周期采样值为 0,则计数器加 1。此后的机器周期 S3P1 期间,新的计数值装入计数器。所以检测一个由1 至 0 的跳变需要两个机器周期,故外部事年的最高计数频率为振荡频率的 1/24。例如,如果选用 12MHz 晶振,则最高计数频率为 0.5MHz。虽然对外部输入信号的占空比无特殊要求,但为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。工作方式控制寄存器 TMOD 用于控制定时器/计数器的工作模式及工作方式,它的字节地址为 89H。定时器/计数器的两个作用是用来精确的模拟一段时间间隔(作定时器用)或累计外部输入的脉冲个数(作计数器用)。当作定时器用时,在其输入端输入周期固定的脉冲个数,即可计算出所定时间的长度。当 89c52 内部的定时器/计数器被选定为定时器工作模式时,记数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲使计数器增 1,因此,定时器/计数器的输入脉冲和机器周期一样,为时钟频率的 1/12。本设计采用的时钟周期为 6MHz,记数速度为 500KHz,输入脉冲的时间间隔为 0.5 秒] 11 [。

 4 系统软件设计方案 该方案的编程思路是先确定主程序,之后根据各硬件电路功能来设计子程序模块,最后再将各模块嵌入主程序中。这样编程结构简单,由于子程序模块与硬件电路一一对应,所以调试起来十分方便。

 精品文档 --

 4.1 系统主程序流程图 系统的软件总流程图如图 4.1 所示。

 图 4.1 系统的软件总流程图 当系统开始工作后,首先进行初始化。然后进行对光照、距离、定时的判定,若光照、距离、定时超出设定值,进入报警系统,报警结束后返回继续判断。若未达到,直接返回去再判定。

 4.2 系统子程序流程图

  如图 4.2 所示为超声波模块测距功能流程图。

  是否小于设定光照 是否小于设定距离

 是否到设定时间 系统初始化 报警 Y 开始

 N

 精品文档 --

 开始计时1s是否到?YN发射超声波启动检测回波是否检测到回波?计算距离是否小于设定距离?返回主程序报警YNN 图 4.2 超声波模块测距功能流程图 测距功能开始后,首先判断定时是否到 1s,如果已到 1s,则超声波发射标志位置 1,启动超声波发射,并开启定时器 T1 和外部中断 0。若不到 1s,则返回继续计时。如果外部中断被触发,则表示接收到了回波,停止定时器 T1,计算距离。若外部中断未被触发,则返回继续发射超声波。计算距离时,如果算得距离小于设定距离,则报警。若算得距离大于设定距离,则返回主程序进行下一功能。

 5

 系统分析 5.1 测试结果及误差分析 对所要求测量范围 2cm-300cm 内的平面物体做了 50 次测量测试结果如下表 实距(cm)

 5

 15

 20

 25

 30

 35

 40

 45

 50

 55

 60

 65

 70

 75

 80

 85

 90

 95

 精品文档 -- 100

 105

 110

 测距(cm)

 5

 15

 20

 25

 30

 36

 40

 45

 50

 55

 60

 65

 70

 74

 80

 86

 90

 96

 101

 106

 110

  实距(cm)

 115

 120

 125

 130

 135

 140

 145

 150

 155

 160

 165

 170

 175

 180

 185

 190

 195

 测距(cm)

 116

 121

 124

 130

 136

 141

 146

 151

 155

 159

 166

 171

 175

 181

 186

 191

 197

  实距(cm)

 200

 205

 210

 215

 220

 225

 230

 235

 240

 245

 250

 255

  测距(cm)

 202

 207

 212

 217

 223

 227

 233

 236

 242

 246

 253

 257

 误差分析 通过对上表的综合分析得出如下结果:最大误差为 3cm,最小误差为 0cm,进一步分析得知平均误差为 0.92cm,在 0-100cm 内,平均误差为 0.2cm,在 101-200cm 内误差为 0.85,在 201-260cm内平均误差为 1.1cm,可见测量范围的增大平均误差也随之增大。

 鉴于使用者对智能视力保护器的测量距离要求为 30cm 左右,而在实际对智能视力保护器测试当中,发现在 20-40cm 距离范围内误差为 0.2cm,较好地体现出来视力保护器的实用性。

 7 优点和不足

 本设计的优点: (1)该设计能清晰、及时的显示使用者的使用指数; (2)该设计根据个人需求可对光照和距设置; (3)该设计电路结构简单,成本低廉,不易发生故障,且损坏时易修复; (4)该设计电路模块化,采用 C 语言编程,易修改和挪用,可以运用到其他控制器的设计,具有实用性。

 本设计的不足:

 (1)该设计测定的光强、和距离与实际光强、和距离有一定的误差,有待进一步改进; (2)该设计的对长时间看电视、电脑,玩手机也是造成近视重要因素,本设计对这一因素考虑较少。

 精品文档 --

 结

  论 本次设计在硬件上完成了一个 STC89C52 单片机的视力保护器的设计,并在此平台上用单片机 C 语言进行软件设计,经过测试,基本满足设计目标,可以完成各项基本功能。本系统开发空间大,使用灵活,便于用户扩展功能。本文创新点主要为利用单片机设计视力保护器的思想,增加了单片机在现实生活中的应用。利用光敏电阻电路检测光照,通过超声波传感器模块帮助学生保持正确坐姿进而校正其视力,简单方便且不会产生系统稳定性方面的问题;尽可能发挥系统优势,可以方便向其他功能扩展,也就是利用平台优势可以衍生更多功能。

 当然,由于时间关系,本次设计不足之处。比如说随着科技的飞速发展,众多电子产品进入我们的生活,如长时间看电视、电脑,玩手机也是造成近视重要因素,本设计对这一因素考虑较少。该设计通过该电子硬件的制作和理论的研究,能为后期进一步设计智能视力保护器并采取合理措施提高视力保护的有效性提供可靠和有效的数据源和信息依据。

 参考文献 [1]

 家庭电子 1998 年合订本.[J],1999. 212-214

 [2]

 康华光.电子技术基础模拟部分.[M]北京:高等教育出版社,2005.1-20 [3]

 康华光.电子技术基础数字部分.[M]北京:高等教育出版社,2005.40-60 [4]

 电子工艺实习.[J]成都,2003.1-23 [5]

 电子技术实验.[J] 成都, 2005.1-20 [6]

 电子线路设计实验测试第二版.[M]武汉:华中科大出版社, 2002.1-40 [7]

 赵健.实用声光电及无线电遥控电路 300 例.[J]北京:中国电力出版社,2005.90-100 [8]

 郑浩,高静.怎样用万用电表检测电子元器件修订本.[J] 北京:人民邮电出版社,2005.32-66 [9]

 赵振德.单片机原理及实验/实训[M].西安:西安电子科技大学出版社,2009 [10] 黄鸿,吴石增.传感器及应用技术[M].北京理工大学出版社,2008.7 [11] 孙惠芹.单片机项目设计教程[M].北京:电子工业出版社。2009,6 [12] 艾永乐,付子仪.数字电子技术基础[M].北京:中国电力出版社,2008

 精品文档 -- 致 谢 首先要感谢学校给我提供了做这个系统的机会,感谢学校的各位领导和老师一直以来对我的教导和帮助。

 其次感谢指导老师,给我进行了很多的辅导,不仅在技术上给了我很大帮助,也在系统需求和设计方面给予了我很大帮助。指导老师的谆谆教导,使我受益匪浅。老师多次询问研究进程,并为我指点迷津,帮助我开拓研究思路,精心点拨、热忱鼓励。老师一丝不苟的作风,严谨求实的态度,踏踏实实的精神,不仅授我以文,而且教我做人,给以终生受益无穷之道。我对老师的感激之情是无法用言语表达的。

 还要感谢我的同学,是你们在我平时设计和论文中与我一起探讨问题,并指出我设计上的误区,使我能及时的发现问题把设计顺利的进行下去,没有你们的帮助我不可能这样顺利地结稿,在此表示深深的谢意。

 精品文档 -- 附录 1 总电路图 EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10GND20VCC40U189C51/52R22.2kR510kC130pFC230pFC310uFY112MHzQ19012F1SPEAKERGND1DQ2 VCC3U3ds18b2012345678910111213141516J11602R610kVCCP26P27VCCVCCVCCP14VCCP00P01P02P03P04P05P06P07P00P01P02P03P04P05P06P07P14VCCR710kR81.5k32 1P1POWERVCC112233445566S1COM1R12R23R34R45R56R67R78R89RP110K1234J4hc-sr04VCCP20P21 P21P20S1S2S3P26P27RR12.2kD1LED

 精品文档 -- 附录 2 成品展示

 本设计实物如图 6.3

 图 6.3 实物图

 精品文档 -- 附录 3 (单片机 C 源程序清单)

 //宏定义 #define uchar unsigned char

 #define uint unsigned int #define ULint unsigned long int

 //温度零上与零下的标志位 char flag=0; //超声波 char flags=0; //超声波距离 char flag1s=0; //计算定时间 uint time=0; //计算距离 ULint L_=0; //温度 uint t_=0; //显示模式

 0 正常

 1 最大值调整

 2 最小值调整 uchar mode=0;

 uint Max=40; uint Min=0; //按键标志 uchar k=0; //数值有误 uchar FW=0; //头函数 #include <reg52.h> #include <intrins.h>

 精品文档 -- #include "BJ_Key.h"

 //报警按键 #include "display.h"

 //显示头函数 #include "ultrasonic_wave.h"//超声波头函数 #include "DS18B20.h"

 //温度传感器头函数

  //函数声明 void delayms(uint ms); //主函数 void main() {

 Init_ultrasonic_wave();

 //屏幕初始化

 Init1602();

 //温度初始化

 tmpchange();

  t_=tmp();

 tmpchange();

 t_=tmp();

 tmpchange();

 t_=tmp();

  //循环显示

 while(1)

 {

  Key();

  //正常显示

  if(mode==0)

  {

 StartModule();//启动超声波

 精品文档 --

 while(!RX);

  //当 RX 为零时等待

 TR0=1;

 //开启计数

 while(RX);

  //当 RX 为 1 计数并等待

 TR0=0;

 //关闭计数

 delayms(20);

 //20MS

 tmpchange();

 //温度转换

 t_=tmp();

  //度温度

 Conut(t_/10); //计算距离

 if(L_>Max||L_<Min)

 Display_1602(t_/10,L_);

  }

  //调整显示

  else if(mode!=0)

  {

 //最大最小值

 Init_MaxMin();

 while(mode!=0)

 {

 Key();

  if(k==1&&mode==1)

  {

 Init_MaxMin();

  write_com(0x8d);//设置位置

 }

  else if(k==1&&mode==2)

  {

 Init_MaxMin();

  write_com(0x8d+0x40);//设置位置

 精品文档 --

  }

  k=0;

 }

 //界面初始化

 Init1602();

  }

 } }

 void delayms(uint ms) {

 uchar i=100,j;

 for(;ms;ms--)

 {

  {

 j=10;

 while(--j);

  }

 } }

  //T0 中断用来计数器溢出,超过测距范围 void CJ_T0() interrupt 1 {

  flags=1;

 //中断溢出标志 }

  //LCD 管脚声明

 精品文档 -- sbit LCDRS = P2^7; sbit LCDEN= P2^6;

 //初始画时显示的内容 uchar code Init1[]="Temperature:

 C"; uchar code Init2[]="Distance:

 000CM";

 //初始画时显示的内容 uchar code Init3[]="

 Max------

  CM"; uchar code Init4[]="

 Min------

  CM";

 //LCD 延时 void LCDdelay(uint z) {

  uint x,y;

  for(x=z;x>0;x--) } //写命令 void write_com(uchar com) {

  LCDRS=0;

  P0=com;

  LCDdelay(5);

  LCDEN=1;

  LCDdelay(5);

  LCDEN=0; } //写数据 void write_data(uchar date) {

 精品文档 --

  LCDRS=1;

  P0=date;

  LCDdelay(5);

  LCDEN=1;

  LCDdelay(5);

  LCDEN=0; } //1602 初始化 void Init1602() {

  uchar i=0;

  write_com(0x0C);//打开显示 无光标 无光标闪烁

  write_com(0x06);//当读或写一个字符是指针后一一位

  write_com(0x01);//清屏

  write_com(0x80);//设置位置

 for(i=0;i<14;i++)

  {

  write_data(Init1[i]);

  }

 write_data(0xdf);

 write_data(Init1[14]);

 write_com(0x80+40);//设置位置

  for(i=0;i<16;i++)

  {

  write_data(Init2[i]);

  } }

 精品文档 --

 //温度 距离显示 void Display_1602(uchar W,uint L) {

 //温度值显示

 write_com(0x80+12);

 write_data("0"+W%10);

  //长度值显示

 if(flag1s==1)

 {

  write_com(0x80+0x40+0x0a);

  write_data(" ");

  write_data("0"+L/100);

  write_data("0"+L/10%10);

  write_data("0"+L%10);

 }

 else if(flag1s==0)

 {

  write_com(0x80+0x40+0x0a);

  write_data("-");

  write_data("-");

  write_data("-");

  write_data("-");

 } }

  //1602 初始化最大化最小化调整界面 void Init_MaxMin()

 精品文档 -- {

  uchar i=0;

  write_com(0x38);//屏幕初始化

  write_com(0x0f);//打开显示 无光标 无光标闪烁

  write_com(0x06);//当读或写一个字符是指针后一一位

  write_com(0x01);//清屏

  write_com(0x80);//设置位置

 for(i=0;i<16;i++)

  {

  write_data(Init3[i]);

  }

 write_com(0x80+40);//设置位置

  for(i=0;i<16;i++)

  {

  write_data(Init4[i]);

  }

 write_com(0x8b);//设置位置

 write_data("0"+Max/100);

 write_data("0"+Max/10%10);

 write_data("0"+Max%10);

 write_com(0x80+0x40+0x0b);//设置位置

 write_data("0"+Min/100);

 write_data("0"+Min/10%10);

 write_data("0"+Min%10);

  write_com(0x8d);//设置位置

 精品文档 -- }

  #define uchar unsigned char

 #define uint unsigned int

 //define interface

 定义 DS18B20 接口 sbit DS=P1^4;

 //variable of temperature

  uint temp=0;

 //延时子函数

  //sign of the result positive or

 void delay(uint count)

 {

 uint i;

  while(count)

 {

 i=200;

 while(i>0)

 i--;

 count--;

 }

 }

 //发送初始化及复位信号

 void dsreset(void) {

  //DS18B20 初始化

  uint i;

 DS=0;

 精品文档 --

  i=103;

 while(i>0)i--;

 DS=1;

 i=4;

 while(i>0)i--;

 }

 //read a bit

 读一位 bit tmpreadbit(void)

 {

 uint i;

 bit dat;

 //i++ for delay

 小延时一下

  DS=0;i++;

  DS=1;i++;i++;

 i=8;while(i>0)i--;

 return (dat);

 }

 //read a byte date

 读一个字节

 uchar tmpread(void)

  {

 uchar i,j,dat;

 dat=0;

 for(i=1;i<=8;i++)

 {

 j=tmpreadbit();

 //读出的数据最低位在最前面,这样刚好

  //一个字节在 dat 里

 dat=(j<<7)|(dat>>1);

 精品文档 --

  }

  //将一个字节数据返回

 return(dat);

  }

  //write a byte to ds18b20

 //写一个字节到 DS18B20 里

 void tmpwritebyte(uchar dat)

  {

  uint i;

 uchar j;

 bit testb;

 for(j=1;j<=8;j++)

 {

 testb=dat&0x01;

 dat=dat>>1;

 if(testb)

  //write 1

  写 1 部分

 {

 DS=0;

 i++;i++;

 DS=1;

 i=8;while(i>0)i--;

 }

 else

 {

 DS=0;

 //write 0

 写 0 部分

 i=8;while(i>0)i--;

 DS=1;

 i++;i++;

 精品文档 --

  }

 }

 }

 //DS18B20 begin change

 发送温度转换命令 void tmpchange(void)

 {

 dsreset();

  //初始化 DS18B20

 delay(1);

 //延时

 tmpwritebyte(0xcc);

 //跳过序列号命令

 tmpwritebyte(0x44);

 //发送温度转换命令

 }

  //get the temperature

 获得温度 uint tmp()

 {

 float tt=0;

 uchar a=0,b=0;

 dsreset();

 delay(1);

 //发送读取数据命令

  tmpwritebyte(0xcc);

 tmpwritebyte(0xbe);

  //连续读两个字节数据

  a=tmpread();

 b=tmpread();

 //two byte

 compose a int variable

 //两字节合成一个整型变量。

  temp=b;

 temp<<=8;

 精品文档 --

  if(b==0xff)

  {

  flag=1;

  temp=~temp+1;

  }

  //得到真实十进制温度值,因为 DS18B20

 tt=temp*0.0625;

 //可以精确到 0.0625 度,所以读回数据的最低位代表的是

 //0.0625 度。

  //放大十倍,这样做的目的将小数点后第一位

 temp=tt*10+0.5;

 //也转换为可显示数字,同时进行一个四舍五入操作。

 //返回温度值

  return temp;

 }

 //超声波管脚定义 sbit RX=P2^1; sbit TX=P2^0;

 //超声波初始化 void Init_ultrasonic_wave() {

  TX=0;

 //关闭发射

  TMOD=0x01;

  //设 T0 为方式 1,GATE=1;

  TH0=0;

  TL0=0;

  ET0=1;

  //允许 T0 中断

  EA=1;

 //开启总中断

 }

 精品文档 -- //启动超声波 void StartModule()

 //启动模块 {

 TX=1;

  //启动一次模块

 _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

 _nop_();

  _nop_();

  _nop_();

  _nop_();

 TX=0; } //计算不同温度下的速度 void JS_(uchar WD) {

 精品文档 --

 //大于-30

 if(WD>=30&&flag==1)

 {

  L_=(time*3.13)/200;

  //算出来是 CM;

 }

 //大于-20<-30

 else if(WD>=20&&WD<30&&flag==1)

 {

  L_=(time*3.19)/200;

  //算出来是 CM;

 }

 //大于-10<-20

 else if(WD>=10&&WD<20&&flag==1)

 {

  L_=(time*3.25)/200;

  //算出来是 CM;

 }

 //大于 0<-10

 else if(WD>=0&&WD<10&&flag==1)

 {

  L_=(time*3.23)/200;

  //算出来是 CM;

 }

  //大于 0<10

 else if(WD<=10&&WD>0&&flag==0)

 {

  L_=(time*3.38)/200;

  //算出来是 CM;

 }

 //大于 20<30

 else if(WD<=30&&WD>20&&flag==0)

 {

  L_=(time*3.49)/200;

  //算出来是 CM;

 精品文档 --

 }

 //大于 30

 else if(WD>30&&flag==0)

 {

  L_=(time*3.86)/200;

  //算出来是 CM;

 } } //距离计算 SD 为当时的超声速度 void Conut(uchar WD) {

  time=TH0*256+TL0;

  TH0=0;

  TL0=0;

  JS_(WD);

 //距离大于 200 或者超时

  if(L_>200||flags==1)

  {

  flags=0;

  //无效显示

  flag1s=0;

  L_=0;

  Feng_Start();

 }

 //距离小于 100

  else if(L_<=200)

  {

  flag1s=1;

  FW=1;

 Feng_Stop();

 精品文档 --

  }

 }

  //管脚声明 sbit Feng=P1^0; sbit K1=P1^1; sbit K2=P1^2; sbit K3=P1^3;

 //蜂鸣打开 void Feng_Start() {

 Feng=0; }

  //蜂鸣关闭 void Feng_Stop() {

 Feng=1; }

 //等待 void delay_key() { for(i=0;i<200;i++)

 for(j=0;j<200;j++); }

 精品文档 -- //按键检测 void Key() {

 //功能键按下

 if(K1==0)

 {

  Feng_Start();//蜂鸣器开

  delay_key(); //消抖

  while(K1==0);//等待松手

  Feng_Stop(); //蜂鸣器关闭

  mode++;

 //模式++

  if(mode==3)

 //达到最大限度归为

 mode=0;

 k=1;

 //按键标志位

 }

 //+键

 else if(K2==0)

 {

  Feng_Start();//蜂鸣器开

  delay_key(); //消抖

  Feng_Stop(); //蜂鸣器关闭

  //最大值调整

  if(mode==1)

 //在最大值调整下

  {

 Max++;

 //调整最大值

 if(Max==201)//到达 51 归为 50

 {

  Max=200;

 }

 }

 精品文档 --

  //最小值

  else if(mode==2)//最小模式下调整

  {

 Min++;

 //调整最小值

 if(Min>Max) //最小值不能大于最大值

 {

  Min=Max;

 }

  }

  k=1;

 }

 //-键

 else if(K3==0)

 {

  while(K3==0);

  Feng_Stop();

  //最大值调整

  if(mode==1)

  {

 Max--;

 {

  Max=Min;

 }

 }

  //最小值

  else if(mode==2)

  {

 Min--;

 if(Min==0xff)

 {

 精品文档 --

  Min=0;

 }

  }

  k=1;

 } }

推荐访问:毕业论文 电气工程
上一篇:纠正四风整改措施
下一篇:学校召开大学生暑期社会实践动员培训会

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有