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