nRF24L01写的无线温度发送部分.docx
- 文档编号:6981808
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:23
- 大小:21.09KB
nRF24L01写的无线温度发送部分.docx
《nRF24L01写的无线温度发送部分.docx》由会员分享,可在线阅读,更多相关《nRF24L01写的无线温度发送部分.docx(23页珍藏版)》请在冰点文库上搜索。
nRF24L01写的无线温度发送部分
#include
#include
typedefunsignedcharuchar;
typedefunsignedcharuint;
///**********************************************************************////
sbitJD1=P2^5;
sbitJD2=P2^6;
sbitJD3=P2^7;
sbitKG1=P1^7;
sbitKG3=P3^2;
sbitKG2=P3^3;
sbitBEEF=P2^4;
//**************************************************************************//
unsignedinttt,hh;
bitpresence;
sbitLCD_RS=P2^0;
sbitLCD_RW=P2^1;
sbitLCD_EN=P2^2;
ucharcodecdis3[]={"Tem"};//Temperature温度
ucharcodecdis4[]={"Hum"};//Humidity湿度
unsignedinttt,hh;
unsignedchardatatemp_data[2]={0x00,0x00};
unsignedchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};
//unsignedcharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
//0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
//unsignedcharcodemytab[8]={0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};
ucharTempBuffer_T[6],TempBuffer_H[6],T_set[6];
#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};
//***********************************
//DHT21温湿度传感器部分子程序模块
//***********************************
typedefunsignedcharU8;/*definedforunsigned8-bitsintegervariable无符号8位整型变量*/
typedefsignedcharS8;/*definedforsigned8-bitsintegervariable有符号8位整型变量*/
typedefunsignedintU16;/*definedforunsigned16-bitsintegervariable无符号16位整型变量*/
#defineData_0_time4
//uinttem;
//----------------------------------------------//
//----------------IO口定义区--------------------//
//----------------------------------------------//
sbitP1_1=P1^6;//
//----------------------------------------------//
//----------------定义区--------------------//
//----------------------------------------------//
U8U8FLAG,k;
U8U8count,U8temp;
U8U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8U8comdata;
U8count,count_r=0;
//****************************************NRF24L01端口定义***************************************
sbitMISO=P1^3;
sbitMOSI=P1^4;
sbitSCK=P1^2;
sbitCE=P1^1;
sbitCSN=P1^0;
sbitIRQ=P1^5;
uchardispaly[8];//显示缓冲区
//******************************************************************************************
uintbdatasta;//NRF24L01状态标志
sbitRX_DR=sta^6;
sbitTX_DS=sta^5;
sbitMAX_RT=sta^4;
//*************************************NRF24L01**************************************************
#defineTX_ADR_WIDTH5//本机地址宽度设置
#defineRX_ADR_WIDTH5//接收方地址宽度设置
#defineTX_PLOAD_WIDTH20//4字节数据长度
#defineRX_PLOAD_WIDTH20//4字节数据长度
uintconstTX_ADDRESS[TX_ADR_WIDTH]={0x10,0x10,0x10,0x10,0xf0};//接收地址
uintconstRX_ADDRESS[RX_ADR_WIDTH]={0x10,0x10,0x10,0x10,0xf1};//本地地址
//*****************************NRF24L01寄存器指令,详细请对照,Page18******************************
#defineREAD_REG0x00//读寄存器指令
#defineWRITE_REG0x20//写寄存器指令
#defineRD_RX_PLOAD0x61//读取接收数据指令
#defineWR_TX_PLOAD0xA0//写待发数据指令
#defineFLUSH_TX0xE1//冲洗发送FIFO指令
#defineFLUSH_RX0xE2//冲洗接收FIFO指令
#defineREUSE_TX_PL0xE3//定义重复装载数据指令
#defineNOP0xFF//保留
//****************************SPI(nRF24L01)寄存器地址,详细请对照,Page18-24**********************
#defineCONFIG0x00//配置收发状态,CRC校验模式以及收发状态响应方式
#defineEN_AA0x01//自动应答功能设置
#defineEN_RXADDR0x02//可用信道设置
#defineSETUP_AW0x03//收发地址宽度设置
#defineSETUP_RETR0x04//自动重发功能设置
#defineRF_CH0x05//工作频率设置
#defineRF_SETUP0x06//发射速率、功耗功能设置
#defineSTATUS0x07//状态寄存器
#defineOBSERVE_TX0x08//发送监测功能
#defineCD0x09//地址检测
#defineRX_ADDR_P00x0A//频道0接收数据地址
#defineRX_ADDR_P10x0B//频道1接收数据地址
#defineRX_ADDR_P20x0C//频道2接收数据地址
#defineRX_ADDR_P30x0D//频道3接收数据地址
#defineRX_ADDR_P40x0E//频道4接收数据地址
#defineRX_ADDR_P50x0F//频道5接收数据地址
#defineTX_ADDR0x10//发送地址寄存器
#defineRX_PW_P00x11//接收频道0接收数据长度
#defineRX_PW_P10x12//接收频道0接收数据长度
#defineRX_PW_P20x13//接收频道0接收数据长度
#defineRX_PW_P30x14//接收频道0接收数据长度
#defineRX_PW_P40x15//接收频道0接收数据长度
#defineRX_PW_P50x16//接收频道0接收数据长度
#defineFIFO_STATUS0x17//FIFO栈入栈出状态寄存器设置
//************************************NRF24L01函数申明**********************************************
voidDelay(unsignedints);
voidinerDelay_us(unsignedcharn);
voidinit_NRF24L01(void);
uintSPI_RW(uintuchars);
ucharSPI_Read(ucharreg);
voidSetRX_Mode(void);
uintSPI_RW_Reg(ucharreg,ucharvalue);
uintSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars);
uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars);
unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf);
voidnRF24L01_TxPacket(unsignedchar*tx_buf);
//************************************DS18B20函数申明**********************************************
voiddelay1(uinti);
/*******************************************************************/
voiddelay1(uintms)
{
unsignedchary;
while(ms--)
{
for(y=0;y<250;y++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/******************************************************************/
/*检查LCD忙状态*/
/*lcd_busy为1时,忙,等待。
lcd-busy为0时,闲,可写指令与数据。
*/
/******************************************************************/
bitlcd_busy()
{
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delayNOP();
result=(bit)(P0&0x80);
LCD_EN=0;
return(result);
}
/*写指令数据到LCD*/
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。
*/
/*******************************************************************/
voidlcd_wcmd(ucharcmd)
{
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P0=cmd;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
/*******************************************************************/
/*写显示数据到LCD*/
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。
*/
/*******************************************************************/
voidlcd_wdat(uchardat)
{
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
/*LCD初始化设定*/
/*******************************************************************/
voidlcd_init()
{
delay1(15);
lcd_wcmd(0x01);//清除LCD的显示内容
//lcd_wcmd(0x38);//16*2显示,5*7点阵,8位数据
delay1(5);
//lcd_wcmd(0x38);
delay1(5);
lcd_wcmd(0x38);
delay1(5);
lcd_wcmd(0x0c);//显示开,关光标
delay1(5);
//lcd_wcmd(0x06);//移动光标
delay1(5);
lcd_wcmd(0x01);//清除LCD的显示内容
delay1(5);
}
/*设定显示位置*/
/*******************************************************************/
/*voidlcd_pos(ucharpos)
{
lcd_wcmd(pos|0x80);//数据指针=80+地址变量
}*/
voidgotoxy(unsignedchary,unsignedcharx)
{
if(y==1)
lcd_wcmd(0x80+x);
if(y==2)
lcd_wcmd((0x80+0x40)+x);
//if(y==3)
//wr_i_lcd((0x80|x)+8);
//if(y==4)
//wr_i_lcd((0x90|x)+8);
}
/*自定义字符写入CGRAM*/
/*******************************************************************/
/*voidwritetab()
{
unsignedchari;
lcd_wcmd(0x40);//写CGRAM
for(i=0;i<8;i++)
lcd_wdat(mytab[i]);
}
*/
//**********************************
//液晶显示字符串程序
//**********************************
voidprint(uchar*str)
{
while(*str!
='\0')
{
lcd_wdat(*str);
str++;
}
}
/*us级延时函数*/
/*******************************************************************/
voidDelay(unsignedintnum)
{
while(--num);
}
//***********************************
//DHT21温湿度传感器部分子程序模块
//floattt;
voidDelay2(unsignedintnum)
{
while(--num);
}
voidDelay_10us(void)
{
U8i;
i--;
i--;
i--;
i--;
i--;
i--;
}
voidCOM(void)
{
U8i;
for(i=0;i<8;i++)
{
U8FLAG=2;
//----------------------
P1_1=0;//T
P1_1=1;//T
//----------------------
while((!
P1_1)&&U8FLAG++);
Delay_10us();
Delay_10us();
//Delay_10us();
U8temp=0;
if(P1_1)U8temp=1;
U8FLAG=2;
while((P1_1)&&U8FLAG++);
//----------------------
P1_1=0;//T
P1_1=1;//T
//----------------------
//超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
//如果高电平高过预定0高电平值则数据位为1
U8comdata<<=1;
U8comdata|=U8temp;//0
}//rof
}
//--------------------------------
//-----湿度读取子程序------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高8位==U8T_data_H------
//----温度低8位==U8T_data_L------
//----湿度高8位==U8RH_data_H-----
//----湿度低8位==U8RH_data_L-----
//----校验8位==U8checkdata-----
//----调用相关子程序如下----------
//----Delay();,Delay_10us();,COM();
//--------------------------------
voidRH(void)
{
//主机拉低18ms
P1_1=0;
Delay2(180);
P1_1=1;
//总线由上拉电阻拉高主机延时20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主机设为输入判断从机响应信号
P1_1=1;
//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行
if(!
P1_1)//T!
{
U8FLAG=2;
//判断从机是否发出80us的低电平响应信号是否结束
while((!
P1_1)&&U8FLAG++);
U8FLAG=2;
//判断从机是否发出80us的高电平,如发出则进入数据接收状态
while((P1_1)&&U8FLAG++);
//数据接收状态
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
P1_1=1;
//数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}
}
}
voidReadTemp_T(void)
{
uchara=0;
ucharb=0;
RH();
a=U8T_data_L;//读取温度值低位
b=U8T_data_H;//读取温度值高位
tt=0xff&b;
tt=tt<<8;
tt=tt|a;
}
voidtemp_to_str_T()//温度数据转换成液晶字符显示
{
TempBuffer_T[0]=':
';
TempBuffer_T[1]=tt/100+'0';//十位
TempBuffer_T[2]=tt%100/10+'0';//个位
TempBuffer_T[3]='.';
TempBuffer_T[4]=tt%10+'0';
TempBuffer_T[5]='\0';
}
voidReadTemp_H(void)
{
uchara=0;
ucharb=0;
RH();
a=U8RH_data_L;//读取湿度值低位
b=U8RH_data_H;//读取湿度值高位
hh=0xff&
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- nRF24L01 无线 温度 发送 部分