基于单片机的汽车水温及车内温度的多点检测_第1页
基于单片机的汽车水温及车内温度的多点检测_第2页
基于单片机的汽车水温及车内温度的多点检测_第3页
基于单片机的汽车水温及车内温度的多点检测_第4页
基于单片机的汽车水温及车内温度的多点检测_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

0摘要随着生活水平的提高,汽车越来越大众化。对于汽车水温及车内温度的检测要求也越来越高,针对这一问题,本文设计了一个基于单片机的汽车水温及车内温度的多点检测系统。该系统主要模块有:传感器温度采集模块、LCD显示模块、语音播报模块、以及报警模块。系统工作原理为当传感器采集到温度信号后,则将温度信号传递至单片机处理,待单片机对数据进行处理后,将信息发送至液晶屏并显示出温度,同时通过按键切换决定播报汽车水温还是车内温度,当环境温度超过所设定的温度限度,系统自动播报语音同时蜂鸣器也报警。本次设计能准确高效地模拟出汽车水温及车内温度的检测,温度显示及语音播报提示。关键词:单片机,温度传感器,LCD显示屏1AbstractWiththeimprovementoflivingstandards,carsbecomemoreandmorepopular.thedetectionoftemperaturetemperatureofcarsandcarareincreasinglyhighrequirements,inordertosolvethisproblem,thispaperdesignsadetectionsystembasedontheSCMtodetectthetemperatureofcarwatertemperatureandthetemperatureinsidethecar.Thesystemsmainmodulesare:DS18B20temperaturesensoracquisitionmodule,LCDdisplaymodule,voicebroadcastmoduleandalarmmodule.Theworkingprincipleofthesystemisthatwhenthesensorreceivethetemperaturesignal,temperaturesignaltothemicrocontrollerwillbesinglechipprocessing,thenprocessingthedata,andsendstheinformationtotheLCDliquidcrystalscreenanddisplaythetemperature,atthesametime,throughthebuttonswitchdecidedtobroadcastcarwatertemperatureorthetemperatureinsidethecar.Whentheambienttemperatureexceedsthesetupperandlowertemperature,thesystemautomaticallybroadcastvoiceatthesametimealsoalarmbuzzer.Thisdesigncanaccuratelyandefficientlysimulatethetestingofthewatertemperatureandthetemperatureinsidethecar,temperaturedisplayandspeechhint.Keywords:SCM,temperturesensor,LCD2目录摘要.1Abstract.2前言.3第一章绪论.41.1课题背景.41.2国内外研究现状.41.3本文所做的工作.5第二章系统总体方案设计.62.1系统基本要求.62.2硬件系统设计方案.62.3软件系统设计方案.6第三章系统硬件设计.83.1单片机.83.2液晶显示模块.113.3温度采集模块.123.4报警指示电路模块.193.5按键电路模块.193.6语音电路模块.203.7时钟电路模块.22第四章系统软件设计.244.1程序的总体设计.244.2主程序设计.254.3LCD显示程序设计.264.4温度采集程序设计.274.5语音播报程序设计.294.6报警程序设计.31第五章系统调试与分析.335.1硬件调试.335.2软件调试.335.3环境模拟及系统调试.3335.4调试故障及原因分析.345.5测试结果及其分析.34第六章总结.40参考文献致谢附录4前言随着私家车数量的日益增长,在汽车生产过程中,对于汽车水温及车内温度的检测要求及精度也越来越严格。因为汽车水温的正常与否,与发动机的一些工作性能有着密切的关系。而车内温度与汽车的舒适性也有着必不可少的关系。如今人们生活水平提高了,对于汽车乘驾的舒适性标准也越来越高,那么在车内温度控制技术性能方面就得有所提高。科学技术的进步及现代信息技术的迅猛发展,也带动了温度检测技术的发展,目前能够进行独立工作的温度检测及显示系统已在许多领域内运用,汽车制造业也是其中一部分。汽车电子技术的发展及计算机技术的发展也使汽车的安全性、舒适性以及经济性得到了改善。本次设计是采用单片机来实现汽车水温及车内温度的多点检测。利用智能芯片来控制实时温度,并进行语音播报提示。当汽车水温及车内温度不在正常范围内时,则能够自动语音播报提醒,可以及时处理,避免不必要的危险。此设计可以精确的测量出温度,实现该课程要求的所有功能。整个设计共分为六个模块:显示模块、温度采集模块、单片机控制系统模块、语音播报模块、时钟模块及报警模块。单片机采集到温度信号后,将数据进行处理,在送入液晶显示屏中,并显示温度,通过按键来决定播报哪个温度,当实时温度超出设定温度范围,则自动播报温度,同时蜂鸣器报警。全文共分为五章。第一章绪论,第二章系统总体方案设计,第三章系统硬件设计,第四章系统软件设计,第五章系统调试与分析,第六章总结。5第一章绪论1.1课题背景温度在人们的生活环境中占着十分重要的地位,不管是在生活中还是工作中,我们时时刻刻都与温度有着密切的联系。随着电子技术的迅猛发展,温度检测的精度也在不断的提高。通过电子技术对温度进行实时测量的应用随处可见,并且在各个领域扮演着十分重要的角色。传统测温是靠人工来控制的温度信号的系统,其弊端是不仅浪费人力物力资源,并且测量的精度比较低,分辨率方面也不高,还要进行温度校准,相当麻烦,所以这种人工控制的测温系统已经无法满足社会的需求。在这个科技快速发展的时代,对于如何实现温度的自动控制成为一个急需解决的问题。当然对于这一问题,早已得到相应的解决,以后需要做的是更多的完善。温度检测是现代检测技术中的重要组成部分。如今已有很多领域可以将计算机与一些设备进行结合,从而达到简化人工操作并实现对温度的自动控制,满足了社会对温度检测方面的需求。由于温度测量在人类生活及各个领域中的重要性,市场上的传感器种类也越来越多,响应时间不断缩短,并且测量精度也在不断提高,因集成电路的温度传感器具备使用方便,无需转换电路等特点,得到了广泛的应用。此次设计中采用的DS18B20传感器,它凭借精度高、连线方便、数字化、经济实惠等在温度检测领域中被广泛使用。它具有独特的单线接口,只需要一个端口引脚就能够发送或接受信息,因此它与单片机仅仅需要一根连接线即可。其测量温度范围在-55到+125之间,并以0.5递增。传感器所测的温度是以9位数字量读出的,并且典型的温度数字量的转换时间为200ms,用户也可自行定义非易失性温度报警设置。1.2国内外研究现状(1)国外温度检测系统的研究国外对温度检测系统的技术研究很早,20世纪70年代就已经采用模拟式的组合仪,实现现场温度的采集,并且有指示、记录和控制等功能。而分布式控制系统则在之后10年出现。现在开发和研究的重点是PC机的温度数据采6集控制的综合控制系统。温度采集系统技术在全球发展都是相当快的,其中一些国家正向着全自动化、无人化温度检测的方向飞速发展。(2)国内温度检测系统的研究相对于国外,国内对温度采集系统技术的研究起步比较晚。我国的工作人员和技术人员不断吸取发达国家的先进技术,掌握了对室内环境温度的检测控制,但仅限于单一的环境。我国的温度采集控制主要通过PC机控制,由原来的简单、操作复杂,变得功能强大,操作简单,并且性价比高。温度采集系统主要以单片机为主,我国的技术现在以单参数回路系统居多,在综合采集系统方面还不能和发达国家相比。我国的温度采集还没达到工业化程度,并且还存在许许多多的问题,例如产业化程度低,对于环境的控制水平相对落后,硬件方面还存在很大的缺陷,可靠性低等。1.3本文所做的工作本文设计是以STC89C52单片机为汽车水温和车内温度检测的设计核心。利用DS18B20温度传感器作为信号输入模块,将传感器搜集到的信号传送给单片机,单片机进行数据处理后,再传送给显示屏。所做的工作主要有:对STC89C52理论知识的学习与理解,运用STC89C52对输入的信号进行处理;显示屏的选择,本设计中需要测两个温度,LCD系列中LCD1602型号的为2行16列液晶,可显示2行16列英文字符,每行可以显示一个温度,故选用LCD1602显示屏;该设计中有语音播报实时温度模块,对于语音芯片的选择,需了解其工作方式、原理及引脚功能等。7第二章系统总体方案设计本设计以单片机STC89C52作为温度检测的核心部分。该系统主要模块有:传感器温度采集模块、显示模块、语音播报模块、报警模块以及时钟模块。系统工作原理为当传感器采集到温度信号后,则将温度信号传递至单片机处理,待单片机对数据进行处理后,将信息发送至液晶屏并显示出温度,然后通过按键切换决定播报汽车水温还是车内温度,当实时温度超过所设定的温度限度,系统自动播报温度同时蜂鸣器也鸣叫。2.1系统基本要求利用STC89C52设计一个可以对汽车车内温度和汽车水温进行测量的系统。该设计系统可以同时测量采集两个点的温度,通过LCD1602进行温度的实时显示。通过按键切换来播报汽车水温和车内温度,按到哪个温度就播报哪个温度,当温度超出设定的阈值,则系统自动播报温度并且蜂鸣器进行报警。2.2硬件系统设计方案该设计的硬件系统结构框图如2-1所示:温度传感器DS18B20单片机STC89C52LCD显示及语音播报图2-1硬件系统框图2.3软件系统设计方案本方案以STC89C52为核心处理器件,把传感器采集到的温度,送入STC89C52的内部数据存储器,然后将处理后的温度显示在液晶屏上,同时与8程序中提前设的限定温度进行比较,通过单片机输出的信号来控制语音播报电路和报警电路。该软件系统方案的程序主要包括:函数声明、LCD初始化程序、DS18B20初始化程序、显示子程序、语音播报程序、报警程序及按键子程序。9第3章系统硬件设计如图3-1所示,本设计以单片机STC89C52作为温度检测的核心部分。该系统的硬件模块主要有:传感器温度采集模块、显示模块、语音播报模块以及时钟模块。当传感器采集到温度信号后,则将温度信号传递至单片机处理,待单片机对数据进行处理后,将信息发送至液晶屏并显示出温度,然后通过按键切换决定播报汽车水温还是车内温度,当实时温度超过所设定的温度限度,系统自动播报温度同时蜂鸣器也鸣叫。图3-1电路原理图3.1单片机3.1.1STC89C52主要特性(1)增强型的8051单片机,其中包括了6时钟/机器周期和12时钟/机器周期(2)工作电压:5.5V3.3V(5V工作电压的单片机)/3.8V2.0V(3V工作电压的单片机)(3)工作频率:040MHz,其实际的工作频率可以达到48MHz(4)用户可应用程序空间是8K字节10(5)片上集成512个字节RAM(6)通用I/O口(32个),复位后为:P0/P1/P2/P3是准双向口/弱上拉,此时P0口就是一个漏极开路输出,如果没有加上拉电阻,则表示P0口是用做了总线扩展,反之加了上拉电阻,则用作了I/O口。(7)ISP、IAP分别是系统可编程和应用可编程缩写,进行仿真和编译时,只需直接通过串口下载用户程序即可(8)具有EEPROM功能(9)具有三个16位的定时器/计数器(T0、T1和T2)。(10)有4个外部中断,当中断信号为下降沿或低电平时,则触发电路(11)通用异步串行口(UART)(12)工作温度范围:-40到+85/0到75(13)PDIP封装3.1.2STC89C52管脚说明图3-2STC89C52引脚图(1)VCC:电源电压11(2)GND:地(3)P0口:双向信号。P0口不仅是多功能端口,也是8位双向三态I/O口。其中P0.0P0.2接语音芯片的RST、DATA(KEY)和BUSY(LED)端,P0.3和P0.4分别接两个温度传感器。(4)P1口:双向信号。P1口既是多功能端口,也是8位准双向I/O口。其中P1.0P1.3接四个按键,P1.4P1.7接四个LED灯。(5)P2口:双向信号。P2口既是多功能端口,也是8位准双向I/O口。在设计中P2.0P2.7分别接液晶显示屏的D0D7。(6)P3口:双向信号。P3口既是多功能端口,也是8位准双向I/O口。P3.2接蜂鸣器模块中电阻的一端。P3.3P3.5分别接时钟芯片的CLK、I/O以及RST端口。P3.6、P3.7分别接液晶显示屏的EN端和RS端。(7)RST:单片机的复位输入端。一旦检测到连续2个机器周期及2个以上高电平有效时,则可以实现单片机复位操作的功能。(8)/VPP:外部访问允许。EA(9)XTAL1:振荡器反相放大器的输入端及内部时钟发生器的输入端。(10)XTAL2:振荡器反相放大器的输出端。(11)PSEN:输出信号。外部程序存储器的读选通信号。(12)ALE:地址锁存允许信号。3.1.3复位电路如图3-3所示,复位电路有上电复位和手动复位两种方式。本系统采用手动复位方式。若单片机正常工作,则表示RES端(即单片机的RST端)为低电平,按键没按下;若RES端变为高电平,则表示按键已按下,系统实现复位。12图3-3复位电路3.1.4晶振电路如图3-4所示,单片机STC89C52中有一个高增益的反向放大器,是用来构成振荡器的。它有一个输入引脚和一个输出引脚,分别是XTAL1和XTAL2。从下图中可知,这两个引脚分别接着石英晶振和两个22pF(电容的大小对振荡器频率的稳定性、高低和速度会造成影响,故一般选择30pF左右的电容。)的电容,从而组成一个自激振荡电路,将这个振荡电路作为单片机的时钟来控制外面的信号,因此可以有条理、稳定的进行工作。在本设计中晶振的频率选用12MHz。图3-4晶振电路3.2液晶显示模块如图3-5所示,本设计采用LCD来显示温度。LCD系列中的LCD1602是一款2行16列的液晶屏,工作电压为5V。它能够显示2行16列英文字符,共有8位数据总线D0-D7,RS,R/W,EN三个控制端口,背光源正极,背光源负极。其中液晶显示器对比度调整端(VL)接一个10K的可调电阻,调节屏幕的亮暗。使能端EN接单片机的使能端,D0D7与单片机的P2.0P2.7相连。可以实现本设计中所需的显示功能。13图3-5液晶显示器电路图3.3温度采集模块3.3.1DS18B20的主要特性(1)单线接口,只需要一个端口就能够通讯(2)简单的多点分布应用(3)不需要任何的外部器件(4)可用数据线供电(5)零待机功耗(6)测温范围-55+125,以0.5递增。(67F+257F)(7)所测的温度是以9位数字量读出来(8)温度数字量转换时间200ms(典型值)(9)可选择寄生工作方式。(10)内置EEPROM,限温报警功能。(11)应用范围包括温度控制系统、工业系统、温度计以及热感测量系统等3.3.2DS18B20的引脚功能图其引脚图如图3-6所示:14图3-6DS18B20引脚图外部引脚:DQ:数字信号的输入或输出端;GND:接地;VDD:外接电源的供电输入端。3.3.3DS18B20内部结构方框图3-7示出了DS18B20的主要部件。DS18B20有三个主要数字部件:64位激光ROM,温度传感器,非易失性温度报警触发器TH和TL。图3-7DS18B20内部结构框图如表3-8所示,DS18B20中温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。表3-8DS18B20温度值格式表2221202-12-22-32-4bit7bit6bit0bit1bit5bit4bit2bit15bit3bit11bit12bit13bit14bit8bit9bit10LSByte15这是12位转化后得到的12位数据,存储在18B20的两个8bit的RAM中,读取温度时共读取16位,前5个位为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正数。温度为正时读取方法为:将16进制数转换成10进制即可。温度为负时读取方法为:将16进制取反后加1,再转换成10进制即可。如表3-9所示,例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。表3-9温度/数据关系温度/二进制表示十六进制表示+125000001111101000007D0H+25.062500000001100100010191H+10.125000000001010001000A2H+0.500000000000010000008H000000000000000000000H-0.51111111111111000FFF8H-10.1251111111101011110FF5EH-25.06251111111001101111FE6FH-551111110010010000FC90H3.3.4DS18B20的控制方法如表3-10所示,在硬件上DS18B20与单片机的连接有两种方法。一种是将DS18B20的UDD接外部电源,GND接地,其I/O与单片机的I/O线相连;另一种是用寄生电源供电,此时DSI8B20的UDD、GND接地,其I/O接单片机I/O。无论是内部寄生电源还是外部供电,DS18B20的I/O口线要接上拉电阻。DS18B20有六条控制命令。SSSSS262524MSByte16表3-10DS18B20的六条控制命令CPU对DS18B20的访问流程是:先对DS18B20初始化,再进行ROM操作命令,最后才能对存储器操作和对数据操作。DS18B20每一步操作都要遵循严格的工作时序和通信协议。例如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通讯协议,必须经历三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。3.3.5DS18B20的工作原理如图3-11所示,DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过指令约定代码操作说明温度转换44H启动DS18B20进行温度转换读暂存器BEH读暂存器9字节二进制数字写暂存器4EH将数据写入暂存器的TH、TL字节复制暂存器48H把暂存器的TH、TL字节写到ERAM中重新调ERAMB8H把ERAM中的TH、TL字节写到暂存器TH、TL字节读电源供电方式B4H启动DS18B20发送电源供电方式的信号给主CPU(“0”为寄生电源;“1”为外部电源)17程中的非线性,其输出用于修正计数器1的预置值。LSB位置/清除增加计数器1斜率累加器计数比较器温度寄存器减到0预置计数器2减到0停止预置低温度系数晶振高温度系数晶振图3-11温度测量电路框图3.3.6DS18B20工作时序如图3-12所示,DS18B20的初始化时序图,图3-12DS18B20初始化时序图(1)先将数据线置高电平“1”。(2)延时(该时间要求的不是很严格,但是尽可能的短一点)(3)数据线拉到低电平“0”。(4)延时750us(该时间的时间范围可以从480到960us)。(5)数据线拉到高电平“1”。18(6)延时等待(如果初始化成功则在15到60us时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480us。(8)将数据线再次拉高到高电平“1”后结束。如图3-13所示,DS18B20的写数据时序图,图3-13DS18B20的写数据时序图(1)数据线先置低电平“0”。(2)延时确定的时间为15us。(3)按从低位到高位的顺序发送字节(一次只发送一位)。(4)延时时间为45us。(5)将数据线拉到高电平“1”。(6)重复上(1)到(5)的操作直到所有的字节全部发送完为止。(7)最后将数据线拉高到“1”。如图3-14所示,DS18B20的读数据时序图,19图3-14DS18B20读数据时序图(1)将数据线拉高“1”。(2)延时2us。(3)将数据线拉低“0”。(4)延时6us。(5)将数据线拉高“1”。(6)延时4us。(7)读数据线的状态得到1个状态位,并进行数据处理。(8)延时30us。(9)重复(1)(8)步骤,直到读取完一个字节。3.3.7DS18B20传感器模块电路设计分析如图3-15所示,图中是本文设计中用到的两个DS18B20的温度传感器,它们的两个DQ(即DS)端分别连接到了单片机的P0.3和P0.4端口。传感器将采集到的温度信号,通过DQ端传给单片机,单片机对温度数据完成转换后,再送入液晶显示屏,显示出实时温度。图中R7和R11为10K的上拉电阻,由于DS18B20是通过单总线进行通信的,即它接受和发送信号时,使用的是同一个通信脚。当其通信脚是用来接收信号时,则为高电阻输入;当通信脚用来发送信号时,则是开漏输出,当输出0时,需要通过三极管下拉为低电平,而输出为1时,则是高阻状态,需要外接上拉电阻,将其上拉为高电平。图中DQ端连接了VCC端,则表示输出为1,所以需要外接上拉电阻。20图3-15温度传感器模块3.4报警指示电路模块如图3-16所示,报警电路模块主要由蜂鸣器和LED灯组成。此模块主要由3个按键来调节温度的上下限,按键SW4是用来选择需要改变哪个量的设定值,按键SW2是增加按键,可以改变温度上限值,按键SW3是减小按键,可以改变温度的下限值。图3-16报警电路图3.5按键电路模块如图3-17所示,该按键电路模块主要用到4个按键,分别接到P1.0,P1.1,P1.2,P1.3,硬件电路。它们的功能分别是:21SW1:进行调整时间信息;SW2:调节温度的上限设置和调节时间(+);SW3:调节温度的下限设置调节时间(-);SW4:调整切换温度上下限设置;图3-17按键电路3.6语音电路模块3.6.1语音芯片YF017引脚功能介绍YF017-002引脚图功能介绍如图3-18所示:图3-18YF017-002语音芯片(1)VL:电源选择。(2)LA+、LA-:接喇叭的两端。(3)VCC:电源电压。(4)GND:接地。(5)RST:复位输入。任何时候,收到一个脉冲的时候,可以使芯片的播放指针归零(就是DATA的脚位恢复到初始状态),同时即刻是芯片停止,进入待机状态。22(6)DATA(KEY):接受控制脉冲的脚位。(7)BUSY(LED):若输出为低电平,芯片开始工作,则喇叭播放声音;若输出为高电平,那么芯片就停止工作或待机。3.6.2语音电路模块设计分析如图3-19所示,语音电路模块主要是用来播报测量过程中的实时温度。该模块采用的是YF017系列中的YF017-002语音芯片。该芯片共有3个I/O端口,成本低廉,连线简单,同时也可以实现系统所需的语音播报功能。图中RST,DATA(KEY),BUSY(LED)端分别与单片的P0.0,P0.1,P0.2相连,LA+,LA-则与喇叭相连,VL与电容C2相连。语音芯片的外围也没有外围元件,只需跟一个104电容相连便能稳定工作。语音芯片的语音播报控制原理:该系列语音芯片是特定的固定标准模块,根据芯片中各个地址对应的内容,可进行任意的组合。YF017是采用模拟串行方式控制语音播报,需要播放几个地址的内容就向DATA引脚发送几个脉冲(脉冲时间只需大于0.2毫秒,在1毫秒左右较为合适)。若输出为低电平,芯片开始工作,则喇叭播放声音;若输出为高电平,那么芯片就停止工作或待机。不管什么时候,RST脚只要接收到脉冲,就能让芯片的播放指针变归零(即DATA脚变为初始状态),芯片也立马停止工作,同时进入待机状态。图3-19语音模块电路图表3-20为YF017-002所对应的录音内容。工作示例:例如现在需要播放第十段声音。单片机控制则是先发送一个复位脉冲到RST脚,接着发送10个脉冲到DATA脚。芯片即刻工作,播放第十段的声音;如果需要播放第五段的声音,则是先发送一个复位脉冲到RST脚,接着发送5个脉冲到DATA脚。23芯片即刻工作,播放第5段的声音;例如需要连续播放第十段和第五段声音:先发送一个复位脉冲到RST脚,接着发送10个脉冲到DATA脚。芯片即刻工作,播放第十段的声音,同时单片机判断语音芯片的BUSY是否是高电平,如果不是则一直等待,如果是高电平,则发送一个复位脉冲到RST脚,接着发送5个脉冲到DATA脚。芯片即刻工作,播放第5段的声音。依此类推。表3-20YF017-002对应的录音内容243.7时钟电路模块3.7.1时钟芯片DS1302概述DS1302凭借着高性能、低功耗、自带RAM的优势在时钟生产中应用十分广泛,它不仅可以对年、月、日、时、分、秒、周进行计时,还可以对闰年进行补偿,而且计数精度高,能够校准时间。其工作电压大概在2.5V到5.5V之间。它与CPU之间能够进行同步通信,是通过其本身具备的三线接口完成的,即RST,I/O,SCLK端口。另外它还同时具备两个电源,分别是主电源和备用电源。这样即使主电源被关闭,时钟也能够继续运行。3.7.2DS1302引脚图及功能其引脚图功能介绍如下,如图3-21所示:图3-21DS1302引脚图(1)VC2:主电源的输入引脚;(2)VC1:备用电源的输入引脚;(3)X1,X2:晶振引脚,接32.768kHz晶振;(4)GND:信号地;(5)CLK:同步串行时钟输入引脚;(6)I/O:串行数据输入输出端(双向);(7)RST:复位/片选线;3.7.3时钟模块电路设计分析如图3-22所示,时钟电路模块主要是用来显示时间及日期。该模块是本设计中的一项附加功能,选用的是DS1302时钟芯片,其中VC1为后备电源,25VC2为主电源。VC1在单电源与电池供电的系统中提供低电源并提供低功率的电池备份。VC2在双电源系统中提供主电源,在这种运用方式中VC1连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由VC1或VC2两者中较大者供电。当VC2大于VC1+0.2V时,VC2给DS1302供电。当VC2小于VC1时,DS1302由VC1供电。图3-22时钟模块电路图26第四章系统软件设计4.1程序的总体设计总程序流程如图4-1所示,在程序的总体设计中,都是采用C语言来编程,通过在keil软件中调试编译没有错误后,再将程序下载至单片机中。主程序的主要功能有:首先是对液晶显示屏LCD和温度传感器DS18B20进行初始化,单片机对外部采集数据进行处理后,再调用读温度的模块和温度的转换模块,显示温度及语音播报温度,报警等模块。当传感器采集到温度信号后,则将温度信号传递至单片机处理,待单片机对数据进行处理后,将信息发送至液晶屏并显示出温度,然后通过按键扫描程序,通过按键切换决定播报汽车水温还是车内温度,当实时温度超过所设定的温度限度,系统自动播报温度同时蜂鸣器也鸣叫。主程序的功能主要是在液晶显示屏上能够正确显示实时温度、读取实时温度同时对传感器检测到的温度进行处理、播报实时温度并对各子程序进行调用。开始系统初始化读DS18B20温度温度转换温度显示及语音播报温度判断温度显示是否在正常温度范围判断温度超出上限(Y)或低于下限(N)单片机显示绿色预警,蜂鸣器报警同时语音播报温度不报警单片机显示红色预警,蜂鸣器语报警同时语音播报温度YNYN结束27图4-1系统总体流程图4.2主程序设计主程序主要包括的操作有:(1)对LCD及DS18B20模块进行初始化;(2)读取实时温度同时对传感器检测到的温度进行处理,实现温度转换;(3)最后在显示屏上显示温度,进行实时温度的语音播报,报警等模块。具体程序代码如下:voidmain()uchari;yj1602_init();for(i=0;i0;i-)DQ1=0;/给脉冲信号dat=1;DQ1=1;/给脉冲信号if(DQ1)31dat|=0x80;delay_18B20(4);return(dat);/*ds18b20写一个字节*/voidWriteOneChar1(uchardat)uchari=0;for(i=8;i0;i-)DQ1=0;DQ1=datdelay_18B20(5);DQ1=1;dat=1;/*读取ds18b20当前温度*/voiddeal_with1()uchara=0;ucharb=0;Init1_DS18B20();WriteOneChar1(0xCC);/跳过读序号列号的操作WriteOneChar1(0x44);/启动温度转换delay_18B20(100);/thismessageisweryimportantInit1_DS18B20();WriteOneChar1(0xCC);/跳过读序号列号的操作WriteOneChar1(0xBE);/读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(100);a=ReadOneChar1();/读取温度值低位b=ReadOneChar1();/读取温度值高位wen_du1=(b*256+a)*0.625;/当前采集温度a代表是16位数的低八位,b则代表高八位4.5语音播报程序设计(1)函数voidmusic(ucharcc)对语音模块进行控制,通过发送的脉冲,确定控制的语音段;32(2)函数voidbo_bao(ucharadd,uintwen)进行实时温度播报;具体程序代码如下:voidmusic(ucharcc)/语音控制函数y_rst=1;delay(1);/发送一个复位脉冲y_rst=0;delay(1);while(cc0)da=1;delay(10);/发送脉冲,确定控制的语音段da=0;delay(10);cc-;voidbo_bao(ucharadd,uintwen)/温度播报函数uchard1,d2,d3;uchart1,t2,t3;d1=wen/100;d2=wen%100/10;d3=wen%10;if(d3=0)t3=31;elset3=d3+1;music(14);/语音控制函数当前while(buy=0)display();/当输出低电平的时候,播放声音;当输出高电平的时候,就停止工作或待机;music(add);/语音控制函数1或者是2while(buy=0)display();/当输出低电平的时候,播放声音;当输出高电平的时候,就停止工作或待机;music(20);/语音控制函数温度while(buy=0)display();/当输出低电平的时候,播放声音;当输出高电平的时候,就停止工作或待机;if(d10)t1=d1+1;if(d11)music(t1);/语音控制函数十位温度while(buy=0)display();/当输出低电平的时候,播放声音;当输出高电平的时候,就停止工作或待机;music(11);/语音控制函数十while(buy=0)display();/当输出低电平的时候,播放声音;当输出高电平的时候,就停止工作或待机;33if(d20)t2=d2+1;music(t2);/语音控制函数个位温度while(buy=0)display();/当输出低电平的时候,播放声音;当输出高电平的时候,就停止工作或待机;if(d1=0)&(d2=0)t2=31;music(t2);/语音控制函数个位温度while(buy=0)display();/当输出低电平的时候,播放声音;当输出高电平的时候,就停止工作或待机;music(13);/语音控制函数点while(buy=0)display();/当输出低电平的时候,播放声音;当输出高电平的时候,就停止工作或待机;music(t3);/语音控制函数小数温度while(buy=0)display();/当输出低电平的时候,播放声音;当输出高电平的时候,就停止工作或待机;music(28);/语音控制函数度while(buy=0)display();/当输出低电平的时候,播放声音;当输出高电平的时候,就停止工作或待机;4.6报警程序设计(1)函数voidbaojing()对超过设定的上下限温度的实时温度进行报警;(2)函数voidbo_bao(ucharadd,uintwen)函数对超出范围的温度进行循环播报;具体程序代码如下:voidbaojing()if(wen_du1shang1)/超过温度上限h_led1=0;beep=0;bo_bao(2,wen_du1);/温度播报函数34if(wen_du1xia1)l_led1=1;if(wen_du2shang2)/超过温度上限h_led2=0;beep=0;bo_bao(3,wen_du2);/温度播报函数if(wen_du2xia2)l_led2=1;if(wen_du1xia1)&(wen_du1xia2)&(wen_du2#include#defineuintunsignedint#defineucharunsignedchar/1602液晶控制接口/sbitrs=P37;sbiten=P36;/语音芯片接口/sbity_rst=P00;sbitda=P01;sbitbuy=P02;/时钟芯片控制接口/sbitsck=P33;sbitio=P34;sbitrst=P35;/按键/sbitkey1=P10;sbitkey2=P11;sbitkey3=P12;sbitkey4=P13;/sbitbeep=P32;/蜂鸣器接口/指示灯接口/sbith_led1=P14;/红色发光二极管sbitl_led1=P15;/绿色发光二极管sbith_led2=P16;/红色发光二极管sbitl_led2=P17;/绿色发光二极管/sbitDQ1=P04;/温度传感器接口sbitDQ2=P03;/温度传感器接口uintwen_du1,wen_du2;uintshang1,xia1,shang2,xia2;ucharwritetime7;ucharcodetab116=sudayingyong;ucharcodetab216=jishuxueyuan;ucharcodetab316=111640502411;ucharcodetab416=dzwyr;voiddelay(uintms)/延时uintx,y;49for(x=ms;x0;x-)for(y=10;y0;y-);voiddi()beep=0;delay(1000);beep=1;delay(1000);/*ds18b20延迟子函数(晶振12MHz)*/voiddelay_18B20(uinti)while(i-);/*ds18b20初始化函数*/voidInit1_DS18B20()ucharx=0;DQ1=1;/DQ复位delay_18B20(8);/稍做延时DQ1=0;/单片机将DQ拉低delay_18B20(80);/精确延时大于480usDQ1=1;/拉高总线delay_18B20(14);x=DQ1;/稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);/*ds18b20读一个字节*/ucharReadOneChar1()uchari=0;uchardat=0;for(i=

温馨提示

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

评论

0/150

提交评论