魏娟
摘 要 介紹如何使用AT89C51單片機、PT100鉑電阻、MAX187A/D轉換芯片設計一款數字式溫度計,能夠實時檢測和顯示冰箱溫度,并具有溫度報警功能。
關鍵詞 AT89C51;PT100鉑電阻;MAX187A/D轉換芯片
中圖分類號:TH811 文獻標識碼:A 文章編號:1671-7597(2014)13-0022-02
隨著現代信息技術的飛速發展,能夠獨立工作的溫度檢測和顯示系統應用于諸多領域。傳統溫度檢測以熱敏電阻為溫度敏感元件,熱敏電阻的成本低,但需要后續信號處理電路,而且可靠性相對較差,測溫準確度低,檢測系統也有一定的誤差。與傳統溫度計相比,這里設計的數字溫度計具有讀數方便,測溫范圍廣,測溫精確,數字顯示,適用范圍廣等優點。
1 設計概述
本設計使用AT89C51單片機、PT100溫度傳感器等器件,監測冰箱內溫度的變化情況,系統功能概述具體如下。
1)溫度檢測:系統能實時監測冰箱內的溫度。溫度采集時間間隔為3 s,溫度分辨率為0.1℃,范圍:-50~+50℃。
2)溫度顯示:系統能夠實時顯示冰箱內的溫度值,刷新周期為3 s,顯示到小數后一位。
3)溫度報警:系統對超出范圍的溫度進行報警處理,需具備聲、光提示功能。
4)報警值設置:系統設置上、下限報警溫度值,設置精度為0.1℃。
說明:溫度報警值由兩個,上限報警值、下限報警值。當冰箱溫度高于上限報警值則為上限報警;當冰箱溫度低于下限報警值則為下限報警;處于兩只之間,系統不報警。
2 模塊介紹
我們在介紹功能時可以把它分為幾種方式介紹,其中包括的模塊有:報警、電源、按鍵、溫度、顯示以及單片機模塊。具體如下圖。
系統模塊圖
從而我們再通過應用鍵盤模塊對共進行相應的設置。
在應用鍵盤模塊時主要是通過在按鍵上的數字鍵進行設置,從0至9進行輸入值,再加上應用符號按鍵,所以,一般可以應用4*4的行列矩陣。
我們也可以應用顯示模塊對其溫度進行顯示。
通常可以把范圍設置成:-50~+50℃。
并且把小數點一直顯示到最后一位,應用系統必須要應用相應的數碼管,一般是以靜態顯示為主。此時,應用LED數碼管的第一位是用來顯示符號的,用二、三位是用來對溫度進行顯示的,而最后一位是用來進行小數顯示的。
而所謂的溫度采集主要是用來測量溫度值的,具有非常重要的作用。
在對這部分進行測溫時一般是通過應用熱電偶溫差電路進行工作的,其檢測的部分則可以對其應用低溫熱偶。在產生熱電偶的部分當中一般是由溫差電勢以及金屬接觸的電勢相結合組成。從而我們可以把參考點一直維持在相應的溫度上同時對其電壓進行測量,這樣就可以對它的溫度來檢測。
對數據進行采集時,一般是應用A/D通道單片機,同時也可以測出變化的溫度,對電流以及電壓進行采集,在轉換以后,便可處理它的數據了。進而也可以在顯示電路上顯示其溫度的數值了。
所謂的報警模塊主要是用來光報警以及提供聲音的。
在發出了蜂鳴器時也就是報警的聲音,再應用發光二級管進行上限和下限的報警方式。我們一般表示上限用紅色,而下限用綠色。
一般系統會表示+9 V電源主要是指外部,可以用作運算放大器LM324的參考電壓。其他的芯片以及單片機可以應用+5V,也可以對其進行轉變。
單片機模塊定時采集電壓值,將其轉換成溫度值并顯示;接收鍵盤輸入,完成設置報警值的功能,因此可選用AT89C51單片機。
以上是對單片機實現數字溫度計的功能分析,選擇滿足要求的電路芯片,然后進行硬件電路的設計即可。
3 硬件電路設計
通過對數字溫度計的功能分析,選擇滿足要求的電路芯片,然后進行硬件電路的設計。系統中主要用的芯片包括A/D轉換芯片MAX187、PT100鉑電阻檢測器。
1)MAX187是一款12位逐次逼近式串行模數轉換器,在單5V電源下工作,模擬量的輸入范圍是0~5 V。
2)PT100溫度檢測器是由白金做成的電阻,它的電阻值會隨溫度的變化而改變,而且比較穩定。系統獲得PT100溫度檢測器的電阻值后,可以查電阻與溫度的關系表得到當前的溫度。
在硬件電路設計中,關鍵是測溫電路的設計。根據測量分辨率,系統采用鉑電阻橋式測溫電路,電壓差經過運放電路進入12位串行A/D轉換器。
4 軟件設計
軟件設計主要是對溫度進行采集、顯示并判斷是否超出設定范圍;通過按鍵操作,輸入溫度上下限報警值。因此,整個軟件可分為按鍵子程序、顯示子程序、溫度采集子程序、報警子程序及系統主程序。
4.1 按鍵子程序
uchar scan_key()
{
uchar keytemp,i;//定義局部變量
keyport=0xf0;//行線輸出0,列線輸出1
keytemp=keyport;//讀按鍵端口值
if (keytemp==0xf0)
return no_key;//無鍵按下,返回
delay 15ms();
keyport=keytemp|0x0f;//列線輸出,行線輸入
keytemp=keyport;//讀取按鍵端口值
for (i=0;i<12;i++)
{
if (keytemp==keycode[i])//根據按鍵端口掃描值,查找按鍵值
break;endprint
}
keyport=0xf0;//行線0,列線輸出1
while(keyport!=0xf0);//等待按鍵是否釋放
delay 15ms();//延時
return i;
}
}
4.2 溫度采集子程序
uchar scan_key()
{
uchar keytemp,i;//定義局部變量
keyport=0xf0;//行線輸出0,列線輸出1
keytemp=keyport;//讀按鍵端口值
if (keytemp==0xf0)
return no_key;//無鍵按下,返回
delay 15ms();
keyport=keytemp|0x0f;//列線輸出,行線輸入
keytemp=keyport;//讀取按鍵端口值
for (i=0;i<12;i++)
{
if (keytemp==keycode[i])
break;
}
keyport=0xf0; while(keyport!=0xf0);//等待按鍵是否釋放
delay 15ms();//延時
return i;
}
4.3 報警子程序
void alarm (uint temp)
{ if (temp>upperv)//上限報警,紅色亮,蜂鳴器響
{ledredcon=0;
speakercon=0;
}
else if(temp {ledgreencin=0; speakercon=0; } else {ledgreencon=1;//沒發生報警 speakercon=1; ledgreencon=1; } } 5 結束語 本文介紹的只是一個簡單數字式溫度計的設計思路,還可以增加存儲器存儲溫度值;可以增加通信功能,將存儲的數據傳給計算機進行處理。 參考文獻 [1]寇戈.模擬電路與數字電路[M].北京:電子工業出版社,2011. [2]黃勤.單片機原理及應用[M].北京:清華大學出版社,2010.
}
keyport=0xf0;//行線0,列線輸出1
while(keyport!=0xf0);//等待按鍵是否釋放
delay 15ms();//延時
return i;
}
}
4.2 溫度采集子程序
uchar scan_key()
{
uchar keytemp,i;//定義局部變量
keyport=0xf0;//行線輸出0,列線輸出1
keytemp=keyport;//讀按鍵端口值
if (keytemp==0xf0)
return no_key;//無鍵按下,返回
delay 15ms();
keyport=keytemp|0x0f;//列線輸出,行線輸入
keytemp=keyport;//讀取按鍵端口值
for (i=0;i<12;i++)
{
if (keytemp==keycode[i])
break;
}
keyport=0xf0; while(keyport!=0xf0);//等待按鍵是否釋放
delay 15ms();//延時
return i;
}
4.3 報警子程序
void alarm (uint temp)
{ if (temp>upperv)//上限報警,紅色亮,蜂鳴器響
{ledredcon=0;
speakercon=0;
}
else if(temp {ledgreencin=0; speakercon=0; } else {ledgreencon=1;//沒發生報警 speakercon=1; ledgreencon=1; } } 5 結束語 本文介紹的只是一個簡單數字式溫度計的設計思路,還可以增加存儲器存儲溫度值;可以增加通信功能,將存儲的數據傳給計算機進行處理。 參考文獻 [1]寇戈.模擬電路與數字電路[M].北京:電子工業出版社,2011. [2]黃勤.單片機原理及應用[M].北京:清華大學出版社,2010.
}
keyport=0xf0;//行線0,列線輸出1
while(keyport!=0xf0);//等待按鍵是否釋放
delay 15ms();//延時
return i;
}
}
4.2 溫度采集子程序
uchar scan_key()
{
uchar keytemp,i;//定義局部變量
keyport=0xf0;//行線輸出0,列線輸出1
keytemp=keyport;//讀按鍵端口值
if (keytemp==0xf0)
return no_key;//無鍵按下,返回
delay 15ms();
keyport=keytemp|0x0f;//列線輸出,行線輸入
keytemp=keyport;//讀取按鍵端口值
for (i=0;i<12;i++)
{
if (keytemp==keycode[i])
break;
}
keyport=0xf0; while(keyport!=0xf0);//等待按鍵是否釋放
delay 15ms();//延時
return i;
}
4.3 報警子程序
void alarm (uint temp)
{ if (temp>upperv)//上限報警,紅色亮,蜂鳴器響
{ledredcon=0;
speakercon=0;
}
else if(temp {ledgreencin=0; speakercon=0; } else {ledgreencon=1;//沒發生報警 speakercon=1; ledgreencon=1; } } 5 結束語 本文介紹的只是一個簡單數字式溫度計的設計思路,還可以增加存儲器存儲溫度值;可以增加通信功能,將存儲的數據傳給計算機進行處理。 參考文獻 [1]寇戈.模擬電路與數字電路[M].北京:電子工業出版社,2011. [2]黃勤.單片機原理及應用[M].北京:清華大學出版社,2010.