欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6612|回復: 0
收起左側

基于單片機的溫度測量儀的課程設計

[復制鏈接]
ID:358941 發表于 2018-6-26 02:35 | 顯示全部樓層 |閱讀模式
機電一體化課程設計

(2017年)


課程設計名稱:機電一體化》課程設計_______________

設 計 名 稱 基于單片機的溫度測量儀的設計

生 姓 名朱*

學     院:  機械工程學院 業 班 級機電143   

指 導 教 師 :   韓*  專業技術職務:   講師      




摘  要

本課題用一種基于單片機的數據采集系統方案,該方案根據熱敏電阻隨溫度變化而變化的特性,采用串聯分壓電路。單片機采集熱敏電阻的電壓,通過A/D轉換將模擬量電壓信號轉換成數字量電壓信號,經過查表轉換得到溫度值,控制液晶屏實時顯示溫度值。本系統中所用到的器件是STC89C52單片機、NTC熱敏電阻和LCD1602液晶顯示屏。

1 緒論
1.1課題背景及意義
1.2國內外研究現狀
1.3 課題研究的內容及意義
2 總體方案設計
2.1方案設計
2.1.1溫度傳感器的選擇
2.1.2 調理模塊
2.1.3 溫度核心模塊
2.1.4 顯示模塊
2.2 系統簡介
3 硬件電路設計
3.1溫度采集模塊電路設計
3.2 A/D轉換模塊電路設計
3.3 MCU控制器模塊電路設計
3.3.1 核心部件的介紹
3.3.2復位電路的設計
3.4 顯示模塊電路設計
4 軟件程序設計
4.1系統整體軟件設計的環境
4.2軟件設計流程圖
4.2.1 A/D轉換模塊原理及程序
4.2.2熱敏電阻阻值和溫度的非線性對性模塊原理及程序
4.2.3溫度顯示模塊程序
5 系統仿真
6 設計心得
參考文獻
附 錄 一
系統整體原理圖
PCB版圖
附 錄 二
軟件程序代碼
    1



1 緒論
1.1課題背景及意義

在人類的生活環境中,溫度扮演著極其重要的角色。無論你生活在哪里,從事什么工作,無時無刻不在與溫度打著交道。自18世紀工業革命以來,工業發展對是否能掌握溫度有著絕對的聯系。在冶金、鋼鐵、石化、水泥、玻璃、醫藥等等行業,可以說幾乎80%的工業部門都不得不考慮著溫度的因素。溫度對于工業如此重要,由此推進了溫度傳感器的發展。進入21世紀后,溫度傳感器正朝著高精度、多功能、總線標準化、高可靠性及安全性、開發虛擬傳感器和網絡傳感器、研制單片測溫系統等高科技的方向迅速發展。

在工農業生產中,溫度檢測及其控制占有舉足輕重的地位,隨著現代信息技術的飛速發展和傳統工業改造的逐步實現 ,能夠獨立工作的溫度檢測和顯示系統已經應用于諸多領域。要達到較高的測量精度需要很好的解決引線誤差補償問題、多點測量切換誤差問題和放大電路零點漂移誤差等問題,使溫度檢測復雜化。模擬信號在長距離傳輸過程中,抗電磁干擾時令設計者傷腦筋的問題,對于多點溫度檢測的場合,各被檢測點到監測裝置之間引線距離往往不同,此外,各敏感元件參數的不一致,這些都是造成誤差的原因,并且難以完全清除。

單片機以其功能強、體積小、可靠性高、造價低和開發周期短等優點,成為自動化和各個測控領域中必不可少且廣泛應用的器件,尤其在日常生活中也發揮越來越大的作用。采用單片機對溫度采集進行控制,不僅具有控制方便、組態簡單和靈活性大等優點,而且可以大幅度提高被控數據的技術指標,從而能夠大大提高產品的質量和數量。

由于科學技術的飛速發展,特別是微電子加工技術,計算機技術及信息處理技術的發展,人們對信息資源的需求日益增長,作為提供信息的傳感技術及傳感器愈來愈引起人們的重視,而綜合各種技術的傳感器技術也進入到一個飛速的發展階段。要及時正確地獲取各種信息,解決工程、生產及科研中遇到的各種具體的檢查問題,就必須合理選擇和善于應用各種傳感器及傳感技術。如最簡單的溫度的測量,有熱電偶、光纖溫度傳感器等等。但是,熱敏電阻是開發早、種類多、發展較成熟的敏感元器。熱敏電阻由半導體陶瓷材料組成,利用的原理是溫度引起電阻變化。熱敏電阻器是敏感元件的一類,按照溫度系數不同分為正溫度系數熱敏電阻器(PTC)和負溫度系數熱敏電阻器(NTC)。熱敏電阻器的典型特點是對溫度敏感,不同的溫度下表現出不同的電阻值。正溫度系數熱敏電阻器(PTC)在溫度越高時電阻值越大,負溫度系數熱敏電阻器(NTC)在溫度越高時電阻值越低,它們同屬于半導體器件。隨著半導體技術的不斷發展,熱敏電阻作為一種新型感溫元件應用越來越廣泛。他具有體積小、靈敏度高、重量輕、熱慣性小、壽命長以及價格便宜等優點,最重要的是作為溫度傳感器的熱敏電阻的靈敏度非常高,這是其他測溫傳感器所不能比擬的。

1.2國內外研究現狀

近百年來,溫度傳感器的發展大概經歷了以下三個階段:傳統的分立式溫度傳感器(含敏感元件)、模擬集成溫度傳感器/控制器、智能溫度傳感器。目前,國際上新型溫度傳感器正從模擬式向數字式、由集成化向智能化、網絡化的方向發展。智能溫度傳感器(亦稱數字溫度傳感器)是在二十一世紀九十年代中期闖世的,它是微電子技術、計算機技術和自動測試技術的結晶。目前,國際上已開發出多種智能溫度傳感器系列產品。智能溫度傳感器內部都包含溫度傳感器、A/D轉換器、信號處理器、存儲器和接口電路。有的產品還帶多路選擇器、中央處理器、隨機存儲器和只讀存儲器。智能溫度傳感器的特點是輸出溫度數據及相關的溫度控制量,適配各種微控制器。并且它是在硬件的基礎上通過軟件來實現測試功能的,其智能化程度也取決于軟件的開發水平。進入二十一世紀后智能溫度傳感器正朝著高精度、多功能、總線標準化、高可靠性及安全性、開發基于傳感器硬件和計算機平臺、并通過軟件開發而成的,利用軟件可完成傳感器的標定及校準,以實現最佳性能指標的虛擬傳感器和包含數字傳感器、網絡接口和處理單元的網絡傳感器、研制單片測溫系統等高科技的方向發展。

1.3 課題研究的內容及意義

在人類的生活環境中,溫度扮演著極其重要的角色。溫度是工業生產中常見的工藝參數之一,任何物理變化和化學反應過程都與溫度密切相關,因此溫度控制是生產自動化的重要任務。對于不同生產情況和工藝要求下的溫度控制,所采用的加熱方式,燃料,控制方案也有所不同。無論你生活在哪里,從事什么工作,無時無刻不在與溫度打著交道。自18世紀工業革命以來,工業發展對是否能掌握溫度有著絕對的聯系。在冶金、鋼鐵、石化、水泥、玻璃、醫藥等等行業,可以說幾乎80%的工業部門都不得不考慮著溫度的因素。

單片微型計算機是隨著超大規模集成電路技術的發展而誕生的,由于它具有體積小、功能強、性價比高等特點,所以廣泛應用于電子儀表、家用電器、節能裝置、軍事裝置、機器人、工業控制等諸多領域,使產品小型化、智能化,既提高了產品的功能和質量,又降低了成本,簡化了設計。本文主要介紹單片機在溫度控制中的應用。

在現代化的工業生產中,電流、電壓、溫度、壓力、流量、流速和開關量都是常用的主要被控參數。例如:在冶金工業、化工生產、電力工程、造紙行業、機械制造和食品加工等諸多領域中,人們都需要對各類加熱爐、熱處理爐、反應爐和鍋爐中的溫度進行檢測和控制。采用MCS-51單片機來對溫度進行控制,不僅具有控制方便、組態簡單和靈活性大等優點,而且可以大幅度提高被控溫度的技術指標,從而能夠大大提高產品的質量和數量。因此,單片機對溫度的控制問題是一個工業生產中經常會遇到的問題。

隨著社會的進步和工業技術的發展,人們越來越重視溫度對產品的影響, 許多產品對溫度范圍要求嚴格,目前市場上普遍存在的問題有溫度信息傳遞不及時、精度不夠的缺點,不利于工業控制者根據溫度變化及時做出決定。在這樣的形式下,開發一種實時性高、精度高的溫度采集系統就很有必要。

2 總體方案設計
2.1方案設計
2.1.1溫度傳感器的選擇

測量溫度的關鍵是溫度傳感器,因此需要靈敏度高、測溫范圍寬、穩定性好,同時還要考慮成本和實際情況。

方案一:

DS18B20數字式溫度傳感器,使用集成芯片,采用單總線技術,其能夠有效的減小外界的干擾,提高測量的精度,同時,它可以直接將被測溫度轉化成串行數字信號供微機處理,接口簡單,使數據傳輸和處理簡單化。部分功能電路的集成,使總體硬件設計更簡潔,能有效地降低成本,搭建電路和焊接電路時更快,調試也更方便簡單化,但是這個溫度傳感器適用于精密溫度測量系統中。

方案二:

熱敏電阻的主要特點是:①靈敏度較高,其電阻溫度系數要比金屬大10~100倍以上,能檢測出10-6℃的溫度變化;②工作溫度范圍寬,常溫器件適用于-55℃~315℃,高溫器件適用溫度高于315℃(目前最高可達到2000℃),低溫器件適用于-273℃~55℃;③體積小,能夠測量其他溫度計無法測量的空隙、腔體及生物體內血管的溫度;④使用方便,電阻值可在0.1~100kΩ間任意選擇;⑤易加工成復雜的形狀,可大批量生產;⑥穩定性好、過載能力強.

方案三:

熱電偶傳感器的靈敏度,線性和溫度范圍是和所用的金屬有關。多年來,已經有幾種熱電偶成為標準,在美國,NIST公布了八種熱電偶,讓字母代碼來識別的毫伏~溫度表。其中五種J、K、T、G和N是由堿金屬合金制成,有不同的溫度范圍和用途,靈敏度一般是每攝氏度幾十毫伏,其中三種R、S和B是用的金屬白金制成的,但是這種熱電偶價格昂貴,最常用于高溫工作,不適合常溫的測量,而且靈敏度很低。

對比之后,根據實際的應用需求,本設計采用方案二熱敏電阻傳感器。

2.1.2 調理模塊

方案一:

如圖2-1所示是由集成運算放大器和鉑熱電阻構成的自動溫度補償電路。該電路可分為阻抗變換和溫度補償兩級,阻抗變換器A1是一個電壓跟隨器,它的作用是把來自傳感器送來的與溫度成比例變化的,溫度補償器A2是一個同相電壓放大器,電路元件可根據同相電壓放大器基本原則進行選取,這一級的作用是將阻抗變換級送來的電壓信號進行放大,同時吸取來自鉑熱Rt送來的與溫度成比例變化的電阻信號,這個電阻信號去改變放大器的靈敏度,使放大器的輸入電壓V0與溫度無關。但是此電路比較復雜,元器件較多,可能導致精度不夠。

              

圖2-1為自動溫度補償電路

方案二:

溫度補償還可以采用簡單的查表法從電壓值中查出相應的溫度值。預先將一系列溫度與電壓對應值存貯到STC89C52微控制器程序存儲器中的一個表內,當給定任意一個在測量范圍中的電壓值時,即可通過查表得出所對應的溫度值。

本設計所采用的NTC熱敏電阻所對應溫度補償表如表2-1;

所以本設計的溫度補償選用方案二,將再軟件中體現。

2.1.3 溫度核心模塊
方案一:
S08AW60擁有62KB片上在線可編程FLASH存儲器和2KB片上RAM,具有模塊保護與安全選項功能,支持2.7~5.5V電源。片內總線時鐘最高可達20MHz,可選擇寬范圍的時鐘頻率。其內部集成了高性能模/數轉換器(ADC)和串行通信模塊,具有很寬的工作溫度范圍(-40℃~+125℃),可適應各類惡劣環境。該芯片還可以通過BDM在計算機與微控制器進行在線編程及后臺調試,避免頻繁的插拔單片機,編譯軟件調試功能強大。
方案二:
STC89C52是一種低功耗、高性能8位微控制器,具有8K系統可編程FLASH存儲器和256字節ROM,可實現0Hz~33Hz的全靜態操作,支持4.0V~5.5V電源。使用Atmel公司高密度非易失性存儲器技術制造,與MCS-51產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統可編程,亦適于常規編程器。其內部沒有A/D轉換模塊,需要外部擴展模數轉換芯片。
對比之后,根據實際的應用需求,本設計選用方案二STC89C52,因為具有ISP功能,可直接通過串口下載用戶程序,方便調試程序,內部8 KB的FLASH E2PROM使用戶編制的程序及需要顯示的字母、數字、漢字和圖形都可以存儲在里面,免去了擴展外部存儲器的麻煩,因此以STC89C52單片機為核心的控制系統電路更簡單,十分適用于液晶顯示,在智能儀器、儀表和低功耗電子產品中被廣泛選用。
2.1.4 顯示模塊

方案一:

LED數碼管顯示器可分為兩種顯示方式:靜態顯示和動態顯示。

LED數碼管靜態顯示,多片七段譯碼器驅動顯示,這不僅增加了成本,還需要占用單片機多個I/O口,也給電路的焊接帶來一定的困難,因此不選用這種方案作為顯示模塊,所以排除此方案。

方案二:

LED數碼管顯示器動態顯示方式下,將所有位的段選線并聯在起,由位選線控制哪位接收字段碼。采用動態掃描顯示,也就是在顯示過中,輪流向各位送出字形碼和相應的字位選擇,同一時刻只有一位顯示,其他各位熄滅。但是此顯示方案穩定性較差,并且還需要焊接外圍電路,所以不采用此方案。

方案三:

LCD液晶顯示,由單片機驅動.它主要用來顯示大量數據、文字、圖形,能夠顯示的位數多,顯示得清晰多樣、美觀,同時液晶顯示器的編寫程序簡單,價格便宜,故采用此種方案。

LCD類型繁多,價格不等。根據本設計需要顯示的信息量小的特點,選用價格便宜的LCD1602液晶屏。其特點如下:

液晶顯示屏是以16列×2行=32個5×10或5×7點陣塊組成的顯示字符群,每個點陣為一個字符,字符間距和行距都為一個點的寬度;具有字符發生器ROM,可以顯示192種字符;具有64字節的自定義字符RAM,可自定義8個5×7或4個5×10點陣字符;具有80字節的RAM;結構緊湊、輕巧、裝配容易;單+5V電源供電,低功耗,長壽命,高可靠性。

2.2 系統簡介

溫度采集系統的硬件部分是由溫度采集模塊、MCU控制器模塊、溫度顯示模塊組成。具體框圖如圖2-1所示:

                           圖2-1 系統硬件框圖

熱敏電阻的阻值會隨著溫度的變化而改變,這種變化不是線性的,但是每一種熱敏電阻傳感器都有一個阻值和溫度對應的表格,可以通過查表得到溫度值,當然也可以通過非線性公式計算出溫度值。具體工作原理: 單片機通過AD芯片對電阻兩端的電壓進行采樣,電阻變化時其兩端的電壓會變化,這種變化是線性的,單片機可以通過計算得到電阻值,然后通過查表得到溫度值,再通過計算得到顯示溫度值。 原理圖中的電源部分也可以直接換成3節1.5V電池,這樣更簡單一點。

3 硬件電路設計
3.1溫度采集模塊電路設計

該模塊是根據熱敏電阻阻值隨溫度變化而變化的特性,利用串聯分壓的特點,將熱敏電阻所分的電壓送到ADC0832的模擬量輸入端。具體電路原理如圖3-2所示:

圖3-1溫度采集模塊電路原理圖

該電路中RT1為熱敏電阻,其電壓傳輸到ADC0832的模擬量輸入端,即CH0,芯片的2腳。

3.2 A/D轉換模塊電路設計

本設計采用的AD轉換芯片是ADC0832:該芯片為8位分辨率A/D轉換芯片,其最高分辨可達256級,可以適應一般的模擬量轉換要求。其內部電源輸入與參考電壓的復用,使得芯片的模擬電壓輸入在0~5V之間。芯片轉換時間僅為32μS,據有雙數據輸出可作為數據校驗,以減少數據誤差,轉換速度快且穩定性能強。獨立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過DI 數據輸入端,可以輕易的實現通道功能的選擇。

正常情況下ADC0832 與單片機的接口應為4條數據線,分別是CS、CLK、DO、DI。但由于DO端與DI端在通信時并未同時有效并與單片機的接口是雙向的,所以電路設計時可以將DO和DI 并聯在一根數據線上使用。本課題AD芯片的CS端與P1.0口連接;CLK端與P1.1口連接;D0與D1并聯并與P1.2口相連。當ADC0832未工作時其CS輸入端應為高電平,此時芯片禁用,CLK 和DO/DI 的電平可任意。當要進行A/D轉換時,須先將CS使能端置于低電平并且保持低電平直到轉換完全結束。此時芯片開始轉換工作,同時由處理器向芯片時鐘輸入端CLK 輸入時鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的數據信號。在第1 個時鐘脈沖的下沉之前DI端必須是高電平,表示啟始信號。在第2、3個脈沖下沉之前DI端應輸入2 位數據用于選擇通道功能:當此2 位數據為“1”、“0”時,只對CH0 進行單通道轉換。當2位數據為“1”、“1”時,只對CH1進行單通道轉換。當2 位數據為“0”、“0”時,將CH0作為正輸入端IN+,CH1作為負輸入端IN-進行輸入。當2 位數據為“0”、“1”時,將CH0作為負輸入端IN-,CH1 作為正輸入端IN+進行輸入。到第3 個脈沖的下沉之后DI端的輸入電平就失去輸入作用,此后DO/DI端則開始利用數據輸出DO進行轉換數據的讀取。從第4個脈沖下沉開始由DO端輸出轉換數據最高位DATA7,隨后每一個脈沖下沉DO端輸出下一位數據。直到第11個脈沖時發出最低位數據DATA0,一個字節的數據輸出完成。也正是從此位開始輸出下一個相反字節的數據,即從第11個字節的下沉輸出DATA0。隨后輸出8位數據,到第19 個脈沖時數據輸出完成,也標志著一次A/D轉換的結束。最后將CS置高電平禁用芯片,直接將轉換后的數據進行處理就可以了。

作為單通道模擬信號輸入時ADC0832的輸入電壓是0~5V且8位分辨率時的電壓精度為19.53mV。如果作為由IN+與IN-輸入的輸入時,可是將電壓值設定在某一個較大范圍之內,從而提高轉換的寬度。但值得注意的是,在進行IN+與IN-的輸入時,如果IN-的電壓大于IN+的電壓則轉換后的數據結果始終為00H。

3.3 MCU控制器模塊電路設計

STC89C52的最小系統電路設計如圖3-2所示

VCC是STC89C52的電源引腳,GND為STC89C52的接地引腳,工作電壓范圍是4.0V~5.5V,在該電路中提供的是5V電壓。利用芯片內部振蕩電路,在XTAL1和XTAL2的引腳上外接定時元件,內部振蕩器便能產生自激振蕩,用示波器便可以觀察到XATL2輸出的正弦波,定時元件可以采用石英晶體和電容組成的并聯振蕩電路,晶體可以在1.2~12MHz之間選擇,電容可以在20~60pF之間選擇,通常選為30pF左右,電容C8~C9的大小對振蕩頻率有微小影響,可起頻率微調作用。在芯片的9腳,即RST/Vpd接按鍵及電阻構成復位信號。

圖3-2STC89C52最小系統電路設計

該電路為STC89C52控制器電路,其中,P0.5、P0.6、P0.7口分別與LCD1602的RS、R/W、E引腳連接;P2.0~P2.7口與LCD1602的DB0~DB7引腳連接;P1.2是模擬量輸入端,用于輸入熱敏電阻傳感器的電壓。

3.3.1 核心部件的介紹

STC89C52是整個課題的核心部件,P0口是開漏雙向可以寫為1使其狀態為懸浮用作高阻輸入。P0口也可以在外部程序存儲器時作地址的低字節,在訪問外部數據存儲器時作數據總線,此時通過內部強上拉輸出1。在本課題中P0口外接10K排阻使輸出為1來接LCD1602的RS、RW、E端。P1口可作為準雙向I/O接口使用。對于MCS—52子系列單片機,P1.0和P1.1還有第2功能:P1.0口用作定時器/計數器2的計數脈沖輸入端T2;P1.1用作定時器/計數器2的外部控制端T2EX。對于EPROM編程和進行程序校驗時,P1口接收輸入的低8位地址。在本課題中P1.2來接收AD轉換模塊送過來的數字量;P1.0與AD芯片的復位端相連;P1.1與AD芯片的CLK端相連。P2口2口是帶內部上拉的雙向I/O,口向P2口寫入1時,P2口被內部上拉為高電平,可用作輸入口當作為輸入腳時,被外部拉低的P2口會因為內部上拉而輸出電流(見DC電氣特性)。在訪問外部程序存儲器和外部數據時分別作為地址高位字節和16位地址(MOVX @DPTR),此時通過內部強上拉傳送1。當使用8位尋址方式(MOV@Ri)訪問外部數據存儲器時,P2口發送P2特殊功能寄存器的內容。本課題的P2口作為輸出口使用,把信號輸送給LCD1602。P3口是帶內部上拉的雙向I/O口,向P3口寫入1時,P3口被內部上拉為高電平,可用作輸入口,當作為輸入腳時,被外部拉低的P3口會因為內部上拉而輸出電流(見DC電氣特性)。它為雙功能口,可以作為一般的準雙向I/O接口,也可以將每1位用于第2功能,而且P3口的每一條引腳均可獨立定義為第1功能的輸入輸出或第2功能。本課題沒有用到P3口。

綜上所述,STC89C52系列單片機納為以下兩點:

1) 單片機功能多,引腳數少,因而許多引腳具有第2功能;

2) 單片機對外呈3總線形式,由P0、P2口組成16位地址總線;由P0口分時復用作為數據總線。

3.3.2復位電路的設計

STC89C52的復位方式可以是圖3-4的上電復位,也可以是圖3-5的手動復位。此外,RESET/V還是一復用腳,V掉電期間,此腳可接上備用電源,以保證單片機內部RAM的數據不丟失。

                    

圖3-3上電復位                           圖3-4手動復位

1.上電復位:上電自動復位電路是一種簡單的復位電路,只要在RST復位引腳接一個電容到VCC,接一個電阻到地就可以了。上電復位是指在給系統上電時,復位電路通過電容加到RST復位引腳一個短暫的高電平信號,這個復位信號隨著VCC對電容的充電過程而回落,所以RST引腳復位的高電平維持時間取決于電容的充電時間。為了保證系統安全可靠的復位,RST引腳的高電平信號必須維持足夠長的時間。上電自動復位是通過外部復位電路的電容充電來實現的。只要VCC的上升時間不超過1ms,就可以實現自動上電復位。

2.手動復位:開關復位,只要按下開關按鈕,倒相器即輸出高電平,復位有效。手動復位和快捷,方便,所以此次設計采用手動復位方式。

3.4 顯示模塊電路設計

該模塊是利用LCD1602(液晶顯示):LCD1602的顯示容量很大,為16×2個字符;1602LCD芯片的工作電壓為4.5-5.5V,芯片工作電流在5V工作電壓的情況下芯片工作電流為2毫安,模塊的最佳工作電壓為5V,顯示字符的尺寸為2.95×4.35(W×H)mm。

1602LCD的第1腳VSS為地電源;第2腳接5V正電源;第3腳VL為液晶顯示器對比調整端,接正電源時對比度弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用是可以通過一個10K的電位器調整對比度;第4腳為RS寄存器選擇,高電平時選擇數據寄存器,低電平時選擇指令寄存器;第5腳為R/W讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數據;第6腳為使能端,當使能端由高電平跳變為低電平時,液晶模塊執行命令;第7~14腳的D0~D7為8位雙向數據線;第15腳為背光源正極;第16腳為背光源負極。以上是整個1602LCD的功能介紹。

顯示的清晰度是關鍵,其Vee引腳作用是對比調整,原理是該引腳輸入電壓不同,調整度不同,所以采用電位器分壓作為它的電壓輸入。Vss及K引腳分別是電源地、LCD背光電源負極,直接接地。Vcc及A引腳分別是電源、LCD背光電源正極,采用+5V電源供電。其電路原理圖如圖3-5所示:

圖3-5顯示模塊電路原理圖
該電路中,LCD1602的RS、R/W、E引腳分別與STC89C52中的P0.5、P0.6、P0.7口連接;DB0~DB7引腳分別與STC89C52的P2.0~P2.7口連接。


4 軟件程序設計
4.1系統整體軟件設計的環境

Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發系統,與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優勢,因而易學易用。Keil提供了包括C編譯器、宏匯編、鏈接器、庫管理和一個功能強大的仿真調試器等在內的完整開發方案,通過一個集成開發環境(μVision)將這些部分組合在一起。運行Keil軟件需要WIN98、NT、WIN2000、WINXP等操作系統。如果你使用C語言編程,那么Keil幾乎就是你的不二之選,即使不使用C語言而僅用匯編語言編程,其方便易用的集成環境、強大的軟件仿真調試工具也會令你事半功倍。

2006年1月30日ARM推出全新的針對各種嵌入式處理器的軟件開發工具,集成Keil μVision3的RealView MDK開發環境。RealView MDK開發工具Keil μVision3源自Keil公司。RealView MDK集成了業內領先的技術,包括Keil μVision3集成開發環境與RealView編譯器。支持ARM7、ARM9和最新的Cortex-M3核處理器,自動配置啟動代碼,集成Flash燒寫模塊,強大的Simulation設備模擬,性能分析等功能,與ARM之前的工具包ADS等相比,RealView編譯器的最新版本可將性能改善超過20%。

4.2軟件設計流程圖

軟件系統初始化時把溫度數據做成表格存儲到ROM中,通過AD對熱敏電阻兩端的進行測量,然后通過運算將電壓值對應于電阻值,通過查表把電阻值對應于溫度值,再通過運算把溫度數據送到LCD顯示,其中程序初始化主要是對AD和LCD進行初始化。它的框圖如圖4-1:

                  

          圖4-1軟件總體流程圖

4.2.1 A/D轉換模塊原理及程序

傳感器獲得的信號由于是模擬信號,而CPU處理的是數字信號,故要經過模數轉換,本設計采用芯片ADC0832實現的AD轉換。

圖4-2 ADC0832的工作時序圖

由以上時序圖可知單片機對ADC0832的控制,所以進行以下編程。

C語言編寫的STC89C52微控制器中A/D轉換模塊的節選程序代碼如下:

uint ADC0832(uchar channel)

{

             uchar i;

             uint dat=0;

             uchar ndat=0;

             if(channel==0)channel=2;

             if(channel==1)channel=3;

             ADDI=1;

             _nop_();

             _nop_();

             ADCS=0;//拉低CS端

             _nop_();

             _nop_();

             ADCLK=1;//拉高CLK端

             _nop_();

             _nop_();

ADCLK=0;//拉低CLK端,形成下降沿1

             _nop_();

             _nop_();

             ADCLK=1;//拉高CLK端

             ADDI=channel&0x1;

             _nop_();

             _nop_();

             ADCLK=0;//拉低CLK端,形成下降沿2

             _nop_();

             _nop_();

             ADCLK=1;//拉高CLK端

             ADDI=(channel>>1)&0x1;

             _nop_();

             _nop_();

             ADCLK=0;//拉低CLK端,形成下降沿3

             ADDI=1;//控制命令結束

             _nop_();

             _nop_();

             dat=0;

             for(i=0;i<8;i++)

             {

                          dat|=ADDO;//收數據

                            ADCLK=1;

                            _nop_();

                            _nop_();

                            ADCLK=0;//形成一次時鐘脈沖

                 _nop_();

                 _nop_();

                 dat<<=1;

                 if(i==7)dat|=ADDO;

}

             for(i=0;i<8;i++)

             {                          

                 ndat>>=1;

                          if(ADDO==1)

                          ndat|=0x80;

                 ADCLK=1;

                 _nop_();

                 _nop_();

                 ADCLK=0;//形成一次時鐘脈沖

                 _nop_();

                 _nop_();

             }

             ADCS=1;//拉低CS端

             ADCLK=0;//拉低CLK端

             ADDO=1;//拉高數據端,回到初始狀態

    if(dat==ndat)

             {

                return(ndat);

             }

             else

             {

                          return(0x00);

             }         

4.2.2熱敏電阻阻值和溫度的非線性對性模塊原理及程序

熱敏電阻的阻值溫度特性曲線是一條指數曲線,非線性度較大,因此在使用時要進行線性化處理。可采用簡單的查表法從電壓值中查出相應的溫度值。預先將一系列溫度與電壓對應值存貯到STC89C52微控制器程序存儲器中的一個表內,當給定任意一個電壓值時,即可通過查表得出所對應進行補償過的溫度值。

C語言編寫的獲得溫度值的節選程序代碼如下:

先對LCD1602進行程序初始化:LCD1602的RS腳置“1”,其意義為:選擇數據寄存器;LCD1602的RW腳置“1”,其意義為:進行讀操作;

#include<reg52.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

sbit rs=P0^5;

sbit rw=P0^6;

sbit e=             P0^7;

對ADC0832進行初始化:

sbit ADCS=P1^0;

sbit ADCLK=P1^1;

sbit ADDI=P1^2;

sbit ADDO=P1^2;

顯示屏顯示的選擇項:

uchar code tab3[]="Low-temperature ";

uchar code tab4[]="Over-temperature";

uchar code tab5[]="     Error      ";

uchar code tab6[]="  Temp:";

uchar code tab7[]="    Normal     ";

uchar code tab1[]="0123456789";

把溫度數據存儲到ROM中,溫度范圍為79℃~-20℃:

uchar code tab2[]=

             {79,78,77,76,75,74,73,72,                             //溫度補償表

                71,70,69,68,67,67,66,65,

                64,63,63,62,61,60,60,59,

                58,58,57,56,56,55,54,54,

                53,53,52,52,51,50,50,49,

                49,48,48,47,47,46,46,45,

                45,44,44,43,43,43,42,42,

                41,41,40,40,39,39,39,38,

                38,37,37,36,36,36,35,35,

                34,34,34,33,33,33,32,32,

                31,31,31,30,30,30,29,29,

                28,28,28,27,27,27,26,26,

                26,26,25,25,24,24,23,23,

                23,22,22,22,21,21,21,20,

                20,20,19,19,19,18,18,18,

                17,17,17,16,16,16,15,15,

                15,14,14,13,13,13,12,12,

                12,11,11,11,10,10,10,9,

                9,9,8,8,7,7,7,6,

                6,6,5,5,4,4,4,3,

                3,3,2,2,1,1,1,0,

                0,1,1,2,2,2,3,3,

                4,4,5,5,6,6,7,7,

                8,8,9,9,10,10,11,11,

                12,12,13,14,15,15,16,17,

                17,18,19,19,20};

uint ad,ad1;

延時50us的程序:

void delay_50us(uint t)

{

             uchar j,z;

             for(z=t;z>0;z--)

                          for(j=19;j>0;j--);

}

延時1ms的程序:

void delay(uint z)

{

    uint x,y;

    for(x=z;x>0;x--)

        for(y=110;y>0;y--);

}

寫指令程序:

void write_com(uchar com1)

{

             e=0;

             rs=0;

             rw=0;

             P2=com1;

             delay_50us(10);

    e=1;

             delay_50us(20);

             e=0;

}

寫數據程序:

void write_data(uchar dat1)

{

    e=0;

    rs=1;

    rw=0;

    P2=dat1;

    delay_50us(10);

    e=1;

    delay_50us(20);

    e=0;            

}

4.2.3溫度顯示模塊程序

LCD1602采用+5V電壓驅動,其數據接口和讀寫控制引腳與STC89C52單片機的I/O口直接相連。ADC0832將采集到的模擬電壓值經過A/D轉換后送給單片機,單片機查表得到溫度值,通過I/O口傳輸給LCD1602顯示。

C語言編寫的溫度值顯示的節選程序代碼如下:

void disp()

{

     ad1=ad-29;

             write_com(0x80);

             if(ad<29)

             {

                   uchar i;

                            for(i=0;i<16;i++)

                            {

                                        write_data(tab4);

                            }

                            write_com(0x80+0x40);

                             for(i=0;i<16;i++)

                            {

                                        write_data(tab5);

                            }                          

             }

                          else if(ad>233)

             {

                            uchar i;

                            for(i=0;i<16;i++)

                            {

                                        write_data(tab3);

                            }            

                             write_com(0x80+0x40);

                             for(i=0;i<16;i++)

                            {

                                        write_data(tab5);

                            }                          

             }                          

             else if(ad>=29&&ad<=233)

             {               

                   uchar i;

                            for(i=0;i<16;i++)

                            {

                                        write_data(tab7);

                            }            

                            write_com(0x80+0x40);

                            for(i=0;i<7;i++)

                                         write_data(tab6);                                       

                            if(ad>197)

                            {

                                          write_data('-');

                                         write_data(tab1[(tab2[ad1])/10]);

                                         write_data(tab1[(tab2[ad1])%10]);            

                            }

                            else

                            {

                                         write_data(' ');

                                         write_data(tab1[tab2[ad1]/10]);

                                         write_data(tab1[tab2[ad1]%10]);

                            }

                            write_data(0xdf);                                                    //顯示溫度符號

                     write_data('C');            

             }

}



5 系統仿真

Proteus是一款功能非常強大的集仿真、原理圖設計及PCB設計于一體的軟件。該軟件非常實用,不需要有硬件電路即可通過仿真單片機的編程。打開軟件,選擇P進行元器件的擺放。在這里可以通過元器件的名字進行檢索。電容電阻等元器件只需要其相應的英文縮寫即可。89C52是本次要使用的微控制器單元,在檢索行輸入89C52,可以看到元件庫里出現了我們需要的芯片。選中后就可將其拖入工程界面,可以自己選擇合適的位置。依次將原理圖中的元件器拖入合適的位置,然后將各個元器件鏈接起來構成回路。

在桌面右鍵點擊新建一個名為tt的文件夾,打開Keil uVision3軟件,點擊工程>新建uVision工程選中桌面的tt文件夾,把工程的名字命為test,點擊保存選擇要用的51單片機型號,本次設計用的是STC89C52,這里選擇Atmel的AT89C52,點擊確定,點擊否,點擊新建文件,再點擊保存,將文件命名為main.c(如果用的是匯編語言,則命為main.asm)點擊保存,點擊新建文件,右鍵點擊源代碼組1>添加文件到組“源代碼組1”,點擊main.c,點擊Add,點擊Close,雙擊源代碼組1,可以看到main.c已被添加進工程。將本次熱敏電阻溫度檢測電路的程序輸入工程中,點擊編譯指令,檢查程序中的錯誤并調試,再次點擊編譯,待程序中沒有錯誤時,點擊工程中options for target命令,選擇輸出一欄,勾選產生HEX文件,點擊確定。再次點擊編譯,報告輸出“創建HEX文件”。最后將tt文件夾下的HEX文件燒入到單片機中。最后在Proteus中進行系統仿真,觀察到LCD液晶顯示屏上可以顯示當前的溫度值,改變熱敏電阻的阻值,溫度隨之變化。如圖5-1所示。

圖5-1 系統仿真圖
6 設計心得

本次設計具備一定難度,在這次畢業設計中,我學到了很多知識,也使我的能力得到了提升。

首先,硬件方面。選擇硬件,要比較同類產品的穩定性、功耗、體積、價格等,另外還要符合設計的全部要求。在顯示方案上,我考慮的時間相對長了一點。利用數碼管顯示,程序復雜,但是,自己編程比較熟悉,價格便宜。利用LCD1602顯示,程序簡單,但是以前自己從未使用過。經過比較,我選擇LCD1602,這樣可以學到新知識,提高自己的知識水平。在硬件電路的設計方面,用Altium Designer Summer繪制電路圖時要標明元件的大小,有些封裝元件要標明名稱和封裝。

其次,軟件方面。程序的模塊化有利于提高編程的效率,也提高了程序的易讀性。在本次課程設計中,我主要分兩個方面進行編程。一個方面,我在了解了A/D轉換模塊和各個接口的作用后,首先對其編程。另一個方面,我認真分析了LCD液晶顯示屏和數碼管顯示原理區別。然后對顯示模塊進行編程,最后經過多次調試,LCD1602終于能正常顯示。

總而言之,在韓老師的帶領和指導下,我順利的完成了課程設計,完成了老師交給的任務。



附 錄 一系統整體原理圖


PCB版圖


完整的Word格式文檔51黑下載地址:
http://m.raoushi.com/bbs/dpj-113223-1.html


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表