




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
四川工程职业技术学院 电气系2012级电子信息一班 张登翔 201212020216单片机C语言课题设计报告设计题目:远程无线温度监测指导老师:施 芸老师设 计 人:张登翔学 号:201212020216班 级:2012级电子信息1班设计时间:2014.5.172014.6.19摘要本课题以51单片机为核心实现智能化远程无线温度监控。利用18B20温度传感器获取温度信号,将需要测量的温度信号自动转化为数字信号,通过无线模块NRF24L01一对一传送将数据传送到接收机,最终单片机将信号转换成LCD可以识别的信息显示输出。基于STC89C52RC+NRF24L01+LCD1602的单片机的智能远程无线温度监控系统,设计采用18B20温度传感器,其分辨率可编程设计。本课题设计应用于温度变化缓慢的空间,综合考虑,以降低灵敏度来提高显示精度。设计使用12位分辨率,因其最高4位代表温度极性,故实际使用为11位半,而温度测量范围为-55+125,则其分辨力为0.0625。设计使用LCD1602显示器,可显示16*2个英文字符,显示器显示实时温度和过温警告信息。报警采用蜂鸣器加LED组成的声光电报警。目录一、设计功能3二、系统设计3三、器件选择43.1温度信号采集模块43.2 液晶显示器1602LCD9 3.3 无线NRF24L0111四、软件设计164.1 程序设计流程图16五、设计总结21六、参考文献22七、硬件原理图22八、程序清单23一、设计功能由单片机、温度传感器、无线模块NRF24L01以及液晶显示器等构成高精度远 程无线温度监测系统。温度显示精确到小数点后一位。按键设定过温值,过温在液晶屏提示。2、 系统设计 发送机STC89C52RC进行温度处理18B20采集温度采集 NRF24L01发送温度值NRF24L01接收温度值接收机STC89C52RC进行温度值处理LCD1602进行温度显示 光电报警三、器件选择3.1温度信号采集模块传统的温度检测大多以热敏电阻为传感器,采用热敏电阻,可满足 40度 至 90测量范围,但热敏电阻可靠性差,测量温度准确率低,对于1的信号是不适用的,还得经过专门的接口电路转换成数字信号才能由微处理器进行处理。目前常用的微机与外设之间进行的数据通信的串行总线主要有总线, SPI 总线等。其中总线以同步串行 2 线方式进行通信(一条时钟线,一条数据线)。SPI 总线则以同步串行 3 线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线)。这些总线至少需要两条或两条以上的信号线。而单总线( 1-wire bus ),采用单根信号线,既可传输数据,而且数据传输是双向的, CPU 只需一根端口线就能与诸多单总线器件通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。单总线具有广阔的应用前景,是值得关注的一个发展领域。单总线即只有一根数据线,系统中的数据交换,控制都由这根线完成。主机或从机通过一个漏极开路或三态端口连接到数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线。单总线通常要求外接一个约为 4.7K 的上拉电阻,这样,当总线闲置时其状态为高电平。3.1.1 DS18B20 数字式温度传感器DS18B20 数字式温度传感器使用集成芯片,采用单总线技术,其能够有效的减小外界的干扰,提高测量的精度,同时,它可以直接将被测温度转化成串行数字信号供微机处理,接口简单,使数据传输和处理简单化。部分功能电路的集成,使总体硬件设计更简洁,能有效地降低成本,搭建电路和焊接电路时更快,调试也更方便简单化,大大缩短了开发的周期 。3.1.2 DS18B20特性采用单总线的接口方式,与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。 单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。(1) 适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电。(2) 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。(3) DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。(4) DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内。(5) 温范围55+125。(6) 可编程 的分辨率为912位,对应的分辨力分别为0.5、0.25、0.125和0.0625,可实现高精度测温。(7) 在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。(8) 测量结果直接输出数字温度信号,以 1-wire bus 串行传送给CPU,可选择同时传送CRC校验码,具有极强的抗干扰纠错能力。(9) 负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。3.1.3 DS18B20结构DS18B20的内部结构3.1.4 DS18B20测温原理DS18B20测温原理框图图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入.计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。3.1.5 DS18B20的读写功能 DS18B20温度值格式表这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。 例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FE6FH,-55的数字输出为FC90H 。DS18B20温度数据表DS18B20温度传感器的存储器 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器 TH、TL和结构寄存器。TMR1R011111配置寄存器结构低五位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用 户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)R1R0分辨率温度最大转换时间009位93.75ms0110位187.5ms1011位375ms1112位750ms温度分辨率设置表寄存器内容字节地址温度值低位 (LS Byte)0温度值高位 (MS Byte)1高温限值(TH)2低温限值(TL)3配置寄存器4保留5保留6保留7CRC校验值8DS18B20暂存寄存器分布根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行 复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后 释放,当DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。指 令约定代码功 能读ROM33H读DS1820温度传感器ROM中的编码(即64位地址)符合 ROM55H发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。搜索 ROM0FOH用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。跳过 ROM0CCH忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。告警搜索命令0ECH执行后只有温度超过设定值上限或下限的片子才做出响应。温度变换44H启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。读暂存器0BEH读内部RAM中9字节的内容写暂存器4EH发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。复制暂存器48H将RAM中第3 、4字节的内容复制到EEPROM中。重调 EEPROM0B8H将EEPROM中内容恢复到RAM中的第3 、4字节。读供电方式0B4H读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 DS1820发送“ 1 ”。ROM指令表3.2 液晶显示器1602LCD 显示容量:162个字符,芯片工作电压:4.55.5V,工作电流:2.0mA(5.0V),模块最佳工作电压:5.0V,字符尺寸:2.954.35(WH)mm。3.2.1引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如图编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极3.2.2 1602LCD的指令说明及时序序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容1602液晶模块内部的控制器共有11条控制指令,如图3.2.3 1602LCD的一般初始化过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置NRF24L01无线模块nRF24L01是一款新型单片射频收发器件,工作于2.4 GHz2.5 GHz ISM频段。内置频率合成器、功率放大器、晶体振荡器、调制器等功能模块,并融合了增强型ShockBurst技术,其中输出功率和通信频道可通过程序进行配置。nRF24L01功耗低,在以-6dBm的功率发射时,工作电流也只有9mA;接收时,工作电流只有12.3mA,多种低功率工作模式(掉电模式和空闲模式)使节能设计更方便10。nRF24L01主要特性如下: 1、GFSK调制,硬件集成OSI链路层; 2、具有自动应答和自动再发射功能; 3、片内自动生成报头和CRC校验码; 4、数据传输率为l Mb/s或2Mb/s;5、SPI速率为0 Mb/s10 Mb/s;6、125个频道与其他nRF24系列射频器件相兼容; 7、QFN20引脚4 mm4 mm封装;8、供电电压为1.9 V3.6 V;3.2.2 引脚功能及描述 nRF24L01的封装及引脚排列如图所示11。各引脚功能如图3.5所示。 图3.5 nRF24L01封装图CE:使能发射或接收; CSN,SCK,MOSI,MISO:SPI引脚端,微处理器可通过此引脚配置nRF24L01: IRQ:中断标志位;VDD:电源输入端; VSS:电源地;XC2,XC1:晶体振荡器引脚; VDD_PA:为功率放大器供电,输出为1.8 V; ANT1,ANT2:天线接口;IREF:参考电流输入;3.2.3 工作模式 通过配置寄存器可将nRF24L01配置为发射、接收、空闲及掉电四种工作模式,如表3.1所示。 表3.1 nRF24L01工作模式模式PWR_UPPRIM_RXCEFIFO寄存器状态接收模式111-发射模式101数据在TXFIFO寄存器中发射模式1010停留在发送模式,直至数据发送完待机模式2101TX_FIFO为空待机模式11-0无数据传输掉电0- 待机模式1主要用于降低电流损耗,在该模式下晶体振荡器仍然是工作的;待机模式2则是在当FIFO寄存器为空且CE=1时进入此模式;待机模式下,所有配置字仍然保留。在掉电模式下电流损耗最小,同时nRF24L01也不工作,但其所有配置寄存器的值仍然保留。3.2.4工作原理 发射数据时,首先将nRF24L01配置为发射模式:接着把接收节点地址TX_ADDR和有效数据TX_PLD按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10s,延迟130s后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号(自动应答接收地址应该与接收节点地址TX_ADDR一致)。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从TXFIFO中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC)达到上限,MAX_RT置高,TXFIFO中数据保留以便在次重发;MAX_RT或TX_DS置高时,使IRQ变低,产生中断,通知MCU。最后发射成功时,若CE为低则nRF24L01进入空闲模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入空闲模式2。 接收数据时,首先将nRF24L01配置为接收模式,接着延迟130s进入接收状态等待数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在RXFIFO中,同时中断标志位RX_DR置高,IRQ变低,产生中断,通知MCU去取数据。若此时自动应答开启,接收方则同时进入发射状态回传应答信号。最后接收成功时,若CE变低,则nRF24L01进入空闲模式1。在写寄存器之前一定要进入待机模式或掉电模式。表3.2 常用配置寄存器地址(H)寄存器名称功能00CONFIG设置24L01工作模式01EN_AA设置接收通道及自动应答02EN_RXADDR使能接收通道地址03SETUP_AW设置地址宽度04SETUP_RETR设置自动重发数据时间和次数07STATUS状态寄存器,用来判定工作状态0A0FRX_ADDR_P0P5设置接收通道地址10TX_ADDR设置接收接点地址1116RX_PW_P0P5设置接收通道的有效数据宽度3.2.5 配置字 SPI口为同步串行通信接口,最大传输速率为10 Mb/s,传输时先传送低位字节,再传送高位字节。但针对单个字节而言,要先送高位再送低位。与SPI相关的指令共有8个,使用时这些控制指令由nRF24L01的MOSI输入。相应的状态和数据信息是从MISO输出给MCU。 nRF24L0l所有的配置字都由配置寄存器定义,这些配置寄存器可通过SPI口访问。nRF24L01 的配置寄存器共有25个,常用的配置寄存器如表3.2所示。经过综合考虑,如果采用单芯片自己焊接无线模块可能会产生以下问题:电路板电磁影响较大,天线不好弄,在焊接过程中易损坏芯片。所以最终决定采用已集成了的模块进行课题的制作。模块PCB版图提供于下:4、 软件设计4.1.1 温度检测 温度检测模块软件设计DS18B20的测温原理遵循严格的单总线协议,以确保通信数据的准确性,单片机通过时序来写入和读出DS18B20中的数据,包括初始化、读l、读0,写1、写0等操作。传感器复位后,接收应答信号,跳过读ROM中序列号后,启动温度转换,等待温度转换完毕后,保存数据。如此反复,完成所有操作,其流程图如图所示。4.1.2无线发射模块软件设计首先进行初始化操作,初始化包括设置单片机IO和SPI相关寄存器两部分其可以和nRF24L01通信。通过SPI总线配置射频芯片使其进入正确的工作模式。发射数据时,首先将nRF24L01配置为发射模式。接着把发送端待发射数据的目标地址TXADDR和数据TXPLD写入nRF24L01缓冲区,延时后发射数据,其流程图如图4.2所示14。图4.2 无线发射软件流程图4.1.3无线接收模块软件设计接收数据时,首先将nRF24L01配置为接收模式。接着延迟进入接收状态等待数据的到来。当接收方检测到有效地址和CRC时,就将数据包储存在接收堆栈中,同时状态寄存器中的中断标志位RXDR置高,产生中断使IRQ引脚变为低电平,以便通知MCU去取数据,其流程图如图4.3所示。图4.3 无线接收软件流程图 4.2软件的总体设计4.2.1 发送部分发送部分的一个循环的总体思路是这样的先初始化DS18B20,从DS18B20读出温度(DS18B20采用默认的12位精度),将得到的温度值的反码转化成十进制,取温度数组的高两位(即整数部分)写入发送数据数组,然后初始化nRF24L01,将温度发送,其流程图如图4.5所示15。图4.5 发射部分总体流程图4.2.2接收部分接收部分的总体思路是这样的,首先还是初始化nRF24L01,然后进入大循环判断状态寄存器是否有接收中断。如果有就从FIFO_buffer读入二进制数据,然后将数据转换成十进制在数码管上显示出来,其流程图如图4.6所示。 图4.6 接收部分总体流程图39 登临对晚晴 翔云列晓阵 五、设计总结在这课题设计中我学到了很多东西,获益匪浅。本次课题以51单片机为核心实现了远程无线智能化温度监控,过温警告。利用温度传感器获取被控对象指标,通过温度传感器将需要测量的温度信号转化为数字电信号,通过单总线与MCU进行传输,再经单片机转换成温度值经过NRF24L01无线模块进行传输,再由接收机通过NRF24L01进行接收,最终由接收机进行处理,并将当前所监控的温度值,通过LCD1602进行显示。并且可以由按键进行温度的最大最小值得设定,最终将监控温度设定在一个范围内。若温度过高或过低都可由报警模块进行报警。在设计此次课题的初期,考虑到手中有两块闲置的单片机,并且有一块1602显示模块及两块无线模块。所以快速的决定做一个无线的课题,可是无线控制什么呢?于是上网百度了一下,发现在现代的工业控制中,温度是一个非常重要的因数。并且在电子行业中,温度也是非常重要的,而且温度过高对电子产品的损害非常厉害。于是决定做一个关于温度监控的课题。这是设计之初的目的。但是在设计的过程中,暴露的问题非常之多。而且反了一个致命的错误。由于本人在焊接NRF24L01模块时,没有查阅相关的模块供电电压,直接用了单片机的VCC对其进行供电。导致模块被烧坏,本人深深的心痛啊。悔不当初,不看说明书,自己想怎么干就怎么干。在模块被烧坏后,一直处于后悔中,但是想想,就当花钱买个教训吧,于是重新振作起来,上网淘宝淘宝,当新的模块到手后,这下,我并不急于对无线模块进行焊接,反而是将重点转向了模块供电电压部分的设计,由于模块是3.3V供电的(这是后来查阅说明书了解到的),可是自己手中只有7805和7809这两种稳压芯片。并无3.3v的稳压管及稳压模块。于是向盛老师求助。最终盛老师给了我两块AZ1117T,电源问题才得以解决。在此感谢盛老师。还有就是单片机对于RF24L01高频模块的读写、操作等比较复杂,查找的资料也很难理解。还有就是DS18B20的时序也有一定难度。不过,通过这次的学习和实践,我学会了如何看待问题,解决问题。例如,调试无线收发时,1602老显示乱码,而且一直跳跃不定,又例如后来整合程序时,温度不正确,老是成不断上升趋势,后来检查程序后才发现是没有将温度的全局变量清零,导致每次循环累加。 姓名:张登翔 学号:201212020216 班级:2012级电子信息1班六、参考文献【1】 谭浩强.C程序设计北京M.北京:清华大学出版社,1999 .【2】 朱玉颖,蔡占辉.基于nRF24L01的远程温度检测系统设计J .通信与信息处理,2010,29(5):56-58.【3】郭天祥,新概念51单片机C语言教程.哈尔滨:电子工业出版社。2008七、硬件原理图及调试7.1系统硬件原理图发射机接收机八、程序清单发射端程序:#include #include#define uchar unsigned char#define uint unsigned int/ Define interface to nRF24L01 / SPI(nRF24L01) commands#define READ_REG 0x00 / Define read command to register#define WRITE_REG 0x20 / Define write command to register#define RD_RX_PLOAD 0x61 / Define RX payload register address#define WR_TX_PLOAD 0xA0 / Define TX payload register address#define FLUSH_TX 0xE1 / Define flush TX register command#define FLUSH_RX 0xE2 / Define flush RX register command#define REUSE_TX_PL 0xE3 / Define reuse TX payload register command#define NOP 0xFF / Define No Operation, might be used to read status register / SPI(nRF24L01) registers(addresses)#define CONFIG 0x00 / Config register address#define EN_AA 0x01 / Enable Auto Acknowledgment register address#define EN_RXADDR 0x02 / Enabled RX addresses register address#define SETUP_AW 0x03 / Setup address width register address#define SETUP_RETR 0x04 / Setup Auto. Retrans register address#define RF_CH 0x05 / RF channel register address#define RF_SETUP 0x06 / RF setup register address#define STATUS 0x07 / Status register address#define OBSERVE_TX 0x08 / Observe TX register address#define CD 0x09 / Carrier Detect register address#define RX_ADDR_P0 0x0A / RX address pipe0 register address#define RX_ADDR_P1 0x0B / RX address pipe1 register address#define RX_ADDR_P2 0x0C / RX address pipe2 register address#define RX_ADDR_P3 0x0D / RX address pipe3 register address#define RX_ADDR_P4 0x0E / RX address pipe4 register address#define RX_ADDR_P5 0x0F / RX address pipe5 register address#define TX_ADDR 0x10 / TX address register address#define RX_PW_P0 0x11 / RX payload width, pipe0 register address#define RX_PW_P1 0x12 / RX payload width, pipe1 register address#define RX_PW_P2 0x13 / RX payload width, pipe2 register address#define RX_PW_P3 0x14 / RX payload width, pipe3 register address#define RX_PW_P4 0x15 / RX payload width, pipe4 register address#define RX_PW_P5 0x16 / RX payload width, pipe5 register address#define FIFO_STATUS 0x17 / FIFO Status Register register address#define TX_ADR_WIDTH 5#define RX_ADR_WIDTH 5#define TX_PLOAD_WIDTH 4#define TX_PLOAD_WIDTH 4float f_temp;uint temp;uchar TX_ADDRESS5=0x34,0x43,0x19,0x91,0x09;sbit CE=P27;sbit CSN=P22;sbit MOSI=P23;sbit MISO=P25;sbit SCK=P26;sbit IRQ=P24;sbit ds=P37;sbit led0=P10;uchar bdata sta;sbit RX_DR= sta6;sbit TX_DS= sta5;sbit MAX_RT= sta4;void init_io(void)CE = 0; / 待机CSN = 1; / SPI禁止SCK = 0; / SPI时钟置低IRQ = 1; / 中断复位uchar SPI_RW(uchar byte)uchar i;for(i=0;i8;i+)MOSI=(byte&0x80);byte=(byte1);SCK=1;byte|=MISO;SCK=0;return(byte);uchar SPI_RW_reg(uchar reg,uchar value)uchar status;CSN=0;status=SPI_RW(reg);SPI_RW(value);CSN=1;return(status);uchar SPI_read(uchar reg)uchar reg_val;CSN=0;SPI_RW(reg);reg_val=SPI_RW(0);CSN=1;return(reg_val);uchar SPI_read_pload(uchar reg,uchar *pBuf,uchar bytes)uchar status,i;CSN=0;status=SPI_RW(reg);for(i=0;ibytes;i+)pBufi=SPI_RW(0);CSN=1;return(status);uchar SPI_write_pload(uchar reg,uchar *pBuf,uchar bytes)uchar status,i;CSN=0;status=SPI_RW(reg);for(i=0;i0;i-)for(j=x;j0;j-);void dreset(void) /初始化uint i;/ds=1;/_nop_();ds=0;delayus(7,15);ds=1;i=4;while(i0)i-;delayus(1,100);bit tempreadbit(void) /读一位数据uint i;bit dat;/ds=1;i+;ds=0;_nop_();ds=1;i+;i+;dat=ds;i=8;while(i0)i-;return(dat);uchar tempread(void) /读一个字节函数uchar i,j,dat;dat=0;for(i=0;i8;i+)j=tempreadbit();dat=(j1);return(dat);void tempwritebyte(uchar dat)uint i;uchar j;bit testb;for(j=0;j1;if(testb)ds=0;i+;i+; /延时确定时间15USds=1;i=8;while(i0)i-;elseds=0;/i=8;/while(i0)i-;delayus(1,5);ds=1;i+;i+;void tempchange(void) /DS18B20温度转换dreset();delayus(1,113);tempwritebyte(0xcc); /跳过度ROM指令tempwritebyte(0x44);/温度转换指令uint get_temp()/读取寄存器中存储的温度数据uchar a,b;dreset();delayus(1,113);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread();b=tempread();temp=b;temp=8;temp=temp|a;f_temp=temp*0.0625;temp=f_temp*10+0.5;/f_temp=f_temp+0.05;return temp;void main()uchar tx_buf4=0;init_io();while(1)tempchange();delayus(1,113);get_temp();tx_buf0=(uchar)(temp/100);tx_buf1=(uchar)(temp%100)/10);tx_buf2=.;tx_buf3=(uchar)(temp%100)%10);TX_mode(tx_buf);接收程序#include/#include#define uchar unsigned char#define uint unsigned int#define READ_REG 0x00 / Define read command to register#define WRITE_REG 0x20 / Define write command to register#define RD_RX_PLOAD 0x61 / Define RX payload register address#define WR_TX_PLOAD 0xA0 / Define TX payload register address#define FLUSH_TX 0xE1 / Define flush TX register command#define FLUSH_RX 0xE2 / Define flush RX register command#define REUSE_TX_PL 0xE3 / Define reuse TX payload register command#define NOP 0xFF / Define No Operation, might be used to read status register/ SPI(nRF24L01) registers(addresses)#define CONFIG 0x00 / Config register address#define EN_AA 0x01 / Enable Auto Acknowledgment register address#define EN_RXADDR 0x02 / Enabled RX addresses register address#define SETUP_AW 0x03 / Setup address width register address#define SETUP_RETR 0x04 / Setup Auto. Retrans register address#define RF_CH 0x05 / RF channel register address#define RF_SETUP 0x06 / RF setup register address#define STATUS 0x07 / Status register address#define OBSER
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高炮除锈喷漆施工合同(3篇)
- 高新技术企业担保协议
- 高校学生实习安全责任书及安全教育培训协议
- 服务业员工工伤赔偿及应急预案合作协议
- 店面线上线下融合营销劳务协议
- 旅游资源招投标保密协议与旅游资源信息安全合同
- 2025管理学基础试题及答案
- 软件开发企业股东合作协议范本
- 2025公务员选调面试题及答案
- 出租车公司车辆租赁与环保责任合同
- 村干部饮水安全培训总结课件
- 2025年工地安全员培训考试试题及答案
- 安全生产治本攻坚三年行动半年工作总结
- 文明有礼+课件-2025-2026学年统编版道德与法治八年级上册
- 学堂在线 军事理论 章节测试答案
- 《工程勘察设计收费标准》(2002年修订本)
- 构建“可视化”数学课堂促进学生深度学习
- 财务报销流程培训PPT课件:日常费用报销
- 聆听京剧唱腔联奏
- 建筑工程资料(全套表格)资料
- 值得收藏的榫接图【木工爱好者论坛完全版本】
评论
0/150
提交评论