历史上的今天
今天是:2025年03月03日(星期一)
2020年03月03日 | 基于51单片机的无线温湿度控制系统
2020-03-03 来源:51hei


发射_DHT11程序
//宏定义
#define uchar unsigned char
#define uint unsigned int
//头函数
#include #include //无线模块 #include "api.h" #include "nRF24L01P.h" #include "DHT11.h" //LED 管脚定义 sbit TXLED_R=P1^3; sbit RXLED_Y=P1^5; //主机询问命令 uchar CMD[]={0xaa,0xbb,0xcc,0xdd}; //主函数 void main() { TXLED_R=0; //初始化LED RXLED_Y=0; init_io(); //无线初始化IO RX_Mode(); //设置为接收模式 TXLED_R=1; RXLED_Y=1; //循环执行 while(1) { sta = SPI_Read(STATUS); //读状态寄存器 if(RX_DR) //判断是否接受到数据 { SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH); //从RX FIFO读出数据 flag = 1; RXLED_Y=0; //打开接收指示灯 } SPI_RW_Reg(WRITE_REG + STATUS, sta); //清除RX_DS中断标志 if(flag) //接受完成 { flag = 0; //清标志 //命令为主机询问 if(RX_BUF[0]==CMD[0]&&RX_BUF[1]==CMD[1]&&RX_BUF[2]==CMD[2]&&RX_BUF[3]==CMD[3]) { //打开接收成功指示 //无线答应信号湿度 温度 RH(); //DHT11读取 TX_BUF[0]=0xaa; //T温度 TX_BUF[1]=U8T_data_H; //RH湿度 TX_BUF[2]=U8RH_data_H; TX_BUF[3]=0xdd; delay_ms(100); RXLED_Y=1; //关闭接受射指示灯 TXLED_R=0; //打开发射指示灯 TX_Mode(TX_BUF); // 把nRF24L01设置为发送模式并发送数据 Check_ACK(1); // 等待发送完毕,清除TX FIFO delay_ms(100); //发送成功指示 TXLED_R=1; //关闭发射指示灯 RX_Mode(); // 设置为接收模式 } } } } 接收_温湿度控制程序 //宏定义 #define uchar unsigned char #define uint unsigned int //头函数 #include #include //屏幕函数调用 #include "Lcd.h" //无线模块 #include "api.h" #include "nRF24L01P.h" //继电器定义 sbit jiangwen=P3^5; sbit shengwen=P3^4; sbit choushi=P3^3; sbit jiashi=P3^2; //LED 管脚定义 sbit TXLED_R=P1^3; sbit RXLED_Y=P1^5; //蜂鸣器 sbit Feng=P1^2; //蜂鸣器闪烁标志位 bit shan=0; #include "KEY.h" //主机询问命令 uchar CMD[]={0xaa,0xbb,0xcc,0xdd}; uchar Mode=0; uchar temp=0; uchar KK=0; //报警温湿度 uchar TNumber=30,RHNumber=50,TX=20,HX=40; //主函数 void main() { TH0=0x4b; TL0=0xff;//赋初值 TMOD=0x01;//设置工作方式 EA=1;//打开中断总开关 ET0=1;//打开允许开关 TR0=1; //LCD初始化显示 Init_LCD(); delay_ms(250); TXLED_R=0; //初始化 RXLED_Y=0; init_io(); //无线初始化IO RX_Mode(); //设置为接收模式 TXLED_R=1; RXLED_Y=1; ///////////////////////////////////////////// TXLED_R=0; //发送指示灯 //////////////////////////////////////////////////////////////////////////////// //循环显示 while(1) { TXLED_R=0; //发送指示灯 TX_ACK(); //发送询问信号 sta = SPI_Read(STATUS); //读状态寄存器 TXLED_R=1; //发送指示灯 if(RX_DR) //判断是否接受到数据 { SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH); // 从RX FIFO读出数据 flag = 1; } delay_ms(100); SPI_RW_Reg(WRITE_REG + STATUS, sta); // 清除RX_DS中断标志 if(flag==1) // 接受完成 { Mode=0; flag=0;
上一篇:完整的单片机霍尔测速程序+原理图
史海拾趣
|
需要一个北京地区的兼职linux编程人员,要求可以独立完成下列开发, 不符合条件请勿打扰,以免浪费你我时间 要求熟悉MINIGUI,具体编程内容: 从COM口读入数据,在14英寸以上显示器上显示如下图形界面: 屏幕正中间一个圆形,圆形里面显示从串 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 08:54 编辑 山东省2010电子设计大赛群,速加啊,咱讨论讨论!!! 116389549 山东省2010电子设计大赛群,速加啊,咱讨论讨论!!! 116389549 山东省2010电子设计大赛群,速加啊,咱讨论讨论!!! &n ...… 查看全部问答> |
|
LED照明发展中五个亟待解决的问题 ——色温范围、照明标准、亮度范围、照明总均匀度和眩光控制 最合适的LED照明灯具色温范围,应该是接近太阳自然白光的色温范围才是最科学的选择;较低照射强度的自然白光,就可以达到其他非自然 ...… 查看全部问答> |
|
我用的是CC2430模块,用了一个网关,一个路由,4个终端节点组网成功过后,重启网关或路由设备,怎样改写程序,才能让终端设备自动重新连接到网关呢?我是过NV_RESTORE这个编译选项,不过貌似没有什么用。用没有人已经解决这个问题,给一个指点。… 查看全部问答> |
|
我用得是AD6.9,在做板子的时候,需要做这么一个槽, 用快捷方式T-V-T,设置之后,用3D看没问题, 可是做GEBER文件的时候,这里没显示要钻孔,只显示是禁止布线层, 还用这种方式做了几个定位孔 ...… 查看全部问答> |
|
1、持续的DIY和原创激励在MSP430版块上建立EEworld MSP430月度最佳项目评选活动,该活动每月评选一次,选出一个月中最佳的DIY项目或者原创项目。基本的活动流程如下:每个月的28日为该月度参选项目的参评截止日期。凡是在上个月28日之后至本月28日 ...… 查看全部问答> |
|
这是代码: #include __CONFIG( FCMEN_OFF & IESO_OFF & CLKOUTEN_OFF & BOREN_OFF & CPD_OFF & CP_OFF & MCLRE_ON & PWRTE_OFF & WDTE_ON & FOSC_INTOSC); //__CONFIG( FCMEN_OFF & IESO_OFF & CLKOUTEN_OFF & BOREN_ON & CPD_OFF & CP_OFF & M ...… 查看全部问答> |




