在網(wǎng)上發(fā)現(xiàn)一個很好的資料,分享給大家學(xué)習(xí)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
摘要
隨著社會的進(jìn)步,生產(chǎn)工藝和生產(chǎn)技術(shù)的發(fā)展,人們對液位檢測提出了更高的要求。由于新型電子技術(shù)、微電子技術(shù)和微型計(jì)算機(jī)被廣泛的應(yīng)用,單片機(jī)控制系統(tǒng)以其控制精度高,性能穩(wěn)定可靠,設(shè)置操作方便,造價低等諸多特點(diǎn),被應(yīng)用到液位系統(tǒng)的控制中來。
本文介紹了以LM型液位傳感器,A/D轉(zhuǎn)換芯片ADC0809,以及AT89C51單片機(jī)作為主控元件的液位檢測系統(tǒng)的設(shè)計(jì)方法。本文分別從液位檢測,A/D轉(zhuǎn)換,數(shù)碼管顯示,超限報警等幾個方面對硬件電路進(jìn)行了比較詳細(xì)的介紹,然后對A/D轉(zhuǎn)換程序,數(shù)碼管顯示程序,超限報警程序等做了比較詳細(xì)的闡述,并用流程圖做進(jìn)一步的解釋。
通過軟件和硬件的聯(lián)合調(diào)試,實(shí)現(xiàn)了在一定范圍內(nèi)對液位的調(diào)節(jié),動態(tài)顯示出液位結(jié)果,實(shí)現(xiàn)報警,完全實(shí)現(xiàn)了任務(wù)書上的要求。
目 錄
第1章 緒論1
1.1 液位檢測系統(tǒng)的概況1
1.2 國內(nèi)外研究動態(tài) 1
1.3 本次畢業(yè)設(shè)計(jì)的意義 2
1.4 本次畢業(yè)設(shè)計(jì)的任務(wù) 2
第2章 硬件電路設(shè)計(jì)3
2.1 硬件電路工作原理 3
2.2 硬件電路設(shè)計(jì) 3
2.2.1 系統(tǒng)總體設(shè)計(jì)框圖 3
2.2.2 核心芯片的介紹 4
2.3 硬件電路各模塊設(shè)計(jì)10
2.3.1 電源電路設(shè)計(jì)10
2.3.2 單片機(jī)最小系統(tǒng)電路設(shè)計(jì)10
2.3.3 顯示電路設(shè)計(jì)11
2.3.4 液位傳感器的接口電路設(shè)計(jì)12
2.3.5 AT89C51與ADC0809的接口電路設(shè)計(jì)13
2.3.6 報警電路設(shè)計(jì)14
2.4 硬件電路總結(jié)14
第3章 軟件設(shè)計(jì) 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è)計(jì)19
3.2.1 主程序的設(shè)計(jì)19
3.2.2 A/D轉(zhuǎn)換的設(shè)計(jì)20
3.2.3 顯示子程序的設(shè)計(jì)21
3.2.4 報警子程序的設(shè)計(jì)24
3.3 軟件設(shè)計(jì)總結(jié)25
第4章 聯(lián)機(jī)調(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)機(jī)調(diào)試總結(jié) 31
第5章 結(jié)論32
致謝 33
參考文獻(xiàn) 34
附錄 36
第1章 緒 論 隨著人們生活水平和工業(yè)標(biāo)準(zhǔn)的提高,液位的檢測越來越受到人們重視,檢測的精度和實(shí)時性要求也越來越高,另外還要求系統(tǒng)能提供對液位的自動控制功能。今后液位的監(jiān)測和控制系統(tǒng)的研究將是一個重要的課題。 1.1 液位檢測系統(tǒng)的概況 在日常生產(chǎn)和生活中經(jīng)常遇到液位的檢測和控制問題。尤其在許多工業(yè)生產(chǎn)系統(tǒng)中,需要對系統(tǒng)的液位或物料位進(jìn)行檢測和控制,特別是對具有腐蝕性的液體液位的測量,傳統(tǒng)的電極法是采用差位分布電極,通過給電脈沖來檢測液面,電極長期浸泡在液體中,極易被腐蝕、電解、失去靈敏性,因而對測試設(shè)備的抗腐蝕性要求較高。LM型液壓傳感器采用316L不銹鋼膜片及PVC塑料螺紋頭相結(jié)合,可測量水、其它液體及氣體液位。LM型液壓傳感器采用擁有專利技術(shù)的低成本不銹鋼傳感器,其安裝在PVC塑料過程接頭內(nèi)。監(jiān)控工程實(shí)施方便、迅速、易做到實(shí)時控制,而且測量精度又能達(dá)到工業(yè)實(shí)用的要求,所以有廣泛的應(yīng)用前景。為了降低工人的勞動強(qiáng)度,改善工人的工作環(huán)境,節(jié)省財力、物力,避免資源的浪費(fèi),特別是對一些具有高溫、高壓、低溫、低壓、有輻射性、毒性、易揮發(fā)易爆等液體,就要對液位進(jìn)行檢測,而且液位的檢測顯得尤為重要。今后液位的監(jiān)測和控制系統(tǒng)的研究將是一個重要的課題。 1.2 國內(nèi)外研究動態(tài) 隨著工業(yè)生產(chǎn)自動化高速發(fā)展, 對液位檢測和控制技術(shù)的要求也越來越高。為解決生產(chǎn)中的測量問題, 一方面是采用新的測量原理, 開發(fā)新的液位檢測儀表, 擴(kuò)大檢測的手段, 另一方面需要朝著實(shí)現(xiàn)微機(jī)化和智能化的方向發(fā)展。近些年來, 微電子技術(shù)的發(fā)展使得液位檢測技術(shù)發(fā)生了根本性的變化。新的檢測原理與電子部件的應(yīng)用使得液位計(jì)更趨向小型化和微型化, 特別是一些小型現(xiàn)場液位開關(guān)發(fā)展極快, 如光纖液位計(jì), 由于沒有可動部件, 所以可靠性高, 不僅可現(xiàn)場顯示, 而且可以發(fā)出控制信號。與此同時, 液位檢測和控制也正向著智能化方向發(fā)展, 在液位測量領(lǐng)域內(nèi)廣泛應(yīng)用微處理技術(shù), 以實(shí)現(xiàn)故障診斷和報警功能, 提高測量的精確度、可靠性、安全性和多功能化。在應(yīng)用和設(shè)計(jì)液位計(jì)時盡量實(shí)現(xiàn)精確測量,提高液位檢測系統(tǒng)對惡劣環(huán)境的抵抗能力, 以便在惡劣環(huán)境下準(zhǔn)確、可靠地工作。 1.3 本次畢業(yè)設(shè)計(jì)的意義 目前,市面上進(jìn)行液位測量的儀表種類繁多,但是同時具有測量、監(jiān)控、數(shù)據(jù)記錄及處理的液位測量裝置并不多。在某些工業(yè)控制系統(tǒng)中,數(shù)據(jù)的測量這一基本功能已不能滿足現(xiàn)代工業(yè)的要求,往往需要對大批數(shù)據(jù)進(jìn)行記錄,對其進(jìn)行后期處理分析,實(shí)現(xiàn)差錯控制、工藝改善、資源優(yōu)化等一系列工作。在液位測量這一領(lǐng)域中,如江河湖海、城市用水等方面,大量數(shù)據(jù)長時間,多網(wǎng)點(diǎn)的采集記錄分析具有普遍的意義。液位的變化分析,有助于人們進(jìn)一步對自然環(huán)境、天氣變化甚至是災(zāi)害預(yù)警提供可靠的支持。單片微機(jī)在許多過程控制設(shè)備和產(chǎn)品中都得到廣泛的應(yīng)用。由于其體積小,價格低,具有邏輯判斷、定時計(jì)數(shù)、程序控制等多種功能,在各個領(lǐng)域、各個行業(yè)都得到了廣泛應(yīng)用。不僅有常用的8位機(jī),而且4位單片機(jī)和16位單片機(jī)也得到了普及,隨著過程控制精度要求的增加和運(yùn)算速度的增快,單片機(jī)得到了進(jìn)一步的應(yīng)用。 1.4 本次畢業(yè)設(shè)計(jì)的任務(wù) 本文的主要任務(wù)是以單片機(jī)為主控制器,開發(fā)一個基于液位傳感器的液位監(jiān)控系統(tǒng),可測量并顯示液位高度。設(shè)定最高液位和最低液位,當(dāng)液位高于最高液位或低于最低液位時發(fā)出報警信號,提醒工作人員液位信息。研究設(shè)計(jì)內(nèi)容包括: (一)液位檢測的基本原理與方法; (二)液位檢測系統(tǒng)的整體方案設(shè)計(jì); (三)模數(shù)轉(zhuǎn)換電路的設(shè)計(jì); (四)顯示電路設(shè)計(jì); (五)系統(tǒng)軟件流程設(shè)計(jì); (六)電源電路的設(shè)計(jì); (七)PCB布線及硬件抗干擾設(shè)計(jì)。 設(shè)計(jì)完成之后提供一個可以應(yīng)用于一般工業(yè)的液位檢測及顯示系統(tǒng)的設(shè)計(jì)方案,測量范圍和測量精度滿足一般工業(yè)應(yīng)用需要。通過畢業(yè)設(shè)計(jì)的整個過程,可以綜合運(yùn)用傳感器、單片機(jī)、電子電路和程序設(shè)計(jì)等方面的知識,鍛煉和提高科研的能力。
第2章 硬件電路設(shè)計(jì)
2.1 硬件電路工作原理 該系統(tǒng)以AT89C51作為核心控制部件,外加傳感器,一片A/D轉(zhuǎn)換芯片和數(shù)碼管來完成系統(tǒng)的預(yù)期任務(wù),即液位的檢測、顯示和超限報警。傳感器實(shí)現(xiàn)液位信號到電壓信號的轉(zhuǎn)換,再由8位A/D轉(zhuǎn)換芯片ADC0809將模擬信號轉(zhuǎn)換為數(shù)字信號,實(shí)現(xiàn)液位信息的輸入,AT89C51從ADC0809讀取液位信息后進(jìn)行數(shù)據(jù)處理和超限判斷,隨后將處理過的數(shù)據(jù)輸出到數(shù)碼管顯示,設(shè)置最高液位和最低液位,若液位超限則由單片機(jī)報警。 2.2 硬件電路設(shè)計(jì) 2.2.1 系統(tǒng)總體設(shè)計(jì)框圖 圖2—1 系統(tǒng)總體設(shè)計(jì)框圖 各部分功能: - 電源部分提供+5V電壓供系統(tǒng)各部分使用。
- LM傳感器實(shí)現(xiàn)液位信息到電壓信號的轉(zhuǎn)換。
- ADC0809將傳感器輸出的電壓信號經(jīng)A/D轉(zhuǎn)換后送到單片機(jī)。
- AT89C51為處理器,實(shí)現(xiàn)液位信息的接收、數(shù)據(jù)處理、和輸出到數(shù)碼管。
- 蜂鳴器部分在單片機(jī)檢測到液位超限是由單片機(jī)驅(qū)動LED燈亮滅報警。
- 單片機(jī)對液位數(shù)據(jù)處理后輸出,數(shù)碼管顯示。
2.2.2 核心芯片的介紹 (1)單片機(jī)AT89C51 單片機(jī)應(yīng)用系統(tǒng)的基本構(gòu)成: 圖2—2 單片機(jī)應(yīng)用系統(tǒng)的基本構(gòu)成 AT89C51主要參數(shù): 圖2—3 AT89C51主要參數(shù) AT89C51含 E2PROM電可編閃速存儲器。有兩級或三級程序存儲器保密系統(tǒng),防止E2PROM中的程序被非法復(fù)制。不用紫外線擦除,提高了編程效率。程序存儲器E2PROM容量可達(dá)20K字節(jié)。 AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的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位定時器/計(jì)數(shù)器;5個中斷源,分為2個優(yōu)先級。 2. I/O口引腳: a:P0口,雙向8位三態(tài)I/O口,此口為地址總線(低8位)及數(shù)據(jù)總線分時復(fù)用; b:P1口,8位準(zhǔn)雙向I/O口 c:p2口,8位準(zhǔn)雙向I/O口,與地址總線(高8位)復(fù)用; d:P3口,8位準(zhǔn)雙向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)換器進(jìn)行轉(zhuǎn)換,這是一種經(jīng)濟(jì)的多路數(shù)據(jù)采集方法。地址鎖存與譯碼電路完成對A、B、C 3個地址位進(jìn)行鎖存和譯碼,其譯碼輸出用于通道選擇,其轉(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;不必進(jìn)行零點(diǎn)和滿度調(diào)整;轉(zhuǎn)換速度取決芯片的始終頻率,它的時鐘為10kHZ~1.2MHZ.當(dāng)時鐘為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在電壓比較器進(jìn)行比較,若Ui大于等于Uo,則保留最高位“1”,若Ui小于Uo,則最高位為“0”。 B.置次高位為“1”,低位全為“0”,按上述步驟進(jìn)行轉(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è)計(jì)可使傳感器具有多種外形,方便客戶應(yīng)用于需要高性能、小尺寸的壓力和真空系統(tǒng)。傳感器標(biāo)準(zhǔn)輸出為0.5~4.5V,供電為5V。 特 點(diǎn): 螺紋接口式,-20~85℃工作溫度范圍,±0.1%非線性,±3.0%總誤差,固態(tài)結(jié)構(gòu) 應(yīng) 用: 灌溉系統(tǒng),RV和船舶水位保持,蓄水和水循環(huán)系統(tǒng),小型罐體液位,冷卻器&蒸氣冷凝設(shè)備 技術(shù)指標(biāo): 類 型: 表壓 量 程: 0~1,2,5,15,30,50,150(psi)  精 確 度: ±5%(<5Psi);±3%(>5Psi) 輸 出: 0.5~4.5V 電氣連接: 電纜 工作溫度: -35℃~85℃ 供電電源: 5VDC 圖2—8 LM系列液壓傳感器 特 點(diǎn): 低成本,微量程(最佳量程1Psi~15Psi),適于OEM客戶批量應(yīng)用。 典型應(yīng)用: 灌溉,RV和船用郵箱液位,水存儲和水回收系統(tǒng),小罐體液位,冷凝器,蒸發(fā)冷卻塔
圖2—9 LM傳感器尺寸外形圖 圖2—10 LM傳感器電氣連接圖
2.3 硬件電路各模塊設(shè)計(jì)
2.3.1 電源電路設(shè)計(jì) 圖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 單片機(jī)最小系統(tǒng)電路設(shè)計(jì) 圖2—12 單片機(jī)最小系統(tǒng)電路 RST:復(fù)位輸入。在單片機(jī)工作期間,當(dāng)此引腳上出現(xiàn)連接2個機(jī)器周期的高電平時可實(shí)現(xiàn)復(fù)位操作。復(fù)位電路除了具有上電復(fù)位功能外,還可通過復(fù)位鍵迫使RESET為高電平。當(dāng)系統(tǒng)通電時,RESET引腳獲得高電平,隨著電容的充電,RESET引腳的高電平將逐漸下降。RESET的高電平只有保持足夠的時間(2個機(jī)械周期),單片機(jī)才可以進(jìn)行復(fù)位操作 。 時鐘電路采用12MHz的晶振,因?yàn)锳DC0809的工作時鐘最高允許值為12MHz,單片機(jī)ALE管腳2分頻后為500KHz,可以作為ADC0809轉(zhuǎn)換器的時鐘信號CLK。XTAL1:反向放大振蕩器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。XTAL1腳是內(nèi)部反相放大器的輸入端,而XTAL2腳是該放大器的輸出端。在晶體振蕩中,晶體工作于基本響應(yīng)模式,它作為一個感抗與外部電容形成并聯(lián)諧振,使正反饋放大器維持震蕩。所選電容為瓷片電容22PF,因?yàn)?2PF對于工作于1MHZ以上的晶振都能獲得良好的效果。 2.3.3 顯示電路設(shè)計(jì) 圖2—13 顯示電路 本設(shè)計(jì)由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個十進(jìn)制數(shù)的字形代碼依次為3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。 本設(shè)計(jì)由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為單片機(jī)P1口的上拉電阻。
2.3.4 液位傳感器的接口電路設(shè)計(jì)圖2—14 電位器RV1與ADC0809接口 設(shè)計(jì)所選LM型液位傳感器能夠根據(jù)不同的液位產(chǎn)生不同的電壓,電壓值大小范圍為0.5~4.5V,且能夠便于遠(yuǎn)距離傳輸。由于芯片ADC0809的輸入為0~5V的電壓,仿真時需要將輸入信號轉(zhuǎn)換為電壓信號,為此外接一電位器R=1kΩ,把電壓轉(zhuǎn)換成0~5V電壓。在設(shè)計(jì)中,把電位器的1,3腳接+5V電壓和地線,調(diào)節(jié)滑鈕2能夠很好的得到0~5V電壓,因此可以用電位器模擬液位傳感器。
2.3.5 AT89C51與ADC0809的接口電路設(shè)計(jì)圖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下降沿時啟動芯片,開始進(jìn)行A/D轉(zhuǎn)換;在A/D轉(zhuǎn)換期間,START應(yīng)保持 低電平。當(dāng)ALE上升沿時,ALE鎖存數(shù)據(jù),A/D轉(zhuǎn)換截止,當(dāng)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與單片機(jī)的P1.0~P1.7相連,實(shí)現(xiàn)ADC0809與AT89C51的數(shù)據(jù)傳輸。 Vref——參考電源參考電壓用來與輸入的模擬信號進(jìn)行比較,作為逐次逼近的基準(zhǔn)。其典型值為+5V(Vref(+)=+5V, Vref(-)=0V)。 2.3.6 報警電路設(shè)計(jì) 圖2—16 報警電路 本電路的P3.0,P3.1作為高位和低位的報警控制線,通過設(shè)置高低液位報警線來實(shí)現(xiàn)報警功能。如果當(dāng)前液位高于設(shè)置的高位報警線時,P3.0置低電平,高位報警燈亮。如果當(dāng)前液位低于于設(shè)置的低位報警線時,P3.1置低電平,低位報警燈亮。如果當(dāng)前液位低于設(shè)置的高位液位且高于低位液位時,高位報警燈和低位報警燈滅。 2.4 硬件電路總結(jié) 在本章中主要講述了硬件電路的結(jié)構(gòu),電路原理和部分芯片的功能,根據(jù)電路組成情況分成六個電路模塊,分別介紹了各個電路模塊的工作原理和功能,通過本次設(shè)計(jì)掌握了更多的基本硬件電路設(shè)計(jì)原理及其工作特點(diǎn)。并自行繪制電路原理圖,PCB封裝圖,為做PCB板做準(zhǔn)備。下面是電路的一些照片。 圖2—17 電路原理圖 圖2—18 PCB封裝圖 圖2—19 硬件電路圖 圖2—20 液位在3.00米時的實(shí)物圖 圖2—21 液位在4.01米時的實(shí)物圖
第3章 軟件設(shè)計(jì)
3.1 AT89C51的I/O口應(yīng)用 AT89C51共有P0,P1,P2,P3,4個8位的并行雙向I/O口。各個I/O口實(shí)現(xiàn)不同的功能,詳細(xì)情況如下。 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è)計(jì)中,要求選通通道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燈和蜂鳴器相連,輸出報警信號,如果當(dāng)前液位高于設(shè)置的高位報警線時,P3.0置低電平,高位報警燈亮。如果當(dāng)前液位低于于設(shè)置的低位報警線時,P3.1置低電平,低位報警燈亮。如果當(dāng)前液位低于設(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è)計(jì) 3.2.1 主程序的設(shè)計(jì) 系統(tǒng)分為初始化,A/D轉(zhuǎn)換,十進(jìn)制轉(zhuǎn)換,LED顯示,電機(jī)控制和報警電路。因此整個程序需要包含上述六個子程序。 其中,LED_0 定義地址30H,以存放顯示十進(jìn)制的小數(shù)點(diǎn)后十位數(shù)字。 LED_1 定義地址31H,以存放顯示十進(jìn)制的小數(shù)點(diǎn)后個位數(shù)字。 LED_2 定義地址32H,以存放顯示十進(jìn)制的個位數(shù)字。 ADC 定義地址35H,以存放經(jīng)A/D轉(zhuǎn)換后的數(shù)字。 流程圖如下: 
圖3—1 主程序流程圖 3.2.2 A/D轉(zhuǎn)換的設(shè)計(jì) ADC0809芯片實(shí)現(xiàn)A/D轉(zhuǎn)換的時間為0.1ms左右,A/D轉(zhuǎn)換后得到的數(shù)字量應(yīng)及時傳送到單片機(jī)進(jìn)行處理。 OE——輸出允許信號。用于控制三態(tài)輸出鎖存器向單片機(jī)輸出轉(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下降沿時啟動芯片,開始進(jìn)行A/D轉(zhuǎn)換;在A/D轉(zhuǎn)換期間,START應(yīng)保持 低電平。本信號有時簡寫為ST。 CLK——時鐘信號。ADC0809的內(nèi)部沒有時鐘電路,所需時鐘信號由外界提供,因此有時鐘信號引腳。通常使用頻率為500KHz的時鐘信號。 EOC——轉(zhuǎn)換結(jié)束信號。EOC=0,正在進(jìn)行轉(zhuǎn)換;EOC=1,轉(zhuǎn)換結(jié)束。使用中該狀態(tài)信號即可作為查詢的狀態(tài)標(biāo)志,又可作為中斷請求信號使用。 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è)計(jì) 設(shè)計(jì)中采用動態(tài)掃描法,實(shí)現(xiàn)四位數(shù)碼管的數(shù)值顯示,并顯示小數(shù)點(diǎn)。數(shù)碼管動態(tài)顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式之一,動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機(jī)對位選通COM端電路的控制,只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低 通過逐次選通P2.0,P2.1 ,P2.2,P2.3依次送十進(jìn)制的相應(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ù)點(diǎn) 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è)計(jì) 本電路的P3.0,P3.1作為高位和低位的報警控制線,通過設(shè)置高低液位報警線來實(shí)現(xiàn)報警功能。本設(shè)計(jì)要求為:液位在小于1.5米時低位報警燈亮進(jìn)行低位報警,液位在1.5~4米時燈都不亮,液位在大于4米時高位報警燈亮進(jìn)行高位報警。 報警程序: 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è)計(jì)總結(jié) 在本章中主要講述了軟件設(shè)計(jì)的一些情況,對軟件的一些功能進(jìn)行了解釋,根據(jù)程序組成情況分成六個程序模塊,分別介紹了各個程序模塊的工作原理和功能,對部分程序進(jìn)行了簡單的注釋,通過流程圖直觀的表現(xiàn)出各個模塊的作用及程序運(yùn)行過程。在本次的軟件設(shè)計(jì)中,運(yùn)用Keil進(jìn)行編程,將編輯好的程序進(jìn)行編譯,查看是否語法錯誤,如果沒有錯誤,設(shè)置晶振頻率,編譯生成.Hex文件,進(jìn)行仿真。在此過程中,我收益良多,熟悉了單片機(jī)匯編語言的使用,對單片機(jī)的編程有了進(jìn)一步的理解,通過和同學(xué)的交流,學(xué)會了很多以前自己不能解決的問題。
第4章 調(diào) 試
4.1 仿真電路調(diào)試 在仿真程序中通過模塊編程,用Proteus軟件與Keil軟件相結(jié)合進(jìn)行調(diào)試,(調(diào)試程序見附錄I) 1.建立工程文件 1)點(diǎn)擊菜單project,選擇new project: 2)然后選擇要保存的路徑,輸入工程文件的名字,比如保存到論文目錄里,工程文件的名字為yang.uv2. 3)這時會彈出一個對話框,選擇單片機(jī)的型號,你可以根據(jù)你使用的單片機(jī)來選擇,keil c51幾乎支持所有要求你的51核的單片機(jī),這里選AT89S51。 這時要新建一個源程序文件,建立一個匯編文件,輸入編寫好的程序。 保存。選擇要保存的路徑,在文件名里輸入文件名,注意一定要輸入擴(kuò)展名,這里有匯編語言,文件名為:yang.asm。 2. 調(diào)試程序 (1)點(diǎn)擊Target 1前面的+號,展開里面的內(nèi)容source Group1: (2)用右鍵點(diǎn)擊Sourece Group 1(注意用鼠標(biāo)的右鍵,而不是左鍵),將彈出一個菜單,選擇Add Files to Guoup'Source Group 1'. (3)選擇剛才的文件yang.asm.這時在source group 1 里就有yang.asm文件 (4)單擊“Project”菜單,再在下拉菜單中單擊“Built Target”選項(xiàng)(或者使用快捷鍵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è)計(jì)一致。 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ù)碼管不顯示,仔細(xì)檢查程序后,經(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è)計(jì)調(diào)試程序使用的是Keil編譯軟件和Proteus仿真軟件。先將編輯好的程序進(jìn)行編譯,檢查程序是否有語法上的錯誤。在編譯、連接無錯誤和警告后,把程序進(jìn)行分塊調(diào)試。然后用單步調(diào)試的方法進(jìn)行檢查寄存器中的內(nèi)容是否與預(yù)期結(jié)果一致。例如:顯示部分,在調(diào)試中,可以用相關(guān)窗口查看相應(yīng)寄存器的內(nèi)容,35H單元存放采樣值,30H,31H,32H,33H單元內(nèi)容則為其轉(zhuǎn)換值,再對比顯示的數(shù)據(jù)就可以知道是否正確。 運(yùn)行編譯生成.hex文件,然后在Proteus中加入.hex文件,進(jìn)行仿真,查看顯示是否正確,能否達(dá)到要求。進(jìn)行單步調(diào)試,查看硬件電路的電平是否和預(yù)期結(jié)果一致。 用STC_ISP_V3.1軟件將.hex文件燒寫進(jìn)單片機(jī)中,與硬件相連接。通電后,用萬用表檢查電路的電壓是否與仿真圖中的電壓一致,用仿真結(jié)果驗(yàn)證硬件電路是否正確。 4.5 軟件程序調(diào)試出現(xiàn)的問題及解決方法 1.在仿真時,ADC0809不能進(jìn)行仿真。 解決方法:在仿真時使用Proteus軟件,芯片ADC0809不能進(jìn)行仿真,系統(tǒng)提示是沒有模型,于是仿真時采用ADC0808芯片進(jìn)行。由于ADC0809與ADC0808的區(qū)別在于:ADC0808的輸出數(shù)據(jù)線D0~D7是從高位依次到低位,ADC0809的輸出數(shù)據(jù)線D0~D7是從低位依次到高位。于是采用ADC0808進(jìn)行仿真,ADC0809用在實(shí)物電路上。 2.在Keil中編輯程序時,程序出現(xiàn)有錯誤,其不能運(yùn)行。 解決方法:在Keil中運(yùn)行后雙擊出現(xiàn)的錯誤,錯誤行被指出來,根據(jù)程序的上下文,改正出現(xiàn)的錯誤。由于在程序中START后少添加了“:”,使得程序不能運(yùn)行,改正后程序運(yùn)行正常。 4.6 聯(lián)機(jī)調(diào)試總結(jié) 聯(lián)機(jī)調(diào)試是做硬件電路中的一個很重要的環(huán)節(jié),它的調(diào)試結(jié)果直接體現(xiàn)出對硬件和軟件的熟悉程度,對任務(wù)的理解。 在整個調(diào)試過程中對Keil編譯軟件,STC_ISP_V3.1燒寫軟件和Proteus仿真軟件有了進(jìn)一步的認(rèn)識和理解,對AT89C51單片機(jī)的匯編語言有了更進(jìn)一步的了解,和同學(xué)的交流更進(jìn)一步的提高自己。通過對調(diào)試軟件和硬件時出現(xiàn)的一些問題的討論,使我能更好的對電路、程序有個更深的認(rèn)識,使我學(xué)會了分析電路的方法和技巧。
第5章 結(jié) 論
在本次畢業(yè)設(shè)計(jì)中完成了電路原理圖設(shè)計(jì),PCB板設(shè)計(jì),電路焊接,程序的設(shè)計(jì),軟、硬件的聯(lián)機(jī)調(diào)試。硬件電路的各個模塊,包括單片機(jī)最小系統(tǒng)電路,A/D轉(zhuǎn)換電路,數(shù)碼管顯示電路,報警電路等都能夠正常工作。在與軟件進(jìn)行聯(lián)機(jī)調(diào)試時,通過改變電位器阻值的變化來模擬液位的變化,液位數(shù)值在數(shù)碼管上顯示,液位在小于1.5米時低位報警燈報警,液位在1.5米到4.0米時不報警,液位大于4.0米時高位報警燈報警。芯片ADC0809的轉(zhuǎn)換精度為1/256,所以本電路的最小分辨率為1/256V。 本次畢業(yè)設(shè)計(jì)完成了任務(wù)書下達(dá)的所有任務(wù),實(shí)現(xiàn)了液位的檢測及液位的顯示,并實(shí)現(xiàn)了超限報警。顯示液位范圍為0~5m,顯示的最小分辨率為1/256V。它是一個可以應(yīng)用于一般工業(yè)的液位檢測及顯示系統(tǒng)的設(shè)計(jì)方案,測量范圍和測量精度滿足一般工業(yè)應(yīng)用需要。
附錄1:電路原理圖
單片機(jī)源程序如下: - 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,[ DISCUZ_CODE_1 ]nbsp; ;等待輸出結(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ù)點(diǎn)
- MOV BUFFER+2,A ;送顯示緩存
- CLR P2.1
- MOV P0,A
- LCALL DELAY
- SETB P2.1
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
以上轉(zhuǎn)載資料51hei提供下載:
水位水塔.rar
(3.86 MB, 下載次數(shù): 328)
2018-12-6 09:48 上傳
點(diǎn)擊文件名下載附件
|