第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/5/30 8:19:13 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

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单片机 的文档
基于NRF24L01+温度无线传输51单片机.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c206cp2zdyt6ehs64cpf7_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top