|
02.png (56.02 KB, 下載次數(shù): 71)
下載附件
2019-4-1 17:32 上傳
01.png (39.35 KB, 下載次數(shù): 48)
下載附件
2019-4-1 17:32 上傳
- 發(fā)射_DHT11程序
- //宏定義
- #define uchar unsigned char
- #define uint unsigned int
- //頭函數(shù)
- #include <reg51.h>
- #include <intrins.h>
- //無線模塊
- #include "api.h"
- #include "nRF24L01P.h"
- #include "DHT11.h"
- //LED 管腳定義
- sbit TXLED_R=P1^3;
- sbit RXLED_Y=P1^5;
- //主機(jī)詢問命令
- uchar CMD[]={0xaa,0xbb,0xcc,0xdd};
- //主函數(shù)
- void main()
- {
- TXLED_R=0; //初始化LED
- RXLED_Y=0;
- init_io(); //無線初始化IO
- RX_Mode(); //設(shè)置為接收模式
- TXLED_R=1;
- RXLED_Y=1;
- //循環(huán)執(zhí)行
- while(1)
- {
- sta = SPI_Read(STATUS); //讀狀態(tài)寄存器
- if(RX_DR) //判斷是否接受到數(shù)據(jù)
- {
- SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH); //從RX FIFO讀出數(shù)據(jù)
- flag = 1;
- RXLED_Y=0; //打開接收指示燈
- }
- SPI_RW_Reg(WRITE_REG + STATUS, sta); //清除RX_DS中斷標(biāo)志
- if(flag) //接受完成
- {
- flag = 0; //清標(biāo)志
- //命令為主機(jī)詢問
- if(RX_BUF[0]==CMD[0]&&RX_BUF[1]==CMD[1]&&RX_BUF[2]==CMD[2]&&RX_BUF[3]==CMD[3])
- {
- //打開接收成功指示
- //無線答應(yīng)信號濕度 溫度
- 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; //關(guān)閉接受射指示燈
- TXLED_R=0; //打開發(fā)射指示燈
- TX_Mode(TX_BUF); // 把nRF24L01設(shè)置為發(fā)送模式并發(fā)送數(shù)據(jù)
- Check_ACK(1); // 等待發(fā)送完畢,清除TX FIFO
- delay_ms(100);
- //發(fā)送成功指示
- TXLED_R=1; //關(guān)閉發(fā)射指示燈
- RX_Mode(); // 設(shè)置為接收模式
- }
- }
- }
- }
復(fù)制代碼- 接收_溫濕度控制程序
- //宏定義
- #define uchar unsigned char
- #define uint unsigned int
- //頭函數(shù)
- #include <reg51.h>
- #include <intrins.h>
- //屏幕函數(shù)調(diào)用
- #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;
- //蜂鳴器閃爍標(biāo)志位
- bit shan=0;
- #include "KEY.h"
- //主機(jī)詢問命令
- uchar CMD[]={0xaa,0xbb,0xcc,0xdd};
- uchar Mode=0;
- uchar temp=0;
- uchar KK=0;
- //報警溫濕度
- uchar TNumber=30,RHNumber=50,TX=20,HX=40;
- //主函數(shù)
- void main()
- {
- TH0=0x4b;
- TL0=0xff;//賦初值
- TMOD=0x01;//設(shè)置工作方式
- EA=1;//打開中斷總開關(guān)
- ET0=1;//打開允許開關(guān)
- TR0=1;
- //LCD初始化顯示
- Init_LCD();
- delay_ms(250);
- TXLED_R=0; //初始化
- RXLED_Y=0;
- init_io(); //無線初始化IO
- RX_Mode(); //設(shè)置為接收模式
- TXLED_R=1;
- RXLED_Y=1;
- /////////////////////////////////////////////
- TXLED_R=0; //發(fā)送指示燈
- ////////////////////////////////////////////////////////////////////////////////
- //循環(huán)顯示
- while(1)
- {
- TXLED_R=0; //發(fā)送指示燈
- TX_ACK(); //發(fā)送詢問信號
- sta = SPI_Read(STATUS); //讀狀態(tài)寄存器
- TXLED_R=1; //發(fā)送指示燈
- if(RX_DR) //判斷是否接受到數(shù)據(jù)
- {
- SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH); // 從RX FIFO讀出數(shù)據(jù)
- flag = 1;
- }
- delay_ms(100);
- SPI_RW_Reg(WRITE_REG + STATUS, sta); // 清除RX_DS中斷標(biāo)志
- if(flag==1) // 接受完成
- {
- Mode=0;
- flag=0;
- }
- else //設(shè)備丟失
- {
- Mode=1;
- }
- //顯示
- //數(shù)據(jù)顯示
- if(Mode==0)
- {
- RXLED_Y=0;
- if(temp!=1)//重新初始化
- {
- display1();
- temp=1;
- }
- display2(RX_BUF[1],RX_BUF[2]);//顯示讀數(shù)
- if(RX_BUF[1]>TNumber) //溫度超標(biāo)降溫
- {
- jiangwen=0;
- }
- else
- {
- jiangwen=1;
- }
- if(RX_BUF[1]<TX) //溫度過低升溫
- {
- shengwen=0;
- }
- else
- {
- shengwen=1;
- }
- if(RX_BUF[2]>RHNumber) //濕度超標(biāo)抽濕
- {
- choushi=0;
- }
- else
- {
- choushi=1;
- }
- if(RX_BUF[2]<HX) //濕度過低加濕
- {
- jiashi=0;
- }
- else
- {
- jiashi=1;
- }
- if(((RX_BUF[1]>TNumber||RX_BUF[2]>RHNumber||RX_BUF[1]<TX||RX_BUF[2]<HX))&&(shan==1)) //超閥值蜂鳴器報警
- {
- Feng=0;
- }
- else
- {
- Feng=1;
- }
- RXLED_Y=1;
- }
- //讀取鍵值
- KK=KEY_();
- if(KK==3)//調(diào)整模式
- {
- Mode=2;
- KK=0;
- }
- //數(shù)據(jù)顯示不在線
- if(Mode==1)
- {
- if(temp!=2)
- NoLine();//設(shè)備丟失
- temp=2;
- }
- //鍵盤
- else if(Mode==2)
- {
- temp=3;
- display3();
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標(biāo)
- write_com(0x80+5);
- //調(diào)溫上限
- while(KK!=3)
- {
- //讀取鍵值
- KK=KEY_();
- if(KK==1)//++
- {
- TNumber++;
- if(TNumber==51)
- TNumber=50;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標(biāo)
- write_com(0x80+5);
- }
- if(KK==2)//--
- {
- TNumber--;
- if(TNumber==TX)
- TNumber++;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標(biāo)
- write_com(0x80+5);
- }
- }
- KK=0;
- write_com(0x0f);//打開光標(biāo)
- write_com(0x80+0x40+5);
- //調(diào)溫x下限
- while(KK!=3)
- {
- //讀取鍵值
- KK=KEY_();
- if(KK==1)//++
- {
- TX++;
- if(TX==TNumber)
- TX--;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標(biāo)
- write_com(0x80+0x40+5);
- }
- if(KK==2)//--
- {
- TX--;
- if(TX==0xff)
- TX=0;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標(biāo)
- write_com(0x80+0x40+5);
- }
- }
- KK=0;
- write_com(0x0f);//打開光標(biāo)
- write_com(0x80+14);
- //調(diào)濕 上
- while(KK!=3)
- {
- //讀取鍵值
- KK=KEY_();
- if(KK==1)//++
- {
- RHNumber++;
- if(RHNumber==91)
- RHNumber=90;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標(biāo)
- write_com(0x80+14);
- }
- if(KK==2)//--
- {
- RHNumber--;
- if(RHNumber==HX)
- RHNumber++;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標(biāo)
- write_com(0x80+14);
- }
- }
- KK=0;
- write_com(0x0f);//打開光標(biāo)
- write_com(0x80+0x40+14);
- //調(diào)濕 下
- while(KK!=3)
- {
- //讀取鍵值
- KK=KEY_();
- if(KK==1)//++
- {
- HX++;
- if(HX==RHNumber)
- HX--;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標(biāo)
- write_com(0x80+0x40+14);
- }
- if(KK==2)//--
- {
- HX--;
- if(HX==19)
- HX=20;
- display4(TNumber,RHNumber,TX,HX);
- write_com(0x0f);//打開光標(biāo)
- write_com(0x80+0x40+14);
- }
- }
- KK=0;
- }
- delay_ms(200);
- delay_ms(200);
- delay_ms(200);
- }
- }
- void time0() interrupt 1//定時器函數(shù)
- {
- uchar m;
- TH0=0x4b;
- TL0=0xff;//重新賦初值
- m++;
- if(m==4)
- {
- shan=~shan;
- m=0;
- }
- }
復(fù)制代碼
基于51單片機(jī)的無線溫濕度控制系統(tǒng).rar
(542.46 KB, 下載次數(shù): 245)
2019-4-1 17:40 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|