一、系統(tǒng)方案
本設計采用AT89C52單片機作為主控制器,液晶1602顯示溫濕度,LabView上位機通信,上位機顯示溫度,同時上位機可以設置溫度上下限,當測量溫度低于或高于上限,溫度報警,上位機可以控制下位機加熱設備啟動與關閉,實現(xiàn)上位機和下位機的交換數(shù)據(jù)。
二、硬件設計
原理圖如下:
三、單片機軟件設計
1、單片機代碼主要是串口初始化、串口中斷服務程序。首先是串口初始化:
void uart_init()
{
TMOD |= 0x20;//定時器1,工作模式2 8位自動重裝
TH1 = 0xfd;
TL1 = 0xfd;//設置比特率9600
SM0 = 0;
SM1 = 1;//串口工作方式1,8位UART波特率可變
TR1 = 1;//啟動定時器1
REN = 1;
EA = 1; //打開總中斷
ES = 1; //打開串口中斷
}
2、貼上51單片機負責串口發(fā)送的兩個函數(shù):
void SendByte(unsigned char dat) //發(fā)送一個字節(jié)的數(shù)據(jù),形參dat即為待發(fā)送數(shù)據(jù)。
{
SBUF = dat; //將數(shù)據(jù)寫入到串口緩沖
while(!TI); //等待發(fā)送完畢
TI = 0;
}
void SendArray(unsigned char *Array, unsigned char Size)//通過串口發(fā)送一個數(shù)組,構建for循環(huán),改變索引依次發(fā)送
{
unsigned char i;
for(i = 0; i < Size; i++)
{
SendByte(Array[i]);
}
}
在串口中斷中處理接收到的數(shù)據(jù):
void uart(void) interrupt 4 //串口中斷
{
unsigned char Res;
static unsigned char Rec_state = 0;
if(RI) //收到數(shù)據(jù)
{
RI = 0; //清中斷請求
Res = SBUF;
if(Res == 0xFF) //接收到幀頭
{
Rec_state = 1;
}
else if(Rec_state == 1 && Res == 0xEE)//接收到幀尾
{
Rec_state = 0;
}
else if(Rec_state == 1)
{
switch(Res)//接收到數(shù)據(jù),繼電器控制
{
case 0x02: RY2 = 0; break;
case 0x03: RY2 = 1; break;
default : RY2 =1; break;
}
}
}
else //發(fā)送完一字節(jié)數(shù)據(jù)
{
//TI = 0;
}
}
3、貼上DHT22讀溫濕度函數(shù)
unsigned char Read_Sensor(void)
{
unsigned char i;
//主機拉低(Min=800US Max=20Ms)
DHT_PIN = 0;
Delay_N1ms(18); //延時18Ms
//釋放總線 延時(Min=30us Max=50us)
DHT_PIN = 1;
Delay_N10us(2);//延時30us
//主機設為輸入 判斷傳感器響應信號
DHT_PIN = 1;
Sensor_AnswerFlag = 0; // 傳感器響應標志
//判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行
if(DHT_PIN ==0)
{
Sensor_AnswerFlag = 1;//收到起始信號
Sys_CNT = 0;
//判斷從機是否發(fā)出 80us 的低電平響應信號是否結束
while((!DHT_PIN))
{
if(++Sys_CNT>300) //防止進入死循環(huán)
{
Sensor_ErrorFlag = 1;
return 0;
}
}
Sys_CNT = 0;
//判斷從機是否發(fā)出 80us 的高電平,如發(fā)出則進入數(shù)據(jù)接收狀態(tài)
while((DHT_PIN))
{
if(++Sys_CNT>300) //防止進入死循環(huán)
{
Sensor_ErrorFlag = 1;
return 0;
}
}
// 數(shù)據(jù)接收 傳感器共發(fā)送40位數(shù)據(jù)
// 即5個字節(jié) 高位先送 5個字節(jié)分別為濕度高位 濕度低位 溫度高位 溫度低位 校驗和
// 校驗和為:濕度高位+濕度低位+溫度高位+溫度低位
for(i=0;i<5;i++)
{
Sensor_Data[i] = Read_SensorData();
}
}
else
{
Sensor_AnswerFlag = 0; // 未收到傳感器響應
}
return 1;
}
四、上位機軟件設計
上位機是借助LabView來開發(fā)的,界面比較簡單,首先前面板設計UI界面,之后后面板通過圖形化編程完成軟件開發(fā),放上一個上位機前面板的截圖:
后面板截圖如下:
-
單片機
+關注
關注
6030文章
44500瀏覽量
632188 -
LabVIEW
+關注
關注
1961文章
3651瀏覽量
322056 -
監(jiān)控系統(tǒng)
+關注
關注
21文章
3848瀏覽量
173439 -
上位機
+關注
關注
27文章
930瀏覽量
54697 -
DHT22
+關注
關注
2文章
51瀏覽量
7149
發(fā)布評論請先 登錄
相關推薦
評論