大學本科生畢業設計(論文)
目 錄
第1章 緒論………………………………………………………………1
1.1 液位檢測系統的概況………………………………………………1
1.2 國內外研究動態…………………………………………………… 1
1.3 本次畢業設計的意義……………………………………………… 2
1.4 本次畢業設計的任務……………………………………………… 2
第2章 硬件電路設計………………………………………………………3
2.1 硬件電路工作原理………………………………………………… 3
2.2 硬件電路設計……………………………………………………… 3
2.2.1 系統總體設計框圖…………………………………………… 3
2.2.2 核心芯片的介紹……………………………………………… 4
2.3 硬件電路各模塊設計………………………………………………10
2.3.1 電源電路設計…………………………………………………10
2.3.2 單片機最小系統電路設計……………………………………10
2.3.3 顯示電路設計…………………………………………………11
2.3.4 液位傳感器的接口電路設計…………………………………12
2.3.5 AT89C51與ADC0809的接口電路設計…………………………13
2.3.6 報警電路設計…………………………………………………14
2.4 硬件電路總結………………………………………………………14
第3章 軟件設計………………………………………………………… 17
3.1 AT89C51的I/O口應用…………………………………………… 17
3.1.1 P0口的信號輸入…………………………………………… 17
3.1.2 P1口的信號輸入…………………………………………… 17
3.1.3 P2口的信號輸入…………………………………………… 17
3.1.4 P3口的信號輸入…………………………………………… 18
3.2 軟件模塊設計………………………………………………………19
3.2.1 主程序的設計…………………………………………………19
3.2.2 A/D轉換的設計………………………………………………20
3.2.3 顯示子程序的設計……………………………………………21
3.2.4 報警子程序的設計……………………………………………24
3.3 軟件設計總結………………………………………………………25
第4章 聯機調試…………………………………………………………28
4.1 仿真電路調試…………………………………………………… 28
4.2 硬件電路調試…………………………………………………… 29
4.3 硬件電路調試出現的問題及解決方法………………………… 30
4.4 軟件程序調試………………………………………………………30
4.5 軟件程序調試出現的問題及解決方法………………………… 31
4.6 聯機調試總結…………………………………………………… 31
第5章 結論………………………………………………………………32
致謝……………………………………………………………………… 33
參考文獻………………………………………………………………… 34
附錄……………………………………………………………………… 36
1
大學本科生畢業設計(論文)
第1章 緒 論
隨著人們生活水平和工業標準的提高,液位的檢測越來越受到人們重視,檢測的精度和實時性要求也越來越高,另外還要求系統能提供對液位的自動控制功能。今后液位的監測和控制系統的研究將是一個重要的課題。
1.1 液位檢測系統的概況
在日常生產和生活中經常遇到液位的檢測和控制問題。尤其在許多工業生產系統中,需要對系統的液位或物料位進行檢測和控制,特別是對具有腐蝕性的液體液位的測量,傳統的電極法是采用差位分布電極,通過給電脈沖來檢測液面,電極長期浸泡在液體中,極易被腐蝕、電解、失去靈敏性,因而對測試設備的抗腐蝕性要求較高。LM型液壓傳感器采用316L不銹鋼膜片及PVC塑料螺紋頭相結合,可測量水、其它液體及氣體液位。LM型液壓傳感器采用擁有專利技術的低成本不銹鋼傳感器,其安裝在PVC塑料過程接頭內。監控工程實施方便、迅速、易做到實時控制,而且測量精度又能達到工業實用的要求,所以有廣泛的應用前景。為了降低工人的勞動強度,改善工人的工作環境,節省財力、物力,避免資源的浪費,特別是對一些具有高溫、高壓、低溫、低壓、有輻射性、毒性、易揮發易爆等液體,就要對液位進行檢測,而且液位的檢測顯得尤為重要。今后液位的監測和控制系統的研究將是一個重要的課題。
1.2 國內外研究動態
隨著工業生產自動化高速發展, 對液位檢測和控制技術的要求也越來越高。為解決生產中的測量問題, 一方面是采用新的測量原理, 開發新的液位檢測儀表, 擴大檢測的手段, 另一方面需要朝著實現微機化和智能化的方向發展。近些年來, 微電子技術的發展使得液位檢測技術發生了根本性的變化。新的檢測原理與電子部件的應用使得液位計更趨向小型化和微型化, 特別是一些小型現場液位開關發展極快, 如光纖液位計, 由于沒有可動部件, 所以可靠性高, 不僅可現場顯示, 而且可以發出控制信號。與此同時, 液位檢測和控制也正向著智能化方向發展, 在液位測量領域內廣泛應用微處理技術, 以實現故障診斷和報警功能, 提高測量的精確度、可靠性、安全性和多功能化。在應用和設計液位計時盡量實現精確測量,提高液位檢測系統對惡劣環境的抵抗能力, 以便在惡劣環境下準確、可靠地工作。
1.3 本次畢業設計的意義
目前,市面上進行液位測量的儀表種類繁多,但是同時具有測量、監控、數據記錄及處理的液位測量裝置并不多。在某些工業控制系統中,數據的測量這一基本功能已不能滿足現代工業的要求,往往需要對大批數據進行記錄,對其進行后期處理分析,實現差錯控制、工藝改善、資源優化等一系列工作。在液位測量這一領域中,如江河湖海、城市用水等方面,大量數據長時間,多網點的采集記錄分析具有普遍的意義。液位的變化分析,有助于人們進一步對自然環境、天氣變化甚至是災害預警提供可靠的支持。單片微機在許多過程控制設備和產品中都得到廣泛的應用。由于其體積小,價格低,具有邏輯判斷、定時計數、程序控制等多種功能,在各個領域、各個行業都得到了廣泛應用。不僅有常用的8位機,而且4位單片機和16位單片機也得到了普及,隨著過程控制精度要求的增加和運算速度的增快,單片機得到了進一步的應用。
1.4 本次畢業設計的任務
本文的主要任務是以單片機為主控制器,開發一個基于液位傳感器的液位監控系統,可測量并顯示液位高度。設定最高液位和最低液位,當液位高于最高液位或低于最低液位時發出報警信號,提醒工作人員液位信息。研究設計內容包括:
(一)液位檢測的基本原理與方法;
(二)液位檢測系統的整體方案設計;
(三)模數轉換電路的設計;
(四)顯示電路設計;
(五)系統軟件流程設計;
(六)電源電路的設計;
(七)PCB布線及硬件抗干擾設計。
設計完成之后提供一個可以應用于一般工業的液位檢測及顯示系統的設計方案,測量范圍和測量精度滿足一般工業應用需要。通過畢業設計的整個過程,可以綜合運用傳感器、單片機、電子電路和程序設計等方面的知識,鍛煉和提高科研的能力。
第2章 硬件電路設計
2.1 硬件電路工作原理
該系統以AT89C51作為核心控制部件,外加傳感器,一片A/D轉換芯片和數碼管來完成系統的預期任務,即液位的檢測、顯示和超限報警。傳感器實現液位信號到電壓信號的轉換,再由8位A/D轉換芯片ADC0809將模擬信號轉換為數字信號,實現液位信息的輸入,AT89C51從ADC0809讀取液位信息后進行數據處理和超限判斷,隨后將處理過的數據輸出到數碼管顯示,設置最高液位和最低液位,若液位超限則由單片機報警。
2.2 硬件電路設計
2.2.1 系統總體設計框圖
圖2—1 系統總體設計框圖
各部分功能:
- 電源部分提供+5V電壓供系統各部分使用。
- LM傳感器實現液位信息到電壓信號的轉換。
- ADC0809將傳感器輸出的電壓信號經A/D轉換后送到單片機。
- AT89C51為處理器,實現液位信息的接收、數據處理、和輸出到數碼管。
- 蜂鳴器部分在單片機檢測到液位超限是由單片機驅動LED燈亮滅報警。
- 單片機對液位數據處理后輸出,數碼管顯示。
2.2.2 核心芯片的介紹
(1)單片機AT89C51
單片機應用系統的基本構成:
圖2—2 單片機應用系統的基本構成
AT89C51主要參數:
圖2—3 AT89C51主要參數
AT89C51含 E2PROM電可編閃速存儲器。有兩級或三級程序存儲器保密系統,防止E2PROM中的程序被非法復制。不用紫外線擦除,提高了編程效率。程序存儲器E2PROM容量可達20K字節。
AT89C51是一種帶4K字節閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。
1. AT89C51主要特性:
與MCS-51兼容,4K字節可編程閃爍存儲器,壽命:1000寫/擦循環,全靜態工作:0HZ-24HZ,三級程序存儲器鎖定8位CPU;振蕩頻率1.2-12MHz;128個字節的片內數據存儲器(片內RAM);21個專用寄存器;4KB的片內程序存儲器;8位并行I/O口P0,P1,P2,P3;一個全雙工串行I/O口;2個16位定時器/計數器;5個中斷源,分為2個優先級。
2. I/O口引腳:
a:P0口,雙向8位三態I/O口,此口為地址總線(低8位)及數據總線分時復用;
b:P1口,8位準雙向I/O口
c:p2口,8位準雙向I/O口,與地址總線(高8位)復用;
d:P3口,8位準雙向I/O口,雙功能復用。
(2)A/D轉換器ADC0809
A/D轉換芯片ADC0809為8路模擬信號的分時采集,片內有8路模擬選通開關,以及相應的通道抵制鎖存用譯碼電路,其轉換時間為100μs左右。
-
ADC0809的內部結構:
圖2—4 ADC0809的內部邏輯結構圖
圖中多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用一個A/D轉換器進行轉換,這是一種經濟的多路數據采集方法。地址鎖存與譯碼電路完成對A、B、C 3個地址位進行鎖存和譯碼,其譯碼輸出用于通道選擇,其轉換結果通過三態輸出鎖存器存放、輸出,因此可以直接與系統數據總線相連,
圖2—5 ADC0809的通道選擇表 圖2—6 ADC0809引腳圖
分辨率為8位;最大不可調誤差小于+_1LSB;單一+5V供電,模擬輸入范圍0~5V;具有鎖存控制的8路模擬開關;可鎖存三態輸出,輸出與TTL兼容;功耗為15mw;不必進行零點和滿度調整;轉換速度取決芯片的始終頻率,它的時鐘為10kHZ~1.2MHZ.當時鐘為500KHZ,轉換速度為100us。
ADC0809是一款8位AD轉換器,數據獲取的關鍵部分是它的8位模/數轉換器。這個部分主要由N位逐次逼近寄存器SAR,D/A轉換器,比較器,置數選擇電路組成。轉換過程如下:
A.選選置數電路置SAR的最高位為“1”,其余位為“0”,經D/A轉換器轉換成的模擬電壓Uo與輸入模擬電壓Ui在電壓比較器進行比較,若Ui大于等于Uo,則保留最高位“1”,若Ui小于Uo,則最高位為“0”。
B.置次高位為“1”,低位全為“0”,按上述步驟進行轉換,比較,判斷。
C.重復此過程,直到確定SAR的最低位的值取“1”,還是“0”為止。此時,SAR內容就是對應的輸入模擬電壓轉換后的數字量。
圖2—7 ADC0809的工作時序圖
(3)LM型液壓傳感器
LM系列液壓傳感器采用316L不銹鋼膜片及PVC塑料螺紋頭相結合,可測量水、其它液體及氣體液位。LM系列液壓傳感器采用擁有專利技術的低成本不銹鋼傳感器安裝在PVC塑料過程接頭內。該設計可使傳感器具有多種外形,方便客戶應用于需要高性能、小尺寸的壓力和真空系統。傳感器標準輸出為0.5~4.5V,供電為5V。
特 點: 螺紋接口式,-20~85℃工作溫度范圍,±0.1%非線性,±3.0%總誤差,固態結構
應 用: 灌溉系統,RV和船舶水位保持,蓄水和水循環系統,小型罐體液位,冷卻器&蒸氣冷凝設備
技術指標:
類 型: 表壓
量 程: 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客戶批量應用。
典型應用: 灌溉,RV和船用郵箱液位,水存儲和水回收系統,小罐體液位,冷凝器,蒸發冷卻塔
圖2—9 LM傳感器尺寸外形圖 圖2—10 LM傳感器電氣連接圖
2.3 硬件電路各模塊設計
2.3.1 電源電路設計
圖2—11 電源電路
本系統供電為市電AC220v,經變壓器TR1降為交流6v,經整流橋堆BR1整流后得到脈動直流電壓6v,再經三端穩壓器LM7805得到VCC(+5v) ,其中電解電容C4、C6、起濾波作用,C5、C7是旁路電容,起抑制干擾的作用。
2.3.2 單片機最小系統電路設計
圖2—12 單片機最小系統電路
RST:復位輸入。在單片機工作期間,當此引腳上出現連接2個機器周期的高電平時可實現復位操作。復位電路除了具有上電復位功能外,還可通過復位鍵迫使RESET為高電平。當系統通電時,RESET引腳獲得高電平,隨著電容的充電,RESET引腳的高電平將逐漸下降。RESET的高電平只有保持足夠的時間(2個機械周期),單片機才可以進行復位操作 。
時鐘電路采用12MHz的晶振,因為ADC0809的工作時鐘最高允許值為12MHz,單片機ALE管腳2分頻后為500KHz,可以作為ADC0809轉換器的時鐘信號CLK。XTAL1:反向放大振蕩器的輸入及內部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。XTAL1腳是內部反相放大器的輸入端,而XTAL2腳是該放大器的輸出端。在晶體振蕩中,晶體工作于基本響應模式,它作為一個感抗與外部電容形成并聯諧振,使正反饋放大器維持震蕩。所選電容為瓷片電容22PF,因為22PF對于工作于1MHZ以上的晶振都能獲得良好的效果。
2.3.3 顯示電路設計
圖2—13 顯示電路
本設計由P1口控制七段發光二極管亮或滅,使用共陰極8段數碼管,由圖2.9可知,要使七段顯示器的某一段亮,則應該是與該段相連的段選寄存器即P1口的某位線輸出為1。若使某段熄滅,則必須輸出0。例如要顯示數字4。則應使P1口的P1.7-P1.0輸出為11100110B,若用一個字節表示該輸出值,即字形代碼為66H,依此類推,可以得到0—9一共10個十進制數的字形代碼依次為3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。
本設計由P2.0,P2.1,P2.2,P2.3做位選,以控制哪一位七段數碼管顯示,例如,要求第一位數碼管顯示,則應設置P2.0為“1”,P2.1,P2.2,P2.3為“0”。
PNP型三極管9012起到增加驅動電流的目的。電阻R12~R19控制通過數碼管的電流,R20~R23控制通過三極管9012的電流,R4~R11為單片機P1口的上拉電阻。
2.3.4 液位傳感器的接口電路設計 圖2—14 電位器RV1與ADC0809接口
設計所選LM型液位傳感器能夠根據不同的液位產生不同的電壓,電壓值大小范圍為0.5~4.5V,且能夠便于遠距離傳輸。由于芯片ADC0809的輸入為0~5V的電壓,仿真時需要將輸入信號轉換為電壓信號,為此外接一電位器R=1kΩ,把電壓轉換成0~5V電壓。在設計中,把電位器的1,3腳接+5V電壓和地線,調節滑鈕2能夠很好的得到0~5V電壓,因此可以用電位器模擬液位傳感器。
2.3.5 AT89C51與ADC0809的接口電路設計 圖2—15 AT89C51與ADC0809的接口電路
ADC0809與AT89C51相連接,ADC0809中的START與ALE相連通,ALE——地址鎖存允許信號,對應ALE上跳沿,A、B、C地址狀態送入地址鎖存器中。START——轉換啟動信號。START上升沿時,復位ADC0809;START下降沿時啟動芯片,開始進行A/D轉換;在A/D轉換期間,START應保持 低電平。當ALE上升沿時,ALE鎖存數據,A/D轉換截止,當ALE下降沿時,START低電平,ALE低電平,不鎖存,A/D轉換開始。P2.4,P2.5,P2.6,P2.7分別控制CLK,START和ALE,EOC,OE信號,其控制A/D轉換的開始和截止。CLK使用AT89C51內部時鐘信號。
ADDA,ADDB,ADDC相連通接地,信號輸入為000,表示輸入通道選擇為IN0口。8位數據信號線2-1~2-8與單片機的P1.0~P1.7相連,實現ADC0809與AT89C51的數據傳輸。
Vref——參考電源參考電壓用來與輸入的模擬信號進行比較,作為逐次逼近的基準。其典型值為+5V(Vref(+)=+5V, Vref(-)=0V)。
2.3.6 報警電路設計
圖2—16 報警電路
本電路的P3.0,P3.1作為高位和低位的報警控制線,通過設置高低液位報警線來實現報警功能。如果當前液位高于設置的高位報警線時,P3.0置低電平,高位報警燈亮。如果當前液位低于于設置的低位報警線時,P3.1置低電平,低位報警燈亮。如果當前液位低于設置的高位液位且高于低位液位時,高位報警燈和低位報警燈滅。
2.4 硬件電路總結
在本章中主要講述了硬件電路的結構,電路原理和部分芯片的功能,根據電路組成情況分成六個電路模塊,分別介紹了各個電路模塊的工作原理和功能,通過本次設計掌握了更多的基本硬件電路設計原理及其工作特點。并自行繪制電路原理圖,PCB封裝圖,為做PCB板做準備。下面是電路的一些照片。
圖2—17 電路原理圖
圖2—18 PCB封裝圖
圖2—19 硬件電路圖
圖2—20 液位在3.00米時的實物圖
圖2—21 液位在4.01米時的實物圖
第3章 軟件設計
3.1 AT89C51的I/O口應用
AT89C51共有P0,P1,P2,P3,4個8位的并行雙向I/O口。各個I/O口實現不同的功能,詳細情況如下。
3.1.1 P0口的信號輸入
在程序中將P0口做為段選口使用,顯示十位數字的段選信號,下例為顯示十位數字的指令:
MOV DPTR,#TABLE ;取段碼表首址。
MOV A,LED_2 ;取顯示的十位數字。
MOVC A,@A+DPTR ;取段碼。
MOV P0,A ;輸出段碼的顯示。
TABLE: DB 3FH,06H,5BH,4FH,66H ;共陰極數碼管表
DB 6DH,7DH,07H,7FH,6FH
3.1.2 P1口的信號輸入
在程序中將P0口作為輸入口,用來讀A/D轉換值。設計中,要求選通通道0,并把轉化后得到數字量存入內部RAM的35H單元中,下例為把轉化后的數字量存入內部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做數碼管的位選信號用,要哪個數碼管亮,則置相應位高電平,就可將其選中。例如要求顯示第一個數碼管,端口設置指令為:
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轉換的CLK信號,P2.5作為開始A/D轉換的啟動信號,P2.6作為查詢A/D轉換是否完成的判斷信號,P2.7作為輸出A/D轉換的數字量允許信號。下例為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燈和蜂鳴器相連,輸出報警信號,如果當前液位高于設置的高位報警線時,P3.0置低電平,高位報警燈亮。如果當前液位低于于設置的低位報警線時,P3.1置低電平,低位報警燈亮。如果當前液位低于設置的高位液位且高于低位液位時,高位報警燈和低位報警燈滅。
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 軟件模塊設計
3.2.1 主程序的設計
系統分為初始化,A/D轉換,十進制轉換,LED顯示,電機控制和報警電路。因此整個程序需要包含上述六個子程序。
其中,LED_0 定義地址30H,以存放顯示十進制的小數點后十位數字。
LED_1 定義地址31H,以存放顯示十進制的小數點后個位數字。
LED_2 定義地址32H,以存放顯示十進制的個位數字。
ADC 定義地址35H,以存放經A/D轉換后的數字。
流程圖如下:
圖3—1 主程序流程圖
3.2.2 A/D轉換的設計
ADC0809芯片實現A/D轉換的時間為0.1ms左右,A/D轉換后得到的數字量應及時傳送到單片機進行處理。
OE——輸出允許信號。用于控制三態輸出鎖存器向單片機輸出轉換得到的數據。OE=0,輸出數據線呈高阻;OE=1,輸出轉換得到的數據。
ALE——地址鎖存允許信號。對應ALE上跳沿,A、B、C地址狀態送入地址鎖存器中。
START——轉換啟動信號。START上升沿時,復位ADC0809;START下降沿時啟動芯片,開始進行A/D轉換;在A/D轉換期間,START應保持 低電平。本信號有時簡寫為ST。
CLK——時鐘信號。ADC0809的內部沒有時鐘電路,所需時鐘信號由外界提供,因此有時鐘信號引腳。通常使用頻率為500KHz的時鐘信號。
EOC——轉換結束信號。EOC=0,正在進行轉換;EOC=1,轉換結束。使用中該狀態信號即可作為查詢的狀態標志,又可作為中斷請求信號使用。
CLOCK BIT P2.4
ST BIT P2.5
EOC BIT P2.6
OE BIT P2.7
CLR ST
SETB ST
CLR ST ;啟動轉換
JNB EOC,$ ;等待輸出結果
SETB OE ;允許輸出
MOV ADC,P1 ;讀取A/D轉換結果
CLR OE ;關閉輸出
MOV A,ADC ;將A/D轉換結果轉換成BCD碼
圖3—2 A/D轉換程序流程圖
3.2.3 顯示子程序的設計
設計中采用動態掃描法,實現四位數碼管的數值顯示,并顯示小數點。數碼管動態顯示接口是單片機中應用最為廣泛的一種顯示方式之一,動態驅動是將所有數碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數碼管都接收到相同的字形碼,但究竟是那個數碼管會顯示出字形,取決于單片機對位選通COM端電路的控制,只要將需要顯示的數碼管的選通控制打開,該位就顯示出字形,沒有選通的數碼管就不會亮。通過分時輪流控制各個數碼管的的COM端,就使各個數碼管輪流受控顯示,這就是動態驅動。在輪流顯示過程中,每位數碼管的點亮時間為1~2ms,由于人的視覺暫留現象及發光二極管的余輝效應,盡管實際上各位數碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩定的顯示數據,不會有閃爍感,動態顯示的效果和靜態顯示是一樣的,能夠節省大量的I/O端口,而且功耗更低
通過逐次選通P2.0,P2.1 ,P2.2,P2.3依次送十進制的相應字段碼給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 ;顯示小數點
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 報警子程序的設計
本電路的P3.0,P3.1作為高位和低位的報警控制線,通過設置高低液位報警線來實現報警功能。本設計要求為:液位在小于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轉換結果轉換成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 軟件設計總結
在本章中主要講述了軟件設計的一些情況,對軟件的一些功能進行了解釋,根據程序組成情況分成六個程序模塊,分別介紹了各個程序模塊的工作原理和功能,對部分程序進行了簡單的注釋,通過流程圖直觀的表現出各個模塊的作用及程序運行過程。在本次的軟件設計中,運用Keil進行編程,將編輯好的程序進行編譯,查看是否語法錯誤,如果沒有錯誤,設置晶振頻率,編譯生成.Hex文件,進行仿真。在此過程中,我收益良多,熟悉了單片機匯編語言的使用,對單片機的編程有了進一步的理解,通過和同學的交流,學會了很多以前自己不能解決的問題。
第4章 調 試
4.1 仿真電路調試
在仿真程序中通過模塊編程,用Proteus軟件與Keil軟件相結合進行調試,(調試程序見附錄I)
1.建立工程文件
1)點擊菜單project,選擇new project:
2)然后選擇要保存的路徑,輸入工程文件的名字,比如保存到論文目錄里,工程文件的名字為yang.uv2.
3)這時會彈出一個對話框,選擇單片機的型號,你可以根據你使用的單片機來選擇,keil c51幾乎支持所有要求你的51核的單片機,這里選AT89S51。
這時要新建一個源程序文件,建立一個匯編文件,輸入編寫好的程序。
保存。選擇要保存的路徑,在文件名里輸入文件名,注意一定要輸入擴展名,這里有匯編語言,文件名為:yang.asm。
2. 調試程序
(1)點擊Target 1前面的+號,展開里面的內容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. 仿真結果
通過改變電位器阻值的變化來模擬液位的變化,液位數值在數碼管上顯示,液位在小于1.5米時低位報警燈報警,液位在1.5米到4.0米時不報警,液位大于4.0米時高位報警燈報警。芯片ADC0809的轉換精度為1/256,所以本電路的最小分辨率為0.05V。
4.2 硬件電路調試
1.焊接電路時注意布局是否合適,芯片擺放是否正確,元器件是否齊全。
2.焊接好電路后,用萬用表檢測電路是否有短路、斷路現象發生,檢測地線和電源線是否短路。
3.用萬用表按照電路原理圖重新檢查電路,檢查是否有焊接錯誤的情況發生,檢查元器件是否虛焊。
4.插上芯片,注意管腳方向是否與PCB設計一致。
5.連通電源,檢查電路在沒有程序時是否與仿真結果一致。
4.3 硬件電路出現的問題及解決方法
1.電源接通后,發現ADC0809芯片發燙。
解決過程:開始考慮是否是電源接錯了,導致接在ADC0809兩端的電壓過大導致的,用萬用表檢測后發現電源正確,后經老師指導找出問題是使用雙電源供電,兩個電源電壓有偏差,導致芯片發燙,后改正后芯片正常工作。
2.調試電路時,數碼管有第一個不顯示。
解決過程:開始考慮是否是程序的問題導致數碼管不顯示,仔細檢查程序后,經proteus仿真證明程序沒有問題,后考慮是不是數碼管出現問題,交換數碼管控制信號線后,發現第一個數碼管的信號線能使其他數碼管顯示,后用萬用表檢測發現它的兩個管腳短路,證明第一個數碼管已損壞,不能顯示,于是重新換取數碼管后,數碼管顯示正常。
4.4 軟件程序調試
本設計調試程序使用的是Keil編譯軟件和Proteus仿真軟件。先將編輯好的程序進行編譯,檢查程序是否有語法上的錯誤。在編譯、連接無錯誤和警告后,把程序進行分塊調試。然后用單步調試的方法進行檢查寄存器中的內容是否與預期結果一致。例如:顯示部分,在調試中,可以用相關窗口查看相應寄存器的內容,35H單元存放采樣值,30H,31H,32H,33H單元內容則為其轉換值,再對比顯示的數據就可以知道是否正確。
運行編譯生成.hex文件,然后在Proteus中加入.hex文件,進行仿真,查看顯示是否正確,能否達到要求。進行單步調試,查看硬件電路的電平是否和預期結果一致。
用STC_ISP_V3.1軟件將.hex文件燒寫進單片機中,與硬件相連接。通電后,用萬用表檢查電路的電壓是否與仿真圖中的電壓一致,用仿真結果驗證硬件電路是否正確。
4.5 軟件程序調試出現的問題及解決方法
1.在仿真時,ADC0809不能進行仿真。
解決方法:在仿真時使用Proteus軟件,芯片ADC0809不能進行仿真,系統提示是沒有模型,于是仿真時采用ADC0808芯片進行。由于ADC0809與ADC0808的區別在于:ADC0808的輸出數據線D0~D7是從高位依次到低位,ADC0809的輸出數據線D0~D7是從低位依次到高位。于是采用ADC0808進行仿真,ADC0809用在實物電路上。
2.在Keil中編輯程序時,程序出現有錯誤,其不能運行。
解決方法:在Keil中運行后雙擊出現的錯誤,錯誤行被指出來,根據程序的上下文,改正出現的錯誤。由于在程序中START后少添加了“:”,使得程序不能運行,改正后程序運行正常。
4.6 聯機調試總結
聯機調試是做硬件電路中的一個很重要的環節,它的調試結果直接體現出對硬件和軟件的熟悉程度,對任務的理解。
在整個調試過程中對Keil編譯軟件,STC_ISP_V3.1燒寫軟件和Proteus仿真軟件有了進一步的認識和理解,對AT89C51單片機的匯編語言有了更進一步的了解,和同學的交流更進一步的提高自己。通過對調試軟件和硬件時出現的一些問題的討論,使我能更好的對電路、程序有個更深的認識,使我學會了分析電路的方法和技巧。
第5章 結 論
在本次畢業設計中完成了電路原理圖設計,PCB板設計,電路焊接,程序的設計,軟、硬件的聯機調試。硬件電路的各個模塊,包括單片機最小系統電路,A/D轉換電路,數碼管顯示電路,報警電路等都能夠正常工作。在與軟件進行聯機調試時,通過改變電位器阻值的變化來模擬液位的變化,液位數值在數碼管上顯示,液位在小于1.5米時低位報警燈報警,液位在1.5米到4.0米時不報警,液位大于4.0米時高位報警燈報警。芯片ADC0809的轉換精度為1/256,所以本電路的最小分辨率為1/256V。
本次畢業設計完成了任務書下達的所有任務,實現了液位的檢測及液位的顯示,并實現了超限報警。顯示液位范圍為0~5m,顯示的最小分辨率為1/256V。它是一個可以應用于一般工業的液位檢測及顯示系統的設計方案,測量范圍和測量精度滿足一般工業應用需要。
致 謝
本次畢業設計是在寧耀斌老師的悉心指導下完成的,在論文設計期間受到寧老師很大的幫助和指導,在這里衷心的感謝寧老師在本次畢業設計中給予的關心和支持。
同時,在這次設計過程中還受到姬軍鵬老師的指導和幫助。在此,謹向他們在百忙當中給予的指導和幫助表示衷心的感謝。
同時,本課題能順利完成還得到了孟杰、彭世業、白禮絨、孟環等同學的大力幫助,感謝他們在本課題的設計過程中給予了許多寶貴意見和幫助,在此一并向他們致謝!
參考文獻
- 趙遠航. MCS-51 單片機C語言應用程序接口技術及實例[M].航天工業出版社.2003.2
- 陳國先. PIC單片機原理與接口技術[M].北京:電子工業出版社,2001:
- 張毅剛. MCS-51單片機應用設計[M].哈爾濱:哈爾濱工業大學出版社 2003:
- 孫向東,李守智等.電氣生產實習指導手冊[J].西安:理工大學電氣工程系 2004
- 黃正瑾.電子設計競賽[M].東南大學出版社,2001
- 蔣廷彪. 單片機原理及應用(MCS-51)[M].重慶大學出版社,2003
- 肖婧. 單片機系統設計與仿真---基于proteus [M].北京航空航天大學出版 2010.8
- 周潤景,袁偉亭,景曉松.Proteus在MCS-51&ARM7系統中的應用百例 [M].電子工業出版社,2006,10
- 蔣廷彪,劉電霆,高富強,方華 單片機原理及應用(MCS-51)[M].重慶大學出版社 2003,8
- 彭軍.傳感器與檢測技術[M].西安:西安電子科技大學出版社,2003.
- AUG AI-Dhaher, Integrating hardware and software for The development of microcontroller-based systems. Microprocessor and Microsystems,25(2001) 317-328
- Shuakla N V,Deshpande P B.Enhancing the robustness of internal-basedno nlinear ph control.Chemical Engineering Science,1993
- Jae Hyeong Seo, Cang Ho Choi. A new simplified Space-Vector PWM Method for Three-level-Inverters [J].IEEE Trans on PE, July 2001, Vol.16(NO.4):545-550.
- 8-Bit Microcontroller with 4K Bytes Flash AT89c51
附 錄
附錄1:電路原理圖
附錄2:參考程序
- 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 ;啟動轉換
- JNB EOC,[ DISCUZ_CODE_2 ]nbsp; ;等待輸出結果
- SETB OE ;允許輸出
- MOV ADC,P1 ;讀取A/D轉換結果
- CLR OE ;關閉輸出
- MOV A,ADC ;將A/D轉換結果轉換成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 ;數值轉換
- 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轉換結果
- 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 ;數碼管顯示子程序
- MOVC A,@A+DPTR ;將字段碼轉換顯示碼
- 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 ;顯示小數點
- MOV BUFFER+2,A ;送顯示緩存
- CLR P2.1
- MOV P0,A
- LCALL DELAY
- SETB P2.1
- RET
- DELAY: MOV R6,#10 ;延時5ms
- D1: MOV R7,#250
- DJNZ R7,$
- DJNZ R6,D1
- RET
- DELAY2: MOV R5,#20
- D2: MOV R6,#20
- D3: MOV R7,#250
- DJNZ R7,$
- DJNZ R6,D3
- DJNZ R5,D2
- RET
- TABLE: DB 3FH,06H,5BH,4FH,66H ;0,1,2,3,4 共陰極接法
- DB 6DH,7DH,07H,7FH,6FH ;5,6,7,8,9,
- END
復制代碼