单片机型号为stc12c5a60s2
温度传感器为DS18B20
无线传输为NRF24L01
温度显示LCD1602
单片机源程序如下:
#include
#include
#include "DELAY.h"
#include "NRF24L01.h"
#include "LCD1602.h"
#include "DS18B20.h"
void main(void)
{
int temp,intt,dect;
unsigned char temp_buf[16]={0};
EA=1;
LCD_Init(); //LCD1602初始化
Start18B20(); //配置DS18B20
P23=0;
while(1)
{
temp=Get18B20Temp(); //读取温度
if(temp>0)
{
intt=temp>>4; //分理出整数部分
dect=temp&0xf; //分理出小数部分
intt=intt*16*0.0625; //处理整数部分
dect=(dect*10)/16; //处理小数部分
sprintf(temp_buf,"Temp now:%2d.%d^C",intt,dect);//把温度转化为字符串temp_buf
NRF24L01_Init_TX(0); //配置NRF24L01的通道0
CE=0;
SPI_Write_Reg(WRITE_REG + RF_CH,40); ////设置RF通道为40
CE=1;
nRF24L01_TxPacket(temp_buf); //发送temp_buf中数
delay_ms(5);
LCD_ShowString(0,0,"Mode:launching ");
LCD_ShowString(1,0,temp_buf); //LCD1602显示温度
delay_ms(5);
}
}
}
复制代码
#include
#include
#include "NRF24L01.H"
uchar xdata RX_ADDRESS0[TX_ADR_WIDTH]={0x30,0xE6,0x45,0x82,0x7E}; //通道0地址
uchar xdata RX_ADDRESS1[TX_ADR_WIDTH]={0xC2,0x49,0x49,0x49,0x49}; //通道1地址
uchar xdata RX_ADDRESS2[TX_ADR_WIDTH]={0x94,0x49,0x49,0x49,0x49}; //通道2地址
uchar xdata RX_ADDRESS3[TX_ADR_WIDTH]={0x33,0x49,0x49,0x49,0x49}; //通道3地址
uchar xdata RX_ADDRESS4[TX_ADR_WIDTH]={0x00,0x49,0x49,0x49,0x49}; //通道4地址
uchar xdata RX_ADDRESS5[TX_ADR_WIDTH]={0x24,0x49,0x49,0x49,0x49}; //通道5地址
uchar xdata *pipe_add[6] = {RX_ADDRESS0,RX_ADDRESS1,RX_ADDRESS2,RX_ADDRESS3,RX_ADDRESS4,RX_ADDRESS5};//所有通道地址的集合
/**********************************RNF24L01状态标志位************************************************/
uchar bdata sta;
sbit RX_DR =sta^6;
sbit TX_DS =sta^5;
sbit MAX_RT =sta^4;
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调 用:DELAY_MS (?);
参 数:1~65535(参数不可为0)
返回值:无
结 果:占用CPU方式延时与参数数值相同的毫秒时间
备 注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void Delayms (uint a)
{
uint i;
while( --a != 0)
{
for(i = 0; i < 600; i++);
}
}
/*********************************************************************************************/
/***************************************************************************
函数名称:uchar SPI_RW(uchar dat)
函数功能:NRF24L01的SPI时序
函数备注:Writes one byte to nRF24L01, and return the byte read from nRF24L01 during write
***************************************************************************/
uchar SPI_RW(uchar dat)
{
uchar i;
for(i=8;i>0;i--)
{
dat <<= 1;
MOSI = CY;
SCK = 1;
dat |= MISO;
SCK = 0;
}
return(dat);
}
/***************************************************************************
函数名称:uchar SPI_Read(uchar cmd_reg)
函数功能:NRF24L01的SPI读时序
函数备注:
***************************************************************************/
//uchar SPI_Read(uchar cmd_reg)
//{
// uchar value;
//
// CSN = 0;
// SPI_RW(cmd_reg);
// value = SPI_RW(0);
// CSN = 1;
//
// return(value);
//}
/***************************************************************************
函数名称:void SPI_Write_Reg(uchar cmd_reg, uchar value)
函数功能:写入NRF24L01寄存器
函数备注:
***************************************************************************/
void SPI_Write_Reg(uchar cmd_reg, uchar value)
{
CSN = 0;
SPI_RW(cmd_reg);
SPI_RW(value);
CSN = 1;
}
/***************************************************************************
函数名称:uchar SPI_Read_Buf(uchar cmd_reg, uchar *pBuf, uchar num)
函数功能:从NRF24L01寄存器中读出数据
函数备注:reg:为寄存器地址,pBuf:为待读出数据地址,uchar:读出数据的个数
***************************************************************************/
//uchar SPI_Read_Buf(uchar cmd_reg, uchar *pBuf, uchar num)
//{
// uchar status,i;
//
// CSN = 0;
// status = SPI_RW(cmd_reg);
// for(i=0;i
// pBuf[i] = SPI_RW(0);
// CSN = 1;
//
// return(status);
//}
/***************************************************************************
函数名称:void SPI_Write_Buf(uchar cmd_reg, uchar *pBuf, uchar num)
函数功能:在NRF24L01寄存器中写入数据
函数备注:reg:为寄存器地址,pBuf:为待写入数据地址,uchar:写入数据的个数
***************************************************************************/
void SPI_Write_Buf(uchar cmd_reg, uchar *pBuf, uchar num)
{
uchar i;
CSN = 0; //SPI使能
SPI_RW(cmd_reg);
for(i=0; i
SPI_RW(*p
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』