基于51单片机的无线温度监测系统设计

微机课要求最后用51单片机做一个综合实验,就简单利用51单片机的几个外设再外接一个HC-05蓝牙模块,电机等实现了一个简单的无线温度检测系统。在此记录下自己的设计思路和过程。其中存在的诸多不足请各位多多指正。

我这里使用是STC89C51,这个网上应该也卖的很多。能够实现无线显示温度,控制电机转速,温度预警,调节温度最高最低值,显示日期,存储最高温度不丢失等功能

1、应用案例介绍

图1 系统框图

本次实验的实验系统主要由STC89C516ED+作为主控芯片,搭配LCD1602、DS18B20、DS1302、HC-05以及AT24C02芯片,并且使用LED灯,直流电机,蜂鸣器,按键等常见外设实现检测实时温度,并且通过单片机串口再经过HC-05传输到手机APP实时显示的功能。同时还具有高温预警和实时存储最高温度并且显示,设置日期时间等功能。

系统主要分为检测,输入,输出,通信,显示,存储六个部分组成,下面依次介绍:

1、检测主要由DS18B20模块组成,DS18B20模块检测出室温后,将数据转换完成后传输给单片机

2、输入模块主要是由串口模块和按键模块组成,通过主循环不断查询按键的方式来判断按键是否被按下。串口模块在接受到数据后进入串口中断。这里串口主要负责回传HC-05发送和接受的数据。

3、通信模块主要由HC-05组成,HC-05将串口中传过来的数据通过无线的方式发送出去,再将传输获得的数据传回给串口

4、输出主要由蜂鸣器,LED,直流电机组成,主要负责高温预警

5、显示由LCD1602模块实现,负责显示温度,DS1302转换的时间以及最大温度。

6、存储由AT24C02实现,将最大温度实时存储,掉电不丢失。

2、电路原理图

3、各模块电路原理介绍

3.1  AT24C02

AT24C02简介

AT24C02是一个2K位串行CMOS E2PROM,内部含有2568位字节,采用先进CMOS技术实质上减少了器件的功耗。AT24C02有一个8字节页写缓冲器,该器件通过IIC总线接口进行操作,有一个专门的写保护功能。

AT24C02使用

在进行I2C通信时,主机发送启动信号后,再发送寻址信号。器件的地址有7位和10位,以7为地址寻址为例,寻址信号由一个字节构成,高7位为地址位,最低位为方向位,用来表示主机与从器件的数据传输方向;方向位0代表主机接下来对从器件进行写操作;方向位为1,表明主机接下来对器件进行读操作。

如上图,AT24C02的高4位是固定的,为1010b,低3位则由A0/A1/A2信号线的电平决定。按照我们此处的连接, A0/A1/A2 均为 0,所以 EEPROM 的 7 位设备地址是: 1010 000b ,即 0x50。

由于 I2C 通讯时常常是地址跟读写方向连在一起构成一个 8 位数,且当R/W 位为 0 时,表示写方向,所以加上 7 位地址,其值为“ 0xA0”,常称该值为 I2C 设备的“写地址”;当 R/W 位为 1 时,表示读方向,加上 7 位地址,其值为“ 0xA1”,常称该值为“读地址”。

A0/A1/A2输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。当使用AT24C02 时最大可级联8个器件。如果只有一个AT24C02被总线寻址,这三个地址输入脚(A0、A1、A2 )可悬空(接地也可以)或连接到Vss,如果只有一个AT24C01被总线寻址这三个地址输入脚(A0、A1、A2 )必须连接到Vss。

3.2  DS18B20

DS18B20简介

DS18B20是一款常用的高精度的单总线数字温度测量芯片。具有体积小,硬件开销低,抗干扰能力强,精度高的特点。

DS18B20工作步骤

DS18B20的工作步骤可以分为三步:

1.初始化DS18B20

2.执行ROM指令

3.执行DS18B20功能指令

注:其中第二步执行ROM指令,也就是访问每个DS18B20,搜索64位序列号,读取匹配的序列号值,然后匹配对应的DS18B20,如果我们仅仅使用单个DS18B20,可以直接跳过ROM指令。而跳过ROM指令的字节是0xCC。

3.3  DS1302

DS1302简介

DS1302时钟芯片是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。DS1302芯片包含一个用于存储实时时钟/日历的 31 字节的静态 RAM,可通过简单的串行接口与微处理器通讯,将当前的是时钟存于RAM。DS1302芯片对于少于 31 天的月份月末会自动调整,并会自动对闰年进行校正。由于有一个 AM/PM 指示器,时钟可以工作在 12 小时制或者 24小时制。

时钟数据的读写

如上图,为DS1302芯片的时钟数据的读和写的地址,也就是说要实现对芯片控制,就是往这些地址上写入或读出数据。其中:

读地址为0x81(秒), 0x83(分), 0x85(时), 0x87(日), 0x89(月), 0x8b(星期), 0x8d(年);

写地址为0x80(秒), 0x82(分), 0x84(时), 0x86(日), 0x88(月), 0x8a(星期), 0x8c(年)

时序说明

1.DS1302是通过串行总线跟单片机通信的,当进行一次读写操作是最少得读写两个字节,第一个字节就是控制字节,就是一个命令,告诉DS1302是读还是写操作,是对RAM还对CLOK寄存器操作。第二个字节就是要读写的数据了。

2.单字节读写:只有在SCLK为低电平时才能将RST置为高电平。所以在进行操作之前先将SCLK置低电平,然后将RST置为高电平,接着开始在IO上面放入要传输的电平信号,然后跳变SCLK。数据在SCLK上升沿时,DS1302读写数据,在SCLK下降沿时,DS1302放在数据到IO上

3.4  HC-05

模块简介

HC-05 蓝牙串口通信模块,是基于 Bluetooth Specification V2.0 带 EDR 蓝牙协议的 数传模块。无线工作频段为 2.4GHz ISM,调制方式是 GFSK。模块最大发射功率为 4dBm, 接收灵敏度-85dBm,板载 PCB 天线,可以实现 10 米距离通信。模块自带 LED 灯,可直观判断蓝牙的连接状态。 模块采用 CSR 的 BC417 芯片,支持 AT 指令,用户可根据需要更改角色(主、从模式) 以及串口波特率、设备名称等参数,使用灵活。

模块原理

蓝牙模块的通信示意图如下:两个设备主控芯片或单片机分别连接各自的蓝牙模块,即将主控芯片与蓝牙模块的串口控制引脚交叉连接。因为蓝牙模块自带透传功能,简单来说就是主控芯片串口什么数据,蓝牙模块就转发什么数据,所以也可以把主控芯片的串口看作一个带有无线传输的串口。由于蓝牙有主从机之分,模块出厂默认为从机模式。如果需要设置为主机,需要通过AT指令对蓝牙进行设置。

4.程序编写

图10  程序流程图

程序总体流程为进入主函数后首先对串口,LCD1602,定时器0,DS1302等外设做初始化操作,做好一些配置工作。之后设置时间的初值,进入主循环后先扫描按键,再读取时间,进行温度转换操作,在这过程中中断是关闭的,然后判断是否超出预警温度,超出了蜂鸣器开启,直流电机开启,LED闪烁。没有的话正常显示温度和时间并且把数据通过串口发送出去,一切完成后结束返回重新开始扫描按键等。其中如果发送串口中断接受数据执行相应的操作如调节预警温度,控制直流电机转速。矩阵按键可以调节设置显示的时间。

因为代码部分太长了,就不做介绍和分析了,实际上就是写好单独模块的文件后,去调用模块就好了。

但我在调用的时候也发现了一些问题:

定时器0中断,串口和DS18B20这三个外设之前相互干扰的问题,主要解决的思路是通过开关中断以此避免发送温度转换错误,串口发送接受数据错误,定时器中断过慢这一系列问题,同时还存在一个bug,即DS1302 和DS18B20使能口发生冲突的问题,解决方法是将DS1302读函数中的CE最后拉高,这样才不会影响到DS18B20的正常转换。对于日期设置由于显示的日月时分秒变量较多,采用矩阵键盘设置的方式,这里也存在直流电机的IO与矩阵键盘的IO存在冲突的问题,将矩阵键盘的IO减少一个即减少一列可以解决问题。

5.软件虚拟仿真

正常工作时的仿真截图:

高温预警时的仿真截图:

一共由两种状态:工作状态和预警状态

工作状态,LCD实时显示温度和时间,直流电机不工作,LED熄灭,蜂鸣器不工作,串口依次发送温度和最大温度信息。

预警状态:想比工作状态,蜂鸣器鸣响,LED闪烁,直流电机正转。其余和工作状态相同,

6.硬件实验

硬件实验测试结果与仿真实验结果一致,但由于定时器0中断可能会打断DS18B20温度转化过程,使其发生转换错误的问题,需要再温度转换过程中关闭定时器0中断,一定程度上会影响PWM波的产生,影响直流电机运转调速过程,同时也由于串口中断和串口发送过程也会受到定时器0中断的干扰也需要暂时关掉中断。

上图为手机APP界面,显示实时温度,最大温度,以及控制电机滑块,设定预警温度框

  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值