摘 要: 設(shè)計了基于PC與STC12C單片機串口通信的溫度采集系統(tǒng)。STC12C單片機作為下位機,,利用數(shù)字溫度傳感器DS18B20采集現(xiàn)場溫度,,同時通過串口RS232將溫度值上傳給PC,PC實時顯示溫度和變化曲線,。實際運行表明,,系統(tǒng)運行可靠,,界面清楚直觀,功能達到設(shè)計要求,。
關(guān)鍵詞: 串口通信,; STC12C單片機; 溫度傳感器DS18B20; MSComm控件
PC與單片機組成上下位機,上位機通過串行接口獲取下位機采集的現(xiàn)場數(shù)據(jù),,這是一種重要的測控形式,,它易于實現(xiàn)遠程采集和多通道采集。上下位機形式的采集系統(tǒng)既可以發(fā)揮單片機抗干擾性好,、可擴充,、易面向現(xiàn)場等優(yōu)點,又能充分利用PC在數(shù)據(jù)處理和交互方面的巨大優(yōu)勢[1],。
本文設(shè)計了PC與STC12C5A60S2單片機(簡稱STC12C單片機)組成的單通道溫度采集系統(tǒng),,單片機實時采集溫度,PC利用串口通信獲得溫度值并實時顯示,。
1 系統(tǒng)硬件設(shè)計
系統(tǒng)主要由PC和單片機系統(tǒng)組成,,PC為普通計算機;單片機系統(tǒng)包括STC12C單片機,、數(shù)字測溫電路、時鐘電路,、液晶顯示電路,、串口電路和鍵盤電路,如圖1所示。
PC利用通信接口獲得現(xiàn)場溫度,處理后實時顯示,;單片機系統(tǒng)通過測溫電路采集現(xiàn)場溫度并上傳給PC,同時利用液晶顯示電路和時鐘電路顯示溫度和時間,;鍵盤電路用于設(shè)定溫度上限和時間。
1.1 STC12C單片機
STC12C單片機是單時鐘周期8051單片機,它具有高速,、低功耗及超強抗干擾等優(yōu)點,,指令完全兼容8051單片機,但速度是后者的8~12倍,;它內(nèi)置60 KB的Flash程序存儲器,,集成1 280 B數(shù)據(jù)存儲器,有2個16位定時器/計數(shù)器,,內(nèi)置2個全雙工異步串口(UART)用于串行通信[2-3],。圖2為STC12C單片機最小系統(tǒng)結(jié)構(gòu)圖。 1.2 數(shù)字測溫電路/時鐘電路
數(shù)字測溫電路選用DS18B20作為溫度傳感器,如圖3所示,。DS18B20具有以下特點使其得到廣泛應(yīng)用[4]:(1)它是數(shù)字溫度傳感器,,直接輸出數(shù)字量;(2)它的測溫范圍廣, 為-55°C~+125°C,且分辨率和精度高,,最高分辨率可達12 bit,,精度為±0.5°C; (3)它是可編程芯片,,可由程序直接讀出溫度值;(4)它是單總線接口,僅需一條輸入輸出線(DQ)就能與單片機進行接口通信。
時鐘電路由數(shù)字時鐘芯片DS1302組成,如圖4所示,。它是一種高性能,、低功耗、采用三線接口的實時時鐘芯片,,可輸出設(shè)定的時間和日期[5],。
1.3 液晶顯示電路
單片機系統(tǒng)的顯示器選用液晶顯示器LCD12864,它內(nèi)置ST7920控制芯片,,帶有中文字庫,。LCD12864由DDRAM(顯示數(shù)據(jù)RAM)、CGROM(字型產(chǎn)生ROM),、CGRAM(自定義字型產(chǎn)生RAM)和GDRAM(繪圖RAM)等組成[6],。DDRAM和GDRAM是本系統(tǒng)所用到的模塊。
DDRAM提供64×2個位元組的空間,,最多可控制4行16字(64個字)的中文字型顯示,,當(dāng)寫入顯示數(shù)據(jù)RAM時,可分別顯示CGROM與CGRAM的字型,;此模塊可顯示HCGROM(半角),、CGRAM及CGROM 3種中文字型。液晶顯示器屏幕坐標(biāo)(AC地址)與DDRAM地址的對應(yīng)關(guān)系如表1所示,。GDRAM提供64×32 B的空間,,實際可控制128×64點陣的二維繪圖緩沖空間。GDRAM的二維地址與液晶屏幕坐標(biāo)的對應(yīng)關(guān)系如圖5所示,。
1.4 串口通信電路
串口通信電路由MAX232及周邊元件組成,如圖6所示,。 MAX232的功能是將PC的RS232串口信號電平(-10 V,+10 V)轉(zhuǎn)換為滿足單片機要求的TTL信號電平(0,,+5 V),。它具有以下特性[7]:(1)符合所有RS232C技術(shù)標(biāo)準(zhǔn);(2)只需單一電源供電(+5 V),;(3)功耗低,、典型供電電流為5 mA;(4)片載電荷泵,,具有升壓,、電壓極性反轉(zhuǎn)能力;(5)內(nèi)置2個RS232驅(qū)動器/接收器,。
2 系統(tǒng)軟件設(shè)計
系統(tǒng)軟件由PC程序和單片機程序構(gòu)成,。PC程序采用VC++編程,主要由串口通信和界面處理兩個模塊組成,,通過串口通信獲取單片機上傳的數(shù)據(jù),,將其轉(zhuǎn)換為十進制并進行顯示,,同時繪制出曲線。單片機程序以C51編程,,主要由數(shù)據(jù)采集,、數(shù)據(jù)發(fā)送和顯示三部分組成,實現(xiàn)采集數(shù)據(jù),、上傳數(shù)據(jù)和顯示溫度的功能,。
2.1 PC程序設(shè)計
2.1.1 串行通信程序
串行通信程序主要由串口消息處理/數(shù)據(jù)接收函數(shù)(OnSerialComm())、串口參數(shù)設(shè)置函數(shù)(OnSerialSet())組成,。
(1)串口消息處理/數(shù)據(jù)接收函數(shù)負責(zé)響應(yīng)數(shù)據(jù)緩沖區(qū)中有字符的消息,,讀取緩沖區(qū)數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù)格式,,引起重繪調(diào)用繪圖函數(shù),。數(shù)據(jù)緩沖區(qū)中有字符的消息由MSComm控件提供的方法產(chǎn)生[8]。OnSerialComm()調(diào)用了以下函數(shù):
?、貵etCommEvent(),判斷接收緩沖區(qū)內(nèi)是否有數(shù)據(jù)的消息函數(shù);②GetInput(),,讀緩沖區(qū)數(shù)據(jù)函數(shù);②GetOneDimSize(),獲得有效數(shù)據(jù)長度函數(shù);④GetElement(),轉(zhuǎn)換數(shù)據(jù)類型函數(shù);⑤Format(),字符格式化函數(shù);⑥Invalidate(),引起重繪調(diào)用繪圖函數(shù);⑦UpdateData(),更新編輯框函數(shù),。
?。?)串口參數(shù)設(shè)置函數(shù)用于設(shè)置串口參數(shù)、打開串口,、設(shè)置緩沖區(qū)參數(shù),。OnSerialSet()調(diào)用了以下函數(shù):
①SetCommPort(),,選擇串口號函數(shù);②SetPortOpen(),,打開串口函數(shù),;③SetSettings(),設(shè)置串口參數(shù)函數(shù),;④SetInputMode(),,設(shè)置輸入模式函數(shù);⑤SetRThreshold(),,設(shè)置接收緩沖區(qū)接收多少個字符就能調(diào)用OnSerialComm()的函數(shù),;⑥SetInputLen(),設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度函數(shù),;⑦GetInput(),,預(yù)讀緩沖區(qū)函數(shù)。
2.1.2 繪圖程序
繪圖程序由畫背景(坐標(biāo)軸,、坐標(biāo)刻度,、文字等)函數(shù)(DrawBkGrd())和實時繪圖函數(shù)(DrawCurve())組成,。它們都調(diào)用了以下函數(shù):
(1)CreateFont(),設(shè)定字體函數(shù),;(2)SelectObject(),,選定繪圖對象到設(shè)備描述表函數(shù);(3)MoveTo(),,移動到當(dāng)前坐標(biāo)函數(shù),;(4)Linto(),畫線函數(shù),;(5)TextOut(),,輸出文字函數(shù)。
2.2 單片機程序設(shè)計
單片機程序主要由初始化函數(shù)(InitMcuSys()),、讀取溫度/時鐘函數(shù)(ReadDigData()),、串口通信函數(shù)(UartMcuData())組成。
(1) InitMcuSys()調(diào)用以下函數(shù):
?、賂imerInit(),,設(shè)定T0/T1的工作方式、初始值以及串口工作方式和波特率參數(shù)函數(shù);②Ds18b20Init()/Ds1302Init(),初始化溫度傳感器和時鐘芯片函數(shù);③LcdBaseInit (),初始化液晶顯示器函數(shù),。
(2) ReadDigData()調(diào)用以下函數(shù):
?、賀ead18b20Data(),讀取溫度函數(shù);②Read1302Data(),
讀取時間函數(shù);③DataToByte(),數(shù)據(jù)格式轉(zhuǎn)化函數(shù)。
3 實驗及結(jié)論
系統(tǒng)實驗結(jié)果如圖7和圖8所示,。
圖7和圖8是人為改變環(huán)境溫度后的實際運行結(jié)果,。圖7設(shè)置為顯示1 000個溫度采樣點,采樣時間為1次/s,,圖中比較完整地反映了這個時間段的溫度變化,;圖8設(shè)置為顯示60個溫度采樣點,采樣時間也是1次/s,,可見相對于PC,,單片機反映溫度變化的時間非常短。實際運行表明,,整個電路簡單實用,,系統(tǒng)運行穩(wěn)定、可靠,;測試精度,、串行通信、界面顯示等功能均達到了設(shè)計要求,。
參考文獻
[1] 張毅剛,,彭喜元.單片機原理與應(yīng)用設(shè)計[M].北京:電子工業(yè)出版社,2010.
[2] 王鑫,崔忠林,劉建. 基于STC12C5A16S2的溫度采集系統(tǒng)的設(shè)計[J]. 微型機與應(yīng)用,,2012,,31(20):24-29.
[3] 陳桂友.增強型8051單片機實用開發(fā)技術(shù)[M]. 北京:北京航空航天大學(xué)出版社,2010.
[4] 李雪峰. 分布式溫度采集網(wǎng)絡(luò)在恒溫控制中的應(yīng)用[J].微型機與應(yīng)用,2013,,32(15):69-75.
[5] 黃明強.DS1302在單片機系統(tǒng)中的應(yīng)用[J].保定師范??茖W(xué)校學(xué)報,2004,,17(2):30-33.
[6] 田開坤.基于LCD12864顯示器的數(shù)字示波器設(shè)計[J].電子制作,,2011(5):30-37.
[7] Max232 互動百科[EB/OL].(2013-02-28)[2014-03-29].http://www.baike.com/wiki/max232.
[8] 王英杰,林怡青,,彭美春,,等.基于VC++6.0的PC機和單片機串口通信[J].電腦應(yīng)用技術(shù),2006(60):36-40.