基于nrf24l01的多点温度采集系统设计内容摘要:
//DQ 复位,稍微延时 DQ=0。 //拉低总线 delay1(80)。 //延时 500us,时序图上有说明控制器复位脉冲范围 DQ=1。 //释放总线 delay1(9)。 //延时 60us,等待 temp=DQ。 //读 DS18B20 反馈信号 ( 2) DS18B20 写时序程序设计 写时序图如图 所示。 图 DS18B20 的写时序 主要 程序如下: for(i=8。 i0。 i) { DQ=1。 _nop_()。 _nop_()。 DQ=0。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 DQ=valueamp。 0x01。 //从最低位开始写 delay1(9)。 value=1。 低位在前,右移 第 15 页 共 40 页 } ( 3) DS18B20 读时序程序设计 读时序图如图 示。 图 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) //是否 1 value1|=0x80。 delay1(9)。 } ( 4) DS18B20 读取温度及温度处理 在这一块程序中编写了 void read_temp()( 读取温度 )和 void work_temp()( 温度处理 )两个函数。 DS18B20 中的温度传感器可完成对温度的测量,当温度转换命令发布后,转换后的温度以补码形式存放在调整暂存存储器的第 0 和第 1个字节中。 DS18B20 温度值格式表如表。 第 16 页 共 40 页 表 DS18B20 温度值格式表 本设计显示的温度为正温度,两位整数和一位小数。 分两部分进行操作:整数和小数。 整 数部分的“ table[6]=((temp_data[0]amp。 0xf0)4)|((temp_data[1]amp。 0x0f)4)”语句把整数整合到一起,并且默认为正温度。 小数部分是将测到的数值再乘以 ,取近似值作为第一小数位。 比如测到的是 0x02,通过 2*=,取近似值为 1。 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 数据接收 发送 配置 第 17 页 共 40 页 void SetRX_Mode()函数是用于设置为本块无线通信模块为接收模块,里面包含了两块采集电路的地址,当地址配对成功之后方可接收数据。 void SetRX_Mode()函数则是用来设置本块无线通信模块为发射模块,里面包含了自己的本地地址,这个地址是它与其它模块区分的标志。 ( 8) nRF24L01 接收缓冲区 unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)函数的功能是数据读取后放如 rx_buf 接收缓冲区中。 字符型液晶显示模块程序设计 ( 1) LCD1602 初始化程序设 计 LCD1602 的初始化的过程如下: ① 延时 15ms; ② 写指令 38H(不检测忙信号); ③ 延时 5ms; ④ 写指令 38H(不检测忙信号); ⑤ 延时 5ms; ⑥ 写指令 38H(不检测忙信号); ⑦ (以后每次写指令、读 /写数据操作之前均需要检测忙信号) ⑧ 写指令 38H:显示模式设置; ⑨ 写指令 08H:显示关闭; ⑩ 写指令 01H:显示清屏; ⑪ 写指令 06H:显示光标移动位置; ⑫ 写指令 0CH:显示开及光标设置。 主要 程序如下: delay_50us(300)。 //延时 15ms write_(0x38)。 //写指令 0x38 delay_50us(100)。 //延时 5ms write_(0x38)。 //写指令 0x38 delay_50us(100)。 //延时 5ms write_(0x38)。 //写指令 0x38 write_(0x38)。 //写指令 0x38 write_(0x08)。 //写指令 0x08,显示关闭 write_(0x01)。 //写指令 0x01,显示清屏 write_(0x06)。 //写指令 0x06,显示光标移动设置 write_(0x0c)。 //写指令 0x0c,显示开及光标设置 ( 2) LCD1602 写指令程序设计 第 18 页 共 40 页 写操作时序图如图 所示。 图 LCD1602 写操作时序图 LCD1602 的写指令基本操作时序为: RS=L,RW=L,D0~D7=指令码, E=高脉冲。 根据这个格式可以进行对 LCD1602 写指令 进行编程。 写 void write_(uchar )写指令函数的时候要注意使能端拉高或拉低都要进行延时。 ( 3) LCD1602 写数据程序设计 LCD1602 的写数据基本操作时序为: RS=H,RW=L,D0~D7=数据, E=高脉冲。 根据这个格式可以进行对 LCD1602 写 数据 进行编程。 ( 4) LCD1602 显示函数程序设计 程序如下: void disdignit(uchar *y) { uchar i。 write_(y)。 //LCD1602 显示行 for(i=0。 i6。 i++) { write_data(tab_temp[i])。 } write_data(0x30+RxBuf[2])。 //0x30 的 10进制表示为 48,即 ASCII 码字符 0 write_data(0x30+RxBuf[1])。 write_data(39。 .39。 )。 write_data(0x30+RxBuf[0])。 write_data(0xDF)。 第 19 页 共 40 页 write_data(39。 C39。 )。 } 在这里需要补充一点,在程序的开头已经定义了 tab_temp[6]=” Temp: ” ,在显示数字 温度前注明一下看起来比较严谨。 显示函数里的 RxBuf[2]、 RxBuf[1]、 RxBuf[0]分别代表接收到的温度的十位、个位、小数位。 加上 0x30 可以让它转换成 ASCII 码。 函数还用了指针 *y,是因为本设计为多点温度采集,为了方便温度显示,让第一个温度显示在液晶第一行,第二个温度显示在液晶第二行,因此加入个指针,在主函数里分别赋值 0x80( LCD1602 第一行第一个位置)和 0x80+0x40( LCD1602 第二行第一个位置)。 第 20 页 共 40 页 4 调试及结果 本系统实现的是无线多点温度采集 ,在两个地方检测温度,然后 发射到接收端。 经过实践得出本系统可以接收到 100 米之内的数据,并且可以正常显示和正常报警。 温度采集板如图。 板上的发光二极管是电源指示灯,电源接通后即可正常工作。 图 温度采集板 温度接收显示板如图 所示。 1602 液晶第一行 和第二行 分别 显示的 是第二块和第二块采集板发射过来的温度。 从液晶显示来看, 温度显示清晰并且稳定。 本系统还设置了一个温度报警上限温度 32 摄氏度,当温度达到警报温度时,报警系统开始工作:蜂鸣器会一直叫,并且报警指示灯也跟着亮;当温度下降到警报温度时,报警系统停止工作。 现 象如图 所示 ,在 1602 液晶上方的 LED 即报警指示灯。 由此可见,报警系统可以正常工作。 图 温度接收板 第 21 页 共 40 页 图 报警系统演示 第 22 页 共 40 页 参考文献 [1] 余永权 : 单片机原理及应用 , 电子工业出版社 , [2] 诸 邦田 : 电子电路实用抗干扰技术 , 人民邮电出版社, [3] 曲喜 新: 电子元件材料手册 .电子工业出版社 , [4] 黄贤武 、郑筱霞、曲 波、刘文杰: 传感器实际应用电路设计 , 电子科技大学出版社, [5] 刘君华 : 智能传感 器系统 , 西安电子科技大学出版社, [6] 汪 吉鹏 、 马云峰 : 微机原理与接口技术 , 高等教育出版社 , [7] 贾 振国 : DS1820 及高精度温度测量的实现 , 电子技术应用, [8] 伟 正 : 单线数字温度传感器的原理与应用 , 电子技术应用, [9] 周月霞 、 孙传友 : DS18B20 硬件连接及软件编程 , 传感器世界, [10] 单线数字温度传感器资料 , 武汉力源电子有限公司, [11] 王琳,商周,王学伟 .数据采集的发展及应用 .电测与仪表, 2020, [12] V. Schmidt, Control, data acquisition, and remote participation for fusion research, Fusion Eng. Des. 81 (2020) 1702– 1712. [13] , FiresignalData acquisition and control system and Design 82(2020)13591364. 第 23 页 共 40 页 附 录 第 24 页 共 40 页 ( 1) 接收 部分程序如下: include include define LCDIO P0 //液晶数据端口 void disdignit1()。 void disdignit2()。 typedef unsigned char uchar。 typedef unsigned char uint。 uchar code tab_temp1[6]=Temp1:。 uchar code tab_temp2[6]=Temp2:。 //****************************************端口定义 sbit LCD1602_RS = P3^5。基于nrf24l01的多点温度采集系统设计
相关推荐
为了了解电梯的运行原理和控制方式设计了基于 Labview 的电梯控制仿真系统。 本课题要求利用 LabView 设计完成电梯的仿真控制,通过了解电梯的运行方式及控制原理进行 LabVIEW 程序设计,主要设计了程 序界面及程序运行所需的程序框图,模拟实现电梯在实际运用过程的控制。 技术概况及发展趋势 电梯控制技术由简易自动控制、集选控制到并联控制,一直满足不了人们对电梯垂直交通的需要
统计参数,能够方便地编制和输出仿真报告。 6. 提供了和网管系统、流量监测系统的接口,能够方便的利用现有的拓扑和流量数据建立仿真模型,同时还可对仿真结果进行验证。 仿真流程 利 用 OPNET 仿真,一般遵循以下工作流程: ( 1) 定义目标问题:明确和规范化网络仿真所要研究的问题和目标,提出明确的网络仿真描述性能参数。 如网络通信吞吐量、链路利用率、设备利用率、端到端延迟、丢包率、队列长度等。
,39。 ,array_keys($data))。 //定义 SQL 语句的字段部分 foreach($data as $key = $val) //组合 SQL 语句的值部分 { $value .= 39。 . $val . 39。 if($key count($data) 1) //判断是否到数组的最后一个值 $value .= ,。 } $sql = INSERT INTO . $name
1、烛菇”,穴有柄无盖,雪、“松果菇”、“荔枝菇”,这些都是香菇的畸形变异菇,大多属于生理性病害。 畸形菇发生的原因除了菌种低劣或被病毒感染之外,人为方面的原因主要有:品种选择不当。 如海拔高的山区应该选择中、低温型菌种,如果误用高温型菌种,菇蕾在冬季遇低温便萎缩不长形成“松果菇”。 发育管理不当。 如袋内菇蕾早现,受袋壁挤压无法正常伸展,第一代菇容易出现畸形。 脱袋转色不合标准。
采集与数据处理相互结合的日益紧密,形成数据采集与处理系统,可实现从数据采集、处理到控制的全部工作。 ( 4)数据采集过程一般都具有 “ 实时 ” 特性,实时 的标准是能满足实际需要;对于通用采集系统一般希望有尽可能高的速度,以满足更多的应用 环境。 ( 5)随着 电子 技术的发展,电路集成度的提高,数据采集系统的体积越来越小,可靠性越来越高,甚至出现了单片数据采集系统。 (
JDBC JDBC是 Java的开发者 —— Sun公司制定的 Java数据库连接( JavaDataBase Connectivity)技术的简称。 它是 Sun公司联合数据库开发商开发出来的独立于 DBMS的 API( Application Programming Interface,应用程序接口),它为 Java开发者使用各种数据库提供了统一的 API。 JDBC的功能和