基于NRF24L01+温度无线传输51单片机

2026/4/23 5:35:22

{ uchar reg_val;

CSN = 0;

SPI_RW(reg); //写指令 reg_val = SPI_RW(0); //读reg的内容 CSN = 1; return(reg_val); }

uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes) { uchar status,byte_ctr;

CSN = 0; status = SPI_RW(reg);

for(byte_ctr=0; byte_ctr

CSN = 1; return(status); }

void TX_Mode(void) { CE=0;

SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); /*接收模块的地址*/

SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); /*通道0 接收数据地址*/

SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); /*写待发数据指令a0*/

SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); //数据通道0应答允许 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); //接收数据通道0允许

SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);//等待 500+86us 自动重发10次

SPI_RW_Reg(WRITE_REG + RF_CH,40);

SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //数据传输率1Mbps ,发射功率0dBm

SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); //配置寄存器 CE=1; }

void checkflag()

{ sta=SPI_Read(STATUS);//读状态寄存器 if(MAX_RT) { SPI_RW_Reg(FLUSH_TX,0); /*冲洗发送FIFO指令*/

} SPI_RW_Reg(WRITE_REG+STATUS,sta);//清除中断 }

//以下是DS18B20的操作程序

//************************************************************************/ void delay_18B20(unsigned int i)//延时1微秒 {

while(i--); }

set18b20()/*ds1820复位*/ { EA=0; ds18b20= 1; //复位 delay_18B20(4); //延时 ds18b20 = 0; //拉低 delay_18B20(100); //精确延时大于480us ds18b20 = 1; //拉高 delay_18B20(10); crrent=ds18b20; while(!ds18b20); EA=1; return(crrent); //返回值 }

uchar read18b20() /*读数据*/ { uchar i;

uchar dat = 0; EA=0; for(i=0x01; i!=0; i<<=1) { ds18b20 = 0; _nop_(); _nop_(); ds18b20 = 1; _nop_(); _nop_(); if(!ds18b20) dat &= ~i; else dat |= i; delay_18B20(8);

} EA=1; return dat; }

void write18b20(uchar wdata) /*写数据*/ {unsigned char i=0; EA=0;

for (i=8; i>0; i--) { ds18b20 = 0; _nop_(); _nop_();

ds18b20=wdata&0x01; delay_18B20(10); ds18b20 = 1; wdata>>=1; }

EA=1; }

//******************************LCD1602****************************************************************

void delayms(uint z) //不精确延时 { uchar x; uint y; for(x=z;x>0;x--) for(y=125;y>0;y--); }

void LCD_BUSY() //LCD忙检测 { uchar sta; P0=0xff; lcdrs=0; lcdrw=1; do{ lcden=1; sta=P0; lcden=0; }while(sta & 0x80); }

void writelcdcmd(uchar cmd) //LCD写命令 { LCD_BUSY(); delayms(1); lcdrs=0; lcdrw=0; lcden=0; P0=cmd; delayms(1); lcden=1; delayms(1); lcden=0; }

void writelcddat(uchar dat) //LCD写数据 { LCD_BUSY(); delayms(1); lcdrs=1; lcdrw=0; lcden=0; P0=dat; delayms(1); lcden=1; delayms(1); lcden=0; }

void inilcd() //LCD初始化 { delayms(15); writelcdcmd(0x38); delayms(5); writelcdcmd(0x0c); delayms(5); writelcdcmd(0x06); delayms(5); writelcdcmd(0x01); delayms(5); }

void play(unsigned char *p)//显示// {


基于NRF24L01+温度无线传输51单片机.doc 将本文的Word文档下载到电脑
搜索更多关于: 基于NRF24L01+温度无线传输51单片机 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219