历史上的今天
今天是:2024年12月04日(星期三)
2019年12月04日 | 基于NRF24L01的DS18B20温度无线传输单片机源码
2019-12-04 来源:51hei
单片机型号为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 // 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 CSN = 1; //关闭SPI } /*************************************************************************** 函数名称:uchar nRF24L01_RxPacket(uchar* rx_buf) 函数功能:数据读取后放入rx_buf接收缓冲区中 函数备注: ***************************************************************************/ //uchar nRF24L01_RxPacket(uchar* rx_buf) //{ // uchar flag; // CE = 1; //很重要!启动接收! // Delayms(1); // sta=SPI_Read(READ_REG+STATUS); // 读取状态寄存其来判断数据接收状况 //寄存器前面要加是读还是写 // if(RX_DR) // 判断是否接收到数据 如果置1则说明接到数据并且放置在接收缓存器
史海拾趣
|
我在同时开多线程模拟多用户访问HTTP客户端下载上传数据时,CATCH到很多“操作超时”,但是使用单线程时没有这种错误,请问下这个是什么原因?如何解决。 我测试使用的是同步方式。 全部分数奉上,希望有个解决的办法,急~~~;… 查看全部问答> |
|
有现成的例子,在Windows DDK 2600.1106的Build Environment下用build指令编译,只出来.res, .obj, .sbr文件,没看到.sys文件。 而Build并没有提示错误,最后一行信息是BUILD:Done 这是为什么啊? … 查看全部问答> |
|
意法半导体(ST)宣布2011年中国iNEMO™校园创意大赛获胜名单 中国北京,2011年12月1日 —— 横跨多重电子应用领域、全球领先的半导体供应商及全球最大的消费电子和便携设备MEMS(微机电系统)供应商意法半导体[1](STMicroelectronics,简称ST;纽约证券交易所代码:STM)今天宣布清华大学的天 ...… 查看全部问答> |
|
以下是我整理的程序,想实现的功能是三个按键,一个是按一下增加10,一个是按一下减少10,最后个是复位到0。但是错误报告identifier “ key” is undefined,dentifier “ keys” is undefined. #include #include\"NOKIA_LCD_BSP.H\" #define&nb ...… 查看全部问答> |




