实验室温湿度监控系统设计-论文.doc_第1页
实验室温湿度监控系统设计-论文.doc_第2页
实验室温湿度监控系统设计-论文.doc_第3页
实验室温湿度监控系统设计-论文.doc_第4页
实验室温湿度监控系统设计-论文.doc_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

实验室温湿度监控系统设计摘要温湿度是检验实验室安全的一个重要的指标,因此实时监控温湿度有很重要的意义。本系统基于STM8单片机,分为上位机和下位机,下位机由STM8单片机最小系统、NRF24L01无线模块和DHT11温湿度传感器组成。上位机的数据提取部分由STM8单片机最小系统和NRF24L01无线模块组成,上位机界面由C#语言编写,把采集到的温湿度数据显示在PC机的界面上。关键词:温湿度 无线传输 STM8单片机ABSTRACT Temperature and humidity is an important index for testing laboratory safety, so the real-time monitoring of temperature and humidity have important meaning.This system based on STM8 microcontroller, divided into the upper machine and lower machine, a machine under minimum system controlled by STM8, NRF24L01 wireless module and DHT11 temperature and humidity sensors.Data extraction part of the upper machine of minimum system controlled by STM8 and NRF24L01 wireless module, PC interface by c # language, the display of the temperature and humidity data collected on the PC interface.Key words:temperature and humidity Wireless transmission STM8-MCU; 目 录一、引言1 二、系统结构框图及基本原理 2(1) 系统结构2(2) 数据采集节点结构3(3) 数据接收端结构3三、硬件电路设计 4(一) CPU芯片(STM8S003F3P6)4(二)电源模块5(三)无线模块(NRF24L01)5(四)复位电路7(五)发射指示电路7(六)温湿度采集模块8(七)USB转串口模块8四、 系统软件设计8(一)程序设计总体思路8(二)温湿度传感器软件设计10 1.DHT11通信协仪13 2.DHT11程序设计13(三)无线通信模块RF24L01软件设计14 1.发射部分子程序设计15 2.接收部分子程序设计16(四)上位机部分软件设计17五、结论18参考文献 20致谢 19附录30 一、引言 随着现代电子技术的发展,计算机数量及其配套的环境设备与日俱增,实验室已经成为信息系统的重要组成部分。由于实验室的特殊性,实验室里的设备一般都是7*24小时全天候运行的,因此实验室对温湿度较敏感。温湿度是检验实验室安全的一个重要的指标,如果实验室内的温湿度超过一定值会对设备运行有影响。因此,测量温度并给出相应的信息对实验室有一定意义。本文设计了一个基于STM8单片机的无线温度采集系统,可以实现对实验室温湿度的采集与无线传输功能。整个系统分为上位机和下位机两部分,单片机使用C语言为开发语言,KEIL软件为编程工具。PC端采用C#语言作为开发语言。二、系统结构框图及基本原理 (一)系统结构框图PC界面显示 数据接收系统 数据发送系统串口无线传输 图2-1系统原理结构图如图2-1所示为系统原理结构图。整个系统由数据采集节点和数据接收端以及上位机组成。数据采集节点工作在各个测温地点,进行温度数据采集和数据无线发送。数据接收端收到数据后,通过RS232串口将此数据送到C#编写的上位机进行显示。 (二)数据采集节点结构CPU芯片(STM8S003F3P6)NRF24L01无线模块DHT11温度传感器模块复位电路状态指示电路 图2-2(a)数据采集节点结构框图数据采集系统由以下几部分组成:CPU芯片:采用STM8S003F3P6单片机。复位电路:由一个10K电阻和一个0.1uf的电容组成。无线模块:使用NRF24L01无线收发模块。温度传感器模块:使用DHT11温湿度传感器芯片。状态指示电路:由一个LED灯和一个1K的电阻组成 (三)数据接收端结构CPU芯片(STM8S003F3P6)NRF24L01无线模块显示模块复位电路电源电路图2-2(b) 数据接收端结构框图该系统由以下几部分组成:CPU芯片:采用STM8S003F3P6单片机。复位电路:由一个10K电阻和一个0.1uf的电容组成。电源电路:由一个AMS1117-3.3的芯片和1个0.1uf的电容,1个1uf的电容组成。无线模块:NRF24L01无线模块。显示模块:使用PC机界面显示。3、 硬件电路设计 (一) CPU芯片(STM8S003F3P6)本系统采用单片机STM8S003F3P6,STM8S003F3P6是意法半导体公司生产的8位的单片机。(1) 高级STM8内核,具有3级流水线的哈佛结构(2) 程序存储器:8K字节Flash;(3) 数据存储器:640 字节真正的数据(4) EEPROM;可达30万次擦写(5) RAM:1K字节(6) 2.95到5.5V工作电压(7) 灵活的时钟控制,4个主时钟源 低功率晶体振荡器 外部时钟输入 用户可调整的内部16MHz RC 内部低功耗128kHz RC (8)电源管理: 低功耗模式( 等待、活跃停机、停机) 外设的时钟可单独关闭永远打开的低功耗上电和掉电复位(9)中断管理带有32个中断的嵌套中断控制器,6个外部中断向量,最多27个外部中断图3-1 STM8S003F3P6引脚图 STM8S003F3P6芯片特性与管脚说明:VDD:数字部分供电。VSS:数字部分接地。NRST:复位引脚。VCAP:1.8V调压器电容。OSCIN:晶振输入。OSCOUT:晶振输出。PB口:通用输入输出口。PC口:通用输入输出口。PD口:通用输入输出口。 (二)电源模块电源模块把USB接口的5V的电压通过稳压芯片稳到3.3V,为NRF24L01模块以及STM8S003F3P6单片机供电。稳压芯片型号为AMS1117-3.3。电路图如下所示:图2-2 电源模块电路图 (三)无线模块(NRF24L01) 1模块特点: 该模块采用2.4GHz全球开放ISM 频段,最大0dBm 发射功率,支持六路通道的数据接收,免许可证使用。其特点如下: 2引脚说明图2-3(a) NRF24L01 PCB图NRF24L01模块的引脚如图所示,各自功能如下所述:PIN 1 :VCC 电源,1.9-3.6V 输入PIN 2: CE 工作模式选择,TX 或RX 模式选择PIN 3 :CSN SPI 片选使能,低电平使能PIN 4 :SCK SPI 时钟PIN 5 :MOSI SPI 输入PIN 6 :MISO SPI 输出PIN 7 :IRQ 中断输出PIN 8 :GND 地线3该模块在使用时应注意以下几点:(1)除电源VCC和接地端,所有的pin脚都可与单片机IO口直连。(2) VCC脚接电压范围为1.9V3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块。推荐电压3.3V左右。(3)无SPI接口的MCU也可同样兼容,可用普通IO口对SPI接口进行模拟。(a:与P0口需要加10K的上拉电阻。b:在使用其他5V单片机时需参考IO口输出电流,如果超过10mA,需要串联电阻分压,否则容易烧毁模块! 如果是3.3V的,可以直接和RF24l01模块的IO口线连接。比如AVR系列单片机如果是5V的,一般串接2K的电阻)。(四)复位电路 电容在上接高电平,电容在下接地,中间为NRST。本设计为低电平复位。其工作原理是:通电时,电容处于交流短路,此时RST端被拉低,电容缓慢充电,同时RST的电压慢慢上升,直到上升为高电平,MCU复位结束启动工作。其电路如图2-4所示:图2-4 复位电路图 (五)发射指示电路发射和接收模块分别由一个1K电阻和一个发光二极管组成。当相应的IO给低电平,相应的发光二极管会亮起,以表示当前正在发射或接收状态。其电路如图所示。图2-5(a) 发射指示模块电路图 (六)温湿度采集模块DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为给类应用甚至最为苛刻的应用场合的最佳选择。产品为4针单排引脚封装,连接方便。DHT11和单片机的连接非常简单;把引脚3接5V,引脚1接地,引脚2直接接到单片机I/O口即可。 (七)USB转串口模块USB转串口电路如图2-8所示,采用CH340USB转串口芯片组成这个电路。图2-8 USB转串口模块原理图四、 系统软件设计(一)程序设计总体思路软件部分的设计思路是将整个程序划分3个部分,温湿度采集及数据无线发射部分,数据接收部分,上位机显示数据部分。软件流程如图4-1所示,开始先是系统的初始化,初始化完成之后接收模块会一直处于待命状态一直循环等待无线端接收的数据,数据采集节点实时监测温湿度,并把温湿度发射给数据接收端,接收到温湿度数据后,进行校验,处理后并通过串口发送给上位机,显示实时温湿度数据。各个系统初始化接收模块接收数据校验数据分析数据上位机显示数据是否收到数据是否图4-1 软件整体流程(二)温湿度传感器软件设计DHT11的内部存储器有一个高速暂存RAM。高速暂存RAM的结构为8字节的存储器。第1字节和第2字节为测得的温度的低位和高位,第3字节和第4字节是TH和TL 的拷贝,是易失的,每次上电复位时被刷新。第5字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率,它的第7位TM是测试模式位,用于设置DHT11在工作模式还是在测试模式;第6位R1和第5位R0决定温度转换的精度,即用来设置分辨率,分辨率越高,转换时间就越长。当符号位S=0时,表示测得的温度为正值,可直接将二进制转换为十进制;当符号位S=1时,表示测得的温度为负值,要先将补码变成原码,再计算十进制。在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即把把温度寄存器里的二进制值乘以0.0625,就是实际的温度值,例如0550H0.0625=13600.0625/LSB =85。1.DHT11的通信协议 该通信协议定义了几种信号类型:复位脉冲、应答脉冲时隙;写“0”、写“1”时隙;读“0”,读“1”时隙;。与DHT11的通信,是通过操作时隙完成单总线上的数据传输。发送所有的命令和数据时都是字节的低位在前,高位在后。 1)初始化序列:复位和应答脉冲单总线上的所有通信都是以初始化序列开始,包括:主机发出的复位脉冲及从机的应答脉冲,如图5所示。当从机发出响应主机的应答脉冲时,即向主机表 图4-2 复位/应答时隙的示意图明它处于总线上,且工作准备就绪。在主机初始化过程,主机通过拉低单总线至少480us,以产生(Tx) 复位脉冲。接着,主机释放总线,并进入接收模式(Rx)。 当总线被释放后,5k上拉电阻将单总线拉高。在单总线器件检测到上升沿后,延时15-60 us,接着通过拉低总线60-240us,以产生应答脉冲。 2)写时隙存在两种写时隙:写“1”和写“0”。 主机采用写1 时隙向从机写入1, 而图4-3主机读/写时隙的示意图采用写0 时隙向从机写入0。 所有写时隙至少需要60us,且在两次独立的写时隙之间至少需要1u s的恢复时间。两种写时隙均起始于主机拉低总线(图6所示)。产生写1 时隙的方式:主机在拉低总线后接着必须在15 us之内释放总线,由5k 上拉电阻将总线拉至高电平;而产生写0 时隙的方式:在主机拉低总线后,只需在整个时隙期间保持低电平即可(至少60us)。在写时隙起始后15-60us期间,单总线器件采样总线电平状态。如果在此期间采样为高电平,则逻辑1被写入该器件;如果为0, 则写入逻辑0。3)读时隙单总线器件仅在主机发出读时隙时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时隙,以便从机能够传输数据,所有读时隙至少需要60u s,且在两次独立的读时隙之间至少需要1us的恢复时间。每个读时隙都由主机发起,至少拉低总线1us(图6 所示)。在主机发起读时隙之后单总线器件才开始在总线上发送0 或1。2.DHT11程序设计 通过上述原理,可通过其one-wire总线对其进行配置和数据通信,设计的读出温度子程序主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其软件流程如图4-4所示。DHT11初始化启动温湿度转换等待转换完成发送读取指令获取对应数据图4-4 读出温湿度子程序软件流程图DHT11的各个命令对时序的要求特别严格,所以在软件设计时必须按照所要求的时序才能达到预期的目的,同时,要注意读进来的是高位在后低位在前,共有12位数,小数4位,整数7位,还有一位符号位。(三)无线通信模块RF24L01软件设计 1.发射部分子程序设计图4-5 NRF24L01发送程序流程图RF24L01走的是标准的SPI协议,操作是按照SPI协议的标准读写数据。如图4-5所示,发射数据时,首先将nRF24L01配置为发射模式:接着把接收节点地址TX_ADDRESS和有效数据TX_PLOAD按照时序由SPI口写入nRF24L01缓存区,然后CE置为高电平并保持至少10s,延迟130s后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号(自动应答接收地址应该与接收节点地址TX_ADDRESS一致)。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLOAD从TX FIFO中清除;若发送堆栈中无数据且CE为高,则进入空闲模式。以下是发送子程序:/*NRF24L01初始化void init_NRF24L01(void)inerDelay_us(100);CE=0; / chip enableCSN=1; / Spi disable SCK=0; / Spi clock line init highSPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); / 写本地地址 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); / 写接收端地址SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); / 频道0自动 ACK应答允许 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); / 允许接收地址只有频道0,如果需要多频道可以参考Page21 SPI_RW_Reg(WRITE_REG + RF_CH, 0); / 设置信道工作为2.4GHZ,收发必须一致SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /设置接收数据长度,本次设置为4字节SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); /设置发射速率为1Mkbps,发射功率为最大值0dB/*函数:void nRF24L01_TxPacket(unsigned char * tx_buf)/*功能:发送 tx_buf中数据void nRF24L01_TxPacket(unsigned char * tx_buf)CE=0; /StandBy I模式 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); / 装载接收端地址SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); / 装载数据 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); / IRQ收发完成中断响应,16位CRC,主发送CE=1; /置高CE,激发数据发送inerDelay_us(10);2.接收部分子程序设计图4-6 RF24L01接收程序流程图如图4-6所示,接收数据时,首先将nRF24L01配置为接收模式,接着延迟130s进入接收状态等待数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在RX FIFO中,同时中断标志位RX_DR置高,IRQ变低,产生中断,通知MCU去取数据。若此时自动应答开启,接收方则同时进入发射状态回传应答信号。最后接收成功时,若CE变低,则nRF24L01进入空闲模式。以下是接收函数:/*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)/*功能:数据读取后放如rx_buf接收缓冲区中unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)unsigned char revale=0;sta=SPI_Read(STATUS); / 读取状态寄存其来判断数据接收状况if(RX_DR) / 判断是否接收到数据CE = 0; SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);/ read receive payload from RX_FIFO bufferrevale =1; /读取数据完成标志SPI_RW_Reg(WRITE_REG+STATUS,sta); /接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来其清除中断标志return revale;(四)上位机部分软件设计上位机采用C#语言编写,流程如下:串口收到数据校验收的数据分析数据是哪个采样点的分别显示图4-7 上位机显示程序流程结 论毕业设计是本专业教学中最后一个重要的实践性教学环节,是我们从学校走向工作岗位必要的过渡阶段。对我个人而言,毕业设计是我大学四年学习的总结与检验,是大学四年所学知识的综合运用的体现。此次毕业设计巩固了我所学理论,增强了理论联系实际的能力,更是为以后的工作打下了更坚实的基础。本次毕业设计采用单片机STM8S003F3P6为控制器,用温湿度传感器DHT11来检测室内温湿度,用NRF24L01来传输数据,用C#上位机来实时显示当前的温湿度。调试结果表明系统能够达到预定目标。致 谢本论文是在XX导师的悉心指导之下完成的,四年来,导师渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,朴实无华、平易近人的人格魅力对我影响深远。本论文从选题到完成,几易其稿,每一步都是在导师的指导下完成的,倾注了导师大量的心血,在此我向我的导师表示深切的谢意与祝福!同时我还得感谢做毕业设计以来一直帮助我的同学和朋友,因为之前全身心准备考研,在专业技能的训练和提升上我都有比较大的欠缺,因而这次毕业设计对我来说就是重新学习和应用单片机的知识,使用单片机来做些简单的应用系统设计。作为新手我当然少不了遇到这样或那样的问题,无论是硬件焊接、硬件调试,还是软件的调试,在我查资料或多次调试都未能理解相关知识或者有效解决问题时,我都能及时得到同学们的帮助。参考文献1张毅刚.刘杰单片机原理及应用M哈尔滨:哈工大出版社 第三版,2006 2彭伟.单片机C语言程序设计实训100例M.北京:电子工业出版社 第三版,20073郭天祥.51单片机C语言教程M.北京:电子工业出版社 第三版,20064胡汉才.单片机原理及其接口技术M.北京:清华大学出版社 第三版,20075郝鸿安.常用数字集成电路应用手册M.北京:中国计量出版社 第二版,2006:165-1876孙肖子.田根登.现代电子线路和技术实验M.高等教育出版社 第二版,20047陈永甫.红外探测与控制电路M.北京:人民邮电出版社 第二版,20048张庆双.报警器应用电路集粹M.北京:机械工业出版社 第三版,20059肖景和.实用报警电路300例M.北京:中国电力出版社 第二版,200510王幸之.89系列单片机原理与接口技术M.北京:北京航空航天大学出版社 第二版,200411Gonzalez R.Woods R.Digital Image Processing.Second EditionM.Upper Saddle River N.J:Prentice Hall.200212StevenF.Barrett.Daniel J.Pack.Embedded SystemM.北京:电子工业出版社,2006 附录附录一实物图:附录二数据接收端总体原理图:数据采集节点总体原理图:附录三:上位机界面运行效果图:附录四:数据接收端程序: #include stm8s.h#include iostm8s103f3.h#include stm8s_conf.h#include stm8s_it.h#include stdio.h#include delay.h#include nrf24l01.h#define LED0 PA_ODR_ODR3void USART1_Init(void); void UART1_SendByte(u8 data);extern u8 RxBuffer3;extern u8 my_int_flag;void main( void ) u16 t; /select Clock CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1); /时钟太低有可能串口接收失败 CLK_HSICmd(ENABLE); GPIO_Init(GPIOA,GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);LED0=0;USART1_Init();init_NRF24L01();TxBuf1 = 0x55 ;nRF24L01_TxPacket(TxBuf);delay_ms(10);while (1) SetRX_Mode();if( nRF24L01_RxPacket(RxBuf) ) UART1_SendByte(=); delay_ms(1); UART1_SendByte(RxBuf0); delay_ms(1); UART1_SendByte(RxBuf2); delay_ms(1); UART1_SendByte(RxBuf4); delay_ms(2); UART1_SendByte(=); delay_ms(1); UART1_SendByte(RxBuf0); delay_ms(1); UART1_SendByte(RxBuf2); delay_ms(1); UART1_SendByte(RxBuf4); delay_ms(1);delay_ms(8); /1mst+;if(t1000) t=0;LED0=!LED0; #ifdef USE_FULL_ASSERTvoid assert_failed(uint8_t* file, uint32_t line) while (1) #endifvoid USART1_Init(void) CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1,ENABLE); UART1_DeInit(); UART1_Init(uint32_t)115200,UART1_WORDLENGTH_8D,UART1_STOPBITS_1,UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE,UART1_MODE_TXRX_ENABLE); UART1_ITConfig(UART1_IT_RXNE_OR,ENABLE); UART1_Cmd(ENABLE); void UART1_SendByte(u8 data) UART1_SendData8(unsigned char)data); while(UART1_GetFlagStatus(UART1_FLAG_TXE)=RESET); /NRF24L01.c#include nrf24l01.h#include delay.hu8 TxBufTX_PLOAD_WIDTH=0; u8 RxBufRX_PLOAD_WIDTH=0;/u8 TX_ADDRESSTX_ADR_WIDTH=0x00,0x11,0x22,0x33,0x44; /本地地址/u8 RX_ADDRESSRX_ADR_WIDTH=0x00,0x11,0x22,0x33,0x44; /接收地址u8 TX_ADDRESSTX_ADR_WIDTH=0x22,0x34,0x56,0x78,0x90; /本地地址u8 RX_ADDRESSRX_ADR_WIDTH=0x22,0x34,0x56,0x78,0x90; /接收地址uchar sta; /*/NRF24L01初始化void init_NRF24L01(void) GPIO_Init(GPIOC,GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT); /miso GPIO_Init(GPIOC,GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST); /mosi GPIO_Init(GPIOC,GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST); /sck GPIO_Init(GPIOD,GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST); /CE GPIO_Init(GPIOB,GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST); /CSN GPIO_Init(GPIOC,GPIO_PIN_4, GPIO_MODE_IN_PU_NO_IT); /IRQ delay_ms(20); CE_L; / chip enable CSN_H; / Spi disable SCK_L; / Spi clock line init high SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); / 写本地地址 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); / 写接收端地址/ SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); / 频道0自动 ACK应答允许 SPI_RW_Reg(WRITE_REG + EN_AA, 0x00); / 频道0自动 ACK应答不允许 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); / 允许接收地址只有频道0,如果需要多频道可以参考Page21 SPI_RW_Reg(WRITE_REG + RF_CH, 0); / 设置信道工作为2.4GHZ,收发必须一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /设置接收数据长度,本次设置为32字节/ SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); /设置发射速率为1MHZ,发射功率为最大值0dB SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); /设置发射速率为1MHZ,发射功率为最大值0dB/*/函数:uint SPI_RW(uint uchar)/功能:NRF24L01的SPI写时序/*/uchar SPI_RW(uchar byte) uchar i; for(i=0;i8;i+) / output 8-bit if(byte & 0x80) / output uchar, MSB to MOSI MOSI_H; else MOSI_L; byte = (byte 1); / shift next bit into MSB. SCK_H; / Set SCK high. if(MISO!=RESET) / capture current MISO bit byte |=1; SCK_L; / .then set SCK low again return(byte); / return read uchar/*/函数:uchar SPI_Read(uchar reg)/功能:NRF24L01的SPI时序/*/uchar SPI_Read(uchar reg) uchar reg_val; CSN_L; / CSN low, initialize SPI communication. SPI_RW(reg); / Select register to read from. reg_val = SPI_RW(0); / .then read registervalue CSN_H; / CSN high, terminate SPI communication return(reg_val); / return register value/*/功能:NRF24L01读写寄存器函数/*/uchar SPI_RW_Reg(uchar reg, uchar value) uchar status; CSN_L; / CSN low, init SPI transaction status = SPI_RW(reg); / select register SPI_RW(value); / .and write value to it. CSN_H; / CSN high again return(status); / return nRF24L01 status uchar/*/函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)/功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数/*/uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar num) uchar status,i; CSN_L; / Set CSN low, init SPI tranaction status = SPI_RW(reg); / Select register to write to and read status uchar for(i=0;inum;i+) pBufi = SPI_RW(0); / CSN_H; return(status); / return nRF24L01 status uchar/*/函数:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)/功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars:写入数据的个数/*/uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar num) uchar status,i; CSN_L; /SPI使能 status = SPI_RW(reg); for(i=0; inum; i+) / SPI_RW(*pBuf+); CSN_H; /关闭SPI return(status); / /*/函数:void SetRX_Mode(void)/功能:数据接收配置 /*/void SetRX_Mode(void) CE_L; SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); / IRQ收发完成中断响应,16位CRC ,主接收 CE_H; delay_ms(1);/*/函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)/功能:数据读取后放如rx_buf接收缓冲区中/*/unsigned char nRF24L01_RxPacket(unsigned char* rx_buf) unsigned

温馨提示

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

评论

0/150

提交评论