沈阳航空航天大学毕业设计(论文)
上与该编码相对应的DS18B20并使之作出响应,为下一步对该DS18B20的读/写做准备。
(3)F0H-搜索ROM。用于确定挂接在同一总线上DS18B20的个数,识别64位ROM地址,为操作各器件做好准备。
(4)CCH-跳过ROM。忽略64为ROM地址,直接向18B20发温度变换命令,适用于一个从机工作。
(5)ECH-告警搜索命令。执行后只有温度超过设定值上限或下限的芯片才做出响应。以上这些指令涉及的存储器是64位光刻ROM。
64位光刻ROM中的序列号是出厂前被光刻号的,它可以看作该DS18B20的地址序列号。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一条总线上挂接多个DS18B20的目的。
下面介绍以上几条指令的用法。当主机需要对众多在线DS18B20中的某一个进行操作时,首先应将主机逐个与DS18B20挂接,读出其序列号;然后再将所有的DS18B20挂接到总线上,单片机发出匹配ROM命令(55H),紧接着主机提供的64位序列之后的操作就是针对该DS18B20的。
如果主机只对一个DS18B20进行操作,就不需要读取ROM编码以及匹配ROM编码了,只要同跳过ROM(CCH)命令,就可以进行如下温度转换和读取操作。
(1)44H-温度转换。启动DS18B20进行温度转换,12位转换时最长为750ms。结果存入内部9字节的RAM中。
(2)BEH-读暂存器。读内部RAM中9字节的温度数据。
(3)4EH-写暂存器。发出向内部RAM的第2,3字节写上,下限温度数据命令,紧跟该命令之后,是传送两字节的数据。
(4)48H-复制暂存器。将RAM中第2,3字节的内容复制到EPROM中。 (5)B8H-重调EPROM。将EPROM中内容恢复到RAM中的第3,4字节。 (6)B4H-读供电方式。读DS18B20的供电模式。寄生供电时,DS18B20发送0;外接电源供电时,DS18B20发送1。
DS18B20在出厂时默认配置为12位,其中最高位为符号位,即温度值共11位,单片机在读取数据时,一次会读2字节共16位,读完后将低11位的二进制数转化为十进制数后再乘以0.0625便为所测的实际温度值。另外,还需要判断温度的
16
沈阳航空航天大学毕业设计(论文)
正负。前5个数字为符号位,这5位同时变化,我们只需要判断11位就可以了。前5位为1时,读取的温度为负值,且测到的数值需要取反加1在乘以0.0625才可以得到实际温度值。前5位为0时,读取的温度为正值,且温度为正值时,只要将测得的数值乘以0.0625即可得到实际温度值。
3.4 数码管显示模块
数码管的显示原理是靠点亮内部的发光二极管来发光,一位数码管的引脚是10个,显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端,生产商为了封装统一,单位数码管都封装10个引脚,其中第3和第8引脚是连接在一起的。而它们的公共端又可分为共阳极和共阴极,对共阴极数码来说,其8个发光二极管的阴极在数码管内部全部连接在一起,所以称为“共阴”,而它们的阳极是独立的,通常在设计电路时一般把阴极接地。当我们给数码管的任一个阳极加一个高电平时,对应的这个发光二极管就点亮了。如果想要显示出一个8字,并且把右下角的小数点也点亮的话,就可以给8个阳极全部送高电平,如果想要让它显示出一个0字,那么我们可以除了给第“g,dp”这两位送低电平外,其余引脚全部送高电平,这样它就显示出0字了,想让它显示几,就给相对应的发光二极管送高电平,因此我们在显示数字的时候首先做的就是给0~9十个数字编码,在要它亮什么数字的时候直接把这个编码送到它的阳极就行了。
共阳极数码管其内部8个发光二极管的所有阳极全部连接在一起,电路连接时,公共端接高电平,因此我们要点亮的那个发光二极管就需要给阴极送低电平,此时显示数字的编码与共阳极编码是相反的关系,数码管内部发光二极管点亮是,也需要5ma以上的电流,而且电流不可过大,否则会烧毁发光二极管。由于单片机的I/O口送不出如此大的电流,所以数码管与单片机连接时需要加驱动电路,可以用上拉电阻的方法或使用专门的数码管驱动芯片,本系统单片机使用的是74HC573锁存器,其输出电流较大,电路接口简单,可以使用。
3.5 蜂鸣器报警模块
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算
17
沈阳航空航天大学毕业设计(论文)
机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。简单易懂,还易用音乐作为其报警声音,所以我选择用蜂鸣器作为本次设计的报警系统。
蜂鸣器有两个选择,如下面所介绍的。 1.压电式蜂鸣器
(1)压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。
(2)多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。
2.电磁式蜂鸣器
(1)电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。 (2)接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性的振动发声。
经过论证,电磁式蜂鸣器更易于实现,且原理易于掌握,所以采用电磁式蜂鸣器作为报警系统,其驱动原理是:电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发生的,因此需要一定的电流才能驱动它,单片机I0引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,最终选择通过三极管C8550来放大驱动蜂鸣器。
将蜂鸣器正极接到VCC电源上,负极接到三极管的发射极E,三极管的基极B经过限流电阻10K后由单片机的P3.7引脚控制,当P3.7输出高电平时,三极管截止,没有电流流过线圈,蜂鸣器不发声;当P3.7输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。
程序中改变单片机引脚P3.7输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色音调的声音;另外改变P3.7输出高低电平的占空比,则可以控制蜂鸣器的声音大小。
18
沈阳航空航天大学毕业设计(论文)
4 软件系统实现
本系统主要用C语言编写代码,并用keil编译生成hex文件,并下载至单片机运行,本系统分主程序和子程序,子程序包含温度测试程序,蜂鸣器报警程序,数码管显示,短信发送程序,短信接收程序。
主程序首先要完成对所有的器件进行初始化,同时调用温度测试子程序,温度测试子程序不停的工作,直到采集现场出现温度异常情况,调用短信发送子程序,当主程序不断的运行,如果TC35接收到短信,会向单片机串口发送数据,单片机进入串口中断,并且判断短信,之后执行短信发送程序。
温度子程序主要是驱动DS18B20进行工作,详细的工作过程第三章已经进行了完整的介绍。
短信发送子程序核心是调用AT指令,单片机需要向TC35模块发送短信发出指令,TC35回应OK,单片机进入串口中断,判断出OK,就说明短信已经成功的发出,接下来继续进入温度子程序。
短信接收子程序的核心也是调用AT指令,单片机向TC35发送指令,TC35会检测有没有新信息,如果有新的信息,读出信息,发送给单片机,单片机会进入串口中断,并且判断信息是否为执行指令。如果为执行指令,那么调用温度子程序把当前的温度,获得当前的温度,调用发送短信子程序,把现场的温度信息发送给用户。
蜂鸣器报警子程序,该程序主要也是对蜂鸣器的驱动,当现场采集的温度异常时,主程序会调用蜂鸣器报警子程序,发出警报。
4.1 主程序流程图
主程序的功能主要是调用温度采集子程序并且判断是否温度过高,如果过高调用短信子程序报警,同时启动蜂鸣器报警。主程序还控制着现实温度显示的功能,每调用一次温度子程序,在延时过后,就会调用一次显示功能,把温度用数码管显示出来。
19
沈阳航空航天大学毕业设计(论文)
主程序的流程图如4.1所示,
短信发送程序 Y 信息发送? 信号采集,过程控制等 初始化 开始 N N 接收中断? Y 图4.1 主程序流程图
指令处理,反馈 短信接收程序 4.2 温度子程序设计
DS18B20 的操作中,延时分两种:短时间延时和较长时间延时。单片机系统所用的晶振频率为12 MHz,根据DS18B20的初始化时序、写时序和读时序,分别编写3个子程序:INIT为初始化子程序,WRITE为写(命令或数据)子程序,READ为读数据子程序,所有的数据读写均由最低位开始。
温度子程序不仅要测试温度,还包括一个判断的功能,如果测试的温度超过了设定值,那么就会调用短信发送程序,如果没有超过设定值,那么温度子程序就会不断的运行,并且在单片机控制板的数码管显示出当前的温度。
采集温度流程图如4.2所示,
20