




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成都理工大学工程技术学院毕业论文远程温度检测- 28 -基于nRF24L01模块的无线通信系统设计摘要温度是一个非常重要的参数。在工业、医疗、军事和生活等许多地方,都需要用到测温装置来检测温度。传统直接布线测量不满足要求,特别是在某些环境恶劣的工业环境和户外环境,通过直接布线测量不现实。因此采用无线传输温度检测尤为必要。目前有些设计能够实现无线温度采集,但价格过高是其最大的缺点。在实际温度控制过程中既要求系统具有稳定性、实时性又需要降低功耗。因此设计一种低功耗的无线温度检测系统很有意义。本文提出一种采用单片机AT89S52控制DS18B20实现的无线温度测量系统。通过简单的无线通信协议,实现可靠性与功耗平衡,该系统能实现对温度的检测,能够同时进行温度检测,是可以实现远程控制的无线温度检测系统。低功耗、实时性的无线温度检测是该设计的最大特点。无线传输采用nRF24L01模块传输。该系统结构简单,可靠,功耗较低,成本低,是一种无线传感器的解决方案。关键字:单片机 在工业现场,由于生产环境恶劣,工作人员不能长时间停留在现场观察设备是否运行正常,就需要采集数据并传输数据到一个环境相对好的操控室内,这样就会产生数据传输问题。由于厂房大、需要传输数据多,使用传统的有线数据传输方式就需要铺设很多很长的通讯线,浪费资源,占用空间,可操作性差,出现错误换线困难。而且,当数据采集点处于运动状态、所处的环境不允许或无法铺设电缆时,数据甚至无法传输,此时便需要利用无线传输的方式进行数据采集。在农业生产上,不论是温室大棚的温度监测,还是粮仓的管理,传统上都是采取分区取样的人工方法,工作量大,可靠性差。而且大棚和粮仓占地面积大,检测目标分散,测点较多,传统的方法已经不能满足当前农业发展的需要。当前的科技水平下,无线通信技术的发展使得温度采集测量精确,简便易行。在日常生活中,随着人们生活水平的提高,居住条件也逐渐变得智能化。如今很多家庭都会安装室内温度采集控制系统,其原理就是利用无线通信技术采集室内温度数据,并根据室内温度情况进行遥控通风等操作,自动调节室内温度湿度,可以更好地改善人们的居住环境。以上只是简单列举几个现实的例子,在现实生活中,这种无线温度采集系统已经被成功应用于工农业、环境监测、军事国防、机器人控制等许多重要领域,而且类似于这种温度采集系统的无线通信网络已经被广泛的应用到民用和军事领域。凡是布线繁杂或不允许布线的场合都希望能通过无线方案来解决。为此,需要设计相应的接口系统,控制这些射频芯片工作,完成可靠稳定的无线数据通信,这样的研究也变得更加有意义了。本系统的设计采用了Nordic公司新推出的工作于2.4GHz频段NRF24L01射频芯片,由AT89S52单片机控制实现短距离无线数据通信。该接口设计具有成本低、传输速率高、软件设计简单以及通信稳定可靠等特点。整个系统有发送和接收二部分,通过NRF24L01无线数据通信收发模块来实现无线数据传输。发送部分以单片机AT89S52为核心,使用温度转换芯片DS18B20实时采集温度并通过nRF24l01将采集的温度无线传送给接收部分,然后在LCD1602上显示,并通过串口发送到PC机上显示,通过蜂鸣器实现对温度过高或过低进行报警。1 系统方案分析与选择论证1.1 系统方案设计方案:采用传统的AT89S52单片机作为主控芯片。此芯片价格便宜、操作简便,低功耗,比较经济实惠。采用NRF24L01无线射频模块进行通信,NRF24L01是一款高速低功耗的无线通信模块。他能传输上千米的距离(加PA),而且价格较便宜、,采用SPI总线通信模式电路简单,操作方便。1.1.3 温度传感方案方案:采用美国DALLAS公司生产的 DS18B20可组网数字温度传感器芯片,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。经济,方便。使用DS18B20线路简单,编程容易,但是比AD590精度低。AD590还需要其它辅助电路,线路复杂,编程难度大,但是温度精确。考虑到电路的设计,成本,还有多点通信,我们选择方案二,即用DS18B20作为本系统的温度传感器。1.1.4 显示模块方案方案:采用字符液晶LCD1602显示信息,1602是一款比较通用的字符液晶模块,能显示字符和数字等信息,且价格便宜,容易控制。1.2 系统最终方案发送端:发送端由温度传感器DS18B20,AT89S52单片机,nRF24L01无线射频模块,数码管显示模块和外设继电器组成。图1.2发送端系统方框图接收端:接收端由AT89S52单片机,nRF24L01无线射频模块,LCD1602显示模块,报警电路和串口组成。图1.3 接收端系统方框图2 主要芯片介绍和系统模块硬件设计2.1 AT89S52AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。2.1.1 单片机控制模块单片机控制模块由AT89S52最小系统组成,其中包括单片机,晶振电路和复位电路。(1)、晶振电路晶振电路由两个30pF电容和一个12MHz晶体振荡器构成,接入单片机的X1、X2引脚。(2)、复位电路单片复位端低电平有效。单片机最小系统如图2.2:图2.2 单片机最小系统2.2 单片2.4GHz nRF24L01无线模块2.2.1 nRF24L01芯片概述nRF24L01是一款新型单片射频收发器件,工作于2.4 GHz2.5 GHz ISM频段。内置频率合成器、功率放大器、晶体振荡器、调制器等功能模块,并融合了增强型ShockBurst技术,其中输出功率和通信频道可通过程序进行配置。nRF24L01功耗低,在以-6 dBm的功率发射时,工作电流也只有9 mA;接收时,工作电流只有12.3 mA,多种低功率工作模式(掉电模式和空闲模式)使节能设计更方便。 2.2.3 工作模式通过配置寄存器可将nRF241L01配置为发射、接收、空闲及掉电四种工作模式,如表所示。 待机模式1主要用于降低电流损耗,在该模式下晶体振荡器仍然是工作的;待机模式2则是在当FIFO寄存器为空且CE=1时进入此模式;待机模式下,所有配置字仍然保留。 在掉电模式下电流损耗最小,同时nRF24L01也不工作,但其所有配置寄存器的值仍然保留。nRF24L01单端匹配网络:晶振,偏置电阻,去耦电容。图2.6 nRF24L01单端50射频输出电路原理图2.3 温度传感器 DS18B20DALLAS最新单线数字温度传感器DS18B20简介新的一线器件体积更小、适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 一线总线接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20、 DS1822 一线总线数字化温度传感器 同DS1820一样,DS18B20也 支持一线总线接口,测量温度范围为 -55C+125C,在-10+85C范围内,精度为0.5C。DS1822的精度较差为 2C 。现场温度直接以一线总线的数字方式传输,大大提高了系统的抗干扰性。2.3.1 DS18B20管脚配置和内部结构内部结构:图2.8 DS18B20内部结构图(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 (2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。 bit7bit6bit5bit4bit3bit2bit1bit0LS Byte232221202-12-22-32-4bit15bit14bit13bit12bit11bit10bit9bit8MS ByteSSSSS262524图2.9 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的数字输出为FF6FH,-55的数字输出为FC90H。2.3.2 DS18B20的硬件设计 DS18B20在本系统中与发送端单片机的P3.3连接。如图:图2.10的DS18B20硬件连接图2.4 显示模块本系统显示模块分两种:1、接收端显示模块用LCD1602液晶模块。2、发送端使用数码管显示。2.4.1 接收端显示模块本设计在接收端部分采用LCD1602液晶显示模块来显示温度,,P0由上拉电阻提高驱动能力,作为数据输出并作为LCD的驱动,P2口的P2.7-P2.6分别作为液晶显示模块的使能信号E,数据/命令选择RS,R/W端则配置成写。具体电路如图2.11所示。2.4.2 发送端显示模块本设计在发送端部分采用数码管显示,P0由上拉电阻提高驱动能力,作为数据输出。P2.7-P2.4分别作为数码管位显示S1-S4。如图2.12所示:图2.12发送端数码管显示连接2.5 报警电路当外界温度超过预设温度上下限时,为更加有效的引起用户的注意,及时关注温度的变化,本系统设计了声报警电路。该电路由蜂鸣器和NPN三极管组成,具体电路如图2.13所示。图2.13 接收端报警电路2.7 电源电路设计A、本系统单片机需要一组5V电源,B、本系统无线模块需要一3.3V电源,采用电源电路如图2.16所示。该电路把先前转换得到的5V电源经过低压差电压调节器ams1117转换为3.3V电源。2.8 其他外围电路本系统需要在温度过高的情况下驱动继电器,打开通风系统。继电器连接发送端单片机P3.7口。3 系统软件设计3.1.1 发送端软件设计本系统发送端采用DS18B20温度传感器采集温度,经AT89S52收集处理数据,温度数据数码管显示,如果温度过高,则单片机控制继电器工作,再由nRF24L01模块发送到接收端。其中包括DS18B20和nRF24L01模块的初始化配置。软件流程图如3.1。图3.1 发送端程序流程图3.1.2 接收端软件设计本系统接收端采用nRF24L01无线模块接收发送端传来的温度数据,经单片机AT89S52在LCD1602液晶显示器上显示。温度过高则报警电路工作。最后单片机把数据经串口传输给PC机。其中包括nRF24L01模块和LCD1602液晶显示器的初始化。流程图如3.2 。图3.2 接受端程序流程图5 硬件电路板设计电源模块:由VCC提供+5V高电平,Power接口接入,经过LM1117降压为+3.3V电平,为nRF24L01模块提供高电平。显示模块:P1口接无线模块的控制端口。P0.0P0.7接数码管段选端D0-D7。无线模块控制模块:无线模块由P2口控制。温度采集模块:温度采集由DS18B20 I/O端接入单片机P3.3口。单片机最小系统:X1,X2接外部振荡电路,RESET端接复位电路,EA端接高。接收端由单片机主控电路、USB电源+5V接入、串口通信电路、无线模块供电电路、LCD1602液晶显示接口和报警电路组成。单片机主控电路由AT89S52最小系统组成。+5V电源由USB接口提供给单片机和其他模块。接入后发光二极管点亮。串口通信模块由DB9和RS232的外围电路组成。串口通信一边接单片机的RXD和TXD,一边连接PC机。LCD1602显示模块数据端接单片机P0口,RS,RW,E分别接单片机的P2.0-P2.2 。报警电路接单片机的P1.5脚。由一个三极管和喇叭组成。发送程序#include #include #define uint unsigned int#define uchar unsigned char#define TX_ADDR_WITDH 5/发送地址宽度设置为5个字节#define RX_ADDR_WITDH 5#define TX_DATA_WITDH 5#define RX_DATA_WITDH 5/*/ nRF24L01指令格式:*/#define R_REGISTER 0x00 / 读寄存器#define W_REGISTER 0x20 / 写寄存器#define R_RX_PLOAD 0x61 / 读RX FIFO有效数据,1-32字节,当读数据完成后,数据被清除,应用于接收模式#define W_TX_PLOAD 0xA0 / 写TX FIFO有效数据,1-32字节,写操作从字节0开始,应用于发射模式#define FLUSH_TX 0xE1 / 清除TX FIFO寄存器,应用于发射模式#define FLUSH_RX 0xE2 / 清除RX FIFO寄存器,应用于接收模式#define REUSE_TX_PL 0xE3 / 重新使用上一包有效数据,当CE为高过程中,数据包被不断的重新发射#define NOP 0xFF / 空操作,可以用来读状态寄存器/*/ nRF24L01寄存器地址*/#define CONFIG 0x00 / 配置寄存器#define EN_AA 0x01 / “自动应答”功能寄存#define EN_RX_ADDR 0x02 / 接收通道使能寄存器#define SETUP_AW 0x03 / 地址宽度设置寄存器#define SETUP_RETR 0x04 / 自动重发设置寄存器#define RF_CH 0x05 / 射频通道频率设置寄存器#define RF_SETUP 0x06 / 射频设置寄存器#define STATUS 0x07 / 状态寄存器#define OBSERVE_TX 0x08 / 发送检测寄存器#define CD 0x09 / 载波检测寄存器#define RX_ADDR_P0 0x0A / 数据通道0接收地址寄存器#define RX_ADDR_P1 0x0B / 数据通道1接收地址寄存器#define RX_ADDR_P2 0x0C / 数据通道2接收地址寄存器#define RX_ADDR_P3 0x0D / 数据通道3接收地址寄存器#define RX_ADDR_P4 0x0E / 数据通道4接收地址寄存器#define RX_ADDR_P5 0x0F / 数据通道5接收地址寄存器#define TX_ADDR 0x10 / 发送地址寄存器#define RX_PW_P0 0x11 / 数据通道0有效数据宽度设置寄存器#define RX_PW_P1 0x12 / 数据通道1有效数据宽度设置寄存器#define RX_PW_P2 0x13 / 数据通道2有效数据宽度设置寄存器#define RX_PW_P3 0x14 / 数据通道3有效数据宽度设置寄存器#define RX_PW_P4 0x15 / 数据通道4有效数据宽度设置寄存器#define RX_PW_P5 0x16 / 数据通道5有效数据宽度设置寄存器#define FIFO_STATUS 0x17 / FIFO状态寄存器/*uchar sta; / 状态变量#define RX_DR (sta & 0x40) / 接收成功中断标志#define TX_DS (sta & 0x20) / 发射成功中断标志#define MAX_RT (sta & 0x10) / 重发溢出中断标志sbit CE=P35;sbit IRQ=P36;sbit CSN=P34;sbit MOSI=P32;sbit MISO=P31;sbit SCK=P33;sbit LED=P17;sbit DQ=P10;uchar code TX_Addr=0x34,0x43,0x10,0x10,0x01;uchar RX_BufferRX_DATA_WITDH;uchar Temp_Value=0x00,0x00;uchar Temp;uchar Display_Digit=0,0,0,0;bit DS18B20_IS_OK=1;uchar code df_tab=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;/decimal fractionvoid _delay_tus(uint x)while(-x);void _delay_us(uint x)uint i,j;for (j=0;jx;j+)for (i=0;i12;i+);void _delay_ms(uint x)uint i,j;for (j=0;jx;j+)for (i=0;i120;i+);sbit beep = P15; /定义蜂鸣器口/*报警声音*/void bi(uint t) int c,n;for(c=0;ct;c+) for(n=0;n0;i-)DQ=0;dat=1;DQ=1;_nop_();_nop_();if(DQ)dat|=0x80;_delay_tus(30);DQ=1;return dat;/*/*函数功能:向DS18B20写一字节*/*入口参数:dat(把dat写入DS18B20) */*出口函数:无 */*/void Write_One_Byte(uchar dat)uchar i;for(i=8;i0;i-)DQ=0;DQ=dat&0x01;_delay_tus(5);DQ=1;dat=1;/*/*函数功能:从DS18B20读取数据(数据)*/*入口参数:无 */*出口函数:无 */*/void Read_Temp(void)uchar ng=0;if(DS18B20_Init()=1)DS18B20_IS_OK=0;elseWrite_One_Byte(0xcc);Write_One_Byte(0x44);DS18B20_Init();Write_One_Byte(0xcc);Write_One_Byte(0xbe);Temp_Value0=Read_One_Byte();Temp_Value1=Read_One_Byte();DS18B20_IS_OK=1;if(Temp_Value1&0xf8)=0xf8)Temp_Value1=Temp_Value1;Temp_Value0=Temp_Value0+1;if(Temp_Value0=0x00)Temp_Value1+;ng=1;Display_Digit0=df_tabTemp_Value0&0x0f;Temp=(Temp_Value0&0xf0)4)|(Temp_Value1&0x07)0;i-) for(j=150;j0;j-);/*写指令*/void write_com(uchar com) rs = 0;rw = 0;en = 0;P0 = com;delay1(5);en = 1;delay1(5);en = 0;/*写数据*/void write_dat(uchar dat) rs = 1;rw = 0;en = 0;P0 = dat;delay1(5);en = 1;delay1(5);en = 0;/*液晶显示程序*/*时分秒的分离*/void write_sfm(uchar add ,uchar dat) uchar shi ,ge;/分离数字,如34,分成3和4shi = dat/10;ge = dat%10;write_com(0x80+0x40+add);write_dat(0x30+shi);write_dat(0x30+ge);/*星期*/void write_xq(uchar add1,uchar dat1) uchar ge; /星期只需要一个数字显示ge = dat1%10;write_com(0x80+add1);write_dat(0x30+ge);/*高温低温数分离*/void write_HL(uchar add2 ,uchar dat2) uchar shi ,ge;/分离数字,如34,分成3和4shi = dat2/10;ge = dat2%10;write_com(0x80+add2);write_dat(0x30+shi);write_dat(0x30+ge);/*按键调时程序*/void jianpan()if(!k1)k1num+;if(k1num=5)k1num=0;if(!k2) switch(k1num)case 0:TR0=0;fen+;if(fen=60)fen=0;TR0=1;break;case 1: TR0=0;shi+;if(shi=24)shi=0;TR0=1; break;case 2:xq+;if(xq=8)xq=1;break;case 3:L+;if(L=100)L=0;break;case 4:H+;if(H=100)H=0;break; if(!k3) switch(k1num)case 0:TR0=0;fen-;if(fen=0)fen=59;TR0=1;break;case 1:TR0=0;shi-;if(shi=0)shi=23;TR0=1;break;case 2:xq-;if(xq=0)xq=7;break; case 3:L-;if(L=0)L=99;break;case 4:H-;if(H=0)H=99; break;/*初始化*/void init1() uchar num ;/定义一个变量num,用于下面数组的初始化en = 0;write_com(0x38); write_com(0x0f);/不显示光标write_com(0x06); /光标向右边自动移位write_com(0x01); /清屏shi = 23;fen = 59;miao =55;xq = 7;H=33;L=25;write_com(0x80);for(num=0;num16;num+)write_dat(tablenum);delay1(10);write_com(0x80+0x40);for(num=0;num16;num+)write_dat(table1num);delay1(10);/*定时器初始化*/TMOD = 0x01;/定义定时器0,工作方式1TH0 = (65536-50000 )/256;/高8位TL0 = (65536-50000 )%256; /低8位EA = 1;ET0 = 1; TR0 = 1; /打开定时器/*定时器中断函数*/void timer() interrupt 1 TH0 = (65536-50000 )/256;TL0 = (65536-50000 )%256;count+;if(count=20)count = 0;miao+;if(miao=60)miao = 0;fen+;/if(fen=60)fen = 0;shi+;/if(shi=24)shi = 0;xq+;if(xq=8)xq = 1; /uchar code mytab8=0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00;/*显示位置*/void lcd_pos(uchar pos) write_com(pos|0x80); /数据指针80+地址变量/*自定义字符*/void writetab() uchar i;write_com(0x40);for(i=0;i8;i+)write_dat(mytabi);/*温度显示*/void wendu()writetab();/ 自定义字符写入delay1(5);lcd_pos(0x4e);/显示圈圈write_dat(0x00);/显示自定义字符write_com(0x0c);Read_Temp();write_com(0x80+0x40+10);write_dat(0x30+Display_Digit2);write_com(0x80+0x40+11);write_dat(0x30+Display_Digit1);write_com(0x80+0x40+13);write_dat(0x30+Display_Digit0);write_com(0x80+0x40+15);write_dat(0x30+0x43);write_sfm(15,xq); write_HL(9,L);write_HL(3,H);/*时间显示*/write_sfm(6,miao);write_sfm(3,fen);write_xq(15,xq);write_sfm(0,shi); /*温度报警*/void baojing()if(H=Temp)bi(500);/*/*函数功能:从DS18B20读取数据转换成ASCII码写入液晶 */*模块 */*入口参数:无 */*出口函数:无 */*/*void Display_Temperature(void)uchar ng=0;if(Temp_Value1&0xf8)=0xf8)Temp_Value1=Temp_Value1;Temp_Value0=Temp_Value0+1;if(Temp_Value0=0x00)Temp_Value1+;ng=1;Display_Digit0=df_tabTemp_Value0&0x0f;Temp=(Temp_Value0&0xf0)4)|(Temp_Value1&0x07)4);Display_Digit3=Temp/100;Display_Digit2=Temp%100/10;Display_Digit1=Temp%10;Display_LINE113=0x43;Display_LINE112=0xdf;Display_LINE111=Display_Digit0+0;Display_LINE110=.;Display_LINE19=Display_Digit1+0;Display_LINE18=Display_Digit2+0;Display_LINE17=Display_Digit3+0;if(Display_Digit3=0)Display_LINE17= ;if(Display_Digit2=0&Display_Digit3=0)Display_LINE18= ;if(ng)if(Display_LINE18= )Display_LINE18=-;else if(Display_LINE17= )Display_LINE17=-;else Display_LINE16=-;LCD_POS(0);Show_String(Display_LINE0);LCD_POS(0x40);Show_String(Display_LINE1);void main(void)Init_LCD();Read_Temp();_delay_ms(1000);while(1)Read_Temp();if(DS18B20_IS_OK)Display_Temperature();_delay_ms(200);*/*nRF24L01初始化*/void nRF24L01_Init(void)_delay_us(2000);CE=0;/待机模式CSN=1;SCK=0;IRQ=1;/*SPI时序函数*/uchar SPI_RW(uchar byte)uchar i;for(i=0;i8;i+)/一字节8位循环8次写入if(byte&0x80)/如果数据最高位是1/当访问多字节寄存器时首先要读/写的是最低字节的高位?MOSI=1;/向NRF24L01写1else /否则写0MOSI=0;byte=1;/低一位移到最高位SCK=1;/SCK拉高,写入一位数据,同时读取一位数据if(MISO)byte|=0x01;SCK=0;/SCK拉低return byte;/返回读取一字节 /*SPI写寄存器一字节函数*/*reg:寄存器地址*/*value:一字节(值)*/uchar SPI_W_Reg(uchar reg,uchar value)uchar status;/返回状态CSN=0;/SPI片选status=SPI_RW(reg);/写入寄存器地址,同时读取状态SPI_RW(value);/写入一字节CSN=1;/return status;/返回状态/*SPI*/uchar SPI_R_byte(uchar reg)uchar reg_value;CSN=0;/SPI片选SPI_RW(reg);/写入地址reg_value=SPI_RW(0);/读取寄存器的值CSN=1;return reg_value;/返回读取的值/*SPI读取RXFIFO寄存器数据*/*reg:寄存器地址*/*Dat_Buffer:用来存读取的数据*/*DLen:数据长度*/uchar SPI_R_DBuffer(uchar reg,uchar *Dat_Buffer,uchar Dlen)uchar status,i;CSN=0;/SPI片选status=SPI_RW(reg);/写入寄存器地址,同时状态for(i=0;iDlen;i+)Dat_Bufferi=SPI_RW(0);/存储数据CSN=1;return status;/*SPI向TXFIFO寄存器写入数据*/*reg:写入寄存器地址*/*TX_Dat_Buffer:存放需要发送的数据*/*Dlen:数据长度*/uchar SPI_W_DBuffer(uchar reg,uchar *TX_Dat_Buffer,uchar Dlen)uchar status,i;CSN=0;/SPI片选,启动时序status=SPI_R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教师招聘之《幼儿教师招聘》考试题库及参考答案详解【黄金题型】
- 智能门铃视频通话创新创业项目商业计划书
- 电动汽车充电网络智能调度与分配创新创业项目商业计划书
- 教师招聘之《小学教师招聘》试卷附完整答案详解(夺冠系列)
- 教师招聘之《小学教师招聘》自我提分评估附答案详解(b卷)
- 教师招聘之《幼儿教师招聘》考试历年机考真题集附答案详解(能力提升)
- 教师招聘之《小学教师招聘》能力检测(典型题)附答案详解
- 教师招聘之《小学教师招聘》考试黑钻押题带答案详解(培优b卷)
- 教师招聘之《小学教师招聘》考前冲刺测试卷讲解及参考答案详解1套
- 2025年教师招聘之《幼儿教师招聘》检测卷附答案详解【考试直接用】
- 贵阳市殡仪服务中心招聘考试真题2024
- 中学藏文散文教学课件大纲
- 第4课《乡愁》课件-2025-2026学年统编版语文九年级上册
- 兵役法教学课件
- 第六届山东省无人机技术与应用职业技能竞赛(无人机测绘操控员)题库(含答案)
- 第1章三角形单元测试2025-2026学年苏科版八年级数学上册
- 2025-2026学年人教版小学数学四年级上册教学计划及进度表
- 高中语文课本中的作文素材(选必上)
- 2025年中医确有专长考试题库(附答案)
- 2025年秋季学期(统编版)二年级上册语文教学工作计划及教学进度表
- 2025年小学会计入职考试题库
评论
0/150
提交评论