您的当前位置:首页正文

基于WIFI传输的单片机传感器设计

2022-02-22 来源:步旅网


摘 要

随着现代信息技术的飞速发展和传统工业改造的逐步实现.能够独立工作的温度检测和显示系统应用于诸多领域。传统的温度检测以热敏电阻为温度敏感元件。热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。与传统的温度计相比,这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。选用单片机STC90C516RD+作为主控制器件,DSl8B20作为测温传感器通过LCD1602液晶实现温度显示。并通过DSl8B20直接读取被测温度值,进行数据转换,将检测的温度数据通过单片机串口发送给PC机和WIFI收发模块进行实时监控显示,而智能安卓手机又可以通过相应的APP接受到WIFI模块发送的数据,从而又可以在我们的智能手机上进行实时显示监控,这样一来我们就可以创建一个WIFI传输的MCU温度采集监控系统了。由于DS18B20的物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0.1℃。该器件可直接向单片机传输数字信号,便于单片机处理及控制。另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。

关键词:单片机,DSl8B20测温传感器,MCU串口,WIFI模块,

智能安卓手机

I

Abstract

With the gradual implementation of the rapid development

of modern information technology and the transformation of traditional industries. Able to work independently of the temperature detection and display system used in many fields. The traditional temperature detection for thermal resistance as the temperature sensitive element. Thermal resistance of low cost, but the subsequent signal processing circuit, moreover the reliability is relatively bad, the temperature measurement accuracy is low, the examination system also has certain error. Compared with the traditional thermometer, here is the design of digital thermometer reading convenience, a wide range of temperature measurement, accurate temperature measurement, digital display, applicable to a wide range of. Single chip STC90C516RD+ as the main control device, DSl8B20 as a temperature sensor through the LCD1602 LCD temperature display. And DSl8B20 measured by direct reading temperature value, data conversion, the temperature data detected by microcontroller serial port to send to the PC and WIFI transceiver module for real-time monitoring, smart Android

II

mobile phone can receive WIFI module to send data through the APP, which can real-time display control in intelligent mobile phone we, MCU temperature acquisition system so that we can create a WIFI transmission. The DS18B20 physical and chemical properties of stability, good linearity, at 0 ℃ ~100 ℃ maximum linear error is less than 0.1 ℃. The device can transmit digital signals directly to the microcontroller, easy to handle and control mcu. In addition, the thermometer temperature measurement device can be used directly to measure temperature, thus simplifying the data transmission and processing.

Key words: MCU,DS18B20 temperature sensor,MCU

serial port,The WIFI module,Intelligent Android mobile phone;

III

目录

摘 要……………………………………………………………………………...…………..I Abstract……………………………………………………………………………………….II 前 言………………………………………………………………………………………… 1 绪论………………………………………………………………………...………………..1 论文选题背景 ...................................................................................................................... 1 一:系统总体方案设计………………………………………...…………………………….3 1.1系统设计流程 ........................................................ 3 1.2 系统设计整体功能描述 ................................................ 4 二:系统硬件设计………………………...……………………………………5

2.1元器件的选择 ........................................................ 5 2.1.1 MCU的选型 .................................... 5 2.1.2温度传感器的选型 ....................................... 7

2.2 单元电路模块设计 ................................... 10 2.2.1 复位电路及时钟电路 .............................10 2.2.2 电源电路 ...................................... 12 2.2.3 UART串口通信电

路 .................................. 12

2.2.4 DS18B20测温电路 .......................... 14 2.2.5 LCD显示电路 ................................... 15 2.2.6 MCU与WIFI模块接口图 ............................... 17 2.3 总体原理图设计 .................................... 19 2.3.1 Proteus原理图 ................................... 19 2.3.2 Protel99SE原图 ................................... 20

2.4 系统PCB图 ........................................ 21 2.5 系统3D效果图 ........................................ 23

三:系统软件设计…………………………………………………………………错误!未定义书签。5

3.1 系统总流程图 ...................................... 错误!未定义书签。5 3.2 LCD显示模块 ...................................... 错误!未定义书签。5 3.2.1 原理介绍 ...................................... 错误!未定义书签。5 3.2.2 显示流程图 .................................... 错误!未定义书签。6 3.3 DS18B20 转换模块 ............................................... 36 3.3.1 DS18B20 转换原理介绍 ....................................... 36 3.3.2 DS18B20 转换流程图 ........................................... 38 3.4 UART通信程序 ..................................................... 46

3.4.1 232串口通信原理介绍 ......................................... 46 3.4.2 232串口通信实物图.................................48 3.4.3 串行通讯RS232程序................................49 3.5 延时子程序 ........................................................ 50 四:Proteus仿真………………………………............5错误!未定义书签。

4.1仿真软件介绍 ...................................... 5错误!未定义书签。 4.2 Proteus仿真 ..................................... 5错误!未定义书签。 总 结………………………………………………………………………………………...55 致 谢………………………………………………………………………………………...56 参考文献……………………………………………………………………………..……….58 附 录………………………………………………………………………………………...59 系统程序 …………………………………………………………………………..59

前 言

随着时代的进步和发展,单片机技术已经普及到我们生活、工

作、科研、各个领域,已经成为一种比较成熟的技术, 本文主要介绍了一个基于WIFI传输的单片机的测温系统,详细描述了利用数字温度传感器DS18B20和WIFI模块开发相互通信的一个实时测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详细分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现温度采集,LCD1602液晶显示和通过单片机串口和、WIFI模块进行数据的传送,将测温数据在PC机或智能手机上实时显示,如果需要用户还可以自己另外设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。DS18B20与STC90C516RD+结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,如果加上WIFI模块后,通过智能手机控制,那么完全可以创建一个智能家居控制系统,因此它有广泛的应用前景

绪论

论文选题背景

随着科技的不断发展,现代社会对各种信息参数的准确度和精

确度的要求都有了几何级的增长,而如何准确而又迅速的获得这些

1

参数就需要受制于现代信息基础的发展水平。在三大信息信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技术)中,传感器属于信息技术的前沿尖端产品,尤其是温度传感器技术,在我国各领域已经引用的非常广泛,可以说是渗透到社会的每一个领域,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段: ①传统的分立式温度传感器 ②模拟集成温度传感器 ③智能集成温度传感器

目前的智能温度传感器(亦称数字温度传感器)是在20世纪90年代中期问世的,它是微电子技术、计算机技术和自动测试技术(ATE)的结晶,特点是能输出温度数据及相关的温度控制量,适配各种微控制器(MCU)。社会的发展使人们对传感器的要求也越来越高,现在的温度传感器正在基于单片机的基础上从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展,并朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展,通过温度传感器采集完温度数据后我们还要进行实时显示,因此就延续出各种显示装备,常用有数码管,LCD1602显示,然而随着智能系统的不

2

断发展,因此诞生了基于WIFI传输的MCU温度采集监控显示系统,这样一来我们就可以通过智能手机实时监控了,因此研究温度的测量方法和装置具有重要的意义。

一:系统总体方案设计

1.1:系统设计流程

本设计通过

PROTEUS软件画出MCU控制温度传感器LCD显示的原

理图,然后利用KEIL软件编写程序代码,生成HEX文件后,下载到PROTEUS原理图的MCU中,进行仿真调试。 这个过程的成功说明原理图正确,并且为后续工作奠定了软件基础。

仿真调试成功后,再利用Altium Designer 6.9绘制电器原理图,最后生成PCB图,布局布线完成后,拿去制板。制板完成后,需要调试焊接电路,最后将仿真用的HEX文件烧写到实物单片机中可以看到LCD1602显示测温值然后和WIFI模块串口连接,通过串口将测温值数据传送到PC机中显示和智能手机APP中显示实现智能控制,经过多次调试,反复修改程序,达到理想结果。

3

1.2 系统设计整体功能描述

本研究成功,在温度测量系统中,实际温度值由DS18B20温度传感器设计的电路进行测量。通过温度传感器测量的温度数据送入单片机STC90C516RD+;对采样数据进行变换处理后送给LCD1602显示,并且通过单片机串口把温度数据传送给PC机和WIFI模块,通过PC机串口调试助手实时显示测试温度数据值或者通过智能手机接受WIFI发送的温度数据进行显示。这样一来,整个系统就可以在LCD1602、PC机串口调试助手、安卓智能手机APP中进行多方的控制显示了,本系统的控制功能由单片机STC90C516RD+ 的程序来实现。

整体设计框图如图

4

二:系统硬件设计

2.1元器件的选择

2.1.1

MCU的选型

STC90C516RD+系列单片机是宏晶科技推出的新一代超高速/低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,内部集成MAX810专用复位电路,时钟频率在12MHz以下时,复位脚可直接接地。

1.增强型6 时钟/ 机器周期,12 时钟/ 机器周期 8051 CPU 2.工作电压:5.5V - 3.8V(5V 单片机)/3.8V - 2.4V(3V 单片机) 3.工作频率范围:0-40MHz,相当于普通8051的 0~80MHz. 4.用户应用程序空间 64K字节 5.片上集成 1280字节RAM

6.通用I/O口(35/39 个),复位后为: P1/P2/P3/P4 是准双向口/ 弱上拉(普通8051 传统I/O 口)P0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O 口用时,需加上拉电阻。 7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器 / 仿真器可通过串口(P3.0/P3.1)直接下载用户程序,8K 程序3 - 5

5

秒即可完成一片 8.EEPROM 功能 9.看门狗

10.内部集成MAX810专用复位电路,外部晶体12M以下时,可省外部复位电路,复位脚可直接接地。

11.共3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用

12.外部中断4路,下降沿中断或低电平触发中断,Power Down模式可由外部中断低电平触发中断方式唤醒

13.通用异步串行口(UART),还可用定时器软件实现多个UART 14.工作温度范围:0-75℃/-40-+85℃ 15.封装:LQFP-44,PDIP-40,PLCC-44

此处我们使用的是DIP双列直插封装;单片机STC90C516RD+管脚图为:

6

2.1.2温度传感器的选型

DS18B20是DALLAS公司生产的一款超小体积、抗干扰能力强、

7

精度高的数字温度传感器。不需A/D转换电路,直接将温度值转换成数字量。DS18B20的测量范围为-55℃-125℃,精度为±0.5℃。DS18B20引脚如

引脚功能说明:

NC :空引脚,悬空不使用;

VDD :可选电源脚,电源电压范围3~5.5V。当工作于寄生电源时,此引脚必须接地。

DQ :数据输入/输出脚。漏极开路,常态下高电平。 GND :为电源地

DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。

8

DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。

这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。 例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。

该字节各位的意义如下: TM R1 R0 1 1 1 1 1

低五位一直都是1 ,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如表1所示:(DS18B20出厂时被设置为12位)

9

表1 DS18B20温度转换时间表 R1 0 0 1 1 R0 分辨率/位 0 9 1 10 0 11 1 12 温度最大转向时间 93.75 187.5 375 750 根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

2.2 单元电路模块设计

2.2.1 复位电路及时钟电路

STC90C516RD+单片机芯片内部设有一个反向放大器所构成的振荡器,XTAL1 和XTAL2分别为振荡电路的输入端和输出端,时钟可以由内部或外部产生,在XTAL1和XTAL2引脚上外接定时元器件,内部振荡电路就会产生自激振荡。本系统采用的定时元件为石英晶体和电容组成的并联谐振回路。晶体频率选择12MHz,C1、C2 的电容取33PF,电容的大小可起到频率微调的作用。时钟电路如图2.3所示

1 0

(晶振电路)

单片机具有多种复位电路,本系统采用电平式开关复位与上电复位方式,具体电路如下所示。当上电时,C1相当于短路,使单片机复位,在正常工作时,按下开关使单片机复位,当系统时钟频率为12MHz 时,C1=22uF,R1=200,R2=1k,其缺点是干扰易于串入复位端,在多数条件下,不会造成单片机错误复位,但会引起内部某些寄存器错误复位,这时可以在RESET 端加一个去耦电容。如图

(复位电路)

1 1

2.2.2 电源电路

采用USB接口提供5V电源。

2.2.3 UART串口通信电路1 2

1 3

2.2.4 DS18B20测温电路

1 4

2.2.5 LCD显示电路

字符型1602液晶显示是一种专门用于显示字母、数字、符号等点阵式的LCD。其内部的字符发生存储器(CGROM)存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”,所以我们可以根据需要灵活设计。

1 5

RS、RW的值控制单片机对它的读写:RS=0 RW=0写入指令寄存器(清清屏等);RS=0 RW=1读busy(DB7)以及读取位址计数器(DB-DB6)的值;RS=1 RW=0写入数据寄存器(显示各字符等);RS=1 RW=1从数据寄存器读取数据。

每次在对LCD进行读写操作时,都要对其进行标志位忙检测,标志位BF=1表示液晶显示器忙,暂时无法接收来自单片机的数据或指令。当BF=0时,表示液晶显示器可以接收单片机的数据或命令。1602的数据和指令传输是通过D0—D7这8位数据线来完成的。对1602采用总线方式读写,其原理图如图

1 6

2.2.6 MCU与WIFI模块接口图

随着互联网越来越快的发展,以及手机、笔记本电脑的普及,

1 7

用户对能够随时随地上网的需求越来越迫切,WiFi通信技术在手机上网、电脑上网的应用越来越广泛,WiFi的发展与应用在实际生活中得到了越来越快的发展。

WiFi的全称是Wireless Fidelity,又叫802.11b标准,是IEEE定义的一个无线网络通信的工业标准,是一种可以将个人电脑、手持设备(如PDA、手机)等终端以无线方式互相连接的技术,它可以帮助用户访问电子邮件、Web和流媒体。其主要特性为:速度快、可靠性高、通信距离远。在开放性区域,通讯距离可达305米,在封闭性区域,通讯距离为76米到122米,在家庭上网、办公室上网和旅途上网方便快捷。由于WiFi覆盖范围广、速度快、可靠性高、无需布线、健康安全及计费便宜等特点,已成为当今无线网络接入的主流标准,只要随身携带的电子设备集成了 WiFi 无线通信终端用户,就可以在WiFi覆盖区域内随时拨打或接听电话、快速浏览网页、下载或上传音视频文件、收发电子邮件,而无需担心花费太高和网速太慢等问题。目前,我国许多的车站、机场、学校、办公密集区、繁华商场、图书馆、知名旅游景点都有WiFi信号的覆盖。 WIFI232 模块用于实现串口到 WIFI 数据包的双向透明转发,我们无需关心具体细节,模块内部完成协议转换,串口一侧串口数据透明传输,WIFI 网络一侧是 TCPIP 数据包,通过简单设置即可

1 8

指定工作细节,设置可以通过模块内部的网页进行,也可以通过串口使用 AT 指令进行,也可以使用设置软件,一次设置永久保存。 关于串口的连接,模块的引脚引出为 3.3V TTL 电平,不能直接和计算机连接,需要带底板或者用户有 TTL转 RS232 的转接线再连到计算机上。

基于WiFi的许多优点,通过串口调试工具和相应的APP,可以成功的利用WiFi实现了电脑与手机,电脑与单片机,单片机与手机之间的数据传输。

2.3 总体原理图设计

依据上述各个部分电路图,对总体原理图进行设计如下图

2.3.1 Proteus原理图

1 9

利用上述原理图实现仿真功能,并利用KEIL烧写程序代码,最后经过多次调试程序,使程序能够完成系统要求的功能。 2.3.2 Protel99SE原理图

2 0

2.4 系统PCB图

2 1

2 2

2.5系统3D效果图

2 3

2 4

三:系统软件设计

3.1 系统总流程图

3.2 LCD显示模块

3.2.1 原理介绍

通过对LCD1602 RS、RW、EN的读写数据操作将DS18B20检测的温度数据通过MCU处理后写给LCD1602进行显示;LCD1602液晶会实时显示测量的温度值。第一行显示我们默认给的一串字符:tempertury,第二行才是显示我们测试的温度数值。

2 5

3.2.2 显示流程图 显示流程图如图

void delay(uint16 i) //一次相当于10us左右,这个延时是有误差的

{

while(i--); }

void ds18b20init() //18b20的初始化 { dq=1;

2 6

delay(1); dq=0; delay(80); dq=1; delay(5); dq=0; delay(20); dq=1; delay(35); }

void ds18b20wr(uint8 dat) //18b20写数据 { uint8 i; for(i=0;i<8;i++) { dq=0; dq=dat&0x01; dat>>=1;

delay(8);//在时序上只有这一块对时序要求最准确,他15us

2 7

的时间必须大于

dq=1; delay(1); } }

uint8 ds18b20rd() //18b20读数据 {

uint8 value,i; for(i=0;i<8;i++) { dq=0; value>>=1; dq=1;

if(dq==1)value|=0x80;

delay(8);//在这一块也对时间要求特别准确,整段程序必须大于60us

}

return value; }

uint8 readtemp() //读取温度内需要复位的 {

2 8

uint8 b;

ds18b20init(); //初始化

ds18b20wr(0xcc); //发送忽略ROM指令 ds18b20wr(0x44); //发送温度转换指令 delay(100);

ds18b20init(); //初始化

ds18b20wr(0xcc); //发送忽略ROM指令 ds18b20wr(0xbe); //发读暂存器指令 a=ds18b20rd(); //温度的低八位 b=ds18b20rd(); //温度的高八位

b<<=4; //ssss s***;s为标志位s=0表示温度值为正数,s=1温度值为负数

c=b&0x80; //温度正负标志位确认 b+=(a&0xf0)>>4;

a=a&0x0f; //温度的小数部分 return b; }

void uartinit() {

TMOD=0x20; //选择方式2,自动装载模式

2 9

SCON=0x50;

TH1=0xF3; //波特率取的是4800;所以在串口调试助手上面波特率选择2400.如果选择4800的话,结果就是乱码。但可以在初始化的时候加一条倍频语句。PCON=0x80;

TL1=0xF3;

TR1=1; //这个一定要打开 }

void temppros() {

// uint16 k; float dio; dio=a*0.0625;

k=dio*10000;//取小数点后两位有效数字 tempdata[0]=d[0]; tempdata[1]=d[1]; tempdata[2]=d[2]; tempdata[3]=d[3]; tempdata[4]=d[4]; tempdata[5]=d[5]; tempdata[6]=d[6];

3 0

tempdata[7]=d[7]; tempdata[8]=d[8]; tempdata[9]=d[9]; tempdata[10]=d[10]; tempdata[11]=d[11]; tempdata[12]=d[12]; tempdata[13]=d[13]; tempdata[14]=d[14]; tempdata[15]=d[15]; tempdata[16]=d[16];

if(c==0x80) //读取到负温度即为补码,要将其转换成源码 {

tempdata[17]=fuhao[0]; temp=temp-1;

temp=(~temp)|0x80;//负数的补码即为反码+1;而负数的反码为其源码取反,除了符号位;正数的补码等于正数的反码等于正数的源码

} else {

3 1

tempdata[17]=fuhao[1]; temp=(temp); }

tempdata[18]=num[temp/100]; tempdata[19]=num[temp%100/10]; tempdata[20]=num[temp%100%10]; tempdata[21]=fuhao[2]; tempdata[22]=num[k/1000]; tempdata[23]=num[k%1000/100]; tempdata[24]=fuhao[3]; //° tempdata[25]=fuhao[4]; tempdata[26]=fuhao[5]; tempdata[27]=fuhao[6]; }

void wrc(uint8 c) {

delay(1000); rs=0; rw=0;

3 2

e=0; P0=c; e=1; delay(10); e=0; }

void wrd(uint8 dat) {

delay(1000); rs=1; rw=0; e=0; P0=dat; e=1; delay(10); e=0; rs=0; }

void lcdinit() {

3 3

delay(1000); wrc(0x38); wrc(0x38); wrc(0x38); wrc(0x06); wrc(0x0c); wrc(0x01); }

void display() { uint8 i;

for(i=0;i<17;i++) {

wrd(d1[i]); }

wrc(0x80+0x43);

if(c==0x80) //读取到负温度即为补码,要将其转换成源码 {

wrd('-'); temp=temp-1;

3 4

temp=(~temp)|0x80;//负数的补码即为反码+1;而负数的反码为其源码取反,除了符号位;正数的补码等于正数的反码等于正数的源码

} else {

wrd('+'); temp=(temp); }

wrd(num[temp/100]); wrd(num[temp%100/10]); wrd(num[temp%100%10]); wrd('.'); wrd(num[k/1000]); wrd(num[k%1000/100]); wrd(0xdf); wrd('C'); }

void main() {

3 5

uint8 j; lcdinit(); uartinit(); while(1) {

temp=readtemp();display(); temppros(); for(j=17;j<28;j++) {

SBUF=tempdata[j];

while(!TI); //数据发送完成后硬件自动置一 TI=0; //需要软件清零 }

delay(50000);//延时一段时间作为传送间隔时间 } }

3.3 DS18B20 转换模块

3.3.1 DS18B20 转换原理介绍

3 6

DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。

这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。 例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。

该字节各位的意义如下: TM R1 R0 1 1 1 1 1

低五位一直都是1 ,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如表1所示:(DS18B20出厂时被设置为12位)

3 7

表1 DS18B20温度转换时间表 R1 0 0 1 1 R0 分辨率/位 0 9 1 10 0 11 1 12 温度最大转向时间 93.75 187.5 375 750 根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

3.3.2 DS18B20 转换流程图

程序如下:

3 8

void ds18b20init() //18b20的初始化 { dq=1; delay(1); dq=0; delay(80); dq=1; delay(5); dq=0; delay(20); dq=1; delay(35); }

void ds18b20wr(uint8 dat) 写数据3 9

//18b20

{

uint8 i; for(i=0;i<8;i++) { dq=0; dq=dat&0x01; dat>>=1;

delay(8);//在时序上只有这一块对时序要求最准确,他的时间必须大于15us dq=1; delay(1); } }

uint8 ds18b20rd() //18b20读数据

4 0

{

uint8 value,i; for(i=0;i<8;i++) { dq=0; value>>=1; dq=1;

if(dq==1)value|=0x80;

delay(8);//在这一块也对时间要求特别准确,整段程序必须大于60us }

return value; }

uint8 readtemp() //读取温度内需要复位的

4 1

{

uint8 b;

ds18b20init(); //初始化

ds18b20wr(0xcc); //发送忽略ROM指令 ds18b20wr(0x44); //发送温度转换指令 delay(100);

ds18b20init(); //初始化

ds18b20wr(0xcc); //发送忽略ROM指令 ds18b20wr(0xbe); //发读暂存器指令 a=ds18b20rd(); //温度的低八位 b=ds18b20rd(); //温度的高八位

b<<=4; //ssss s***;s为标志位s=0表示温度值为正数,s=1温度值为负数

c=b&0x80; //温度正负标志位确认

4 2

b+=(a&0xf0)>>4;

a=a&0x0f; //温度的小数部分 return b; }

void temppros() {

// uint16 k; float dio; dio=a*0.0625;

k=dio*10000;//取小数点后两位有效数字 tempdata[0]=d[0]; tempdata[1]=d[1]; tempdata[2]=d[2]; tempdata[3]=d[3];

4 3

tempdata[4]=d[4]; tempdata[5]=d[5]; tempdata[6]=d[6]; tempdata[7]=d[7]; tempdata[8]=d[8]; tempdata[9]=d[9]; tempdata[10]=d[10]; tempdata[11]=d[11]; tempdata[12]=d[12]; tempdata[13]=d[13]; tempdata[14]=d[14]; tempdata[15]=d[15]; tempdata[16]=d[16];

if(c==0x80) //读取到负温度即为补码,要将其转换成源码 4 4

{

tempdata[17]=fuhao[0]; temp=temp-1;

temp=(~temp)|0x80;//负数的补码即为反码+1;而负数的反码为其源码取反,除了符号位;正数的补码等于正数的反码等于正数的源码 } else {

tempdata[17]=fuhao[1]; temp=(temp); }

tempdata[18]=num[temp/100]; tempdata[19]=num[temp%100/10];

4 5

tempdata[20]=num[temp%100%10]; tempdata[21]=fuhao[2]; tempdata[22]=num[k/1000]; tempdata[23]=num[k%1000/100]; tempdata[24]=fuhao[3]; //° tempdata[25]=fuhao[4]; tempdata[26]=fuhao[5]; tempdata[27]=fuhao[6]; }

3.4 UART通信程序

3.4.1 232串口通信原理介绍:

RS232接口是1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。RS-232C 标准(协议)的全称是EIA-RS-232C 标准,其中EIA(Electronic Industry Association)代表美国电子工业协会,

4 6

其中RS是Recommended Standard的缩写,代表推荐标准,232是标识符,C代表RS-232的最新一次修改(1969年),它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个25个脚的DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。DB25的串口一般只用到的管脚只有2(RXD)、3(TXD)、7(GND)这三个,随着设备的不断改进,现在DB25针很少看到了,代替它的是DB9的接口,DB9所用到的管脚比DB25有所变化,是2(RXD)、3(TXD)、5(GND)这三个。因此现在也都把RS232接口叫做DB9。 由于RS232接口标准出现较早,难免有不足之处,主要有以下四点: (1)接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。 (2)传输速率较低;通讯速率(波特率 Baud Rate):缺省常用的是 9600 bps,常见的还有 1200、2400、4800、19200、38400、115200等。波特率越大,传输速度越快,但稳定的传输距离越短,抗干扰能力越差。

(3)接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。

4 7

(4)传输距离有限。

3.4.2 232串口实物图:

4 8

3.4.3串行通讯RS232程序: void uartinit() {

TMOD=0x20; //选择方式2,自动装载模式 SCON=0x50;

TH1=0xF3; //波特率取的是4800;所以在串口调试助手上面波特率选择2400.如果选择4800的话,结果就是乱码。但可以在初始化的时候加一条倍频语句。PCON=0x80;

4 9

TL1=0xF3;

TR1=1; //这个一定要打开 }

for(j=17;j<28;j++) {

SBUF=tempdata[j];

while(!TI); //数据发送完成后硬件自动置一 TI=0; //需要软件清零 }

3.5 延时子程序

我们的延时函数通过给while赋一个初值让其不断死循环,直到while内变量为0就自动结束,即让CPU不断在处理这个语句,也就

5 0

起到了延时的作用。

void delay(uint16 i) //一次相当于10us左右,这个延时是有误差的 {

while(i--); }

5 1

四:Proteus仿真

4.1 Proteus介绍

Proteus ISIS 是英国Labcenter 公司开发的电路分析与实物仿真软件。它运行于Windows 操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:

(1)实现了单片机仿真和SPICE 电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232 动态仿真、I2C 调试器、SPI 调试器、键盘和LCD 系统仿真的功能,有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

(2)支持主流单片机系统的仿真。目前支持的单片机类型有,68000 系列、8051 系列、AVR 系列、PIC12 系列、PIC16 系列、PIC18 系列、Z80 系列、HC11系列以及各种外围芯片。 (3)提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能,同时支持第三方的软件编译和调试环境,如Keil C51 uVision2 等软件。

(4)具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。本章介绍Proteus ISIS 软件的工作环境和一些基本操作。然后在Proteus 选出所需要的硬件模块本系统所要用的模块。

4.2 Proteus仿真

5 2

安装好Proteus 后进入程序界面 。Proteus 的工作界面是一种标准的Windows 界面,包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。硬件选择好后,把硬件模块逐一放入Proteus 图形编辑窗口连接好导线。这些准备好后导入程序仿真完成,如图 没有接入串口的显示界面

5 3

串口连接好后,即可和PC机或是WIFI模块进行通信,结果如下:

5 4

总 结

本文对基于WIFI传输的MCU传感器控制进行了整体的分析描述,对WIFI模块我们这里只是概括性的介绍了下,大部分还是分析单片机到PC机或WIFI模块这段的操作,其中涉及了DS18B20单总线协议操作,UART串口通信操作,LCD液晶驱动操作等等。通过串口通信就可以很好的把单片机、PC、WIFI模块整个的融入到系统当中,而单片机通过模拟单总线时序对DS18B20温度传感器处理,将温度传感器检测的温度数据读到单片机内,经过处理后就可以在LCD液晶上显示,还可以通过232串口发送给PC机和WIFI模块,这样PC机可以显示DS18B20测试的温度值,WIFI模块内也有这些数据,然后通过智能手机链接WIFI,相应的APP也可以读取到DS18B20测试的温度值进而在手机上显示控制。在实际中测试的话,可能在传输数据的时候会有干扰导致显示误码。主要原因是UART通信距离受到了限制,还有就是其干扰比较大。所以我们可以在短距离内测试,或者我们可以调节一个比较好的波特率进行数据的传送,程序中采用的波特率是2400。

5 5

但是本设计中也存在着缺陷与不足:

(1)没有具体WIFI模块的仿真,主要是PROTUES中没能找到与之相对应的功能元件。

(2)在设计中只是理想的情况,在实际通信中却是复杂多变,存在着各种各样的情况,所以最后的接收信号是在很简单的干扰下得出。要想应用于实际中,必须加入各种处理干扰的模块,以实现真实系统的设计。

致 谢

历时将近两个月的时间终于将这篇论文写完,在论文的写作过程中遇到了无数的困难和障碍,都在老师和同学的帮助下度过了。

5 6

尤其要强烈感谢我的论文指导老师,她对我进行了无私的指导和帮助,不厌其烦的帮助进行论文的修改和改进。另外,在校图书馆查找资料的时候,图书馆的老师也给我提供了很多方面的支持与帮助。

感谢这篇论文所涉及到的各位学者。本文引用了数位学者的研究文献,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作。

由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和学友批评和指正!

此外,还要感谢在大学四年中帮助我的人,感谢曾给我授过课的每一位老师。同时,也要感谢在论文写作过程中,帮助过我、并且共同奋斗四年的大学同学们,能够顺利完成论文,是因为一路上有你、有你们。

再次衷心地感谢所有在我论文写作过程中给予过我帮助的人 们,谢谢!

5 7

参考文献

[1] 余锡存,曹国华.单片机原理及接口技术.西安:西安电子科技大学出版社,2000

[2] 张毅刚等.MCS-51单片机应用设计.哈尔滨工业大学出版社,1997

[3] 周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2009.

[4] 李全利,迟荣强.单片机原理及接口技术.北京:高等教育出2004.11~112

[5] 郭天祥.新概念51单片机C语言教程——入门、提高、开发、拓展、全攻略[M].电子工业出版社,2011,2

[6] 谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2007

[7] 彭伟.单片机C语言程序设计实训100例.北京航空航天大学出版社,2010,5

[8] 张伟.Protel电路板设计与制作.北京:人民邮电出版社,2004

[9] 江思敏等.Protel电路设计教程.北京:清华大学出版社,2002.9

5 8

[10] 于京,张静路.51系列单片机C程序设计与应用案例.北京:中国电力出版社

附录

系统程序:

#include #include

typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long uint32; sbit dq=P3^7; sbit rs=P2^6; sbit rw=P2^5; sbit e=P2^7;

uint8 d1[17]=\" tempertury \"; uint8 d[16]=\"当前采集温度为:\"; uint8 num[10]=\"0123456789\"; uint8 fuhao[]=\"-+.°C \";

5 9

uint8 tempdata[25]; uint8 a,c,temp; uint16 k;

void delay(uint16 i) //一次相当于10us左右,这个延时是有误差的 {

while(i--); }

void ds18b20init() { dq=1; delay(1); dq=0; delay(80); dq=1; delay(5); dq=0; delay(20); dq=1; delay(35);

//18b20的初始化 6 0

}

void ds18b20wr(uint8 dat) //18b20写数据 {

uint8 i; for(i=0;i<8;i++) { dq=0; dq=dat&0x01; dat>>=1;

delay(8);//在时序上只有这一块对时序要求最准确,他的时间必须大于15us dq=1; delay(1); } }

uint8 ds18b20rd() //18b20读数据 {

uint8 value,i; for(i=0;i<8;i++) {

6 1

dq=0; value>>=1; dq=1;

if(dq==1)value|=0x80;

delay(8);//在这一块也对时间要求特别准确,整段程序必须大于60us }

return value; }

uint8 readtemp() //读取温度内需要复位的 {

uint8 b;

ds18b20init(); //初始化

ds18b20wr(0xcc); //发送忽略ROM指令 ds18b20wr(0x44); //发送温度转换指令 delay(100);

ds18b20init(); //初始化

ds18b20wr(0xcc); //发送忽略ROM指令 ds18b20wr(0xbe); //发读暂存器指令 a=ds18b20rd(); //温度的低八位

6 2

b=ds18b20rd(); //温度的高八位

b<<=4; //ssss s***;s为标志位s=0表示温度值为正数,s=1温度值为负数

c=b&0x80; //温度正负标志位确认 b+=(a&0xf0)>>4;

a=a&0x0f; //温度的小数部分 return b; }

void uartinit() {

TMOD=0x20; //选择方式2,自动装载模式 SCON=0x50;

TH1=0xF3; //波特率取的是4800;所以在串口调试助手上面波特率选择2400.如果选择4800的话,结果就是乱码。但可以在初始化的时候加一条倍频语句。PCON=0x80; TL1=0xF3;

TR1=1; //这个一定要打开 }

void temppros() {

6 3

// uint16 k; float dio; dio=a*0.0625;

k=dio*10000;//取小数点后两位有效数字

tempdata[0]=d[0]; tempdata[1]=d[1]; tempdata[2]=d[2]; tempdata[3]=d[3]; tempdata[4]=d[4]; tempdata[5]=d[5]; tempdata[6]=d[6]; tempdata[7]=d[7]; tempdata[8]=d[8]; tempdata[9]=d[9]; tempdata[10]=d[10]; tempdata[11]=d[11]; tempdata[12]=d[12]; tempdata[13]=d[13]; tempdata[14]=d[14]; tempdata[15]=d[15];

6 4

tempdata[16]=d[16];

if(c==0x80) //读取到负温度即为补码,要将其转换成源码 {

tempdata[17]=fuhao[0]; temp=temp-1;

temp=(~temp)|0x80;//负数的补码即为反码+1;而负数的反码为其源码取反,除了符号位;正数的补码等于正数的反码等于正数的源码 } else {

tempdata[17]=fuhao[1]; temp=(temp); }

tempdata[18]=num[temp/100]; tempdata[19]=num[temp%100/10]; tempdata[20]=num[temp%100%10]; tempdata[21]=fuhao[2]; tempdata[22]=num[k/1000]; tempdata[23]=num[k%1000/100];

6 5

tempdata[24]=fuhao[3]; //° tempdata[25]=fuhao[4]; tempdata[26]=fuhao[5]; tempdata[27]=fuhao[6]; }

void wrc(uint8 c) {

delay(1000); rs=0; rw=0; e=0; P0=c; e=1; delay(10); e=0; }

void wrd(uint8 dat) {

delay(1000);

6 6

rs=1; rw=0; e=0; P0=dat; e=1; delay(10); e=0; rs=0; }

void lcdinit() {

delay(1000); wrc(0x38); wrc(0x38); wrc(0x38); wrc(0x06); wrc(0x0c); wrc(0x01); }

void display()

6 7

{

uint8 i;

for(i=0;i<17;i++) {

wrd(d1[i]); }

wrc(0x80+0x43);

if(c==0x80) //读取到负温度即为补码,要将其转换成源码 {

wrd('-'); temp=temp-1;

temp=(~temp)|0x80;//负数的补码即为反码+1;而负数的反码为其源码取反,除了符号位;正数的补码等于正数的反码等于正数的源码 } else {

wrd('+'); temp=(temp); }

6 8

wrd(num[temp/100]); wrd(num[temp%100/10]); wrd(num[temp%100%10]); wrd('.'); wrd(num[k/1000]); wrd(num[k%1000/100]); wrd(0xdf); wrd('C'); }

void main() {

uint8 j; lcdinit(); uartinit(); while(1) {

temp=readtemp();display(); temppros(); for(j=17;j<28;j++) {

6 9

SBUF=tempdata[j];

while(!TI); //数据发送完成后硬件自动置一 TI=0; //需要软件清零 }

delay(50000);//延时一段时间作为传送间隔时间 } }

7 0

因篇幅问题不能全部显示,请点此查看更多更全内容