1、广东药学院课程设计论文报告设计项目:无线网络控制的温度监测器 班级: 组员: 指导老师: 2015/1/8 目录一、设计要求二、设计原理及方案三、系统硬件设计 1、设计主要器件 1.1、AT89C52单片机1.2、温度传感器DS18B201.3、NRF24L01无线收发器 2、硬件电路设计 2.1、发射端 2.1.1、温度采集模块 2.1.2、控制单元STC89C52单片机 2.1.3、无线收发模块NRF24L01 2.1.4、电源模块 2.1.5、时钟振荡电路设计 2.1.6、复位电路设计2.2、接收端 2.2.1、蜂鸣器报警模块 2.2.2、键盘电路模块 2.2.3、液晶显示模块四、 系统
2、软件设计 1、程序流程图1.1、数据采集流程图1.2、无线发送流程图1.3、无线接收流程图 2、源程序代码 2.1、发射板 2.1.1、DS18B20.h 2.1.2、DS18B20.c 2.1.3、NRF24L01.h 2.1.4、NRF24L01.c 2.1.5、main.h 2.1.6、main.c2.2、接收板 2.2.1、LCD1602.h 2.2.2、LCD1602.c 2.2.3、NRF24L01.h 2.2.4、NRF24L01.c 2.2.5、main.h 2.2.6、mian.c五、总结与心得正文基于无线网络的温度监控系统 摘要:无线温度监控器是一种用于仓库和蔬菜大棚等具有
3、温度检测、无线传输、温度显示和超限报警功能的仪器。系统由发送端和接收端两部分组成。发送端将温度传感器检测到的温度值经单片机进行数据处理后,通过无线收发模块无线发送,接收端将接收到的数据信息显示在液晶屏上,并附加温度限设置和超限报警功能。本设计利用软件Keil进行系统程序设计,利用单片机学习板进行硬件仿真,待仿真成功后进行了实物制作和调试,最终成功设计出了无线温度检测器。文中详细介绍了温度采集模块、无线传输模块、显示模块、温度限设置模块和报警电路的设计方法和过程。当采样点的温度值超出规定值时,系统通过报警电路提醒监测人员。同时,检测人员可以通过键盘对具体报警点的温度值进行设置。另外,该系统温度检
4、测具有较高的精度,无线数据传输稳定,而且传输距离较远。关键词:温度检测;单片机;无线传输一、【设计要求】设计并制作一款基于无线网络的温度监测器。分主机和从机,从机采集温度数据并通过无线网络发送。主机通过无线网络接收从机数据,通过液晶屏显示温度,当温度到达规定值时,主机通过蜂鸣器报警。二、【设计原理及方案】 采用单片集成电路AT89C52结合数字型温度传感器DS18B20设计实现。无线数据传输部分通过无线收发模块NRF24L01传输。其中AT89C52及其外围电路实现数据的处理及输出的控制,温度传感器DS18B20采集温度参数并通过无线传输模块发送到主机,主机通过LCD1602液晶显示温度值。三
5、、【系统硬件设计】 系统主要由主从机两部分组成,从机主要完成温度的采集及无线发送;主机完成无线信号的接收、显示及报警功能。温度采集部分采用数字化温度传感器DS18B20,单片机实现温度传感器采集到的数据进行处理,然后通过NRF24L01无线收发器将数据发送出去;数据显示及报警模块由无线收发器将接收到的信号传送给控制器,通过液晶显示模块将温度值显示出来,并能通过蜂鸣器和LCD进行报警。 1、设计主要器件AT89C52单片机,温度传感器DS18B20,NRF24L01无线收发器,LCD1602液晶显示器。 1.1、AT89C52单片机 目前使用最为广泛的是51系列单片机,其中STC89C52系列单
6、片机是宏晶科技推出的新一代超强抗干扰/高速/低功耗的单片机,是一款增强型51单片机,完全兼容8051单片机,增加了新的功能,新增两级中断优先级,多一个外中断,内置EEPROM,看门狗,具有掉电模式,512B内存,支持ISP在线编程,不用编程器,程序可擦写10万次,管脚完全兼容,性能更好,驱动能力更强,超强抗干扰能力,价格也比传统的89系列低。考虑到快速开发以及本系统的应用要求,最后采用了最常用的STC89C52单片机。STC89C52单片机主要性能:(1)高速:1个时钟/机器周期,增强型8051内核,速度比普通8051快8到12倍。(2)宽电压:5.54.IV/3.7V,3.6V2.4V/2.
7、lV。(3)低功耗设计:空闲模式(可由任意一个中断唤醒)和掉电模式(可由任意一个外部中断唤醒,可支持下降沿/低电远程唤醒)。(4)工作频率:035MHz,普通8051:0420MHz。(5)时钟:外部晶体或内部RC振荡器可选,在ISP下载编程用户程序时设置。(6)芯片内EEPROM功能,擦写次数10万以上。(7)ISP/IAP,在系统可编程/在应用可编程,无需编程器/仿真器。(8)2个16位定时器,兼容普通8051的定时器T0/T1。(9)硬件看门狗(WDT)。(10)全双工异步串行口(UART),兼容普通8051,可当2个串口使用。(11)先进的指令集结构,兼容普通8051指令集,有硬件乘法
8、/除法指令。1.2、温度传感器DS18B20 DSl8B20是美国Dallas半导体公司继DSl820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现912位的数字值读数方式。可以分别在93.75ms和750ms内完成9位和12位的数字量读取。它采用独特的单总线接口方式,即允许在一条信号线上挂接数十甚至上百个数字式传感器,从而使测温装置与各传感器的接口变得十分简单,克服了模拟式传感器与微机接口时需要的A/D转换器及其它复杂外围电路的缺点,而且,可以通过总线供电,温度变换功率来源于数据总线,总线本身也可以向所挂接的DSl8B
9、20供电,而无需额外电源,由它组成的温度测控系统非常方便,而且成本低、体积小、可靠性高。DSl8B20的测温范围-55+125,最高分辨率可达0.0625,由于每一个DSl8B20出厂时都刻有唯一的一个序列号并存入其ROM中,因此CPU可用简单的通信协议就可以识别,从而节省了大量的引线和逻辑电路。由于DSl8B20具有独特的单总线接口方式在测温时有明显的优势,占用单片机的I/O引脚资源少,和单片机的通信协议比较简单,成本较低,而且具有负压特性(电源极性接反时,温度计不会因发热而烧毁,只是不能正常工作),和其他数字温度传感器相比,它更适合本系统。所以,选用DSl8B20作为温度测量的传感器。1.
10、3、NRF24L01无线收发器 NRF24L01是NORDIC公司最近生产的一款无线通信芯片,采用FSK调制,内部集成NORDIC自己的Enhanced Short Burst协议。可以实现点对点或是1对6的无线通信。无线通信速度可以达到2Mbps。NORDIC公司提供通信模块的GERBER文件,可以直接加工生产。嵌入式工程师或是单片机爱好者只需要为单片机系统预留5个GPIO,1个中断输入引脚,就可以很容易实现无线通信的功能,非常适合用来为MCU系统构建无线通信功能。 2、硬件电路设计2.1、发射端无线温度检测器的温度采集端由电源模块、STC89C52单片机、温度采集电路、无线发送模块NRF2
11、4L01、时钟电路及复位电路组成。温度采集端硬件框图如图2.1所示。图2.1 温度采集端硬件框图 2.1.1、温度采集模块 1. DSl8B20内部结构DSl8B20芯片的内部结构如图2.2所示。图2.2 DS18B20内部结构图 2. DSl8B20有4个主要的数据部件: (1)64位激光ROM。64位激光ROM从高位到低位依次为8位CRC、48位序列号和8位家族代码(28H)。 (2)温度灵敏元件。 (3)非易失性温度报警触发器TH和TL。可通过软件写入用户报警上下限值。 (4)配置寄存器。配置寄存器为高速暂存存储器中的第五个字节。DSl8B20在工作时按此寄存器中的分辨率将温度转换成相应
12、精度的数值,其各位定义如表2.1所示。表2.1 DS18B20配置寄存器模式设置表TMR1R011111其中,TM:测试模式标志位,出厂时被写入0,不能改变;R0、Rl:温度计分辨率设置位,其对应四种分辨率表3.2所列,出厂时R0、Rl置为缺省值:R0=1, R1=1(即12位分辨率),用户可根据需要改写配置寄存器以获得合适的分辨率。配置寄存器与分辨率关系如表2.2所示。表2.2 配置寄存器与分辨率关系表R0R1温度计分辨率/bit最大转换时间/us00993.750110187.510113751112750 3. 高速暂存存储器高速暂存存储器由9个字节组成,其分配如表2.3所示。当温度转换
13、命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第1和第2个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表3.3所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。表2.3 DS18B20存储器映像表温度低位温度高位THTL配置保留保留保留8位CRC 4. 对DSl8B20的设计,需要注意以下问题:(1)对硬件结构简单的单线数字温度传感器DSl8B20进行操作,需要用较为复杂的程序完成。编制程序时必须严格按芯片数据手册提供的有关操作顺序进行,读、写程序要严格按要求编写。尤其在使用DS
14、l8B20的高测温分辨力时,对时序及电气特性参数要求更高。 (2)测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。DSl8B20在三线制应用时,应将其三线焊接牢固;在两线应用时,应将VCC与GND接在一起,焊接牢固。若VCC脱开未接,传感器只送85.0的温度值。 2.1.2、控制单元STC89C52单片机 1. STC89C52单片机的特点 单片机是在一块硅片上集成了各种部件的微型机,这些部件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时器/计数器和多种I/O接口电路。STC89C52单片机的基本结构如图2.3所示。图2.
15、3 STC89C52单片机的基本结构 2. STC89C52单片机的引脚及功能 STC89C52单片机的管脚分布如图2.4所示。图2.4 STC89C52单片机的管脚图 STC89C52的I/O端口: P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。 P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,P
16、1输出缓冲器能驱动4个TTL逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。在flash编程和校验时,P1口接收低8位地址字节。 引脚第二功能 P1.0/T2(定时器/计数器T2的外部计数输入) P1.1/T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制) P1.5/MOSI(在系统编程用) P1.6/MISO(在系统编程用) P1.7/SCK(在系
17、统编程用) P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器时,P2 口送出高8位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P3输出缓冲器能驱动4个TTL逻
18、辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为STC89C52特殊功能(第二功能)使用。在flash编程和校验时,P3口也接收一些控制信号。 引脚 第二功能 P3.0/RXD(串行输入口) P3.1/TXD(串行输出口) P3.2/INT0(外中断0) P3.3/INT1(外中断1) P3.4/T0(定时/计数器0) P3.5/T1(定时/计数器1) P3.6/WR(外部数据存储器写选通) P3.7/RD(外部数据存储器读选通) 此外,P3口还接收一些用于flash闪存编程和
19、程序校验的控制信号。 RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。 ALE/PROG:当访问外部程存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意每当访问外部数据存储器时将跳过一个ALE脉冲。 对flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。 如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚
20、会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。 PSEN:程序储存允许 PSEN输出是外部程序存储器的读选通信号,当STC89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VP:外部访问允许 欲使CPU仅访问外部程序存储器,EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。 2.1.3、无线收发模块NRF24L01无线收发模块NRF24L01的各引脚与单片机的P1口相连,电路连接图如图2.4,图2.5所示。图2.5 NRF24L01
21、引脚示意图图2.6 无线收发模块NRF24L01与单片机的电路连接图 无线收发模块NRF24L01引脚功能:CSN(P1.6):芯片的片选线,CSN 为低电平芯片工作。SCK(P3.4):芯片控制的时钟线(SPI 时钟)。MISO(P3.3):芯片控制数据线(Master input slave output)。MOSI(P1.7):芯片控制数据线(Master output slave input)。IRQ(P3.2):中断信号。无线通信过程中MCU主要是通过IRQ与NRF24L01进行通信。CE(P3.5):芯片的模式控制线。在CSN为低的情况下,CE协同NRF24L01的CONFIG寄存
22、器共同决定NRF24L01的状态。 2.1.4、电源模块本次设计电源采用usb口将220v交流电源转换为5v直流电源后再通过AMS1117-3.3变压器转换为3.3v直流电源输入。电源模块中加装了LED灯,指示电源通断。电源模块设计如图2.7,图2.8所示。图2.7 USB接口电路图2.8 电源转换电路 2.1.5、时钟振荡电路设计XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取
23、30pf左右。STC89C52单片机内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。因此,在焊接电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。本次时钟电路设计采用内部方式,即利用芯片内部的振荡电路,晶体振荡器选用12MHz,电容选用
24、33pf。时钟振荡电路如图2.9所示。图2.9 时钟振荡电路连接图 2.1.6、复位电路设计在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,单片机便循环复位。复位后P0P3口均在引脚表现为高电平,程序计数器和特殊功能寄存器全部清零。当复位脚由高电平变为低电平时,芯片从ROM的00H处重新开始执行程序。复位电路通常采用上电自动复位和按钮复位两种方式,本设计采用按钮复位电路。复位电路图如图2.10所示。图2.10 复位电路连接图 2.2、接收端无线温度测量器的温度接收端由电源模块、STC89C52单片机、液晶显示电路、无线收发模块N
25、RF24L01、键盘电路、报警电路、时钟电路及复位电路组成。其中电源模块、STC89C52单片机、无线收发模块NRF24L01、时钟电路和复位电路与发射端相同。温度接收端硬件框图如图2.11所示。图2.11 温度接收端硬件框图 2.2.1、蜂鸣器报警模块报警电路由两部分组成。第一部分由三极管和蜂鸣器组成,第二部分由两个LED灯和1k电阻组成。当实时温度大于温度上限设定值时蜂鸣器发出声响,同时LED1灯亮,当实时温度大于温度下限设定值时蜂鸣器发出声响,同时LED2灯亮,而当实时温度回到温度设定值时,蜂鸣器和红色LED灯自动停止。蜂鸣器报警模块如图2.12所示,LED灯连接如图2.13所示,蜂鸣器
26、及LED灯引脚图如图2.14所示。图2.12 蜂鸣器报警模块图2.13 LED灯报警模块图2.14 蜂鸣器及LED灯连接图 2.2.2、键盘电路本系统选择使用独立式按键。键盘电路由四个按键与单片机P3口相连构成,实现温度限的设置功能。通电后,液晶屏显示设定温度为LS T:+99 L:00。按下Key1键,LS切换,开关灯及蜂鸣器报警,按下Key2键,切换上限温度和下限温度调节,Key3和Key4则分别是加减温度设定值。键盘电路图如图2.15所示。图2.15 键盘电路图 2.2.3、液晶显示模块 1. LCD1602主要管脚介绍显示模块用于显示实时温度和设定温度。这里采用1602液晶显示屏,其主
27、要参数为:显示容量(16*2个字符)、芯片工作电压(4.5-5.5V)和工作电流(2.0mA)。LCD1602共有16个引脚,各管脚的功能如表2.4所示。表2.4 LCD1602管脚功能介绍表引脚符号状态功能1VSS输入电源地2Vdd输入电源+5V3V0输入对比度控制端4RS输入寄存器选择5R/W输入读、写操作6E输入使能信号7DB0三态数据总线(LSB)8DB1三态数据总线9DB2三态数据总线10DB3三态数据总线11DB4三态数据总线12DB5三态数据总线13DB6三态数据总线14DB7三态数据总线(MSB)15LEDA输入背光+5V16LEDK输入背光地说明:V0:液晶显示器对比度调整端
28、,接正电源时对比度最弱,接地电源时对比度最高,使用时可以通过一个10k的电位器调整对比度。RS:寄存器选择,高电平时选择数据存储器,低电平时选择指令寄存器。R/W:读写信号线,高电平时进行读操作,低电平进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址;当RS为高电平,R/W为低电平时可以写入数据。E:使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 2. LCD1602控制指令LCD1602控制指令介绍表如表2.5所示。表2.5 LCD1602控制指令介绍表格式功能RSR/WDB7DB6DB5DB4DB3DB2DB1DB0清屏指令0000000001显示开关控制0000
29、001DCB光标、画面移动000000S/CR/L*功能设置00001DLNF*说明:(1)清屏指令清屏指令的主要功能有:清除液晶显示器的内容,即DDRAM的内容全部填入“空白”的ASCII码20H;光标归位,即将光标撤回液晶显示屏的左上方;将地址计数器(AC)的值设为0。(2)显示开关控制显示开关控制的功能是设置显示、光标及闪烁的开、关等。其中:D表示显示:1为开,0为关;C表示光标:1为开,0为关;B表示闪烁:1为开,0为关。(3)光标及画面移动光标及画面移动的功能是控制光标、画面的移动,不影响DDRAM。其中:S/C=1,画面平移一个字符位;S/C=0,光标平移一个字符位;R/L=1:右
30、移;R/L=0:左移。(4)功能设置功能设置主要是对LCD1602的工作方式进行设置。其中:DL=1,8位数据接口;DL=0,4位数据接口;N=1,两行显示;N=0,一行显示;F=1,510点阵字符;F=0,57点阵字符。 3. LCD1602与单片机连接图液晶显示模块设计如图2.15所示。数据线DB0-DB7连接单片机的P0口;RS、R/W、E这3条控制线分别接单片机的P1.3、P1.4和P1.5口。图2.15 液晶显示模块LCD1602四、系统软件设计 1、程序流程图 1.1、数据采集流程图初始化跳过ROM 进行数据转换发送存储器命令读取温度值判断正负 取反加一 负值 正值 结束数据采集流
31、程图1.2、无线发送流程图开始TRX_CE, TXEN全部置高射频寄存器开启,数据打包发送,DR=1TRX-CE=1? N AUTO-RET=1 N前导码完成后置DR=0 N 结束 无线发送流程图 1.3、无线接收流程图开始TRX_CE=1,TXEN=0接收部分检测载波,CD置高 ADDR正确? NDR和AM置低AM为低AM置高 移去字头地址CRC? N从SPI接收数据DR置高TRX-CE=0? N进入空闲状态 结束 无线接收流程图 2、源程序代码2.1接收板2.1.1、DS18B20.hifndef _DS18B20_H_#define _DS18B20_H_#include sbit DS
32、18B20_DQ = P10;extern void DS18B20_Delay( unsigned int n );extern void DS18B20_Write_Byte( unsigned char dat);extern unsigned char DS18B20_Read_Byte( );extern bit DS18B20_Init();extern unsigned int Get_temp(void);extern unsigned char flag_temper;#endif2.1.2、DS18B20.c#include DS18B20.h#includeunsigne
33、d char flag_temper = 0;void DS18B20_Delay( unsigned int n )unsigned int i;for(i = 0 ; i n ; i+ );void DS18B20_Write_Byte( unsigned char dat)unsigned char i;for( i = 0 ; i = 1;DS18B20_Delay(6);DS18B20_DQ = 1;_nop_();_nop_();unsigned char DS18B20_Read_Byte( )unsigned char dat,i;for( i = 0 ; i = 1;if(
34、DS18B20_DQ = 1)dat |= 0X80;elsedat &= 0x7f;DS18B20_Delay(6);return dat;bit DS18B20_Init()bit Flag_exist = 1;DS18B20_DQ = 1;_nop_();_nop_();DS18B20_DQ = 0;DS18B20_Delay(50);DS18B20_DQ = 1;DS18B20_Delay(3);Flag_exist = DS18B20_DQ;DS18B20_Delay(10);DS18B20_DQ = 1;return Flag_exist;unsigned int Get_temp
35、(void) float tt;unsigned char a,b;unsigned int temp;if( DS18B20_Init() = 0 ) DS18B20_Write_Byte(0xcc); DS18B20_Write_Byte(0x44); /_delay_ms(750);if( DS18B20_Init() = 0 ) DS18B20_Write_Byte(0xcc); DS18B20_Write_Byte(0xbe); a = DS18B20_Read_Byte(); b = DS18B20_Read_Byte(); temp = b; temp 0xfff)flag_te
36、mper=1; temp=(temp)+1;else flag_temper=0;tt = temp*0.0625; temp = tt*10+0.5; return temp;2.1.3、NRF24L01.h#ifndef _NRF24L01_H_#define _NRF24L01_H_#include sbit NRF24L01_CSN = P16;sbit NRF24L01_CE = P35;sbit NRF24L01_MOSI = P17;sbit NRF24L01_SCK = P34;sbit NRF24L01_MISO = P33;sbit NRF24L01_IRQ = P32;
37、#define NRF24L01_READ_REG 0x00 #define NRF24L01_WRITE_REG 0x20 #define NRF24L01_RD_RX_PLOAD 0x61 #define NRF24L01_WR_TX_PLOAD 0xA0 #define NRF24L01_FLUSH_TX 0xE1 #define NRF24L01_FLUSH_RX 0xE2 #define NRF24L01_REUSE_TX_PL 0xE3 #define NRF24L01_NOP 0xFF #define NRF24L01_CONFIG 0x00 #define NRF24L01_E
38、N_AA 0x01 #define NRF24L01_EN_RXADDR 0x02 #define NRF24L01_SETUP_AW 0x03 #define NRF24L01_SETUP_RETR 0x04 #define NRF24L01_RF_CH 0x05 #define NRF24L01_RF_SETUP 0x06 #define NRF24L01_STATUS 0x07 #define NRF24L01_OBSERVE_TX 0x08 #define NRF24L01_CD 0x09 #define NRF24L01_RX_ADDR_P0 0x0A #define NRF24L0
39、1_RX_ADDR_P1 0x0B #define NRF24L01_RX_ADDR_P2 0x0C #define NRF24L01_RX_ADDR_P3 0x0D #define NRF24L01_RX_ADDR_P4 0x0E #define NRF24L01_RX_ADDR_P5 0x0F #define NRF24L01_TX_ADDR 0x10 #define NRF24L01_RX_PW_P0 0x11 #define NRF24L01_RX_PW_P1 0x12 #define NRF24L01_RX_PW_P2 0x13 #define NRF24L01_RX_PW_P3 0x14 #define NRF24L01_RX_PW_P4 0x15 #define NRF24L01_RX_