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

2026/4/27 21:15:21

while(*p!='\\0') {

writelcddat(*p); p++;

delayms(1); } }

//******************************************************************************************

void readtemperature(void)

{ uchar TL; //储存暂存器的温度低位 uchar TH; //储存暂存器的温度高位 set18b20(); write18b20(0xcc); write18b20(0x44); set18b20(); write18b20(0xcc); write18b20(0xbe); TL=read18b20(); //先读的是温度值低位 TH=read18b20(); //接着读的是温度值高位 distance_data[0]=TH ; //测量结果的高8位

distance_data[1]=TL; //放入16位的高8位 value=TH; value<<=8; value=value|TL; }

/***********************************温度****************************************************/

void disp18b20() //液晶显示温度 { uint i,t; if(value<0x0fff) //是否是负值 tflag=0; else { value=~value+1; tflag=1; } value=value*(0.625)+0.5; //扩大10倍方便读取小数 i=65000;t=220;

显示 LED=1; if((value>HT)&&(crrent=0)) //这里设置温度上限值,来控制继电器,需加crrent=0,不然DS18B20在拔掉后会出错

{ while(t--) while(i--) //这里是继电器导通为3分钟左右,中间不读取温度

{ set18b20(); LED=0; if((value

} } /*改变设定温度*/ DC=1;AD=1; if(AD==0) //设定温度加 { HT++; while(!AD); } if(DC==0) //设定温度减 { HT--; while(!DC); } /*************************/ /*读取上限值温度*/ setdat[0]=HT/100+'0'; //十位 setdat[1]=HT0/10+0x30; //个位 setdat[2]=HT+'0'; /*************************/ /*读取当前温度*/ disdat[0]=value/1000+0x30;//百位数

disdat[1]=value00/100+0x30;//十位数 disdat[2]=value0/10+0x30;//个位数 disdat[3]=value+0x30;//小数位 if(tflag==0) disdat[4]=0x20; else

disdat[4]=0x2d; //当最高位为0时,最高位不显示 if(disdat[0]==0x30) { disdat[0]=0x20; if(disdat[1]==0x30) disdat[1]=0x20; } /*显示当前温度*/ writelcdcmd(0x86); writelcddat(disdat[4]); //符号位 writelcdcmd(0x87); writelcddat(disdat[0]); writelcdcmd(0x88); writelcddat(disdat[1]); writelcdcmd(0x89); writelcddat(disdat[2]); writelcdcmd(0x8a); writelcddat(0x2e); //小数点 writelcdcmd(0x8b); writelcddat(disdat[3]); writelcdcmd(0x8d); //单位℃ writelcddat(0xdf); writelcdcmd(0x8e); writelcddat('C'); /*显示设定温度温度*/ writelcdcmd(0xc0); writelcddat('H'); writelcdcmd(0xc1); writelcddat('T'); writelcdcmd(0xc2); writelcddat(':'); writelcdcmd(0xc3); writelcddat(setdat[0]); writelcdcmd(0xc4); writelcddat(setdat[1]); writelcdcmd(0xc5); writelcddat('.'); writelcdcmd(0xc6); writelcddat(setdat[2]); }

//********************************** 主函

************************************************

void main(void) { uchar xx; init_io(); inilcd(); while(1) { readtemperature(); //实时更新温度 writelcdcmd(0x01); //每次数据变化清屏显示 do { readtemperature(); checkflag(); for(xx=0;xx<2;xx++) { tx_buf[xx]= distance_data[xx];//发数据之前必须把要发送的数据装入它

} TX_Mode(); //必须启动发送模块 delay_ms(5); writelcdcmd(0x80); play(str); disp18b20(); }while(!crrent); //检测DS18B20存在,显示温度 do{ readtemperature(); writelcdcmd(0x80); play(str1); writelcdcmd(0x80+0x40); play(str2); BEE=1; }while(crrent); } }

接收端:

#include #include

#define uchar unsigned char #define uint unsigned int sbit lcdrs=P2^0; //定义LCD引脚 sbit lcdrw=P2^1;


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

下载本文档需要支付 10

支付方式:

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

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