基于nRF24L01的多点温度采集系统设计_第1页
基于nRF24L01的多点温度采集系统设计_第2页
基于nRF24L01的多点温度采集系统设计_第3页
基于nRF24L01的多点温度采集系统设计_第4页
基于nRF24L01的多点温度采集系统设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

第3页 共 3页摘 要随着信息领域各种技术的发展,我们在数据采集方面的技术也取得了很大的进步,采集数据的信息化是目前社会的主要发展方向。各种领域都用到了数据采集,比如石油勘探、地震数据采集领域。随着工农业生产对温湿度的要求越来越高,准确测量温度变得非常重要。本课题提出一种基于单片机的无线多点温度采集电路设计,该方案是利用单片机控制DS18B20温度传感器采集温度,温度采集成功后由nRF24L01无线通信模块进行数据的无线传输,在接收板上也有一块无线通信模块与它配对。数据成功接收后由单片机去控制LCD1602液晶实时显示温度。本系统还设定了一个温度报警,当温度超过这个界限就由蜂鸣器发出警报,当温度下降至报警温度以下时,警报自动停止。本系统做的是多点温度采集,包括两块无线发送模块和一块无线接收模块,采集到的温度并排显示在同一个LCD1602上。用到的主要器件是AT89S52单片机、数字温度传感器DS18B20和无线芯片nRF24L01,测量结果用LCD1602液晶显示。关键词:单片机;多点温度采集;无线通信模块;温度报警。Abstract Along with the development of the technology of information field, we had also made a lot of progress in data collection technology, the data gathering information is the main development direction of the society. Various fields also use the data collection, such as petroleum exploration, seismic data acquisition field. Along with increasingly demanding of the industry and agriculture production to the temperature and humidity,more accurate measurement temperature becomes very important.This topic is wireless acquisition multipoint temperature acquisition and transmission circuit design base on SCM, the project is using SCM to control the temperature sensor DS18B20 to collection temperature, use nRF24L01wireless communication module to transmit if receive temperature successfully, there is a wireless communication module pairing with it in dashreceiver.Useing SCM to control LCD1602 liquid crystal to display temperatureafter receiving temperature successfully.The system also set a warning temperature, when the temperature over the line ,the buzzer will call, when the temperature belowthe alarm temperature below, alarm will stop. This system realizes multipoint temperature gathering,including twowireless transmission module and one wireless receiving module.The temperature will show on the same LCD1602.This systems main components is AT89S52 SCM and digital temperature sensor DS18B20 and wireless chip nRF24L01, the measured result is displaying by LCD1602.Key words:SCM; multipoint temperature gathering; wireless communication module;temperature warning.目 录引言 11 课题方案设计22 硬件设计32.1 电源电路 32.2 温度传感器电路32.3 无线传输电路42.3.1nRF24L01无线模块组成42.3.2nRF24L01无线模块应用62.4 显示电路 62.4.1字符型液晶显示模块简介72.4.2字符型液晶显示模块引脚和内部结构 72.5 单片机系统 82.5.1AT89S52简介 82.5.2AT89S52引脚说明 82.6 警报电路113 软件设计 123.1 系统概述123.2 程序设计流程图 123.3 DS18B20程序设计133.4 nRF24L01程序设计 163.5 字符型液晶显示模块程序设计 174 调试及结果 205 结论 22谢辞23参考文献24附录25 第40页 共 40页引言21世纪的今天,科学技术的发展日新月异,科学技术的进步同时也带动了测量技术的发展,现代控制设备不同于以前,它们在性能和结构发生了翻天覆地的变化。我们已经进入了高速发展的信息时代,测量技术是当今社会的主流,广泛地深入到应用工程的各个领域。温度是工业、农业生产中常见的和最基本的参数之一,在生产过程中常需对温度进行检测和监控,采用微型机进行温度检测、数字显示、信息存储及实时控制,对于提高生产效率和产品质量、节约能源等都有重要的作用。伴随工业科技、农业科技的发展,温度测量需求越来越多,也越来越重要。但是在一些特定环境温度监测环境范围大,测点距离远,布线很不方便。这时就要采用无线方式对温度数据进行采集。 多路无线温度采集系统可被广泛应用于温度测量或相应的可转换为温度量或供电故障监控的工业、农业、环保、服务业、安全监控等工程中,例如:城市路灯故障检测和供电线路防盗监视、城市居民小区供热检测、大型仓库温度检测、工业生产测控、农业生产温度测控、环保工程、故障监控工程等。考虑到许多工业环境中对多点温度进行监控,一般需要测量几十个点以上。本文设计多点无线温度监控系统。本设计是以Atmel公司的AT89S52单片机作为控制核心,提出基于DS18B20的温度采集与控制系统。控制器通过温度传感器实时检测各节点的温度变化,并在LCD1602上循环显示各节点温度的变化。因为采用微型机进行温度检测、数字显示、信息存储及实时控制,对于提高生产效率和产品质量、节约能源等都有重要的作用,并且温度参数对工业生产的重要性,所以温度测量系统的精确度和智能化一直受到企业的重视。所以学习并研究温度测量及相关知识可做为一个较为实用的课题的方向,能获得较实用的知识和方法。因此温度测控技术是一个很实用、也很重要的技术,值得去研究掌握。它应用的领域也相当广泛,可以应用到消防电气的非破坏性温度检测,电力、电讯设备的过热故障预知检测,空调系统的温度检测,各类运输工具之组件的过热检测,保全与监视系统之应用,医疗与健诊的温度测试,化工、机械等设备温度过热检测。因此前景是相当的可观。1 课题方案设计首先要对芯片作出选择。采用温度芯片DS18B20测量温度,可以体现系统芯片化这个趋势。部分功能电路的集成,使总体电路更简洁,搭建电路和焊接电路时更快。而且,集成块的使用,有效地避免外界的干扰,提高测量电路的精确度。所以集成芯片的使用将成为电路发展的一种趋势。本方案应用这一温度芯片,也是顺应这一趋势。主控部分采用AT89S52八位单片机实现。单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。而且体积小,硬件实现简单,安装方便。本系统以单片机为核心,构成一个包含温度采集、处理、无线传输、显示的无线温度采集系统,原理框图见图1.1。图1.1 系统设计框图2 硬件设计 本课题设计的电路包括:电源电路、晶振电路、复位电路、无线收发电路、报警电路及显示电路。2.1 电源电路(1)单片机供电本设计所用的是AT89S52单片机、LCD1602液晶及DS18B20芯片,直接由电池盒输入+5V的电压即可让它们正常工作。(2)nRF24l01无线模块nRF24l01芯片的供电电压为1.9V到3.6V之间,如果直接接+5V电压会让芯片烧毁,所以设计了一个3.3V输出的稳压电路。稳压电路的作用是当输入电压波动及其它外界因素变化时,还可以稳定输出直流电压。5V输入电压经过电解电容进行一级滤波,去除杂波干扰。再经过三端稳压管AMS1117-3.3输出稳定的3.3V电压。3.3V电压再经过电解电容进行二级滤波,让电压更稳定,保证nRF24l01芯片不被烧毁。稳压电源原理图见图2.1图2.1 稳压电源电路原理图2.2 温度传感器电路 本方案采用DS18B20芯片进行温度采集。温度芯片DS18B20是Dallas公司生产的一线式数字温度传感器,具有3引脚TO92小体积封装形式。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。内部结构见图2.2。图2.2 DS18B20内部结构DS18B20引脚定义: (1)DQ为数字信号输入/输出端; (2)GND为电源地; (3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。具体见图2.3。图2.3 DS18B20引脚图2.3 无线传输电路2.3.1nRF24l01无线模块组成 nRF24L01是NORDIC公司最近生产的一款无线通信芯片,采用FSK调制,内部集成NORDIC自己的Enhanced Short Burst协议。可以实现点对点或是1对6的无线通信。无线通信速度厅以达到2M(bps)。NORDIC公司提供通信模块的GERBER文件,可以直接加工生产。嵌入式工程师或是单片机爱好者只需要为单片机系统预留5个GPIO,1个中断输入引脚,就可以很容易实现无线通信的功能,非常适合用来为MCU系统构建无线通信功能。芯片管脚分布见图2.4图2.4 Nrf24l01芯片管脚分布芯片管脚分布已经在上图展示出来,我们只需要关注六个控制和数据信号即可,分别为CSN、SCK、MISO、MOSI、IRQ、CE。下面对这几个管脚进行简单的分析。CSN:芯片的片选线,CSN为低电平芯片工作。SCK:芯片控制的时钟线(SPI时钟)。MISO:芯片控制数据线。MOSI:芯片控制数据线。IRQ:中断信号。无线通信过程中MCU主要是通过IRQ与nRF24l01进行通信。CE:芯片的模式控制线。在CSN为低的情况下,CE协同nRF24l01的CONFIG寄存器共同决定nRF24l01的状态。整个无线模块的原理图如图2.5所示图2.5 基于nRF24l01的无线模块电路 本次设计所用的无线模块则直接套用上图所示的无线模块。2.3.2nRF24L01无线模块应用nRF24l01无线收发电路如图2.6所示。其中,发送和接收都用的是同一个无线模块。由稳压电源电路供电3.3V。图2.6 nRF24l01无线收发电路发射数据时,首先将nRF24L01配置为发射模式:接着把接收节点地址TX_ADDR和有效数据TX_PLD按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10s,延迟130s后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号(自动应答接收地址应该与接收节点地址TX_ADDR一致)。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从TX FIFO中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC)达到上限,MAX_RT置高,TX FIFO中数据保留以便再次重发;MAX_RT或TX_DS置高时,使IRQ变低,产生中断,通知MCU。最后发射成功时,若CE为低则nRF24L01进入空闲模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入空闲模式2。接收数据时,首先将nRF24L01配置为接收模式,接着延迟130s进入接收状态等待数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在RX FIFO中,同时中断标志位RX_DR置高,IRQ变低,产生中断,通知MCU去取数据。若此时自动应答开启,接收方则同时进入发射状态回传应答信号。最后接收成功时,若CE变低,则nRF24L01进入空闲模式1。2.4 显示电路本设计用的是字符型液晶LCD1602来显示采集的温度。2.4.1字符型液晶显示模块简介LCD1602液晶外形尺寸如图2.7所示。图2.7 LCD1602外形尺寸1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。2.4.2字符型液晶显示模块引脚和内部结构LCD1602液晶显示模块引脚如下表2.1所示。表2.1 LCD1602模块引脚本设计所使用的LCD1602原理图见图2.9。图2.9 LCD1602原理图2.5单片机系统本设计使用的是ATMEL公司的AT89S52单片机。2.5.1AT89S52简介AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。2.5.2 AT89S52引脚说明AT89S52单片机的引脚如图2.10所示。图2.10 AT89S52引脚下面将对单片机的引脚进行说明。VCC:电源电压输入端。 GND:电源地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口除了作为普通I/O口,还有第二功能: P3.0 RXD(串行输入口)。 P3.1 TXD(串行输出口)。 P3.2 /INT0(外部中断0)。 P3.3 /INT1(外部中断1)。P3.4 T0(T0定时器的外部计数输入)。 P3.5 T1(T1定时器的外部计数输入)。 P3.6 /WR(外部数据存储器的写选通)。 P3.7 /RD(外部数据存储器的读选通)。 P3口同时为闪烁编程和编程校验接收一些控制信号。 I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部总线。89C51的P0、P1、P2、P3口作为输入时都是准双向口。除了P1口外P0、P2、P3口都还有其他的功能。 RST:复位输入端,高电平有效。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:地址锁存允许/编程脉冲信号端。当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 PSEN:外部程序存储器的选通信号,低电平有效。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 EA/VPP:外部程序存储器访问允许。当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:片内振荡器反相放大器和时钟发生器的输入端。 XTAL2:片内振荡器反相放大器的输出端。2.6 警报电路本设计的警报电路比较简单,用了一个蜂鸣器。设定温度上限为32摄氏度,当采集到的温度超过上限温度的时候,蜂鸣器则会一直响;当温度降到上限温度以下时,蜂鸣器停止鸣叫。原理如图2.11所示。图2.11 警报电路原理图3 软件设计3.1 系统概述系统包括软件和硬件,硬件已经在以上的内容介绍完了,下面开始介绍软件。各个模块独立工作,但各个模块都互相影响。3.2程序设计流程图发射电路程序设计流程图如图3.1所示。下面简单解释一下本设计的发射电路工作流程。首先上电,其中无线通信模块用3.3V稳压电源,然后温度采集模块DS18B20初始化,进行温度检测以及数据存放。存放成功之后由单片机控制把数据以数组形式传输到nRF24L01无线通信模块进行数据发送。发送之后返回检测数据是否发射成功,如果发射成功则重新返回温度检测。图3.1 发射电路程序设计流程图接收电路程序设计流程图如图3.2所示。系统上电,nRF24L01无线模块采用的是3.3V稳压电源,其它芯片直接用5V。系统初始化,检测是否接收到发送模块发送过来的数据。接收成功后调用温度显示函数,把温度显示出来。其中第一块采集电路板的温度显示在LCD1602第一行,第二块采集电路板的温度显示在LCD1602第二行。在此同时,调用报警函数,一旦接收到的温度超过设定的上限温度之后蜂鸣器会一直鸣叫进行温度警报。当温度降到上限温度以下时,警报停止。图3.2 接收电路程序设计流程图3.3 DS18B20程序设计根据DS18B20的通信协议,主机控制DS18B20完成温度转化必须经过3个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。每一步骤都有严格的时序要求,所有的时序都是将主机作为主设备,单总线器件作为从设备。每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需要启动读指令完成数据接受。数据和命令的传输都是低位在前。时序可分为初始化时序、读时序和写时序。复位时要求CPU将数据线下拉500us,然后释放,DS18B20收到信号后等待1560us左右,后发出60240us的低脉冲。读时序分为读“0”时序和读“1”时序两个过程。DS18B20的读时序是从主机把单总线拉低之后在15us之内释放单总线,把数据传输到单总线上。DS18B20完成一个读时序过程至少需要60us。DS18B20的写时序仍然可分为写“0”时序和写“1”时序两个过程。DS18B20写“0”时序和写“1”时序的要求不同,当要写“0”时,单总线要被拉低至少60us,以保证DS18B20熊猫在1545us同正确采样I/O线上的“0”电平。当要写“1”时,单总线被拉低后,要在15us内释放单总线。下面介绍DS18B20编程实现的过程。(1)DS18B20初始化程序设计初始化复位时序图如图3.3所示。图3.3 DS18B20初始化复位时序主要程序如下: DQ=1;_nop_();_nop_(); /DQ复位,稍微延时DQ=0; /拉低总线delay1(80); /延时500us,时序图上有说明控制器复位脉冲范围DQ=1; /释放总线delay1(9); /延时60us,等待temp=DQ; /读DS18B20反馈信号(2)DS18B20写时序程序设计 写时序图如图3.4所示。图3.4 DS18B20的写时序主要程序如下:for(i=8;i0;i-) DQ=1;_nop_();_nop_(); DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_(); DQ=value&0x01; /从最低位开始写 delay1(9); value=1; 低位在前,右移 (3)DS18B20读时序程序设计 读时序图如图3.5所示。图3.5 DS18B20的读时序主要程序如下:for(i=8;i0;i-)DQ=1;_nop_();_nop_();value1=1;DQ=0;_nop_();_nop_();_nop_();_nop_();DQ=1; /释放总线之后 采样_nop_();_nop_();_nop_();_nop_();if(DQ) /是否1value1|=0x80; delay1(9);(4)DS18B20读取温度及温度处理在这一块程序中编写了void read_temp()(读取温度)和void work_temp()(温度处理)两个函数。DS18B20中的温度传感器可完成对温度的测量,当温度转换命令发布后,转换后的温度以补码形式存放在调整暂存存储器的第0和第1个字节中。DS18B20温度值格式表如表3.1所示。表3.1 DS18B20温度值格式表本设计显示的温度为正温度,两位整数和一位小数。分两部分进行操作:整数和小数。整数部分的“table6=(temp_data0&0xf0)4)|(temp_data1&0x0f)4)”语句把整数整合到一起,并且默认为正温度。小数部分是将测到的数值再乘以0.0625,取近似值作为第一小数位。比如测到的是0x02,通过2*0.0625=0.125,取近似值为1。3.4 nRF24L01程序设计(1)nRf24L01初始化程序设计 void init_NRF24L01()是最基本的函数,完成GPIO模拟SPI的功能。将输出字节(MOSI)从MSB 循环输出,同时将输入字节(MISO)从LSB循环移入。上升沿读入,下降沿输出。(从SCK被初始化为低电平可以判断出)。(3)nRF24L01读写寄存器函数uint SPI_RW_Reg(uchar reg, uchar value)寄存器访问函数:用来设置 24L01 的寄存器的值。基本思路就是通过WRITE_REG命令(也就是 0x20+寄存器地址)把要设定的值写到相应的寄存器地址里面去,并读取返回值。对于函数来说也就是把value值写到reg寄存器中。需要注意的是,访问 NRF24L01之前首先要enable芯片(CSN=0; ),访问完了以后再disable芯片(CSN=1;)。 (4)nRF24L01的SPI时序uchar SPI_Read(uchar reg)读取寄存器值的函数:基本思路就是通过READ_REG命令(也就是0x00+寄存器地址),把寄存器中的值读出来。对于函数来说也就是把reg寄存器的值读到reg_val中去。 (5)nRF24L01读数据uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)接收缓冲区访问函数:主要用来在接收时读取FIFO缓冲区中的值。基本思路就是通过READ_REG命令把数据从接收FIFO(RD_RX_PLOAD)中读出并存到数组里面去。 (6)nRF24L01写数据uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)发射缓冲区访问函数:主要用来把数组里的数放到发射FIFO缓冲区中。基本思路就是通过WRITE_REG命令把数据存到发射FIFO(WR_TX_PLOAD)中去。(7)nRF24L01数据接收发送配置void SetRX_Mode()函数是用于设置为本块无线通信模块为接收模块,里面包含了两块采集电路的地址,当地址配对成功之后方可接收数据。void SetRX_Mode()函数则是用来设置本块无线通信模块为发射模块,里面包含了自己的本地地址,这个地址是它与其它模块区分的标志。(8)nRF24L01接收缓冲区unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)函数的功能是数据读取后放如rx_buf接收缓冲区中。3.5 字符型液晶显示模块程序设计(1)LCD1602初始化程序设计LCD1602的初始化的过程如下: 延时15ms; 写指令38H(不检测忙信号); 延时5ms; 写指令38H(不检测忙信号); 延时5ms; 写指令38H(不检测忙信号); (以后每次写指令、读/写数据操作之前均需要检测忙信号) 写指令38H:显示模式设置; 写指令08H:显示关闭; 写指令01H:显示清屏; 写指令06H:显示光标移动位置; 写指令0CH:显示开及光标设置。主要程序如下: delay_50us(300); /延时15ms write_com(0x38); /写指令 0x38 delay_50us(100); /延时5ms write_com(0x38); /写指令 0x38 delay_50us(100); /延时5ms write_com(0x38); /写指令 0x38 write_com(0x38); /写指令 0x38 write_com(0x08); /写指令 0x08,显示关闭 write_com(0x01); /写指令 0x01,显示清屏 write_com(0x06); /写指令 0x06,显示光标移动设置 write_com(0x0c); /写指令 0x0c,显示开及光标设置(2)LCD1602写指令程序设计写操作时序图如图3.7所示。图3.7 LCD1602写操作时序图LCD1602的写指令基本操作时序为:RS=L,RW=L,D0D7=指令码,E=高脉冲。根据这个格式可以进行对LCD1602写指令进行编程。写void write_com(uchar com)写指令函数的时候要注意使能端拉高或拉低都要进行延时。(3)LCD1602写数据程序设计LCD1602的写数据基本操作时序为:RS=H,RW=L,D0D7=数据,E=高脉冲。根据这个格式可以进行对LCD1602写数据进行编程。(4)LCD1602显示函数程序设计程序如下:void disdignit(uchar *y) uchar i;write_com(y); /LCD1602显示行for(i=0;i6;i+) write_data(tab_tempi); write_data(0x30+RxBuf2); /0x30的10进制表示为48,即ASCII码字符0write_data(0x30+RxBuf1);write_data(.);write_data(0x30+RxBuf0);write_data(0xDF);write_data(C);在这里需要补充一点,在程序的开头已经定义了tab_temp6=”Temp: ”,在显示数字温度前注明一下看起来比较严谨。显示函数里的RxBuf2、RxBuf1、RxBuf0分别代表接收到的温度的十位、个位、小数位。加上0x30可以让它转换成ASCII码。函数还用了指针*y,是因为本设计为多点温度采集,为了方便温度显示,让第一个温度显示在液晶第一行,第二个温度显示在液晶第二行,因此加入个指针,在主函数里分别赋值0x80(LCD1602第一行第一个位置)和0x80+0x40(LCD1602第二行第一个位置)。4 调试及结果本系统实现的是无线多点温度采集,在两个地方检测温度,然后发射到接收端。经过实践得出本系统可以接收到100米之内的数据,并且可以正常显示和正常报警。温度采集板如图4.1所示。板上的发光二极管是电源指示灯,电源接通后即可正常工作。图4.1 温度采集板温度接收显示板如图4.2所示。1602液晶第一行和第二行分别显示的是第一块和第二块采集板发射过来的温度。从液晶显示来看,温度显示清晰并且稳定。本系统还设置了一个温度报警上限温度32摄氏度,当温度达到警报温度时,报警系统开始工作:蜂鸣器会一直叫,并且报警指示灯也跟着亮;当温度下降到警报温度时,报警系统停止工作。现象如图4.3所示,在1602液晶上方的LED即报警指示灯。由此可见,报警系统可以正常工作。图4.2 温度接收板图4.3 报警系统演示参考文献1 余永权:单片机原理及应用,电子工业出版社, 1998.122 诸邦田:电子电路实用抗干扰技术,人民邮电出版社,1994.5 3 曲喜新:电子元件材料手册.电子工业出版社,1989.44 黄贤武、郑筱霞、曲 波、刘文杰:传感器实际应用电路设计,电子科技大学出版社,1997.65 刘君华:智能传感器系统,西安电子科技大学出版社,1999.36 汪吉鹏、马云峰:微机原理与接口技术,高等教育出版社,2001.77 贾振国:DS1820 及高精度温度测量的实现,电子技术应用,2000.18 伟 正:单线数字温度传感器的原理与应用,电子技术应用,2000.69 周月霞、孙传友:DS18B20 硬件连接及软件编程,传感器世界,2001.810 单线数字温度传感器资料,武汉力源电子有限公司,1996.311 王琳,商周,王学伟.数据采集的发展及应用.电测与仪表,2004,No.46412 V. Schmidt, Control, data acquisition, and remote participation for fusion research, Fusion Eng. Des. 81 (2006) 17021712.13 A.Neto,H.Fernandes,A.Duarte, Firesignal-Data acquisition and control system software.FusionEngineering and Design 82(2007)1359-1364.附 录(1)接收部分程序如下:#include #include #define LCDIO P0 /液晶数据端口void disdignit1();void disdignit2();typedef unsigned char uchar;typedef unsigned char uint;uchar code tab_temp16=Temp1:;uchar code tab_temp26=Temp2:;/*端口定义sbit LCD1602_RS = P35; /控制写数据或命令sbit LCD1602_EN = P34; /液晶使能sbit BELL=P26;/*NRF24L01端口定义sbit MISO=P23;sbit MOSI=P21;sbitSCK =P24;sbitCE =P25;sbitCSN=P20;sbitIRQ=P22;#define TX_ADR_WIDTH 5 / 5 uints TX address width#define RX_ADR_WIDTH 5 / 5 uints RX address width#define TX_PLOAD_WIDTH 20 / 20 uints TX payload#define RX_PLOAD_WIDTH 20 / 20 uints TX payloaduchar idata RxBuf120=0;uchar idata aa20=0;uint const RX_ADDRESS0RX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01;/接收地址uint const RX_ADDRESS1RX_ADR_WIDTH= 0xc2,0xc2,0xc2,0xc2,0xc3;/接收地址void Delay(int s) /延时函数int i,j;for(i=0; i110; i+) for(j=0; j0;n-)_nop_();/*函数:uint SPI_RW(uint uchar)/*功能:NRF24L01的SPI写时序uint SPI_RW(uint uchar)uint bit_ctr; for(bit_ctr=0;bit_ctr8;bit_ctr+) / output 8-bit MOSI = (uchar & 0x80); / output uchar, MSB to MOSIuchar = (uchar 1); / shift next bit into MSB.SCK = 1; / Set SCK high.uchar |= MISO; / capture current MISO bitSCK = 0; / .then set SCK low again return(uchar); / return read uchar/*功能:NRF24L01读写寄存器函数uint SPI_RW_Reg(uchar reg, uchar value)uint status;CSN = 0; / CSN low, init SPI transactionstatus = SPI_RW(reg); / select registerSPI_RW(value); / .and write value to it.CSN = 1; / CSN high againreturn(status); / return nRF24L01 status uchar/*函数:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)/*功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars:写入数据的个数uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)uint status,uchar_ctr;CSN = 0; /SPI使能 status = SPI_RW(reg); for(uchar_ctr=0; ucha

温馨提示

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

评论

0/150

提交评论