湖南大学 基于IAP15F2K61S2的数字温度计 下篇

发布于 23 天前  28 次阅读


湖南大学 基于IAP15F2K61S2的数字温度计 下篇

湖南大学 基于IAP15F2K61S2与DS18B20的数字温度计 上篇
湖南大学 基于IAP15F2K61S2的数字温度计 中篇
湖南大学 基于IAP15F2K61S2的数字温度计 中下篇

系统硬件设计

温度传感器DS18B20电路设计

  DS18B20温度传感器是单总线器件与单片机的接口电路采用电源供电。当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。其中引线由单片机定义的P1.5口连接电阻R1,作为数据传输。

显示电路设计

  显示电路采用1602液晶,对于STC15K60S2单片机来说,除P0口外其它I/O口都是准双向口且都有驱动能力,P0口也是准双向口但是驱动能力小,为了提高P0口的驱动能力,在连接液晶的时候需要加排阻。电源通过排阻向P0口供电,使其能够驱动液晶。1602液晶的读/写控制端、数据/命令选择端、使能端分别由引线接单片机的P4.1、P4.2、P3.7口。

电子时钟DS1302电路设计

  由前述内容可知,DS1302芯片需外接32.768kHz晶振才能正常工作,故芯片的X1与X2管脚之间接32.768kHz晶振,其中DS1302的复位/片选、数据输入输出、串行时钟管脚分别与单片机的P4.4、P2.2、P2.1引脚相连。

按键电路设计

按键电路是用来实现调节设定温度的上下限和电子时钟设定时间的功能。按键K6到K12分别与接单片机的P3.2~P3.6口。

报警电路与状态显示设计

  
  本课题的创新功能在此部分,数字温度计只能显示当前DS18B20所处的环境温度,加入报警电路和状态显示部分之后使得温度计更具有工程实际用途:本课程设计应用于恒温装置中,当实际温度介于给定的Temperature_Low与Temperature_High时,1602液晶显示“Safe”,表示处于安全状态;当实际温度低于给定的Temperature_Low或者高于Temperature_High时,1602液晶显示“Warning!”,并且蜂鸣器报警。

  单片机开发板上的蜂鸣器是有源蜂鸣器,所谓有源和无源的区别是指蜂鸣器内部是否具有自带的振荡电路,无源蜂鸣器内部没有振荡电路,通过端口给它施加一定的频率驱动,不同的频率可以发出不同的音调。而有源蜂鸣器内部自带频率固定的振荡电路,一加电就会发出固定音调的声音,无法发出各种不同的音调。为了能够分别不同的报警情况,通过对延时函数时间的设置,当实际温度低于Temperature_Low,蜂鸣器的报警声音为“滴、滴、滴”短促的报警音,而当实际温度高于Temperature_High,蜂鸣器的报警声音为“滴——滴”较长的报警音。蜂鸣器与单片机的P1.6口相接。

软件设计

DS18B20程序设计

  根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:

  • ①每一次读写之前都要对DS18B20进行复位操作
  • ②复位成功后发送一条ROM指令
  • ③最后发送RAM指令
      
      这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500μs,然后释放,当DS18B20收到信号后等待16~60μs左右,后发出60~240μs的存在低脉冲,主CPU收到此信号表示复位成功。

DS18B20的操作流程如图4-1所示。



图4-1 DS18B20的操作流程

DS18B20传感器的操作指令如表4-1所示。传感器复位后向传感器写相应的命令才能实现相应的功能。

表4-1 DS18B20的指令表

指 令 指令代码 功 能
读ROM 0x33 读DS1820温度传感器ROM中的编码(即64位地址)
符合 ROM 0x55 发出此命令之后,接着发出64位ROM 编码,访问单总线上与该编码相对应的DS1820使之做出响应,为下一步对该DS1820的读写做准备。
搜索 ROM 0xF0 用于确定挂接在同一总线上DS1820的个数和识别64位 ROM地址。为操作各器件作好准备。
跳过 ROM 0xCC 忽略64位ROM地址,直接向 DS1820 发温度变换命令。适用于单片工作。
告警搜索命令 0xEC 执行后只有温度超过设定值上限或下限的片子才做出响应。
温度变换 0x44 启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。
读暂存器 0xBE 读内部RAM中9字节的内容
写暂存器 0x4E 发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。
复制暂存器 0x48 将RAM中第3、4字节的内容复制到EEPROM中。
重调 EEPROM 0xB8 将EEPROM中内容恢复到RAM中的第3、4字节。
读供电方式 0xB4 读DS1820的供电模式。寄生供电时DS1820发送" 0 ",外接电源供电 DS1820发送" 1 "。

DS18B20传感器函数主要分为初始化、读字节、写字节等函数,下面一一介绍。

DS18B20传感器的初始化时序

  DS18B20传感器为单总线结构器件,在读写操作之前,传感器芯片应先进性复位操作也就是初始化操作。

  DS18B20的初始化时序如图4-2所示。首先控制器拉高数据总线,接着控制器给数据总线一低电平,延时480μs,控制器拉高数据总线,等待传感器给数据线一个60-240μs的低电平,接着上拉电阻将数据线拉高,这样才初始化完成。

图4-2 DS18B20初始化时序

DS18B20传感器的读写时序

  1. 写时序

  DS18B20传感器的读写操作是在传感器初始化后进行的。每次操作只能读写一位。当主机把数据线从高电平拉至低电平,产生写时序。有两种类型的写时序:写“0”时序,写“1”时序。所有的时序必须有最短60μs的持续期,在各个写周期之间必须有最短1μs的恢复期。

  在数据总线由高电平变为低电平之后,DS18B20在15μs至60μs的时间间隙对总线采样,如果为“1”则向DS18B20写“1”, 如果为“0”则向DS18B20写“0”。对于主机产生写“1”时序时,数据线必须先被拉至低电平,然后被释放,使数据线在写时序开始之后15μs内拉至高电平。对于主机产生写“1”时序时,数据线必须先被拉至低电平,且至少保持低电平60μs。写时序图如图4-3上半部分所示。

  1. 读时序

  在数据总线由高电平变为低电平之后,数据线至少应保持低电平1μs,来自DS18B20的输出的数据在下降沿15μs后有效,所以在数据线保持低电平1μs之后,主机将数据线拉高,等待来自DS18B20的数据变化,在下降沿15μs之后便可开始读取DS18B20的输出数据。整个读时序必须有最短60μs的持续期。读时序结束后数据线由上拉电阻拉至高电平。读时序图如图4-3下半部分所示。

LCD1602显示程序设计

  显示电路是由1602液晶来实现的。在编写代码时,引入了两个自定义的LCDWrite_char和LCDWrite_srting函数,使得显示部分更容易实现.

## 按键程序设计

  由前述内容可知,机械按键存在着机械抖动的现象,为了消除这一现象带来的影响,本课程设计使用软件消抖。以低温按键操作函数为例,程序代码如下:

  对于按键方式有两种,一种是查询式。一种是采用外部中断的形式。在本课程设计里面,所有按键均采用查询式方式:在while循环中不断的读取按键状态,并且判断是否改变,如果改变则功能变化。

中断函数设计

  中断的概念:CPU在处理某一事件A时,发生的另外某一事件B请求CPU去处理(产生了中断),随后CPU暂时中断当前正在执行的任务,去对事件B进行处理,CPU处理完事件B后再返回之前中断的位置继续执行原来的事件A,这一过程总称为中断。使CPU中断的事件称中断源。中断源向CPU发出中断请求,CPU暂时中断原来执行的事件A转去做事件B。事件B处理完毕后继续返回原先中断的地方(该过程称中断返回,原先中断的地方为断点),继续执行原先的事件。中断示意图如图4-4所示。

图4-4 中断示意图


你知道雪为什么是白色的吗?因为她忘记了原来的颜色