加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入

基于51單片機(jī)的酒精檢測(cè)儀設(shè)計(jì)

08/29 15:38
1502
服務(wù)支持:
技術(shù)交流群

完成交易后在“購(gòu)買(mǎi)成功”頁(yè)面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長(zhǎng)和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購(gòu)買(mǎi)后不支持退換且無(wú)法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
    • 引言
    • 1? 課題背景意義及研究?jī)?nèi)容
    • 2? 設(shè)計(jì)方案選擇
    • 3? 系統(tǒng)硬件設(shè)計(jì)
    • 4? 系統(tǒng)軟件設(shè)計(jì)
    • 5? 系統(tǒng)調(diào)試
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

引言

隨著我國(guó)經(jīng)濟(jì)的蓬勃發(fā)展,國(guó)民生產(chǎn)總值的不斷提高,人均可支配財(cái)產(chǎn)也大大增加,汽車(chē)擁有量持續(xù)增加,與此同時(shí),每年死于交通事故的人數(shù)也在持續(xù)增加,道路交通安全形勢(shì)變得十分嚴(yán)峻,多部門(mén)都對(duì)此高度重視。

在全球范圍內(nèi),人均酒精消費(fèi)量從1990年的5.9L增加到2017年的6.5L,未來(lái)還將持續(xù)增加。而人體血液中積累一定程度的酒精,但未及時(shí)分解排出體外時(shí),便會(huì)影響大腦和中樞神經(jīng),致使神經(jīng)麻痹,大腦反應(yīng)滯后,身體不受控制等癥狀,在處理緊急情況時(shí)的反應(yīng)速度和控制能力會(huì)有些許下降,嚴(yán)重者喪失行動(dòng)能力。而我國(guó)的酒文化歷史悠久,源遠(yuǎn)流長(zhǎng),在世界上也是獨(dú)領(lǐng)風(fēng)騷,在接待貴賓,親朋好友相聚,酒水必不可少,隨之也帶來(lái)了一系列社會(huì)問(wèn)題,例如酒后打架、醉酒駕駛引發(fā)交通事故等,酒后駕駛甚至被列為車(chē)禍致死的主要原因之一,一旦發(fā)生,將是一個(gè)甚至多個(gè)家庭的不幸,為了降低發(fā)生此類(lèi)事情的概率,使更多人的生命財(cái)產(chǎn)安全得到保障,急需一種儀器來(lái)判斷駕駛員是否醉酒駕駛。

本文提出并設(shè)計(jì)了一種可以實(shí)時(shí)檢測(cè)呼出氣體的酒精含量,且超出設(shè)定值時(shí)會(huì)聲光報(bào)警的測(cè)試儀。本文詳細(xì)介紹了設(shè)計(jì)所提出的背景和研究意義,對(duì)于所用到的各個(gè)器件做了對(duì)比介紹,以及各個(gè)硬件電路模塊的工作原理,在軟件程序方面,對(duì)于各個(gè)模塊做了詳細(xì)的流程框圖,可以快速看出程序設(shè)計(jì)思路,最后列舉了硬軟件在設(shè)計(jì)調(diào)試所出現(xiàn)的一系列問(wèn)題以及與之對(duì)應(yīng)的解決辦法。

1? 課題背景意義及研究?jī)?nèi)容

1.1 課題背景及研究意義

此次畢業(yè)設(shè)計(jì)的課題是《基于單片機(jī)的酒精檢測(cè)儀》,是工程設(shè)計(jì)類(lèi)的課題。

現(xiàn)如今,已全面步入信息化時(shí)代,電子設(shè)備充斥著我們生活的方方面面。帶來(lái)了巨大的便利,在實(shí)際生活中,酒精檢測(cè)儀也應(yīng)用于食品加工,釀酒,交通查酒駕等領(lǐng)域,平時(shí)見(jiàn)到最多的便是交警查酒駕,而最準(zhǔn)確確定人體酒精濃度的方法是抽血化驗(yàn)檢測(cè),但是這種辦法操作過(guò)程過(guò)于繁瑣,技術(shù)難度相對(duì)較高。測(cè)量呼出的氣體來(lái)判斷氣體的酒精濃度相對(duì)較為實(shí)用,一個(gè)人在深呼吸2~4秒后,便會(huì)釋放出肺部深處的氣體,而血液中的酒精濃度與肺部的比值大致為1:2200,通過(guò)這種方式便可來(lái)推算人的飲酒量。

根據(jù)酒精檢測(cè)儀的原理,可以將其劃分為電化學(xué)、紅外、氣體色譜、比色、半導(dǎo)體型等五大類(lèi)。受價(jià)格等因素的影響,半導(dǎo)體和電化學(xué)型的應(yīng)用較廣。目前,許多國(guó)家都使用呼氣酒精檢測(cè)儀在現(xiàn)場(chǎng)進(jìn)行檢測(cè),來(lái)判斷駕駛員是否飲酒。其中電化學(xué)型的穩(wěn)定性較好,精確度較高,且抗干擾性強(qiáng),但是要求結(jié)構(gòu)較為精密,且制造困難,只有個(gè)別國(guó)家可以生產(chǎn),相反半導(dǎo)體類(lèi)型的較為廉價(jià),但性能不如燃料電池性的。

酒精檢測(cè)儀的現(xiàn)實(shí)意義在交通方面主要是可以解決社會(huì)上的車(chē)禍亂象,可以很大程度的減少車(chē)禍的發(fā)生,對(duì)道路出行多了一份安全保障,挽救了無(wú)數(shù)個(gè)家庭,同時(shí)也給國(guó)家做了巨大的貢獻(xiàn),樹(shù)立了國(guó)家安全的良好形象,讓每一個(gè)人都能生活在一個(gè)良好的社會(huì)環(huán)境中,其次在其他如食品加工等領(lǐng)域,可以檢測(cè)生產(chǎn)產(chǎn)品的質(zhì)量以及確保生產(chǎn)安全。

1.2 課題研究?jī)?nèi)容

設(shè)計(jì)要求:

(1)能對(duì)酒精含量進(jìn)行測(cè)量和顯示,并顯示醉酒閾值;

(2)當(dāng)酒精濃度大于醉酒閾值時(shí),聲光報(bào)警;

(3)能夠顯示年、月、日、星期、時(shí)、分、秒。

2? 設(shè)計(jì)方案選擇

2.1 系統(tǒng)控制芯片選擇

方案一:選擇STC89C52單片機(jī)作為主控制芯片。該單片機(jī)是8位微控制器,有8K的程序存儲(chǔ)空間,有256個(gè)字節(jié)數(shù)據(jù)存儲(chǔ)空間,3個(gè)16位定時(shí)器/計(jì)數(shù)器,4個(gè)外部中斷,全雙工串行口,具有高速、低功耗、具有超強(qiáng)抗干擾性的特點(diǎn),其指令代碼完全兼容8051,市場(chǎng)價(jià)格較為廉價(jià),且具有靈活的編程方式。

方案二:選擇MSP430單片機(jī)作為主控制芯片。該單片機(jī)的匯編語(yǔ)言使用起來(lái)較為靈活,有許多尋址方式,且具有強(qiáng)大的處理能力,電壓低,功耗較低,片內(nèi)集成資源豐富,且加密性強(qiáng),有強(qiáng)抗干擾能力。但是由于工作電壓低,接口電路麻煩,而且I/O口無(wú)保護(hù),所以過(guò)壓電流會(huì)擊穿。其次不易上手,學(xué)習(xí)資料較少。

綜合以上的描述,鑒于STC89C52較為常用,市場(chǎng)上價(jià)格相對(duì)較低,設(shè)計(jì)開(kāi)發(fā)難度較小,查找學(xué)習(xí)資料便捷,且此單片機(jī)已可滿足設(shè)計(jì)要求,因此選擇STC89C52作為主控制芯片。

2.2 顯示器件的選擇

方案一:使用LCD1602液晶顯示屏。該顯示屏可以直接和STC89C52直接接口,可顯示32個(gè)字符,因是字符型液晶,所以可以較為便捷地顯示字母和數(shù)字,且控制簡(jiǎn)單,市場(chǎng)價(jià)格低廉,但是所顯示的字體大小不可隨意改動(dòng),對(duì)于曲線和圖形等也無(wú)法顯示。

方案二:使用LCD12864液晶顯示屏。該液晶顯示屏的各個(gè)顯示點(diǎn)都與一個(gè)二進(jìn)制數(shù)對(duì)應(yīng),因此可自行設(shè)計(jì)輸出的圖形和漢字,分辨率較高,功耗較低,且輕薄,由于顯示信息量大,造成電路及程序的設(shè)計(jì)較為困難。

綜合以上方案,本設(shè)計(jì)主要顯示酒精含量、時(shí)間和日期,需要顯示的內(nèi)容較少,選用LCD1602為顯示屏,已可滿足設(shè)計(jì)要求,且該顯示屏價(jià)格低廉,在網(wǎng)絡(luò)上可查找資料較多,方便學(xué)習(xí)參考,設(shè)計(jì)難度相對(duì)較小。

2.3 A/D轉(zhuǎn)換芯片的選擇

方案一:采用ADC0832作為模數(shù)轉(zhuǎn)換器件。該芯片是雙通道的模數(shù)轉(zhuǎn)換芯片,在0~5V的電壓下可以正常工作,采用250KHZ的頻率,采用雙輸出方式對(duì)數(shù)據(jù)進(jìn)行嚴(yán)格的校對(duì),可有效減少芯片的數(shù)據(jù)錯(cuò)誤,并具有較好的穩(wěn)定性。獨(dú)立的允許輸入模式使得多個(gè)設(shè)備的安裝和控制過(guò)程更加方便。

方案二:采用ADC0808作為A/D轉(zhuǎn)換器件。該芯片是ADC0809的簡(jiǎn)化版,功能大致相同,ADC0808是采樣分辨率為8位的、以逐次逼近原理進(jìn)行模/數(shù)轉(zhuǎn)換的器件。

這兩種設(shè)備的基本性能相似,因?yàn)楸敬卧O(shè)計(jì)只需一個(gè)通道,所以使用ADC0832芯片已可滿足需求,可節(jié)省資源,且此芯片兼容性好,較為劃算。

2.4 酒精檢測(cè)傳感器的選擇

半導(dǎo)體型的酒精傳感器MQ-3所處環(huán)境中含有酒精蒸氣時(shí),當(dāng)乙醇?xì)怏w濃度增大時(shí),傳感器的導(dǎo)電性能也隨之提高,接著將檢測(cè)到的酒精含量轉(zhuǎn)化為電信號(hào),可以得到關(guān)于周?chē)h(huán)境中被測(cè)氣體狀態(tài)的信息。MQ-3對(duì)酒精較為敏感,以及有較強(qiáng)的抗干擾能力,對(duì)于油煙水汽有較強(qiáng)的抵抗性,且市場(chǎng)價(jià)格較低,適用于多種應(yīng)用,最終方案選擇MQ-3酒精傳感器。

2.5 時(shí)鐘芯片的選擇

DS1302時(shí)鐘芯片可提供時(shí)間等信息,在2V~5.5V之間可以正常工作,具備主電源后備電源雙電源引腳,1腳為主電源接口,8腳作為后備電源接口,可搭配紐扣電池做后備電源,以極低的消耗可保持時(shí)鐘運(yùn)行很長(zhǎng)時(shí)間,運(yùn)行時(shí)間可達(dá)到幾個(gè)月甚至幾年,即使斷電后再次上電使用設(shè)備也可做到時(shí)間同步標(biāo)準(zhǔn)時(shí)間。雖然單片機(jī)內(nèi)部也有定時(shí)器,但它是對(duì)單片機(jī)工作節(jié)拍的技術(shù)的精確度較高,但不適合長(zhǎng)時(shí)間定時(shí)。相比之下,選擇DS1302做時(shí)鐘芯片更能滿足課題要求。

2.6 系統(tǒng)整體設(shè)計(jì)方案

結(jié)合上面選擇的解決方案,確定了總體系統(tǒng)框圖,如圖2-1所示。

圖2-1 總體系統(tǒng)框圖

最終將STC89C52單片機(jī)作為系統(tǒng)的主控芯片,人機(jī)交互通過(guò)獨(dú)立按鍵和LCD1602液晶顯示屏來(lái)實(shí)現(xiàn),并可通過(guò)獨(dú)立按鍵來(lái)設(shè)定醉酒閾值,調(diào)節(jié)時(shí)間顯示,與標(biāo)準(zhǔn)時(shí)間同步。使用MQ-3酒精傳感器來(lái)得到電信號(hào),經(jīng)過(guò)電路處理成模擬電壓后輸送給單片機(jī),經(jīng)ADC0832轉(zhuǎn)換器件轉(zhuǎn)化為數(shù)字電壓。模擬信號(hào)由A/D轉(zhuǎn)換模塊輸出,用于檢測(cè)酒精的濃度,從而降低設(shè)備的使用。將所獲得的數(shù)據(jù)與預(yù)先設(shè)置的醉酒閾值進(jìn)行比較,超過(guò)設(shè)定值值時(shí),LED亮,同時(shí)蜂鳴器發(fā)出報(bào)警聲。整個(gè)電路包括:最小MCU,時(shí)鐘,功能按鍵,LCD液晶四大部分。該供電模塊由一個(gè)濾波電容,一個(gè)自鎖開(kāi)關(guān),一個(gè)LED顯示,可5V直流供電,供電給各模塊;由LCD1602液晶顯示屏和可調(diào)電阻器組成液晶顯示模塊。

3? 系統(tǒng)硬件設(shè)計(jì)

3.1 單片機(jī)最小系統(tǒng)

3.1.1單片機(jī)STC89C52

STC89C52單片機(jī)完全兼容8051,該單片機(jī)共有四組I/O口,全部提供給用戶(程序長(zhǎng)度小于4K)分別是P0、P1、P2、P3。有6個(gè)中斷源,3個(gè)16位的定時(shí)/計(jì)數(shù)器,片內(nèi)振蕩器時(shí)鐘電路在5.5V~3.8V之間可正常工作,11.0592MHz和12MHz是常用的時(shí)鐘工作頻率,安全性高,功耗低,運(yùn)行速度快,性能卓越,且市場(chǎng)價(jià)格便宜,在多個(gè)領(lǐng)域都有應(yīng)用。

3.1.2單片機(jī)最小系統(tǒng)

單片機(jī)最小系統(tǒng)電路如圖3-1所示

圖3-1 單片機(jī)最小系統(tǒng)

該產(chǎn)品采用STC89C52微控制器,以單片機(jī)為控制核心,配合晶振、電源、復(fù)位電路,具有優(yōu)異的性能、較低功耗、充分開(kāi)放的系統(tǒng)資源、靈活的界面,使用者可以通過(guò)自己的方式構(gòu)建電路,實(shí)現(xiàn)各種功能。在晶振電路中,通??梢赃x擇1.2-12MHz,甚至24MHz,功率隨著頻率的增大而增大。此次采用了2個(gè)30pF陶瓷電容器,12MHz的晶振。

MCS-52單片機(jī)通常采用上電復(fù)位和按鍵復(fù)位這兩種復(fù)位方式[1]。RST的上方為一電容,并接一高電平,下方為一個(gè)電阻,并接地。在通電的情況下,電容器的兩端就會(huì)產(chǎn)生短路,RST管腳就會(huì)變成高電平,電源就會(huì)對(duì)電容充電,RST端的電壓就會(huì)緩慢地降低,直到達(dá)到一定的水平,單片機(jī)才能正常工作。

本設(shè)計(jì)改用了USB接口5V供電,通過(guò)一雙擲開(kāi)關(guān)來(lái)控制電源的關(guān)斷,可連接充電寶或者手機(jī)充電器等,方便攜帶使用,其電路如圖3-2所示。

圖3-2 電源接口電路

3.2 MQ-3酒精氣體傳感器

MQ-3是一種半導(dǎo)體酒精感應(yīng)器,當(dāng)被測(cè)環(huán)境中含有酒精氣體時(shí),該傳感器的導(dǎo)電性會(huì)隨著被測(cè)環(huán)境中的酒精氣體的濃度而發(fā)生變化,接著通過(guò)特定的電路,便可將傳感器的電導(dǎo)率轉(zhuǎn)化為一定的氣體濃度的信號(hào),MQ-3酒精感應(yīng)器對(duì)酒精的敏感度很高,能夠抵抗汽油,煙霧,水蒸氣等。傳感器在充電時(shí),輸出電壓會(huì)迅速升高,當(dāng)達(dá)到一定的溫度后便會(huì)緩慢的下降,因此在使用之前,要先對(duì)傳感器進(jìn)行預(yù)熱1-2分鐘,這樣就可以保證傳感器的正常工作。被測(cè)環(huán)境中的酒精濃度與傳感器輸出電壓有著一定的關(guān)系,在無(wú)酒精氣體的環(huán)境中,傳感器的輸出電壓大約為1V,在有酒精氣體的環(huán)境中,每提高20 PPM (2毫克/100毫升)的酒精濃度,傳感器的電壓提高0.1V,該模塊內(nèi)部電路圖如圖3-3所示。

圖3-3 MQ-3酒精檢測(cè)模塊內(nèi)部電路圖

3.3 ADC0832電路設(shè)計(jì)

ADC0832是一款雙通道的A/D轉(zhuǎn)換芯片,該芯片的模擬輸入電壓范圍為0-5V,基于有雙輸出的數(shù)據(jù),可以進(jìn)行數(shù)據(jù)的校驗(yàn),從而降低了數(shù)據(jù)的錯(cuò)誤,具有較高的轉(zhuǎn)換速度和較好的穩(wěn)定性。獨(dú)立的晶片允許輸入,使得多個(gè)裝置的連接與處理單元的控制更為便利。利用DI的數(shù)據(jù)輸入,可以較為方便地進(jìn)行信道功能的選取。如果ADC0832不工作,則其CS輸入為高電平,此時(shí),可將此芯片關(guān)閉,CLK及 DO/DI可供選擇。與單片機(jī)的接口應(yīng)為CS、CLK、DO、DI四條數(shù)據(jù)線路.由于DO和DI在通信過(guò)程中不能同時(shí)進(jìn)行,并且與單片機(jī)之間的接口也是雙向的,所以在電路上,DO和DI并聯(lián)為一條數(shù)據(jù)線。圖3-4顯示了特定的電路。

圖3-4 ADC0832電路圖

3.4 時(shí)鐘電路設(shè)計(jì)

在DS1302時(shí)鐘電路中,管腳1用作主電源接口,管腳8提供低功率和低功耗的情況下的備用電源接口,當(dāng)主電源斷電時(shí),Vccl可保證其正常工作,保存資料,保持時(shí)鐘的正常運(yùn)轉(zhuǎn),做到時(shí)間同步。并外加頻率為32.768Hz晶振,提高時(shí)鐘的穩(wěn)定性。圖3-5為本設(shè)計(jì)的時(shí)鐘電路。

圖3-5 時(shí)鐘電路

3.5 報(bào)警電路設(shè)計(jì)

經(jīng)A/D轉(zhuǎn)換后所得的數(shù)字信號(hào)若比所設(shè)的閾值大,單片機(jī)的P2.3口輸出低電平,此口與報(bào)警電路相連,當(dāng)其為低電時(shí),三極管導(dǎo)通,蜂鳴器通電,發(fā)出蜂鳴聲,若為高電平時(shí),三極管無(wú)法導(dǎo)通,保持靜默。蜂鳴器報(bào)警電路如圖3-6所示。

圖3-6 報(bào)警模塊電路圖

3.6 功能按鍵模塊

在按鍵上,一般采用獨(dú)立的按鍵和矩陣的方式,各有利弊,而單獨(dú)的按鍵電路則比較簡(jiǎn)單,編程也比較方便,一般用于一些簡(jiǎn)單的硬件電路。矩陣電路恰恰相反,編寫(xiě)程序不易,與獨(dú)立按鍵相比更加節(jié)省IO口,多用于8個(gè)按鍵以上的硬件電路。本設(shè)計(jì)只需四個(gè)按鍵,因此該方案采用了獨(dú)立按鍵電路,采用了多個(gè)單獨(dú)的按鍵進(jìn)行人機(jī)對(duì)話。通過(guò)按鍵操作,向系統(tǒng)發(fā)出操作指令,再與MCU進(jìn)行串口通訊,顯示在液晶顯示屏上,按鍵的一端與單片機(jī)的輸入/輸出端口相連。

這個(gè)設(shè)計(jì)是因?yàn)樵趹抑脿顟B(tài)下,單片機(jī)的I/O是置1,不按按鍵的話,I/O就等于懸空,按下按鈕后,此端口的電壓會(huì)降低,單片機(jī)可以根據(jù)輸入/輸出接口是否存在低電平來(lái)判定是否按下了按鈕,當(dāng)然,該按鍵使用的是金屬開(kāi)鎖,會(huì)出現(xiàn)抖動(dòng),因此在程序中要加上一個(gè)延遲消除。此外,再按下按鍵時(shí)會(huì)產(chǎn)生抖動(dòng),所以在程序中要加一個(gè)延遲消除程序。三個(gè)按鍵的功能分別是:按鍵2按下后進(jìn)入設(shè)置模式,可以選擇需要調(diào)節(jié)的參數(shù),可連續(xù)選擇。在設(shè)置的模式下,按鍵2按下后,對(duì)應(yīng)的參數(shù)加一,按鍵3按下后對(duì)應(yīng)參數(shù)減一。功能按鍵電路如圖3-7所示。

圖3-7 功能按鍵電路

3.7 LCD1602液晶顯示模塊

顯示LCD1602總共有11個(gè)指令,通過(guò)MCU將其傳輸?shù)絃CD1602中,可以實(shí)現(xiàn)諸如屏幕清屏、切換、顯示等功能。LCD1602本身就有一個(gè)字庫(kù),可以在顯示的時(shí)候直接調(diào)用字庫(kù)來(lái)顯示,當(dāng)然,如果字庫(kù)里沒(méi)有的字符也可以按照自己的要求寫(xiě)在CGROM里,比如5*8個(gè)字符,但是定制的字符數(shù)量是有限制的,所以要按照一定的順序來(lái)設(shè)置,最多可以設(shè)置8個(gè)字符。在LCD的CGROM中寫(xiě)入定制的字符之后,可以任意調(diào)用,調(diào)用方法與普通的顯示字符相同。通過(guò)讀狀態(tài)操作、寫(xiě)指令操作、讀數(shù)據(jù)操作可以控制液晶顯示器,其中寫(xiě)數(shù)據(jù)操作有固定的對(duì)應(yīng)引腳電平。電路圖如圖3-8所示。

圖3-8 液晶顯示電路

4? 系統(tǒng)軟件設(shè)計(jì)

4.1 程序語(yǔ)言及軟件開(kāi)發(fā)環(huán)境

本課題的編寫(xiě)涉及到軟體的編程,所以必須選用程式語(yǔ)言和軟體的開(kāi)發(fā)環(huán)境。在編程語(yǔ)言上,選擇了C。C語(yǔ)言是一種面向過(guò)程、抽象的通用編程語(yǔ)言??梢哉f(shuō),這是一種具有兩種語(yǔ)言特性的語(yǔ)言,同時(shí)也是一個(gè)優(yōu)秀的程序設(shè)計(jì)工具,可以使用模塊化的方法編寫(xiě)代碼,方便調(diào)試,同時(shí),C語(yǔ)言還具有很強(qiáng)的數(shù)據(jù)處理能力,可根據(jù)不同的指針,直接對(duì)硬件進(jìn)行訪問(wèn),從而實(shí)現(xiàn)對(duì)存儲(chǔ)和硬件的訪問(wèn)。

KeilC51是一個(gè)可以兼容51系列單片機(jī)和C的軟件開(kāi)發(fā)平臺(tái),與C語(yǔ)言的編程十分契合,它的集成環(huán)境簡(jiǎn)單、方便,軟件調(diào)試的功能強(qiáng)大,大大增加了程序的成功概率。而Proteus則是一個(gè)EDA的開(kāi)發(fā)工具,可以通過(guò)計(jì)算機(jī)模擬單片機(jī)的電路來(lái)模擬實(shí)際的工作狀況。通過(guò)對(duì)系統(tǒng)的模擬,可以對(duì)系統(tǒng)的整體功能進(jìn)行檢驗(yàn)。

4.2 主函數(shù)的設(shè)計(jì)

程序開(kāi)始運(yùn)行后,LCD1602液晶顯示器和定時(shí)器開(kāi)始初始化,單片機(jī)開(kāi)始讀取EEPROM存儲(chǔ)的限制數(shù)據(jù),接著判斷一分鐘預(yù)熱是否完成,保障傳感器可以正常工作,預(yù)熱完成后,程序要檢測(cè)是否有按鍵按下,若按下便進(jìn)行數(shù)據(jù)處理,并判斷顯示是否正常,若不正常則跳到顯示界面,正常則繼續(xù)下一步,單片機(jī)讀取經(jīng)A/D轉(zhuǎn)換后的數(shù)字信號(hào),并發(fā)送給液晶顯示器,最終顯示出酒精濃度。系統(tǒng)框圖如圖4-1所示。

圖4-1 系統(tǒng)程序流程圖

4.3 LCD1602顯示程序

LCD1602的顯示只要嚴(yán)格按照生產(chǎn)廠商的時(shí)間順序進(jìn)行程序設(shè)計(jì)即可實(shí)現(xiàn)。顯示器首先要用指令寫(xiě)出要顯示的位置,再按照一定的順序?qū)懴聰?shù)據(jù)。在第一次寫(xiě)時(shí),會(huì)自動(dòng)增加一個(gè)地址。參數(shù)為x,y,*s,其中的x,y表示在液晶顯示屏上的位置坐標(biāo),*s是需要顯示的字符數(shù)組。軟件通過(guò)所輸入的坐標(biāo)來(lái)確定所要顯示的地址。具體的流程圖如圖4-2所示。

4.4 ADC0832轉(zhuǎn)換函數(shù)的設(shè)計(jì)

單片機(jī)控制ADC0832采集電壓,首先要發(fā)送初始化信號(hào),接著選擇需要采集的通道,選擇完通道后單片機(jī)發(fā)送下降沿開(kāi)始讀數(shù)據(jù),數(shù)據(jù)是一位位的串行傳輸并且高位在前,低位在后,直到將八位數(shù)據(jù)都采集完畢后將采集到的數(shù)據(jù)返回。具體流程圖如圖4-3所示。

5? 系統(tǒng)調(diào)試

5.1 系統(tǒng)軟件調(diào)試

此次課題是基于單片機(jī)的酒精檢測(cè)儀,設(shè)計(jì)主要要求是檢測(cè)酒精濃度,超出閾值便聲光報(bào)警,隨后查找參考文獻(xiàn)及學(xué)習(xí)資料,了解所使用元器件的功能和使用原理,開(kāi)始設(shè)計(jì)電路,將設(shè)計(jì)好的電路在Proteus仿真軟件上畫(huà)好仿真原理圖,模擬各個(gè)模塊的功能,其中使用一個(gè)滑動(dòng)變阻器來(lái)模擬酒精傳感器的變化。

使用Keil uVision4軟件編寫(xiě)程序,主要采用模塊化的方式,編寫(xiě)出各個(gè)模塊的功能子函數(shù),再將寫(xiě)好的子函數(shù)調(diào)用到主函數(shù)中,一步步的完善編程,全部寫(xiě)完后,編譯沒(méi)有報(bào)錯(cuò),然后生成hex文件,打開(kāi)仿真軟件燒錄進(jìn)單片機(jī)檢查功能是否正確,在仿真時(shí)發(fā)現(xiàn)液晶顯示屏不顯示,按下按鍵也不能顯示出文字字母,以為是LCD602液晶顯示模塊電路畫(huà)錯(cuò),在查找資料對(duì)比后發(fā)現(xiàn)無(wú)誤,又仔細(xì)其檢查代碼,發(fā)現(xiàn)有一兩個(gè)控制端的定義出錯(cuò),修改后重新編譯生成hex文件,重新下載后測(cè)試成功顯示,之后又發(fā)現(xiàn)星期顯示往右偏移導(dǎo)致不完整顯示,又仔細(xì)查找LCD1602的相關(guān)資料,考慮是顯示位置語(yǔ)句的參數(shù)未設(shè)置好,修改后變的正常,要計(jì)算好每條信息的位置,利用好顯示屏的空間,使得參數(shù)可以完整顯示。

5.2 硬件制作與調(diào)試

原理圖的繪制主要使用的軟件是AD15,一些器件的封裝不在現(xiàn)有的器件封裝庫(kù)中,需查找相關(guān)器件的封裝資料,畫(huà)好所需要的全部器件封裝后,將事先設(shè)計(jì)好的電路圖繪制出來(lái),畫(huà)出各個(gè)模塊后使用網(wǎng)絡(luò)標(biāo)號(hào)連接,之后導(dǎo)入pcb,發(fā)現(xiàn)通過(guò)網(wǎng)絡(luò)標(biāo)號(hào)連接的電路,pcb中并未連接,經(jīng)檢查發(fā)現(xiàn)是芯片引腳引出來(lái)的線用錯(cuò),修改后再次導(dǎo)入,開(kāi)始繪制pcb,布局始終遵循緊湊的原則,線寬盡量不要太細(xì),防止后續(xù)腐蝕時(shí)出現(xiàn)斷路短路,安全距離盡量大一些,焊盤(pán)大小在不影響其他引腳的情況下,盡可能的大一點(diǎn),方便后續(xù)鉆孔,防止將焊盤(pán)打掉造成器件無(wú)法焊接,接著將電路圖打印在熱轉(zhuǎn)印紙上,通過(guò)熨斗印在腐蝕板上,接著通過(guò)腐蝕劑等進(jìn)行手工制板,打完孔后使用數(shù)字萬(wàn)用表的蜂鳴檔測(cè)量地線、電源線和信號(hào)線是否連通,焊接時(shí)先焊小器件,再焊大器件,使成品更加美觀。

焊接完成后,對(duì)未插芯片的板子進(jìn)行測(cè)試,防止因電壓過(guò)高而燒壞芯片,并檢查是否有缺焊漏焊,接著使用數(shù)字萬(wàn)用表的直流電壓檔測(cè)量芯片插座處的電壓,發(fā)現(xiàn)STC89C52單片機(jī)的20引腳和40引腳電壓為4.9V,LCD1602液晶顯示屏的1腳和16腳電壓為4.9V,DS1302時(shí)鐘芯片的1腳和4腳的電壓為4.8V,均在可正常工作電壓范圍內(nèi),可將芯片插上。

接著將單片機(jī)和電腦相連,使用STC-ISP燒錄軟件將程序燒錄進(jìn)單片機(jī)芯片中,之后在板子上插上芯片上電后,撥動(dòng)雙擲開(kāi)關(guān)看到電源指示燈亮起,液晶顯示器可以正常顯示,顯示年、月、日、周、時(shí)、分、秒,并開(kāi)始初始化一分鐘倒計(jì)時(shí),演示圖如圖5-1所示。

圖5-1 上電初始化演示圖

但在使用過(guò)程中有時(shí)顯示亂碼,考慮到有時(shí)使用是沒(méi)問(wèn)題的,猜測(cè)是工作不穩(wěn)定,可能是寫(xiě)代碼的時(shí)序太快,致使LCD工作不穩(wěn)定,查找資料后在寫(xiě)指令時(shí)加一些延時(shí),試了幾次后恢復(fù)正常,之后也正常使用。調(diào)節(jié)好時(shí)間后拔掉電源,過(guò)一段時(shí)間后再次連通電源,發(fā)現(xiàn)時(shí)間仍與實(shí)際時(shí)間同步,表明時(shí)鐘芯片使用的后備電源生效。通過(guò)按鍵來(lái)調(diào)節(jié)時(shí)間和設(shè)置酒精閾值,具體的演示圖如圖5-2所示。

當(dāng)檢測(cè)環(huán)境中的酒精含量超過(guò)了規(guī)定的酒精閾值,則LED燈將點(diǎn)亮,蜂鳴器會(huì)持續(xù)地發(fā)出聲音,LCD屏幕將會(huì)實(shí)時(shí)顯示被檢測(cè)的環(huán)境中的酒精含量,當(dāng)檢測(cè)到的酒精含量超過(guò)規(guī)定范圍時(shí),光亮和聲音將會(huì)自動(dòng)關(guān)閉,將一瓶酒精湊到MQ-3酒精傳感器前,因酒精濃度較高,顯示屏所顯示數(shù)值會(huì)迅速升高,拿開(kāi)酒精后,會(huì)慢慢下降直至清零,演示圖如圖5-3所示。

部分程序展示:

sbit led???? = P1^7;

sbit buzz??? = P1^6;

sbit key_set = P1^0;

sbit key_jia = P1^1;

sbit key_jian= P1^2;

/*********************全局變量定義***************************/

#define K_MG_MV 2

#define IN_V 500

long ALValue;

uchar K_ZERO;

uint jiujia_up;

uint? set_f;

uchar num;

/********************************************************

函數(shù)名稱(chēng):void display1()

函數(shù)作用:顯示實(shí)際濃度值

參數(shù)說(shuō)明:

********************************************************/

void display1()

{

uchar xq;

xq=GetWeekDay(time[6],time[4],time[3]);

switch(xq)

{

case 1:lcd1602_write_character(11,1,"Mon"); break;

case 2:lcd1602_write_character(10,1,"Tues"); break;

case 3:lcd1602_write_character(9,1,"Wednes"); break;

case 4:lcd1602_write_character(10,1,"Thurs"); break;

case 5:lcd1602_write_character(10,1,"Frid"); break;

case 6:lcd1602_write_character(10,1,"Satur"); break;

case 7:lcd1602_write_character(11,1,"Sun"); break;

default: break;

}

//顯示時(shí)間

LCD_disp_char(0,2,ASCII[time[2]/10]);

LCD_disp_char(1,2,ASCII[time[2]%10]);

LCD_disp_char(2,2,':');

LCD_disp_char(3,2,ASCII[time[1]/10]);

LCD_disp_char(4,2,ASCII[time[1]%10]);

LCD_disp_char(5,2,':');

LCD_disp_char(6,2,ASCII[time[0]/10]);

LCD_disp_char(7,2,ASCII[time[0]%10]);

LCD_disp_char(0,1,ASCII[time[6]/10]);

LCD_disp_char(1,1,ASCII[time[6]%10]);

LCD_disp_char(2,1,'/');

LCD_disp_char(3,1,ASCII[time[4]/10]);

LCD_disp_char(4,1,ASCII[time[4]%10]);

LCD_disp_char(5,1,'/');

LCD_disp_char(6,1,ASCII[time[3]/10]);

LCD_disp_char(7,1,ASCII[time[3]%10]);

if(wait_f==1)

{

if(K_ZERO>ADC_date)

K_ZERO=ADC_date;

if(ADC_date>K_ZERO)

ALValue=(long)IN_V*(ADC_date-K_ZERO)/255;

else

ALValue=0;

if(ALValue<0)

ALValue=0;

ALValue=ALValue*K_MG_MV;

if(ALValue<30)

ALValue=0;

else

ALValue=ALValue-30;

LCD_disp_char(11,2,ASCII[ALValue/100]);??? //顯示實(shí)際濃度值

LCD_disp_char(12,2,ASCII[ALValue%100/10]);

LCD_disp_char(13,2,ASCII[ALValue%10]);

if(jiujia_up<=ALValue)

{

led=0;

buzz=0;

}

else

{

led=1;

buzz=1;

}

}

else

{

LCD_disp_char(11,2,ASCII[(60-time2)/10]);

LCD_disp_char(12,2,ASCII[(60-time2)%10]);

LCD_disp_char(13,2,'S');

ADC0832_read(0);

K_ZERO=ADC_date;

}

}

/********************************************************

函數(shù)名稱(chēng):void display2(void)

函數(shù)作用:顯示設(shè)置時(shí)醉酒上限值

參數(shù)說(shuō)明:

********************************************************/

void display2(void)

{

lcd1602_write_character(0,1,"Set AlcoholLimit");

LCD_disp_char(2,2,ASCII[jiujia_up/100]);

LCD_disp_char(3,2,ASCII[jiujia_up%100/10]);

LCD_disp_char(4,2,ASCII[jiujia_up%10]);

lcd1602_write_character(5,2,"mg/100ml"); }

/********************************************************

函數(shù)名稱(chēng):void display3()

函數(shù)作用:顯示調(diào)整日期、時(shí)間函數(shù)

參數(shù)說(shuō)明:

********************************************************/

void display3()

{

num++;

lcd1602_write_character(1,1,"Date:");

lcd1602_write_character(1,2,"Time:");

if(num%2==0)

{

LCD_disp_char(6,1,ASCII[time[6]/10]);

LCD_disp_char(7,1,ASCII[time[6]%10]);

LCD_disp_char(8,1,'/');

LCD_disp_char(9,1,ASCII[time[4]/10]);

LCD_disp_char(10,1,ASCII[time[4]%10]);

LCD_disp_char(11,1,'/');

LCD_disp_char(12,1,ASCII[time[3]/10]);

LCD_disp_char(13,1,ASCII[time[3]%10]);

LCD_disp_char(6,2,ASCII[time[2]/10]);

LCD_disp_char(7,2,ASCII[time[2]%10]);

LCD_disp_char(8,2,':');

LCD_disp_char(9,2,ASCII[time[1]/10]);

LCD_disp_char(10,2,ASCII[time[1]%10]);

LCD_disp_char(11,2,':');

LCD_disp_char(12,2,ASCII[time[0]/10]);

LCD_disp_char(13,2,ASCII[time[0]%10]);

}

else

{

switch(set_f)

{

case 2: lcd1602_write_character(6,1,"? "); break;

case 3: lcd1602_write_character(9,1,"? "); break;

case 4: lcd1602_write_character(12,1,"? "); break;

case 5: lcd1602_write_character(6,2,"? "); break;

case 6: lcd1602_write_character(9,2,"? "); break;

case 7: lcd1602_write_character(12,2,"? "); break;

default: break;

}

}

}

內(nèi)容包括:

需要完整的資料可在我的資源里下載,也可以加入我的紛傳圈子,里面有資源壓縮包的百度網(wǎng)盤(pán)下載地址及提取碼。

紛傳點(diǎn)擊打開(kāi)即可看到。

  • 有需要資料的可了解一下.docx

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
FTLF8524P2BNV 1 Finisar Corporation Transceiver, 830nm Min, 860nm Max, 4250Mbps(Tx), 4250Mbps(Rx), LC Connector, Panel Mount, ROHS COMPLIANT PACKAGE
$301.6 查看
SIT8103AC-23-18E-33.33333 1 SiTime Corporation LVCMOS/TTL Output Clock Oscillator, 33.33333MHz Nom
$1.94 查看
HFBR-2416Z 1 Foxconn Receiver, 160Mbps, ST Connector, Through Hole Mount, ROHS COMPLIANT, PLASTIC, 8 PIN
$24.86 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜