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

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

基于51單片機的酒精檢測儀設計

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

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

虛擬商品不可退

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

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

引言

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

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

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

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

1.1 課題背景及研究意義

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

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

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

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

1.2 課題研究內(nèi)容

設計要求:

(1)能對酒精含量進行測量和顯示,并顯示醉酒閾值;

(2)當酒精濃度大于醉酒閾值時,聲光報警;

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

2? 設計方案選擇

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

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

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

綜合以上的描述,鑒于STC89C52較為常用,市場上價格相對較低,設計開發(fā)難度較小,查找學習資料便捷,且此單片機已可滿足設計要求,因此選擇STC89C52作為主控制芯片。

2.2 顯示器件的選擇

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

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

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

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

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

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

這兩種設備的基本性能相似,因為本次設計只需一個通道,所以使用ADC0832芯片已可滿足需求,可節(jié)省資源,且此芯片兼容性好,較為劃算。

2.4 酒精檢測傳感器的選擇

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

2.5 時鐘芯片的選擇

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

2.6 系統(tǒng)整體設計方案

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

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

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

3? 系統(tǒng)硬件設計

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

3.1.1單片機STC89C52

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

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

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

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

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

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

本設計改用了USB接口5V供電,通過一雙擲開關來控制電源的關斷,可連接充電寶或者手機充電器等,方便攜帶使用,其電路如圖3-2所示。

圖3-2 電源接口電路

3.2 MQ-3酒精氣體傳感器

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

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

3.3 ADC0832電路設計

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

圖3-4 ADC0832電路圖

3.4 時鐘電路設計

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

圖3-5 時鐘電路

3.5 報警電路設計

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

圖3-6 報警模塊電路圖

3.6 功能按鍵模塊

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

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

圖3-7 功能按鍵電路

3.7 LCD1602液晶顯示模塊

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

圖3-8 液晶顯示電路

4? 系統(tǒng)軟件設計

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

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

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

4.2 主函數(shù)的設計

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

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

4.3 LCD1602顯示程序

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

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

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

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

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

此次課題是基于單片機的酒精檢測儀,設計主要要求是檢測酒精濃度,超出閾值便聲光報警,隨后查找參考文獻及學習資料,了解所使用元器件的功能和使用原理,開始設計電路,將設計好的電路在Proteus仿真軟件上畫好仿真原理圖,模擬各個模塊的功能,其中使用一個滑動變阻器來模擬酒精傳感器的變化。

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

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

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

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

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

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

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

當檢測環(huán)境中的酒精含量超過了規(guī)定的酒精閾值,則LED燈將點亮,蜂鳴器會持續(xù)地發(fā)出聲音,LCD屏幕將會實時顯示被檢測的環(huán)境中的酒精含量,當檢測到的酒精含量超過規(guī)定范圍時,光亮和聲音將會自動關閉,將一瓶酒精湊到MQ-3酒精傳感器前,因酒精濃度較高,顯示屏所顯示數(shù)值會迅速升高,拿開酒精后,會慢慢下降直至清零,演示圖如圖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ù)名稱:void display1()

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

參數(shù)說明:

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

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;

}

//顯示時間

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]);??? //顯示實際濃度值

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ù)名稱:void display2(void)

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

參數(shù)說明:

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

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ù)名稱:void display3()

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

參數(shù)說明:

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

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)盤下載地址及提取碼。

紛傳點擊打開即可看到。

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

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
XRCGB25M000F3A00R0 1 Murata Manufacturing Co Ltd Parallel - Fundamental Quartz Crystal, 25MHz Nom, ROHS AND REACH COMPLIANT, SMALL, SMD, 3 PIN

ECAD模型

下載ECAD模型
$0.34 查看
M25P05-AVMN6P 1 Rochester Electronics LLC 64KX8 FLASH 2.7V PROM, PDSO8, 0.150 INCH, ROHS COMPLIANT, PLASTIC, SOP-8
$0.79 查看
S29GL256P10FFI020 1 AMD Flash, 16MX16, 100ns, PBGA64,
$9.29 查看

相關推薦

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