親測有效,需要可下載
0.png (15.08 KB, 下載次數(shù): 50)
下載附件
2018-12-10 17:32 上傳
全部資料51hei下載地址:
基于單片機的液位自動控制與檢測.rar
(3.86 MB, 下載次數(shù): 66)
2018-12-10 13:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
摘要
隨著社會的進步,生產(chǎn)工藝和生產(chǎn)技術(shù)的發(fā)展,人們對液位檢測提出了更高的要求。由于新型電子技術(shù)、微電子技術(shù)和微型計算機被廣泛的應(yīng)用,單片機控制系統(tǒng)以其控制精度高,性能穩(wěn)定可靠,設(shè)置操作方便,造價低等諸多特點,被應(yīng)用到液位系統(tǒng)的控制中來。
本文介紹了以LM型液位傳感器,A/D轉(zhuǎn)換芯片ADC0809,以及AT89C51單片機作為主控元件的液位檢測系統(tǒng)的設(shè)計方法。本文分別從液位檢測,A/D轉(zhuǎn)換,數(shù)碼管顯示,超限報警等幾個方面對硬件電路進行了比較詳細的介紹,然后對A/D轉(zhuǎn)換程序,數(shù)碼管顯示程序,超限報警程序等做了比較詳細的闡述,并用流程圖做進一步的解釋。
通過軟件和硬件的聯(lián)合調(diào)試,實現(xiàn)了在一定范圍內(nèi)對液位的調(diào)節(jié),動態(tài)顯示出液位結(jié)果,實現(xiàn)報警,完全實現(xiàn)了任務(wù)書上的要求。
目 錄
第1章 緒論1
1.1 液位檢測系統(tǒng)的概況1
1.2 國內(nèi)外研究動態(tài) 1
1.3 本次設(shè)計的意義 2
1.4 本次設(shè)計的任務(wù) 2
第2章 硬件電路設(shè)計3
2.1 硬件電路工作原理 3
2.2 硬件電路設(shè)計 3
2.2.1 系統(tǒng)總體設(shè)計框圖 3
2.2.2 核心芯片的介紹 4
2.3 硬件電路各模塊設(shè)計10
2.3.1 電源電路設(shè)計10
2.3.2 單片機最小系統(tǒng)電路設(shè)計10
2.3.3 顯示電路設(shè)計11
2.3.4 液位傳感器的接口電路設(shè)計12
2.3.5 AT89C51與ADC0809的接口電路設(shè)計13
2.3.6 報警電路設(shè)計14
2.4 硬件電路總結(jié)14
第3章 軟件設(shè)計 17
3.1 AT89C51的I/O口應(yīng)用 17
3.1.1 P0口的信號輸入 17
3.1.2 P1口的信號輸入 17
3.1.3 P2口的信號輸入 17
3.1.4 P3口的信號輸入 18
3.2 軟件模塊設(shè)計19
3.2.1 主程序的設(shè)計19
3.2.2 A/D轉(zhuǎn)換的設(shè)計20
3.2.3 顯示子程序的設(shè)計21
3.2.4 報警子程序的設(shè)計24
3.3 軟件設(shè)計總結(jié)25
第4章 聯(lián)機調(diào)試28
4.1 仿真電路調(diào)試 28
4.2 硬件電路調(diào)試 29
4.3 硬件電路調(diào)試出現(xiàn)的問題及解決方法 30
4.4 軟件程序調(diào)試30
4.5 軟件程序調(diào)試出現(xiàn)的問題及解決方法 31
4.6 聯(lián)機調(diào)試總結(jié) 31
第5章 結(jié)論32
致謝 33
參考文獻 34
附錄 36
第1章 緒 論 隨著人們生活水平和工業(yè)標準的提高,液位的檢測越來越受到人們重視,檢測的精度和實時性要求也越來越高,另外還要求系統(tǒng)能提供對液位的自動控制功能。今后液位的監(jiān)測和控制系統(tǒng)的研究將是一個重要的課題。 1.1 液位檢測系統(tǒng)的概況 在日常生產(chǎn)和生活中經(jīng)常遇到液位的檢測和控制問題。尤其在許多工業(yè)生產(chǎn)系統(tǒng)中,需要對系統(tǒng)的液位或物料位進行檢測和控制,特別是對具有腐蝕性的液體液位的測量,傳統(tǒng)的電極法是采用差位分布電極,通過給電脈沖來檢測液面,電極長期浸泡在液體中,極易被腐蝕、電解、失去靈敏性,因而對測試設(shè)備的抗腐蝕性要求較高。LM型液壓傳感器采用316L不銹鋼膜片及PVC塑料螺紋頭相結(jié)合,可測量水、其它液體及氣體液位。LM型液壓傳感器采用擁有專利技術(shù)的低成本不銹鋼傳感器,其安裝在PVC塑料過程接頭內(nèi)。監(jiān)控工程實施方便、迅速、易做到實時控制,而且測量精度又能達到工業(yè)實用的要求,所以有廣泛的應(yīng)用前景。為了降低工人的勞動強度,改善工人的工作環(huán)境,節(jié)省財力、物力,避免資源的浪費,特別是對一些具有高溫、高壓、低溫、低壓、有輻射性、毒性、易揮發(fā)易爆等液體,就要對液位進行檢測,而且液位的檢測顯得尤為重要。今后液位的監(jiān)測和控制系統(tǒng)的研究將是一個重要的課題。 1.2 國內(nèi)外研究動態(tài) 隨著工業(yè)生產(chǎn)自動化高速發(fā)展, 對液位檢測和控制技術(shù)的要求也越來越高。為解決生產(chǎn)中的測量問題, 一方面是采用新的測量原理, 開發(fā)新的液位檢測儀表, 擴大檢測的手段, 另一方面需要朝著實現(xiàn)微機化和智能化的方向發(fā)展。近些年來, 微電子技術(shù)的發(fā)展使得液位檢測技術(shù)發(fā)生了根本性的變化。新的檢測原理與電子部件的應(yīng)用使得液位計更趨向小型化和微型化, 特別是一些小型現(xiàn)場液位開關(guān)發(fā)展極快, 如光纖液位計, 由于沒有可動部件, 所以可靠性高, 不僅可現(xiàn)場顯示, 而且可以發(fā)出控制信號。與此同時, 液位檢測和控制也正向著智能化方向發(fā)展, 在液位測量領(lǐng)域內(nèi)廣泛應(yīng)用微處理技術(shù), 以實現(xiàn)故障診斷和報警功能, 提高測量的精確度、可靠性、安全性和多功能化。在應(yīng)用和設(shè)計液位計時盡量實現(xiàn)精確測量,提高液位檢測系統(tǒng)對惡劣環(huán)境的抵抗能力, 以便在惡劣環(huán)境下準確、可靠地工作。 1.3 本次設(shè)計的意義 目前,市面上進行液位測量的儀表種類繁多,但是同時具有測量、監(jiān)控、數(shù)據(jù)記錄及處理的液位測量裝置并不多。在某些工業(yè)控制系統(tǒng)中,數(shù)據(jù)的測量這一基本功能已不能滿足現(xiàn)代工業(yè)的要求,往往需要對大批數(shù)據(jù)進行記錄,對其進行后期處理分析,實現(xiàn)差錯控制、工藝改善、資源優(yōu)化等一系列工作。在液位測量這一領(lǐng)域中,如江河湖海、城市用水等方面,大量數(shù)據(jù)長時間,多網(wǎng)點的采集記錄分析具有普遍的意義。液位的變化分析,有助于人們進一步對自然環(huán)境、天氣變化甚至是災(zāi)害預(yù)警提供可靠的支持。單片微機在許多過程控制設(shè)備和產(chǎn)品中都得到廣泛的應(yīng)用。由于其體積小,價格低,具有邏輯判斷、定時計數(shù)、程序控制等多種功能,在各個領(lǐng)域、各個行業(yè)都得到了廣泛應(yīng)用。不僅有常用的8位機,而且4位單片機和16位單片機也得到了普及,隨著過程控制精度要求的增加和運算速度的增快,單片機得到了進一步的應(yīng)用。 1.4 本次設(shè)計的任務(wù) 本文的主要任務(wù)是以單片機為主控制器,開發(fā)一個基于液位傳感器的液位監(jiān)控系統(tǒng),可測量并顯示液位高度。設(shè)定最高液位和最低液位,當液位高于最高液位或低于最低液位時發(fā)出報警信號,提醒工作人員液位信息。研究設(shè)計內(nèi)容包括: (一)液位檢測的基本原理與方法; (二)液位檢測系統(tǒng)的整體方案設(shè)計; (三)模數(shù)轉(zhuǎn)換電路的設(shè)計; (四)顯示電路設(shè)計; (五)系統(tǒng)軟件流程設(shè)計; (六)電源電路的設(shè)計; (七)PCB布線及硬件抗干擾設(shè)計。 設(shè)計完成之后提供一個可以應(yīng)用于一般工業(yè)的液位檢測及顯示系統(tǒng)的設(shè)計方案,測量范圍和測量精度滿足一般工業(yè)應(yīng)用需要。通過設(shè)計的整個過程,可以綜合運用傳感器、單片機、電子電路和程序設(shè)計等方面的知識,鍛煉和提高科研的能力。
第2章 硬件電路設(shè)計
2.1 硬件電路工作原理 該系統(tǒng)以AT89C51作為核心控制部件,外加傳感器,一片A/D轉(zhuǎn)換芯片和數(shù)碼管來完成系統(tǒng)的預(yù)期任務(wù),即液位的檢測、顯示和超限報警。傳感器實現(xiàn)液位信號到電壓信號的轉(zhuǎn)換,再由8位A/D轉(zhuǎn)換芯片ADC0809將模擬信號轉(zhuǎn)換為數(shù)字信號,實現(xiàn)液位信息的輸入,AT89C51從ADC0809讀取液位信息后進行數(shù)據(jù)處理和超限判斷,隨后將處理過的數(shù)據(jù)輸出到數(shù)碼管顯示,設(shè)置最高液位和最低液位,若液位超限則由單片機報警。 2.2 硬件電路設(shè)計 2.2.1 系統(tǒng)總體設(shè)計框圖 圖2—1 系統(tǒng)總體設(shè)計框圖 各部分功能: - 電源部分提供+5V電壓供系統(tǒng)各部分使用。
- LM傳感器實現(xiàn)液位信息到電壓信號的轉(zhuǎn)換。
- ADC0809將傳感器輸出的電壓信號經(jīng)A/D轉(zhuǎn)換后送到單片機。
- AT89C51為處理器,實現(xiàn)液位信息的接收、數(shù)據(jù)處理、和輸出到數(shù)碼管。
- 蜂鳴器部分在單片機檢測到液位超限是由單片機驅(qū)動LED燈亮滅報警。
- 單片機對液位數(shù)據(jù)處理后輸出,數(shù)碼管顯示。
2.2.2 核心芯片的介紹 (1)單片機AT89C51 單片機應(yīng)用系統(tǒng)的基本構(gòu)成: 圖2—2 單片機應(yīng)用系統(tǒng)的基本構(gòu)成 AT89C51主要參數(shù): 圖2—3 AT89C51主要參數(shù) AT89C51含 E2PROM電可編閃速存儲器。有兩級或三級程序存儲器保密系統(tǒng),防止E2PROM中的程序被非法復(fù)制。不用紫外線擦除,提高了編程效率。程序存儲器E2PROM容量可達20K字節(jié)。 AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。 1. AT89C51主要特性: 與MCS-51兼容,4K字節(jié)可編程閃爍存儲器,壽命:1000寫/擦循環(huán),全靜態(tài)工作:0HZ-24HZ,三級程序存儲器鎖定8位CPU;振蕩頻率1.2-12MHz;128個字節(jié)的片內(nèi)數(shù)據(jù)存儲器(片內(nèi)RAM);21個專用寄存器;4KB的片內(nèi)程序存儲器;8位并行I/O口P0,P1,P2,P3;一個全雙工串行I/O口;2個16位定時器/計數(shù)器;5個中斷源,分為2個優(yōu)先級。 2. I/O口引腳: a:P0口,雙向8位三態(tài)I/O口,此口為地址總線(低8位)及數(shù)據(jù)總線分時復(fù)用; b:P1口,8位準雙向I/O口 c:p2口,8位準雙向I/O口,與地址總線(高8位)復(fù)用; d:P3口,8位準雙向I/O口,雙功能復(fù)用。 (2)A/D轉(zhuǎn)換器ADC0809 A/D轉(zhuǎn)換芯片ADC0809為8路模擬信號的分時采集,片內(nèi)有8路模擬選通開關(guān),以及相應(yīng)的通道抵制鎖存用譯碼電路,其轉(zhuǎn)換時間為100μs左右。 
ADC0809的內(nèi)部結(jié)構(gòu):
圖2—4 ADC0809的內(nèi)部邏輯結(jié)構(gòu)圖

圖中多路開關(guān)可選通8個模擬通道,允許8路模擬量分時輸入,共用一個A/D轉(zhuǎn)換器進行轉(zhuǎn)換,這是一種經(jīng)濟的多路數(shù)據(jù)采集方法。地址鎖存與譯碼電路完成對A、B、C 3個地址位進行鎖存和譯碼,其譯碼輸出用于通道選擇,其轉(zhuǎn)換結(jié)果通過三態(tài)輸出鎖存器存放、輸出,因此可以直接與系統(tǒng)數(shù)據(jù)總線相連, 圖2—5 ADC0809的通道選擇表 圖2—6 ADC0809引腳圖 分辨率為8位;最大不可調(diào)誤差小于+_1LSB;單一+5V供電,模擬輸入范圍0~5V;具有鎖存控制的8路模擬開關(guān);可鎖存三態(tài)輸出,輸出與TTL兼容;功耗為15mw;不必進行零點和滿度調(diào)整;轉(zhuǎn)換速度取決芯片的始終頻率,它的時鐘為10kHZ~1.2MHZ.當時鐘為500KHZ,轉(zhuǎn)換速度為100us。 ADC0809是一款8位AD轉(zhuǎn)換器,數(shù)據(jù)獲取的關(guān)鍵部分是它的8位模/數(shù)轉(zhuǎn)換器。這個部分主要由N位逐次逼近寄存器SAR,D/A轉(zhuǎn)換器,比較器,置數(shù)選擇電路組成。轉(zhuǎn)換過程如下: A.選選置數(shù)電路置SAR的最高位為“1”,其余位為“0”,經(jīng)D/A轉(zhuǎn)換器轉(zhuǎn)換成的模擬電壓Uo與輸入模擬電壓Ui在電壓比較器進行比較,若Ui大于等于Uo,則保留最高位“1”,若Ui小于Uo,則最高位為“0”。 B.置次高位為“1”,低位全為“0”,按上述步驟進行轉(zhuǎn)換,比較,判斷。 C.重復(fù)此過程,直到確定SAR的最低位的值取“1”,還是“0”為止。此時,SAR內(nèi)容就是對應(yīng)的輸入模擬電壓轉(zhuǎn)換后的數(shù)字量。
圖2—7 ADC0809的工作時序圖 (3)LM型液壓傳感器 LM系列液壓傳感器采用316L不銹鋼膜片及PVC塑料螺紋頭相結(jié)合,可測量水、其它液體及氣體液位。LM系列液壓傳感器采用擁有專利技術(shù)的低成本不銹鋼傳感器安裝在PVC塑料過程接頭內(nèi)。該設(shè)計可使傳感器具有多種外形,方便客戶應(yīng)用于需要高性能、小尺寸的壓力和真空系統(tǒng)。傳感器標準輸出為0.5~4.5V,供電為5V。 特 點: 螺紋接口式,-20~85℃工作溫度范圍,±0.1%非線性,±3.0%總誤差,固態(tài)結(jié)構(gòu) 應(yīng) 用: 灌溉系統(tǒng),RV和船舶水位保持,蓄水和水循環(huán)系統(tǒng),小型罐體液位,冷卻器&蒸氣冷凝設(shè)備 技術(shù)指標: 類 型: 表壓 量 程: 0~1,2,5,15,30,50,150(psi)  精 確 度: ±5%(<5Psi);±3%(>5Psi) 輸 出: 0.5~4.5V 電氣連接: 電纜 工作溫度: -35℃~85℃ 供電電源: 5VDC 圖2—8 LM系列液壓傳感器 特 點: 低成本,微量程(最佳量程1Psi~15Psi),適于OEM客戶批量應(yīng)用。 典型應(yīng)用: 灌溉,RV和船用郵箱液位,水存儲和水回收系統(tǒng),小罐體液位,冷凝器,蒸發(fā)冷卻塔
圖2—9 LM傳感器尺寸外形圖 圖2—10 LM傳感器電氣連接圖
2.3 硬件電路各模塊設(shè)計
2.3.1 電源電路設(shè)計 圖2—11 電源電路 本系統(tǒng)供電為市電AC220v,經(jīng)變壓器TR1降為交流6v,經(jīng)整流橋堆BR1整流后得到脈動直流電壓6v,再經(jīng)三端穩(wěn)壓器LM7805得到VCC(+5v) ,其中電解電容C4、C6、起濾波作用,C5、C7是旁路電容,起抑制干擾的作用。 2.3.2 單片機最小系統(tǒng)電路設(shè)計 圖2—12 單片機最小系統(tǒng)電路 RST:復(fù)位輸入。在單片機工作期間,當此引腳上出現(xiàn)連接2個機器周期的高電平時可實現(xiàn)復(fù)位操作。復(fù)位電路除了具有上電復(fù)位功能外,還可通過復(fù)位鍵迫使RESET為高電平。當系統(tǒng)通電時,RESET引腳獲得高電平,隨著電容的充電,RESET引腳的高電平將逐漸下降。RESET的高電平只有保持足夠的時間(2個機械周期),單片機才可以進行復(fù)位操作 。 時鐘電路采用12MHz的晶振,因為ADC0809的工作時鐘最高允許值為12MHz,單片機ALE管腳2分頻后為500KHz,可以作為ADC0809轉(zhuǎn)換器的時鐘信號CLK。XTAL1:反向放大振蕩器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。XTAL1腳是內(nèi)部反相放大器的輸入端,而XTAL2腳是該放大器的輸出端。在晶體振蕩中,晶體工作于基本響應(yīng)模式,它作為一個感抗與外部電容形成并聯(lián)諧振,使正反饋放大器維持震蕩。所選電容為瓷片電容22PF,因為22PF對于工作于1MHZ以上的晶振都能獲得良好的效果。 2.3.3 顯示電路設(shè)計 圖2—13 顯示電路 本設(shè)計由P1口控制七段發(fā)光二極管亮或滅,使用共陰極8段數(shù)碼管,由圖2.9可知,要使七段顯示器的某一段亮,則應(yīng)該是與該段相連的段選寄存器即P1口的某位線輸出為1。若使某段熄滅,則必須輸出0。例如要顯示數(shù)字4。則應(yīng)使P1口的P1.7-P1.0輸出為11100110B,若用一個字節(jié)表示該輸出值,即字形代碼為66H,依此類推,可以得到0—9一共10個十進制數(shù)的字形代碼依次為3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。 本設(shè)計由P2.0,P2.1,P2.2,P2.3做位選,以控制哪一位七段數(shù)碼管顯示,例如,要求第一位數(shù)碼管顯示,則應(yīng)設(shè)置P2.0為“1”,P2.1,P2.2,P2.3為“0”。 PNP型三極管9012起到增加驅(qū)動電流的目的。電阻R12~R19控制通過數(shù)碼管的電流,R20~R23控制通過三極管9012的電流,R4~R11為單片機P1口的上拉電阻。
2.3.4 液位傳感器的接口電路設(shè)計圖2—14 電位器RV1與ADC0809接口 設(shè)計所選LM型液位傳感器能夠根據(jù)不同的液位產(chǎn)生不同的電壓,電壓值大小范圍為0.5~4.5V,且能夠便于遠距離傳輸。由于芯片ADC0809的輸入為0~5V的電壓,仿真時需要將輸入信號轉(zhuǎn)換為電壓信號,為此外接一電位器R=1kΩ,把電壓轉(zhuǎn)換成0~5V電壓。在設(shè)計中,把電位器的1,3腳接+5V電壓和地線,調(diào)節(jié)滑鈕2能夠很好的得到0~5V電壓,因此可以用電位器模擬液位傳感器。
2.3.5 AT89C51與ADC0809的接口電路設(shè)計圖2—15 AT89C51與ADC0809的接口電路 ADC0809與AT89C51相連接,ADC0809中的START與ALE相連通,ALE——地址鎖存允許信號,對應(yīng)ALE上跳沿,A、B、C地址狀態(tài)送入地址鎖存器中。START——轉(zhuǎn)換啟動信號。START上升沿時,復(fù)位ADC0809;START下降沿時啟動芯片,開始進行A/D轉(zhuǎn)換;在A/D轉(zhuǎn)換期間,START應(yīng)保持 低電平。當ALE上升沿時,ALE鎖存數(shù)據(jù),A/D轉(zhuǎn)換截止,當ALE下降沿時,START低電平,ALE低電平,不鎖存,A/D轉(zhuǎn)換開始。P2.4,P2.5,P2.6,P2.7分別控制CLK,START和ALE,EOC,OE信號,其控制A/D轉(zhuǎn)換的開始和截止。CLK使用AT89C51內(nèi)部時鐘信號。 ADDA,ADDB,ADDC相連通接地,信號輸入為000,表示輸入通道選擇為IN0口。8位數(shù)據(jù)信號線2-1~2-8與單片機的P1.0~P1.7相連,實現(xiàn)ADC0809與AT89C51的數(shù)據(jù)傳輸。 Vref——參考電源參考電壓用來與輸入的模擬信號進行比較,作為逐次逼近的基準。其典型值為+5V(Vref(+)=+5V, Vref(-)=0V)。 2.3.6 報警電路設(shè)計 圖2—16 報警電路 本電路的P3.0,P3.1作為高位和低位的報警控制線,通過設(shè)置高低液位報警線來實現(xiàn)報警功能。如果當前液位高于設(shè)置的高位報警線時,P3.0置低電平,高位報警燈亮。如果當前液位低于于設(shè)置的低位報警線時,P3.1置低電平,低位報警燈亮。如果當前液位低于設(shè)置的高位液位且高于低位液位時,高位報警燈和低位報警燈滅。 2.4 硬件電路總結(jié) 在本章中主要講述了硬件電路的結(jié)構(gòu),電路原理和部分芯片的功能,根據(jù)電路組成情況分成六個電路模塊,分別介紹了各個電路模塊的工作原理和功能,通過本次設(shè)計掌握了更多的基本硬件電路設(shè)計原理及其工作特點。并自行繪制電路原理圖,PCB封裝圖,為做PCB板做準備。下面是電路的一些照片。 圖2—17 電路原理圖 圖2—18 PCB封裝圖 圖2—19 硬件電路圖 圖2—20 液位在3.00米時的實物圖 圖2—21 液位在4.01米時的實物圖
第3章 軟件設(shè)計
3.1 AT89C51的I/O口應(yīng)用 AT89C51共有P0,P1,P2,P3,4個8位的并行雙向I/O口。各個I/O口實現(xiàn)不同的功能,詳細情況如下。 3.1.1 P0口的信號輸入 在程序中將P0口做為段選口使用,顯示十位數(shù)字的段選信號,下例為顯示十位數(shù)字的指令: MOV DPTR,#TABLE ;取段碼表首址。 MOV A,LED_2 ;取顯示的十位數(shù)字。 MOVC A,@A+DPTR ;取段碼。 MOV P0,A ;輸出段碼的顯示。 TABLE: DB 3FH,06H,5BH,4FH,66H ;共陰極數(shù)碼管表 DB 6DH,7DH,07H,7FH,6FH 3.1.2 P1口的信號輸入 在程序中將P0口作為輸入口,用來讀A/D轉(zhuǎn)換值。設(shè)計中,要求選通通道0,并把轉(zhuǎn)化后得到數(shù)字量存入內(nèi)部RAM的35H單元中,下例為把轉(zhuǎn)化后的數(shù)字量存入內(nèi)部RAM中的指令: CLR P2.5, ;SRART置0, MOV A,P1 ; MOV R7,A MOV 35H,R7 3.1.3 P2口的信號輸入 P2.0,P2.1,P2.2,P2.3做數(shù)碼管的位選信號用,要哪個數(shù)碼管亮,則置相應(yīng)位高電平,就可將其選中。例如要求顯示第一個數(shù)碼管,端口設(shè)置指令為: CLR P2.0 CLR P2.1 CLR P2.2 CLR P2.3 P2.4,P2.5,P2.6,P2.7作為通用I/O口使用,與ADC0809連接。P2.4作為A/D轉(zhuǎn)換的CLK信號,P2.5作為開始A/D轉(zhuǎn)換的啟動信號,P2.6作為查詢A/D轉(zhuǎn)換是否完成的判斷信號,P2.7作為輸出A/D轉(zhuǎn)換的數(shù)字量允許信號。下例為P2.4,P2.5,P2.6,P2.7作為通用I/O口使用的指令: CLOCK BIT P2.4 ST BIT P2.5 EOC BIT P2.6 OE BIT P2.7 3.1.4 P3口的信號輸入 P3.0、P3.1、P3.7作為通用I/O口使用,與LED燈和蜂鳴器相連,輸出報警信號,如果當前液位高于設(shè)置的高位報警線時,P3.0置低電平,高位報警燈亮。如果當前液位低于于設(shè)置的低位報警線時,P3.1置低電平,低位報警燈亮。如果當前液位低于設(shè)置的高位液位且高于低位液位時,高位報警燈和低位報警燈滅。 H_ALM BIT P3.0 L_ALM BIT P3.1 LALM: CLR L_ALM ;低位報警 SETB TR1 CLR FLAG LJMP PROC HALM: CLR H_ALM ;高位報警 SETB TR1 SETB FLAG LJMP PROC 3.2 軟件模塊設(shè)計 3.2.1 主程序的設(shè)計 系統(tǒng)分為初始化,A/D轉(zhuǎn)換,十進制轉(zhuǎn)換,LED顯示,電機控制和報警電路。因此整個程序需要包含上述六個子程序。 其中,LED_0 定義地址30H,以存放顯示十進制的小數(shù)點后十位數(shù)字。 LED_1 定義地址31H,以存放顯示十進制的小數(shù)點后個位數(shù)字。 LED_2 定義地址32H,以存放顯示十進制的個位數(shù)字。 ADC 定義地址35H,以存放經(jīng)A/D轉(zhuǎn)換后的數(shù)字。 流程圖如下: 
圖3—1 主程序流程圖 3.2.2 A/D轉(zhuǎn)換的設(shè)計 ADC0809芯片實現(xiàn)A/D轉(zhuǎn)換的時間為0.1ms左右,A/D轉(zhuǎn)換后得到的數(shù)字量應(yīng)及時傳送到單片機進行處理。 OE——輸出允許信號。用于控制三態(tài)輸出鎖存器向單片機輸出轉(zhuǎn)換得到的數(shù)據(jù)。OE=0,輸出數(shù)據(jù)線呈高阻;OE=1,輸出轉(zhuǎn)換得到的數(shù)據(jù)。 ALE——地址鎖存允許信號。對應(yīng)ALE上跳沿,A、B、C地址狀態(tài)送入地址鎖存器中。 START——轉(zhuǎn)換啟動信號。START上升沿時,復(fù)位ADC0809;START下降沿時啟動芯片,開始進行A/D轉(zhuǎn)換;在A/D轉(zhuǎn)換期間,START應(yīng)保持 低電平。本信號有時簡寫為ST。 CLK——時鐘信號。ADC0809的內(nèi)部沒有時鐘電路,所需時鐘信號由外界提供,因此有時鐘信號引腳。通常使用頻率為500KHz的時鐘信號。 EOC——轉(zhuǎn)換結(jié)束信號。EOC=0,正在進行轉(zhuǎn)換;EOC=1,轉(zhuǎn)換結(jié)束。使用中該狀態(tài)信號即可作為查詢的狀態(tài)標志,又可作為中斷請求信號使用。 CLOCK BIT P2.4 ST BIT P2.5 EOC BIT P2.6 OE BIT P2.7 CLR ST SETB ST CLR ST ;啟動轉(zhuǎn)換 JNB EOC,$ ;等待輸出結(jié)果 SETB OE ;允許輸出 MOV ADC,P1 ;讀取A/D轉(zhuǎn)換結(jié)果 CLR OE ;關(guān)閉輸出 MOV A,ADC ;將A/D轉(zhuǎn)換結(jié)果轉(zhuǎn)換成BCD碼

圖3—2 A/D轉(zhuǎn)換程序流程圖 3.2.3 顯示子程序的設(shè)計 設(shè)計中采用動態(tài)掃描法,實現(xiàn)四位數(shù)碼管的數(shù)值顯示,并顯示小數(shù)點。數(shù)碼管動態(tài)顯示接口是單片機中應(yīng)用最為廣泛的一種顯示方式之一,動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機對位選通COM端電路的控制,只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位數(shù)碼管的點亮時間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實際上各位數(shù)碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低 通過逐次選通P2.0,P2.1 ,P2.2,P2.3依次送十進制的相應(yīng)字段碼給P1口,并延時5ms完成顯示。 顯示程序: MOV LED_0,#00H MOV LED_1,#00H MOV LED_2,#00H MOV LED_3,#00H MOV DPTR,#TABLE ;送段碼表首地址 DISP: MOV A,LED_2 MOVC A,@A+DPTR ORL A,#80H ;顯示小數(shù)點 MOV BUFFER+2,A ;送顯示緩存 CLR P2.1 MOV P0,A LCALL DELAY SETB P2.1 SETB P2.0 MOV A,LED_1 MOVC A,@A+DPTR CLR P2.0 MOV P0,A LCALL DELAY RET DELAY: MOV R6,#10 ;延時5ms 圖3—4 顯示子程序流程圖 3.2.4 報警子程序的設(shè)計 本電路的P3.0,P3.1作為高位和低位的報警控制線,通過設(shè)置高低液位報警線來實現(xiàn)報警功能。本設(shè)計要求為:液位在小于1.5米時低位報警燈亮進行低位報警,液位在1.5~4米時燈都不亮,液位在大于4米時高位報警燈亮進行高位報警。 報警程序: MOV H_TEMP,#153 ;204/255=0.6 高于80%報警 MOV L_TEMP,#77 ;77/255=0.3 低于30%報警 MOV A,ADC ;將A/D轉(zhuǎn)換結(jié)果轉(zhuǎn)換成BCD碼 SUBB A,L_TEMP ;判斷是否低于下限 JC LALM MOV A,H_TEMP MOV R0,ADC SUBB A,R0 ;判斷是否高于上限 JC HALM CLR TR1 LJMP PROC LALM: CLR L_ALM ;低位報警 SETB TR1 CLR FLAG LJMP PROC HALM: CLR H_ALM ;高位報警 SETB TR1 SETB FLAG LJMP PROC
圖3—5 報警子程序流程圖 3.3 軟件設(shè)計總結(jié) 在本章中主要講述了軟件設(shè)計的一些情況,對軟件的一些功能進行了解釋,根據(jù)程序組成情況分成六個程序模塊,分別介紹了各個程序模塊的工作原理和功能,對部分程序進行了簡單的注釋,通過流程圖直觀的表現(xiàn)出各個模塊的作用及程序運行過程。在本次的軟件設(shè)計中,運用Keil進行編程,將編輯好的程序進行編譯,查看是否語法錯誤,如果沒有錯誤,設(shè)置晶振頻率,編譯生成.Hex文件,進行仿真。在此過程中,我收益良多,熟悉了單片機匯編語言的使用,對單片機的編程有了進一步的理解,通過和同學的交流,學會了很多以前自己不能解決的問題。
第4章 調(diào) 試
4.1 仿真電路調(diào)試 在仿真程序中通過模塊編程,用Proteus軟件與Keil軟件相結(jié)合進行調(diào)試,(調(diào)試程序見附錄I) 1.建立工程文件 1)點擊菜單project,選擇new project: 2)然后選擇要保存的路徑,輸入工程文件的名字,比如保存到論文目錄里,工程文件的名字為yang.uv2. 3)這時會彈出一個對話框,選擇單片機的型號,你可以根據(jù)你使用的單片機來選擇,keil c51幾乎支持所有要求你的51核的單片機,這里選AT89S51。 這時要新建一個源程序文件,建立一個匯編文件,輸入編寫好的程序。 保存。選擇要保存的路徑,在文件名里輸入文件名,注意一定要輸入擴展名,這里有匯編語言,文件名為:yang.asm。 2. 調(diào)試程序 (1)點擊Target 1前面的+號,展開里面的內(nèi)容source Group1: (2)用右鍵點擊Sourece Group 1(注意用鼠標的右鍵,而不是左鍵),將彈出一個菜單,選擇Add Files to Guoup'Source Group 1'. (3)選擇剛才的文件yang.asm.這時在source group 1 里就有yang.asm文件 (4)單擊“Project”菜單,再在下拉菜單中單擊“Built Target”選項(或者使用快捷鍵F7),編譯成功后,再單擊“Project”菜單,在下拉菜單中單擊“Start/Stop Debug Session”(或者使用快捷鍵Ctrl+F5)。硬件仿真原理圖如下圖 圖4—1 仿真原理圖 3. 仿真結(jié)果 通過改變電位器阻值的變化來模擬液位的變化,液位數(shù)值在數(shù)碼管上顯示,液位在小于1.5米時低位報警燈報警,液位在1.5米到4.0米時不報警,液位大于4.0米時高位報警燈報警。芯片ADC0809的轉(zhuǎn)換精度為1/256,所以本電路的最小分辨率為0.05V。 4.2 硬件電路調(diào)試 1.焊接電路時注意布局是否合適,芯片擺放是否正確,元器件是否齊全。 2.焊接好電路后,用萬用表檢測電路是否有短路、斷路現(xiàn)象發(fā)生,檢測地線和電源線是否短路。 3.用萬用表按照電路原理圖重新檢查電路,檢查是否有焊接錯誤的情況發(fā)生,檢查元器件是否虛焊。 4.插上芯片,注意管腳方向是否與PCB設(shè)計一致。 5.連通電源,檢查電路在沒有程序時是否與仿真結(jié)果一致。 4.3 硬件電路出現(xiàn)的問題及解決方法 1.電源接通后,發(fā)現(xiàn)ADC0809芯片發(fā)燙。 解決過程:開始考慮是否是電源接錯了,導(dǎo)致接在ADC0809兩端的電壓過大導(dǎo)致的,用萬用表檢測后發(fā)現(xiàn)電源正確,后經(jīng)老師指導(dǎo)找出問題是使用雙電源供電,兩個電源電壓有偏差,導(dǎo)致芯片發(fā)燙,后改正后芯片正常工作。 2.調(diào)試電路時,數(shù)碼管有第一個不顯示。 解決過程:開始考慮是否是程序的問題導(dǎo)致數(shù)碼管不顯示,仔細檢查程序后,經(jīng)proteus仿真證明程序沒有問題,后考慮是不是數(shù)碼管出現(xiàn)問題,交換數(shù)碼管控制信號線后,發(fā)現(xiàn)第一個數(shù)碼管的信號線能使其他數(shù)碼管顯示,后用萬用表檢測發(fā)現(xiàn)它的兩個管腳短路,證明第一個數(shù)碼管已損壞,不能顯示,于是重新?lián)Q取數(shù)碼管后,數(shù)碼管顯示正常。 4.4 軟件程序調(diào)試 本設(shè)計調(diào)試程序使用的是Keil編譯軟件和Proteus仿真軟件。先將編輯好的程序進行編譯,檢查程序是否有語法上的錯誤。在編譯、連接無錯誤和警告后,把程序進行分塊調(diào)試。然后用單步調(diào)試的方法進行檢查寄存器中的內(nèi)容是否與預(yù)期結(jié)果一致。例如:顯示部分,在調(diào)試中,可以用相關(guān)窗口查看相應(yīng)寄存器的內(nèi)容,35H單元存放采樣值,30H,31H,32H,33H單元內(nèi)容則為其轉(zhuǎn)換值,再對比顯示的數(shù)據(jù)就可以知道是否正確。 運行編譯生成.hex文件,然后在Proteus中加入.hex文件,進行仿真,查看顯示是否正確,能否達到要求。進行單步調(diào)試,查看硬件電路的電平是否和預(yù)期結(jié)果一致。 用STC_ISP_V3.1軟件將.hex文件燒寫進單片機中,與硬件相連接。通電后,用萬用表檢查電路的電壓是否與仿真圖中的電壓一致,用仿真結(jié)果驗證硬件電路是否正確。 4.5 軟件程序調(diào)試出現(xiàn)的問題及解決方法 1.在仿真時,ADC0809不能進行仿真。 解決方法:在仿真時使用Proteus軟件,芯片ADC0809不能進行仿真,系統(tǒng)提示是沒有模型,于是仿真時采用ADC0808芯片進行。由于ADC0809與ADC0808的區(qū)別在于:ADC0808的輸出數(shù)據(jù)線D0~D7是從高位依次到低位,ADC0809的輸出數(shù)據(jù)線D0~D7是從低位依次到高位。于是采用ADC0808進行仿真,ADC0809用在實物電路上。 2.在Keil中編輯程序時,程序出現(xiàn)有錯誤,其不能運行。 解決方法:在Keil中運行后雙擊出現(xiàn)的錯誤,錯誤行被指出來,根據(jù)程序的上下文,改正出現(xiàn)的錯誤。由于在程序中START后少添加了“:”,使得程序不能運行,改正后程序運行正常。 4.6 聯(lián)機調(diào)試總結(jié) 聯(lián)機調(diào)試是做硬件電路中的一個很重要的環(huán)節(jié),它的調(diào)試結(jié)果直接體現(xiàn)出對硬件和軟件的熟悉程度,對任務(wù)的理解。 在整個調(diào)試過程中對Keil編譯軟件,STC_ISP_V3.1燒寫軟件和Proteus仿真軟件有了進一步的認識和理解,對AT89C51單片機的匯編語言有了更進一步的了解,和同學的交流更進一步的提高自己。通過對調(diào)試軟件和硬件時出現(xiàn)的一些問題的討論,使我能更好的對電路、程序有個更深的認識,使我學會了分析電路的方法和技巧。
第5章 結(jié) 論
在本次設(shè)計中完成了電路原理圖設(shè)計,PCB板設(shè)計,電路焊接,程序的設(shè)計,軟、硬件的聯(lián)機調(diào)試。硬件電路的各個模塊,包括單片機最小系統(tǒng)電路,A/D轉(zhuǎn)換電路,數(shù)碼管顯示電路,報警電路等都能夠正常工作。在與軟件進行聯(lián)機調(diào)試時,通過改變電位器阻值的變化來模擬液位的變化,液位數(shù)值在數(shù)碼管上顯示,液位在小于1.5米時低位報警燈報警,液位在1.5米到4.0米時不報警,液位大于4.0米時高位報警燈報警。芯片ADC0809的轉(zhuǎn)換精度為1/256,所以本電路的最小分辨率為1/256V。 本次設(shè)計完成了任務(wù)書下達的所有任務(wù),實現(xiàn)了液位的檢測及液位的顯示,并實現(xiàn)了超限報警。顯示液位范圍為0~5m,顯示的最小分辨率為1/256V。它是一個可以應(yīng)用于一般工業(yè)的液位檢測及顯示系統(tǒng)的設(shè)計方案,測量范圍和測量精度滿足一般工業(yè)應(yīng)用需要。
附 錄
附錄1:電路原理圖
單片機源程序如下:
- LED_0 EQU 30H
- LED_1 EQU 31H
- LED_2 EQU 32H
- LED_3 EQU 33H
- BUFFER EQU 34H ;顯示緩存
- ADC EQU 35H
- TCNTA EQU 36H
- TCNTB EQU 37H
- H_TEMP EQU 38H ;液位上限
- L_TEMP EQU 39H ;液位下限
- FLAG BIT 00H
- H_ALM BIT P3.0
- L_ALM BIT P3.1
- SOUND BIT P3.7
- CLOCK BIT P2.4
- ST BIT P2.5
- EOC BIT P2.6
- OE BIT P2.7
- ORG 00H
- SJMP START
- ORG 0BH
- LJMP INT_T0
- ORG 1BH
- LJMP INT_T1
- START: MOV LED_0,#00H
- MOV LED_1,#00H
- MOV LED_2,#00H
- MOV DPTR,#TABLE ;送段碼表首地址
- MOV H_TEMP,#153 ;204/255=0.8 高于80%報警
- MOV L_TEMP,#77 ;77/255=0.3 低于30%報警
- MOV TMOD,#12H ;開中斷
- MOV TH0,#245
- MOV TL0,#0
- MOV IE,#8AH
- CLR C
- SETB TR0 ;為ADC0808提供時鐘
- WAIT: SETB H_ALM
- SETB L_ALM
- CLR ST
- SETB ST
- CLR ST ;啟動轉(zhuǎn)換
- JNB EOC,$ ;等待輸出結(jié)果
- SETB OE ;允許輸出
- MOV ADC,P1 ;讀取A/D轉(zhuǎn)換結(jié)果
- CLR OE ;關(guān)閉輸出
- MOV A,ADC ;將A/D轉(zhuǎn)換結(jié)果轉(zhuǎn)換成BCD碼
- SUBB A,L_TEMP ;判斷是否低于下限
- JC LALM
- MOV A,H_TEMP
- MOV R0,ADC
- SUBB A,R0 ;判斷是否高于上限
- JC HALM
- CLR TR1
- LJMP PROC
- LALM: CLR L_ALM ;低位報警
- SETB TR1
- CLR FLAG
- LJMP PROC
- HALM: CLR H_ALM ;高位報警
- SETB TR1
- SETB FLAG
- LJMP PROC
- PROC: MOV A,ADC ;數(shù)值轉(zhuǎn)換
- MOV B,#51
- DIV AB
- MOV LED_2,A
- MOV A,B
- MOV B,#10
- DIV AB
- MOV LED_1,A
- MOV LED_0,B
- LCALL DISP ;顯示A/D轉(zhuǎn)換結(jié)果
- SJMP WAIT
- INT_T0: CPL CLOCK ;提供ADC0808時鐘
- RETI
- INT_T1: CPL SOUND
- INC TCNTA
- MOV A,TCNTA
- JB FLAG,I1 ;判斷是低位報警還是高位報警
- CJNE A,#30,RETUNE ;低位報警聲
- SJMP I2
- I1: CJNE A,#20,RETUNE ;高位報警聲
- I2: MOV TCNTA,#0
- INC TCNTB
- MOV A,TCNTB
- CJNE A,#25,RETUNE
- MOV TCNTA,#0
- MOV TCNTB,#0
- LCALL DELAY2
- RETUNE: RETI
- DISP: MOV A,LED_0 ;數(shù)碼管顯示子程序
- MOVC A,@A+DPTR ;將字段碼轉(zhuǎn)換顯示碼
- CLR P2.3
- MOV P0,A
- LCALL DELAY
- SETB P2.3
- MOV A,LED_1
- MOVC A,@A+DPTR
- CLR P2.2
- MOV P0,A
- LCALL DELAY
- SETB P2.2
- MOV A,LED_2
- MOVC A,@A+DPTR
- ORL A,#80H ;顯示小數(shù)點
- MOV BUFFER+2,A ;送顯示緩存
- CLR P2.1
- MOV P0,A
- LCALL DELAY
- SETB P2.1
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
|