|
本帖最后由 alex_wzc 于 2019-7-17 22:44 編輯
利用單片機(jī)技術(shù),無線傳輸技術(shù),溫度測量技術(shù)等知識設(shè)計一個基于STC89C52單片機(jī)控制的無線溫度采集系統(tǒng),以DS18B20作為溫度傳感器,檢測比較精確的溫度信號,并通過NRF24L01無線模塊將從機(jī)點的溫度信號傳送到主機(jī)。主機(jī)接收發(fā)送過來的溫度數(shù)據(jù)進(jìn)行解碼,一方面將實時的溫度數(shù)據(jù)通過OLED顯示屏進(jìn)行顯示,另一方面再將溫度數(shù)據(jù)傳輸給溫度監(jiān)測上位機(jī)。上位機(jī)一方面可以對實時的溫度數(shù)據(jù)進(jìn)行曲線繪制,另一方面也可以通過上位機(jī)設(shè)置溫度上下限,當(dāng)溫度超過設(shè)定閾值時,發(fā)出控制指令給單片機(jī),單片機(jī)控制蜂鳴器發(fā)出報警聲音。我們也可通過獨立按鍵模塊對溫度上下限進(jìn)行設(shè)定。
發(fā)送端程序:
//功能:將DS18b20溫度傳感器溫度數(shù)據(jù)采集,利用模擬SPI方式,傳輸給NRF24L01
#include <reg52.h>
#include "mcu.h"
#include "NRF24L01.H"
#include "temp.h"
//void delayms(uint ms);
void main()
{
uint while_times = 0;
init_NRF24L01(); //NRF24L01初始化
//delayms(10);
while(1)
{
//將溫度采集數(shù)據(jù)傳遞給TxBuf[0]和TxBuf[1],TxBuf[0]為高8位,TxBuf[1]為低8位;
TxBuf[0]=Ds18b20ReadTemp()/256;
TxBuf[1]=Ds18b20ReadTemp()%256;
nrf_TxMod(); // 設(shè)置為發(fā)送模式
nrf_trans(TxBuf); //將待發(fā)送的數(shù)據(jù)寫入NRF24L01
while_times = 30; //檢測是否發(fā)送成功 循環(huán)檢測?次
while(while_times--)
{
get_nrf_sta(); //獲取狀態(tài)標(biāo)志
if(TX_DS == 1) //發(fā)送成功,跳出循環(huán)
break;
}
}
}
接收端程序:
#include "reg52.h"
#include "MCU.h"
#include "OLED.H"
#include "NRF24L01.H"
#include "button.h"
sbit k1=P3^2; //溫度上限設(shè)置按鍵
sbit k2=P3^3; //溫度下限設(shè)置按鍵
sbit WARN=P0^3; //蜂鳴器控制端口
int Temp; //溫度變量
uchar receiveData[3];//接收變量存儲數(shù)組
uint Value_UP=0; //溫度上限值
uint Value_DOWN=0; //溫度下限值
float Temp_UP=3000,Temp_DOWN=1000;
uchar str1[]={" "};
uchar str2[]={" "};
uchar str3[]={" "};
uchar i=0;
uchar flag1=0;
uchar flag2=0;
uchar flag_receive = 0;//接收數(shù)據(jù)完成標(biāo)志位
extern uchar code du[];//聲明攝氏度字符變量
extern uchar key_type;
void Int_Init(void); //中斷配置
void UsartConfiguration(); //串口配置
void receive_dispose(uchar *p); //數(shù)據(jù)接收解碼函數(shù)
float data_dispose(uchar *p , uchar mode); //接收數(shù)據(jù)處理函數(shù)
void message_display(void); //顯示提示信息
void main()
{
uchar num=0;
uint while_times = 0;
uchar flag=0;
float tp=0;
UsartConfiguration(); //串口初始化
Int_Init(); //中斷初始化
oled_init(); //OLED初始化
clear_screen(); //OLED清屏
NRF24L01_Init(); //初始化NRF24L01
delay(10);
message_display();
while(1)
{
uchar num=0;
uchar flag=0;
nrf_RxMod(); // 設(shè)置為接收模式
while_times = 400; //檢測是否接收成功 循環(huán)檢測?次 大于發(fā)射效果好
while(while_times--)
{
get_nrf_sta(); //獲取狀態(tài)標(biāo)志
if(RX_DR == 1) //接收成功
{
nrf_read(RxBuf);//接收成功后,將NRF24L01接收到的數(shù)據(jù)讀到單片機(jī)的RxBuf數(shù)組中。
flag=1;
break; //跳出循環(huán)
}
}
receive_dispose(receiveData);//單片機(jī)數(shù)據(jù)接收解碼
switch(flag1)
{
case 1:Temp_UP+=10;break;
case 2:Temp_UP-=10;break;
}
switch(flag2)
{
case 1:Temp_DOWN+=10;break;
case 2:Temp_DOWN-=10;break;
}
flag1=0;
flag2=0;
Value_UP=Temp_UP;
Value_DOWN=Temp_DOWN;
str2[0] = (char)(0X30+Value_UP/1000);
str2[1] = (char)(0X30+Value_UP%1000/100);
str2[2] = 0x2e; //小數(shù)點
str2[3] = (char)(0X30+Value_UP%100/10);
str2[4] = (char)(0X30+Value_UP%10);
str3[0] = (char)(0X30+Value_DOWN/1000);
str3[1] = (char)(0X30+Value_DOWN%1000/100);
str3[2] = 0x2e; //小數(shù)點
str3[3] = (char)(0X30+Value_DOWN%100/10);
str3[4] = (char)(0X30+Value_DOWN%10);
disp_string_8x16_16x16(5,72,(uchar*)str2); //顯示溫度上限
disp_string_8x16_16x16(7,72,(uchar*)str3); //顯示溫度下限
Temp=(RxBuf[0]*256+RxBuf[1])*0.0625*100+0.5;
//溫度整數(shù)部分
str1[0] = (char)(0X30+Temp % 10000 / 1000);
str1[1] = (char)(0X30+Temp % 1000 / 100);
str1[2] = 0x2e; //小數(shù)點
//溫度小數(shù)部分
str1[3] = (char)(0X30+Temp % 100 / 10);
str1[4] = (char)(0X30+Temp % 10);
disp_string_8x16_16x16(3,72,(uchar*)str1);
SBUF = 0xF1; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while (!TI); //等待發(fā)送數(shù)據(jù)完成
TI = 0;
SBUF = RxBuf[0];
while (!TI);
TI = 0;
SBUF = RxBuf[1];
while (!TI);
TI = 0;
if(Temp>Value_UP||Temp<Value_DOWN) //報警控制
WARN=0;
else
WARN=1;
}
}
|
-
上位機(jī)圖片.png
(65.35 KB, 下載次數(shù): 32)
下載附件
2019-7-17 22:44 上傳
-
下位機(jī)調(diào)試結(jié)果.jpg
(2.16 MB, 下載次數(shù): 27)
下載附件
2019-7-17 22:44 上傳
-
-
接收端.pdf
2019-7-16 22:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
181.04 KB, 下載次數(shù): 38, 下載積分: 黑幣 -5
-
-
發(fā)送端.pdf
2019-7-16 22:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
153.51 KB, 下載次數(shù): 36, 下載積分: 黑幣 -5
-
-
下位機(jī)51程序.rar
2019-7-17 22:36 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
228.23 KB, 下載次數(shù): 29, 下載積分: 黑幣 -5
|