2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  本科畢業(yè)論文</b></p><p>  酒精濃度測(cè)試儀的設(shè)計(jì)與制作</p><p><b>  目 錄</b></p><p><b>  摘 要I</b></p><p><b>  緒 論1</b></p

2、><p><b>  1 硬件設(shè)計(jì)1</b></p><p>  1.1STC89S52單片機(jī)1</p><p>  1.2 MQ-3酒精傳感器1</p><p>  1.3 ADC0832芯片1</p><p>  1.4 LCD1602液晶1</p><p&

3、gt;  1.5 報(bào)警電路1</p><p><b>  2軟件設(shè)計(jì)1</b></p><p>  2.1 編譯語言的選擇1</p><p>  2.2 主程序模塊1</p><p>  2.3 A/D轉(zhuǎn)換模塊1</p><p>  2.4 按鍵輸入模塊1</p>

4、;<p>  2.5 液晶顯示輸出模塊1</p><p>  3 調(diào)試和結(jié)果1</p><p><b>  4 心得體會(huì)1</b></p><p><b>  參考文獻(xiàn)1</b></p><p><b>  附錄 1</b></p>

5、<p>  Abstract1</p><p><b>  致 謝1</b></p><p>  酒精濃度測(cè)試儀的設(shè)計(jì)與制作</p><p>  摘 要:本論文主要是設(shè)計(jì)一種用于公共場(chǎng)所具有檢測(cè)和報(bào)警功能的酒精濃度測(cè)試儀。成品可用于交警對(duì)汽車駕駛者測(cè)試與監(jiān)督,也可以用于司機(jī)駕車前的自我檢測(cè)。</p><p

6、>  本設(shè)計(jì)方案基于STC89S52單片機(jī),MQ-3酒精濃度傳感器。系統(tǒng)將傳感器輸出的4~20mA的標(biāo)準(zhǔn)信號(hào)通過以ADO832為核心的A/D轉(zhuǎn)換電路轉(zhuǎn)換為8位的數(shù)字信號(hào),經(jīng)過單片機(jī)處理,最后由LCD1602液晶顯示器顯示酒精濃度值以及實(shí)現(xiàn)報(bào)警功能。論文中清楚地描述了數(shù)據(jù)采集子代碼、數(shù)據(jù)處理過程以及數(shù)據(jù)顯示子程序和報(bào)警電路的設(shè)計(jì)方法和過程。系統(tǒng)對(duì)于測(cè)試點(diǎn)超出額定的酒精濃度時(shí),發(fā)光二極管報(bào)警提示測(cè)試人員,同時(shí)操作人員可以通過按鍵對(duì)上限

7、酒精濃度的設(shè)定和調(diào)節(jié)。</p><p>  關(guān)鍵詞:酒精濃度傳感器;單片機(jī);1602液晶</p><p><b>  緒 論</b></p><p>  檢測(cè)儀向更迅速快捷更方便攜帶等發(fā)展。傳統(tǒng)的機(jī)械測(cè)試儀和酒精計(jì)一般的靈敏度和準(zhǔn)確度比較低或難操作,同時(shí)單片機(jī)做的系統(tǒng)既有類似于計(jì)算機(jī)的基本部件,又不同于計(jì)算機(jī)。它有體積小,實(shí)時(shí)快速對(duì)外部事件做

8、出反應(yīng),作出邏輯判斷與推理后實(shí)現(xiàn)被控對(duì)象的參數(shù)調(diào)整與控制等優(yōu)點(diǎn),所以基于單片機(jī)的酒濃度測(cè)試儀的開發(fā)還是具有一定現(xiàn)實(shí)意義的。</p><p>  根據(jù)WHO數(shù)據(jù),全球2003年的人均純酒精消費(fèi)量為6.2L,其中歐洲地區(qū)人均達(dá)11.9L,美洲地區(qū)人均為8.7L。俄羅斯及其周邊的東歐國(guó)家酒精消費(fèi)量最高,其次為歐洲其他國(guó)家。在人均國(guó)民生產(chǎn)總值(GDP)低于7000美元的低收入國(guó)家,酒精消費(fèi)量與人均GDP相關(guān),GDP越高酒

9、精消費(fèi)量越高。而隨著我國(guó)近年來高速發(fā)展的經(jīng)濟(jì)水平和居民生活水平,酒精消費(fèi)量亦呈直線上升趨勢(shì),隨之而來的是因?yàn)轱嬀贫斐傻囊幌盗猩鐣?huì)問題。例如酒后駕駛造成的交通意外。</p><p>  當(dāng)酒精在人體血液內(nèi)達(dá)到一定濃度時(shí),麻痹神經(jīng),造成大腦反應(yīng)遲緩,肢體不受控制等癥狀。人對(duì)外界的反應(yīng)能力及控制能力就會(huì)下降,處理緊急情況的能力也隨之下降。對(duì)于酒后駕車者而言,其血液中酒精含量越高,發(fā)生撞車的幾率越大。而根據(jù)世界衛(wèi)組織的

10、事故調(diào)查,大約50%—69%的交通事故與酒后駕駛有關(guān),酒后駕駛已經(jīng)被列為車禍致死的主要原因。在中國(guó),每年由于酒后駕車引發(fā)的交通事故達(dá)數(shù)萬起,其危害觸目驚心,已成為交通事故的第一大“殺手”。</p><p>  為了實(shí)現(xiàn)對(duì)人權(quán)的尊重,對(duì)生命的關(guān)愛,使更多人的生命權(quán)、健康權(quán)及幸福美滿的家庭能得到更好的保護(hù),需要設(shè)計(jì)一智能儀器能夠檢測(cè)駕駛員體內(nèi)酒精含量。因此我選擇了酒精濃度測(cè)試儀的設(shè)計(jì)為畢業(yè)設(shè)計(jì)的題目。這種儀器可以準(zhǔn)確

11、的測(cè)出喝酒者酒后血液中的酒精濃度,從而可以采取相關(guān)措施,提前預(yù)防交通事故或者災(zāi)難的發(fā)生,從而極大地保護(hù)了人民的生命和財(cái)產(chǎn)的安全。</p><p>  受20世紀(jì)信息技術(shù)的快速發(fā)展的影響,傳感技術(shù)逐漸走向成熟,在生活生產(chǎn)中的得到了廣泛的應(yīng)用。由于傳感器在各個(gè)領(lǐng)域都有著舉足輕重的作用,因此,高精度,高可靠性,微型化,微功耗無源化和智能數(shù)字化成為其發(fā)展方向。</p><p>  為檢查醉駕, 警

12、察常常使用一種便攜式的酒精呼吸檢測(cè)儀, 通過檢測(cè)駕駛者呼出的氣體判斷駕駛者是否飲酒。而目前使用的酒精呼吸檢測(cè)儀只能初步顯示駕駛員是否飲酒, 有醉駕嫌疑的駕駛員還需要接受血檢, 以確定其體內(nèi)酒精含量是否超標(biāo)。為簡(jiǎn)化其流程,英國(guó)內(nèi)政部已推出一種超級(jí)酒精呼吸檢測(cè)儀, 能根據(jù)體溫、呼吸頻率等情況, 當(dāng)場(chǎng)判斷出駕駛者體內(nèi)的酒精含量。由此可見,高精度,高可靠性與微型化是酒精濃度檢測(cè)儀的主要發(fā)展方向。</p><p>  至今

13、為止,對(duì)氣體中酒精含量進(jìn)行檢測(cè)的設(shè)備有燃料電池型(電化學(xué))、半導(dǎo)體型、紅外線型、氣體色譜分析型和比色型五種類型。但由于價(jià)格和使用方便的原因,目前(截止2013年1月)常用的只有燃料電池型(電化學(xué)型)和半導(dǎo)體型兩種。</p><p>  與半導(dǎo)體型相比,燃料電池型呼氣酒精測(cè)試儀具有穩(wěn)定性好,精度高,抗干擾性好的優(yōu)點(diǎn)。但是由于燃料電池酒精傳感器的結(jié)構(gòu)要求非常精密,制造難度相當(dāng)大,目前(2013年)只有美國(guó)、英國(guó)、德國(guó)

14、,中國(guó)等少數(shù)幾個(gè)國(guó)家能夠生產(chǎn),加上材料成本高,因此價(jià)格相當(dāng)昂貴,是半導(dǎo)體酒精傳感器的幾十倍。</p><p>  由于經(jīng)費(fèi)、設(shè)備和時(shí)間等因素限制,所以這次設(shè)計(jì)與制作的酒精濃度測(cè)試儀是以單片機(jī)為主控制器,擴(kuò)展必要的外部電路,設(shè)計(jì)制作成的測(cè)試儀器。實(shí)現(xiàn)對(duì)酒精濃度數(shù)據(jù)的采集,最大酒精濃度的設(shè)置,酒精濃度大小的比較,報(bào)警和顯示酒精濃度數(shù)據(jù)等功能。系統(tǒng)包括單片機(jī)控制模塊,液晶顯示屏顯示模塊,數(shù)據(jù)采集模塊,報(bào)警模塊,復(fù)位電路

15、等模塊。單片機(jī)控制系統(tǒng)的工作過程,主要由51單片機(jī)、液晶顯示屏、按鍵、LED指示燈組成,外部硬件電路有驅(qū)動(dòng)芯片等。</p><p><b>  1 硬件設(shè)計(jì)</b></p><p>  由于本次設(shè)計(jì)需要用到單片機(jī),來完成對(duì)酒精濃度的檢測(cè),分析了網(wǎng)上的相似課題,有很多是用酒精濃度傳感器MQ-3來完成酒精濃度檢測(cè)系統(tǒng)的設(shè)計(jì)。鑒于本次時(shí)間限制,本次設(shè)計(jì)中采用的是STC89

16、S52單片機(jī)來控制整個(gè)電路,電路中采用的是LCD1602來顯示測(cè)試所得的實(shí)時(shí)數(shù)據(jù),用MQ-3感應(yīng)器來采集數(shù)據(jù)。A/D芯片選擇AD0832,主要是這塊芯片的性能優(yōu)良,時(shí)序操作簡(jiǎn)單,能很好的解決本次設(shè)計(jì)中對(duì)實(shí)時(shí)數(shù)據(jù)轉(zhuǎn)換的要求。系統(tǒng)結(jié)構(gòu)如下:</p><p>  圖1 系統(tǒng)結(jié)構(gòu)框圖</p><p>  構(gòu)成該系統(tǒng)的主要元件和電路有:</p><p>  STC89S52

17、單片機(jī)</p><p>  單片機(jī)是指一個(gè)集成在一塊芯片上的完整計(jì)算機(jī)系統(tǒng)。盡管他的大部分功能集成在一塊小芯片上,但是它具有一個(gè)完整計(jì)算機(jī)所需要的大部分部件:CPU、內(nèi)存、內(nèi)部和外部總線系統(tǒng),目前大部分還會(huì)具有外存。同時(shí)集成諸如通訊接口、定時(shí)器,實(shí)時(shí)時(shí)鐘等外圍設(shè)備。而現(xiàn)在最強(qiáng)大的單片機(jī)系統(tǒng)甚至可以將聲音、圖像、網(wǎng)絡(luò)、復(fù)雜的輸入輸出系統(tǒng)集成在一塊芯片上。</p><p>  單片機(jī)也被稱為微

18、控制器(Microcontroler),是因?yàn)樗钤绫挥迷诠I(yè)控制領(lǐng)域。單片機(jī)由芯片內(nèi)僅有CPU的專用處理器發(fā)展而來。最早的設(shè)計(jì)理念是通過將大量外圍設(shè)備和CPU集成在一個(gè)芯片中,使計(jì)算機(jī)系統(tǒng)更小,更容易集成進(jìn)復(fù)雜的而對(duì)提及要求嚴(yán)格的控制設(shè)備當(dāng)中。INTEL的Z80是最早按照這種思想設(shè)計(jì)出的處理器,從此以后,單片機(jī)和專用處理器的發(fā)展便分道揚(yáng)鑣。</p><p>  STC89S52單片機(jī)為系統(tǒng)的核心,它是一款低功耗

19、,價(jià)格便宜,高速,可靠,有一定抗靜電,抗干擾,功能較強(qiáng)的單片機(jī)。STC89S52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2個(gè)讀寫口線,片內(nèi)振蕩器及時(shí)鐘電路。同時(shí)STC89S52可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式。空閑方式停止CPU的工作,但允許RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振

20、蕩器停止工作并禁止其他所有部件工作直到下一個(gè)硬件復(fù)位。其將通用的微處理器和Flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫的Flash存儲(chǔ)器可有效地降低開發(fā)本。STC單片機(jī)有PDIP、PQFP/TQFP及PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求[1]。</p><p>  STC89S52芯片圖</p><p>  圖2 STC89S52引腳圖</p><p> 

21、 1.1.2 STC89S52單片機(jī)部分引腳功能說明</p><p>  ?Vcc:電源電壓。</p><p><b>  ?GND:接地。</b></p><p>  ?P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。</p><p>  ?P1口:P1是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口

22、,P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。</p><p>  ?P2口:P2是一個(gè)帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級(jí)可驅(qū)(吸收或輸出電流)4個(gè)TTL邏輯門電路。</p><p>  ?P3口:P3口時(shí)一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。</p><p>  ?

23、RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。</p><p>  ?ALE :當(dāng)訪問外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。</p><p>  ?PSEN:程序儲(chǔ)存允許(PSEN)輸出是外部程序存儲(chǔ)器的讀

24、選通信號(hào),當(dāng)89S52單片機(jī)由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖。在次期間,當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器,將跳過兩次 信號(hào)。</p><p>  ? EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲(chǔ)器(地址為0000H-FFFH), 端必須保持低電平(接地)。</p><p>  ?XTAL1:振蕩器反相放大器及內(nèi)部時(shí)鐘發(fā)生器的輸入端。</

25、p><p>  ?XTAL2:振蕩器反相放大器的輸出端[2]。</p><p>  1.2 MQ-3酒精傳感器</p><p>  MQ-3酒精傳感器對(duì)乙醇蒸氣有較高的靈敏度,但響應(yīng)和恢復(fù)需要一定的時(shí)間。另外,MQ-3酒精傳感器簡(jiǎn)單的驅(qū)動(dòng)回路和可靠的穩(wěn)定性是相比較于其他型號(hào)傳感器的優(yōu)點(diǎn)。MQ-3酒精傳感器可用于機(jī)動(dòng)車駕駛?cè)藛T及其他嚴(yán)禁酒后作業(yè)人員的現(xiàn)場(chǎng)檢測(cè),也可用于其

26、他場(chǎng)所乙醇蒸氣濃度的檢測(cè)。</p><p>  MQ-3酒精傳感器有6只針狀管腳,其中4個(gè)管腳(兩個(gè)A和兩個(gè)B)用于信號(hào)讀取,兩個(gè)H腳用于提供加熱電流。</p><p>  1.2.1 MQ-3酒精傳感器</p><p>  圖3 酒精傳感器管腳示意圖</p><p>  1.2.2 MQ-3酒精傳感器外圍電路</p>&

27、lt;p>  圖4 MQ-3酒精傳感器外圍電路原理圖</p><p>  當(dāng)感應(yīng)器上電后,由于周圍空氣沒有乙醇蒸汽,感應(yīng)器里的感應(yīng)材料不導(dǎo)電,傳回 ADC0832芯片CH0的模擬電流為0,當(dāng)感應(yīng)器周圍有乙醇蒸汽時(shí),感應(yīng)器里的感應(yīng)材料按一定規(guī)律導(dǎo)電,這些模擬電流經(jīng)過MQ-3的6腳傳回ADC0832芯片CH0進(jìn)行A/D轉(zhuǎn)換。</p><p>  1.3 ADC0832芯片</p

28、><p>  ADC0832 為8位分辨率A/D轉(zhuǎn)換芯片,其最高分辨可達(dá)256級(jí),可以適應(yīng)一般的模擬量轉(zhuǎn)換要求。其內(nèi)部電源輸入與參考電壓的復(fù)用,使得芯片的模擬電壓輸入在0~5V之間。芯片轉(zhuǎn)換時(shí)間僅為32μS,據(jù)有雙數(shù)據(jù)輸出可作為數(shù)據(jù)校驗(yàn),以減少數(shù)據(jù)誤差,轉(zhuǎn)換速度快且穩(wěn)定性能強(qiáng)。獨(dú)立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過DI 數(shù)據(jù)輸入端,可以輕易的實(shí)現(xiàn)通道功能的選擇[3]。</p>&

29、lt;p>  1.3.1 ADC0832芯片管腳</p><p>  圖5 模數(shù)轉(zhuǎn)換芯片ADC0832管腳圖</p><p>  1.3.2 ADC0832芯片管腳功能說明:</p><p>  · CS_ 片選使能,低電平芯片使能。</p><p>  · CH0 模擬輸入通道0,或作為IN+/-使用。<

30、;/p><p>  · CH1 模擬輸入通道1,或作為IN+/-使用。</p><p>  · GND 芯片參考0 電位(地)。</p><p>  · DI 數(shù)據(jù)信號(hào)輸入,選擇通道控制。</p><p>  · DO 數(shù)據(jù)信號(hào)輸出,轉(zhuǎn)換數(shù)據(jù)輸出。</p><p>  ·

31、CLK 芯片時(shí)鐘輸入。</p><p>  · Vcc/REF 電源輸入及參考電壓輸入(復(fù)用)。</p><p>  通常情況下ADC0832與有4個(gè)管腳與單片機(jī)相連,分別是CS,CLK,DO,DI。但由于DO端與DI端在通信時(shí)并未同時(shí)有效,所以電路設(shè)計(jì)時(shí)可以將DO端和DI端并聯(lián)在一根線上使用。</p><p>  當(dāng)ADC0832未工作時(shí)CS輸入端應(yīng)為高

32、電平,此時(shí)芯片禁止運(yùn)行,DO,DI和CLK的電平可以處于任意狀態(tài)。當(dāng)CS端保持低電平時(shí),ADC0832進(jìn)行轉(zhuǎn)換工作,CLK輸入時(shí)鐘脈沖信號(hào),DI輸入通道選擇信號(hào),在第一個(gè)時(shí)鐘脈沖下降之前DI必須是高電平,表示啟始信號(hào),在第2,3脈沖下降之前DI端應(yīng)輸入兩位數(shù)據(jù)用于通道的選擇,當(dāng)?shù)?個(gè)脈沖下降之后DI端電平輸入失去作用。這里采用CHO單通道模式,即在第一個(gè)和第二個(gè)CLK脈沖下降后分別在DO輸入‘1’,‘0’兩個(gè)電平。</p>

33、<p>  1.3.3 ADC0832芯片外圍電路</p><p>  圖6 ADC0832芯片外圍電路</p><p>  如上圖所示,AOUT接從MQ-3傳回的模擬電流,經(jīng)ADC083芯片內(nèi)部,同時(shí)在控制芯片內(nèi)的代碼(詳見附錄)控制下,通過改變TXD和T0的電平狀態(tài),從RXD端獲取8位數(shù)字電流送回STC89S52控制芯片。</p><p>  1

34、.4 LCD1602液晶</p><p>  LCD1602字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,目前常用16×1,16×2,20×2和40×2行等的液晶顯示模塊,模塊組件內(nèi)部主要由LCD顯示屏、控制器、列驅(qū)動(dòng)器和偏壓產(chǎn)生電路構(gòu)成[4]。</p><p>  1.4.1 液晶顯示屏引腳</p><p

35、>  圖7 液晶顯示屏引腳示意圖</p><p>  1.4.2 LCD1602液晶引腳功能:</p><p>  第 1 腳:VSS 為地電源。</p><p>  第 2 腳:VDD 接 5V 正電源。</p><p>  第 3 腳:V0 為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,對(duì)比度過高時(shí)會(huì)產(chǎn)生

36、“鬼影”,使用時(shí)可以通過一個(gè) 10K 的電位器調(diào)整對(duì)比度。</p><p>  第 4 腳:RS 為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。</p><p>  第5腳:RW 為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng) RS 和 RW 共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng) RS 為低電平 RW 為高電平時(shí)可以讀忙信號(hào),當(dāng) RS 為高電平 RW 為低電

37、平時(shí)可以寫入數(shù)據(jù)。</p><p>  第6腳:E 端為使能端,當(dāng) E 端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行令。</p><p>  第 7~14 腳:D0~D7 為 8 位雙向數(shù)據(jù)線[5]。</p><p>  1.4.3 LCD1602液晶指令</p><p>  表1 液晶顯示器指令</p><p>  

38、1.4.4 1602液晶顯示器外圍電路</p><p>  圖8 1602液晶顯示器外圍電路 </p><p>  如上圖所示,1602的1腳和6腳都接地,2腳和15腳都接電源7~14腳連接到STC89S52控制芯片的P0口上,4、5、6腳分別連接到STC89S52控制芯片的P2.4、P2.5、P2.6腳上。</p><p><b>  1.5 報(bào)

39、警電路</b></p><p>  本畢業(yè)設(shè)計(jì)采用發(fā)光二極管來做報(bào)警器件。發(fā)光二極管簡(jiǎn)稱為L(zhǎng)ED它是半導(dǎo)體二極管的一種,可以把電能轉(zhuǎn)化成光能;常簡(jiǎn)寫為L(zhǎng)ED。發(fā)光二極管與普通二極管一樣是由一個(gè)PN結(jié)組成,也具有單向?qū)щ娦浴.?dāng)給發(fā)光二極管加上正向電壓后,從P區(qū)注入到N區(qū)的空穴和由N區(qū)注入到P區(qū)的電子,在PN結(jié)附近數(shù)微米內(nèi)分別與N區(qū)的電子和P區(qū)的空穴復(fù)合,產(chǎn)生自發(fā)輻射的熒光。不同的半導(dǎo)體材料中電子和空穴所

40、處的能量狀態(tài)不同。當(dāng)電子和空穴復(fù)合時(shí)釋放出的能量多少不同,釋放出的能量越多,則發(fā)出的光的波長(zhǎng)越短。常用的是發(fā)紅光、綠光或黃光的二極管[6]。發(fā)光二極管的反向擊穿電壓約5伏。它的正向伏安特性曲線很陡,使用時(shí)必須串聯(lián)限流電阻以控制通過管子的電流,以保證發(fā)光二極管能夠正常工作。</p><p>  圖8 發(fā)光二極管外圍電路原理圖</p><p>  發(fā)光二極管正極直接接電源,負(fù)極通過電阻R3連

41、接到控制芯片的P2.0腳,其功能是當(dāng)系統(tǒng)檢測(cè)到酒精濃度低于設(shè)定值時(shí),STC89S52芯片P2.0腳輸出一個(gè)持續(xù)的高電平,發(fā)光二極管熄滅,無報(bào)警信號(hào)。當(dāng)系統(tǒng)檢測(cè)到酒精濃度高于設(shè)定值后,STC89S52芯片P2.0腳輸出一個(gè)持續(xù)的低電平點(diǎn)亮發(fā)光二極管,產(chǎn)生報(bào)警信號(hào)。</p><p><b>  1.6 振蕩器</b></p><p>  振蕩器有多種,比如555定時(shí)器、

42、對(duì)稱式多諧振蕩器,非對(duì)稱式多諧振蕩器、環(huán)行振蕩器等。但在許多應(yīng)用場(chǎng)合下都對(duì)多諧振蕩器的震蕩頻率穩(wěn)定性有嚴(yán)格的要求,例如,在多諧振蕩器作為數(shù)字鐘的脈沖源使用時(shí),它的頻率穩(wěn)定性直接影響著計(jì)時(shí)準(zhǔn)確性。在這種情況下,前面所講的幾種多諧振蕩器電路難以滿足要求,因?yàn)樵谶@些多諧振蕩器中振蕩頻率主要取決于門路電路輸入電壓在充、放電過程中達(dá)到轉(zhuǎn)換電平所需的時(shí)間,所以頻率穩(wěn)定性不可能很高。</p><p>  AT89S52單片機(jī)允

43、許的振蕩晶體可在1.2~24MHz之間選擇,一般11.0592MHz。電容C1、C2的取值對(duì)振動(dòng)頻率輸出的穩(wěn)定性、大小及振蕩電路起振速度有一定的影響,可在20~100pF之間選擇,典型值為30pF。在本次設(shè)計(jì)采用頻率穩(wěn)定性相對(duì)、外圍電路相對(duì)簡(jiǎn)單的石英晶體多諧振蕩器和無極性電容,具體數(shù)值如下,這樣產(chǎn)生的振蕩周期大約1us,大大的方便時(shí)鐘計(jì)數(shù)。</p><p>  圖9 石英晶振外圍電路連接示意圖</p>

44、;<p><b>  軟件設(shè)計(jì)</b></p><p>  2.1 編譯語言的選擇</p><p>  在單片機(jī)的開發(fā)過程中,高級(jí)語言逐漸被引入進(jìn)來。匯編語言的可控性較高級(jí)語言來說更具優(yōu)越性。程序編寫語言比較常見的有C語言、匯編語言、Java語言等。匯編語言的機(jī)器代碼生成效率高,控制性好,但就是移植性不高;Java語言更適合做手機(jī)軟件、網(wǎng)頁小游戲和安全

45、性要求較高的安防軟件。</p><p>  C語言編寫的程序比用匯編編寫的程序更符合人們的思考習(xí)慣。還有很多處理器都支持C編譯器,這樣意味著不懂芯片內(nèi)部結(jié)構(gòu)的程序員也能高效快速的編寫程序。且具有良好的模塊化、容易閱讀、維護(hù)等優(yōu)點(diǎn),且編寫的模塊程序易于移植。經(jīng)C語言和匯編語言的優(yōu)缺點(diǎn)比較,本系統(tǒng)采用C語言來編寫代碼。</p><p>  軟件編寫的主體思路是將系統(tǒng)按功能模塊化劃分,然后根據(jù)模

46、塊要實(shí)現(xiàn)的功能編寫每個(gè)子程序,最后通過主程序調(diào)用外部子程序來實(shí)現(xiàn)本次設(shè)計(jì)的各項(xiàng)要求。</p><p>  2.2 主程序模塊</p><p>  主程序的功能:與硬件相結(jié)合實(shí)現(xiàn)酒精濃度測(cè)試系統(tǒng)的各個(gè)功能。主要是檢測(cè)與顯示,讀按鍵值,門限調(diào)整與報(bào)警,檢測(cè)數(shù)據(jù)顯示功能子函數(shù)的調(diào)用。</p><p>  圖10 主程序流程</p><p>  

47、程序從宏定義int、char型變量開始,定義K0、K1、K2、K3分別為系統(tǒng)開始測(cè)試按鍵、酒精濃度上限值設(shè)定按鍵、上限加按鍵、上限減按鍵和定義P2.0口為光線報(bào)警口,然后定義要在液晶上顯示的字符串,接著聲明整個(gè)系統(tǒng)要用到的函數(shù),隨后進(jìn)入主程序設(shè)定初始酒精上限濃度,初始化LCD1602,延時(shí)3S以便于系統(tǒng)正常運(yùn)行,之后用相應(yīng)函數(shù)顯示要顯示的字符和數(shù)字,最后進(jìn)入按鍵檢測(cè)狀態(tài)。</p><p>  2.3 A/D轉(zhuǎn)換

48、模塊</p><p>  (1)模數(shù)轉(zhuǎn)換模塊的主要功能就是將MQ-3傳回的模擬電壓信號(hào)轉(zhuǎn)化為單片機(jī)能夠處理的數(shù)字信號(hào),并傳送給STC89S52單片機(jī)中。</p><p>  圖11 ADC0832轉(zhuǎn)換的流程</p><p>  定義芯片各個(gè)管腳拉低CS端電平,拉高CLK的電平啟動(dòng)A/D轉(zhuǎn)換芯片,執(zhí)行兩個(gè)空指令后拉低CLK形成第一個(gè),重復(fù)CLK信號(hào)的電平拉高拉低,在

49、第2、3個(gè)CLK下降沿前分別DI等于“1”、“0”選通A/D轉(zhuǎn)換芯片的CH0通道,并在第3個(gè)CLK下降沿后DI等于1,使控制命令結(jié)束,緊跟著兩個(gè)for語句接收數(shù)據(jù),接收完后對(duì)比兩個(gè)接收到的數(shù)據(jù),完全正確就通過return函數(shù)返回?cái)?shù)據(jù)。</p><p>  2.4 按鍵輸入模塊</p><p>  (1)按鍵是實(shí)現(xiàn)人機(jī)對(duì)話的一個(gè)控制按鈕,通過按鍵的操作,對(duì)系統(tǒng)進(jìn)行發(fā)送操作指令,經(jīng)單片機(jī)內(nèi)部

50、儲(chǔ)存的代碼處理后,然后在LCD1602液晶上顯示。</p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p>&l

51、t;b>  Y</b></p><p>  圖12 按鍵查詢式的流程圖</p><p>  進(jìn)入按鍵檢測(cè)程序后運(yùn)行一個(gè)控指令進(jìn)行延時(shí),如果沒有按鍵按下,則一直循環(huán)控指令循環(huán)同時(shí)檢測(cè)是否按鍵按下,如果有按鍵按下,則跳到所按按鍵對(duì)應(yīng)的程序,執(zhí)行完該按鍵的程序后立即跳出if語句回到while循環(huán)語句繼續(xù)進(jìn)行死循環(huán)。</p><p>  2.5 液晶顯

52、示輸出模塊</p><p>  LCD1602模塊在本系統(tǒng)中主要起著開界面日期和英文姓名,學(xué)號(hào)顯示,和采集回來酒精濃度的顯示。</p><p>  圖13 液晶顯示流程圖</p><p>  液晶顯示D0到D7口接P0.0到 P0.7,單獨(dú)使用一個(gè)口,為了方便代碼的編寫和降低電平間的干擾,由于P0口沒有上拉電阻,所以加了一個(gè)排阻進(jìn)行電壓的擴(kuò)大,用以。通常我們說P0

53、口需要接上拉電阻才能正常工作,是因?yàn)槠鋬?nèi)部結(jié)構(gòu)與其他三個(gè)端口存在差別,沒有上拉電阻的緣故,所以如果不接上拉電阻,P0口的狀態(tài)就不會(huì)得到預(yù)期的結(jié)果,或許是某個(gè)中間電壓的值,而不是高電平的5V或者低電平的0V。</p><p><b>  3 調(diào)試和結(jié)果</b></p><p>  根據(jù)各個(gè)模塊功能的設(shè)計(jì)和繪制的整體電路圖,找到各功能模塊的連接點(diǎn)。按照設(shè)計(jì)的步驟,并對(duì)照

54、總電路圖,仔細(xì)連接電路。電路的連接順序是,先連接好各個(gè)模塊,在調(diào)試檢查正確的前提下接通總電源。 </p><p>  打開Keil軟件,新建一個(gè)工程,在這個(gè)工程下新建一個(gè)C記事本,并在記事本上編寫C程序和保存該程序,點(diǎn)擊軟件上方“Output”按鈕,在輸出HEX前面打鉤,保存設(shè)置。單擊軟件左上方“編譯”按鈕,就可以在新建的工程里面的到一個(gè)HEX文件。</p><p>  把電路連

55、接好并將調(diào)試程序代碼HEX文件通過progisp軟件燒寫到STC89S52單片機(jī)上后,接上+5V電源開始調(diào)試。先把氣體傳感器探頭用一個(gè)阻值為50kΩ的定位器替代,復(fù)位單片機(jī),觀察LCD1602液晶上的顯示數(shù)據(jù)。用萬用表測(cè)量采樣點(diǎn)的電壓值,看用萬用表測(cè)得的電壓值與LCD1602液晶上顯示數(shù)據(jù)是否存在線性關(guān)系。因?yàn)楦鲗?dǎo)線和元器件對(duì)電壓電流的影響,LCD1602液晶顯示的數(shù)據(jù)與萬用表測(cè)得的數(shù)據(jù)存在一定的偏差,但在可接受的范圍內(nèi)。調(diào)節(jié)電位器,觀

56、察LCD1602液晶上數(shù)據(jù)顯示的變化,同樣用萬用表測(cè)量電壓值作比較。測(cè)量數(shù)據(jù)與LCD1602液晶上顯示數(shù)據(jù)基本吻合,說明除感應(yīng)器部分外其它部分連接正確。然后,再把電位器阻值從0開始逐漸調(diào)大,在每過一個(gè)0.02V電壓后觀察到LCD1602液晶上數(shù)字發(fā)生電話,說明LCD1602液晶顯示換算正確。</p><p>  調(diào)試電路其他功能模塊正確后,將預(yù)熱足夠長(zhǎng)時(shí)間能正常工作的氣體傳感器MQ-3感應(yīng)器模塊換上原來50kΩ的

57、電阻。準(zhǔn)備好若干個(gè)不同濃度的酒精氣體樣品,檢測(cè)氣體傳感器是否能正常工作。當(dāng)把不同濃度的酒精溶液樣品靠接氣敏傳感器時(shí),各自對(duì)應(yīng)一個(gè)不同的數(shù)據(jù)顯示,說明整體電路已經(jīng)完全正確。 </p><p>  本次設(shè)計(jì)與制作的酒精濃度檢測(cè)系統(tǒng),通過設(shè)計(jì)相關(guān)的硬件電路及進(jìn)行相應(yīng)的軟件調(diào)試,最后實(shí)現(xiàn)了實(shí)時(shí)檢測(cè)酒精濃度,并能實(shí)時(shí)在LCD1602液晶顯示屏上顯示的目的。設(shè)計(jì)出的硬件電路,基本符合本次畢業(yè)設(shè)計(jì)的設(shè)計(jì)要求,通過按鍵

58、可以實(shí)現(xiàn)調(diào)整門限值,當(dāng)系統(tǒng)檢測(cè)到的酒精濃度高于設(shè)定的酒精濃度門限值時(shí),系統(tǒng)會(huì)自動(dòng)啟動(dòng)光線報(bào)警功能,并且在LCD1602液晶顯示屏上顯示當(dāng)前酒精濃度。但有些不足:(1)由于酒精感應(yīng)器不是集成塊,是買回感應(yīng)頭自己做的電路,對(duì)于電路中所用到的兩個(gè)電阻具體數(shù)值不是很精確,導(dǎo)致感應(yīng)系統(tǒng)在沒有酒精蒸汽的空氣中也顯示有較小的數(shù)值在LCD1602液晶顯示屏上,最后通過對(duì)代碼的修改,把小于3的數(shù)字直接視為0處理,這樣就不會(huì)出現(xiàn)上面的情況了;(2)由于酒精

59、感應(yīng)器本身硬件問題,感應(yīng)和消退時(shí)間有點(diǎn)長(zhǎng)。</p><p><b>  4 心得體會(huì)</b></p><p>  通過本次畢業(yè)設(shè)計(jì),讓我重新系統(tǒng)復(fù)習(xí)了數(shù)字電子技術(shù)基礎(chǔ)與單片機(jī)方面的知識(shí),收獲頗豐。</p><p>  在做板的過程中要非常小心,因?yàn)樘挤鄞蛴C(jī)打印出來的電路可能會(huì)有某個(gè)地方斷開的,這就要你在燙板后小心的拿油性筆仔細(xì)描畫一下,然后

60、腐蝕之前還要把在燙板時(shí)附著在板上的膠紙用橡皮細(xì)心的除掉。硬件調(diào)試過程是相對(duì)繁鎖的,要特別注意以下幾點(diǎn)。首先,通電之后看AT89S51晶振是否起振,晶振起振后是標(biāo)準(zhǔn)的正弦波,示波器測(cè)得其頻率為11.0592MHz;其次,看酒精感應(yīng)器是否有數(shù)據(jù)傳回;最后,硬件電路的設(shè)計(jì)既要追求實(shí)際功能的實(shí)現(xiàn),也要考慮元器件的購買方便。</p><p>  在本次畢業(yè)設(shè)計(jì)中學(xué)到的知識(shí),我會(huì)將它們發(fā)揮到其它的學(xué)習(xí)中去,也將會(huì)在今后的工作

61、學(xué)習(xí)中不斷的提高和完善;而在此期間發(fā)現(xiàn)的不足,我將努力改善,通過學(xué)習(xí)實(shí)踐等方式不斷提高,克服那些知識(shí)障礙,以求在今后的工作學(xué)習(xí)過程中獲得更大的進(jìn)步。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 張洪潤(rùn)等.單片機(jī)應(yīng)用設(shè)計(jì)200例[M].北京:北京航空航天大學(xué)出版社,2006.</p><p>  [2] 公茂法等.單

62、片機(jī)人機(jī)接口實(shí)例集[M].北京:北京航空航天大學(xué)出版社,1997.</p><p>  [3] 閻石.數(shù)字電子技術(shù)基礎(chǔ)[M].北京:高等教育出版社,2002. </p><p>  [4] 姜志海、黃玉清、劉連鑫.單片機(jī)原理及應(yīng)用(第二版)[M].北京:電子工業(yè)出版社,2009.</p><p>  [5] 先鋒工作室.單片機(jī)程序設(shè)計(jì)實(shí)例[M]北京:清華大學(xué)出版社,

63、2003.</p><p>  [6] 趙亮、侯國(guó)銳.單片機(jī)C語言編程與實(shí)例[M].北京:人民郵電出版社,2003.</p><p>  [7] 朱定華、戴汝平.單片微機(jī)原理與應(yīng)用[M].北京:清華大學(xué)出版社,2003. </p><p>  [8] 胡乾斌、李光斌、李玲.單片微型計(jì)算機(jī)原理與應(yīng)用[M].武漢:華中科技大學(xué)出版社,200

64、2. </p><p>  [9] 胡漢才.單片機(jī)原理與借口技術(shù)[M].北京:清華大學(xué)出版社,2004. </p><p><b>  附 錄</b></p><p>  圖14 硬件電路部分原理圖</p><p>  圖15 硬件電路部分原理圖</p><p>

65、;  圖16 控制電路PCB圖</p><p>  圖17 檢測(cè)電路PCB圖</p><p>  圖18 酒精濃度測(cè)試儀實(shí)物圖</p><p><b>  部分程序清單</b></p><p>  主程序 main.c</p><p>  #include<reg52.h><

66、;/p><p>  #include<intrins.h></p><p>  /*******************宏定義**********************/ </p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p&

67、gt;<p>  sbit k0=P1^0; //start the system</p><p>  sbit k1=P1^1; //setup the stand_value</p><p>  sbit k2=P1^2; //the stand_value up</p><p>  sbit k3=P1^3; //the stand_v

68、alue down</p><p>  sbit alarm=P2^0; //the alarm port</p><p>  /*************************變量及字符串的定義*************************/</p><p>  uchar LCD_Char[]="0123456789ABCDEF-."

69、;</p><p>  uchar LCD_string0[]="welcome to guet";</p><p>  uchar LCD_string1[]="102021226";</p><p>  uchar M_Time[]="2011--9--8";// show time</p>

70、;<p>  uchar M_Detect[]="Detect:"; //檢測(cè) </p><p>  uchar M_Detect1[]="Alcohol:"; </p><p>  uchar M_Detect2[]="set_val:"; </p><p>  //uchar

71、 M_time1[]={"Time"}; //時(shí)間</p><p>  //uchar M_Storage[]={"Storage"}; //memory</p><p>  uint data_temp=0;</p><p>  uint flag=0;</p><p>  /**

72、*****************函數(shù)聲明**********************/ </p><p>  extern void initial_lcd1602(void); </p><p>  extern void Display_List_Char(uchar x,uchar y,uchar *str); //the extern have no mean

73、,only to explain the function is in the other file</p><p>  extern void write_lcd_command( uchar write_data); //the function of write command</p><p>  extern void

74、 Display_One_Char(uchar x,uchar y,uchar dat); </p><p>  extern void write_lcd_command( uchar write_data); </p><p>  extern void xs_int(unsigned int shuju,bit t); </p><p>  extern

75、 unsigned char ADconv(void);</p><p>  extern void display(unsigned int shuju,bit t);</p><p>  /*******************子函數(shù)**********************/ </p><p>  void delay_ms(uint n)</p&g

76、t;<p>  { uint i,j; //delay 10ms</p><p>  for(i=n;i>0;i--)</p><p><b>  {</b></p><p>  for(j=1200;j>0;j--) </p><p><b>  {</

77、b></p><p>  _nop_(); </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /******************主函數(shù)********

78、**************/ </p><p>  void main()</p><p><b>  {</b></p><p>  uint set_value=200; //is mean 20.0mg/ml alcohol drive is 20.0mg/100ml=0.2mg/ml</p><p

79、>  uchar data_char=0;</p><p>  initial_lcd1602();</p><p>  delay_ms(100);</p><p>  Display_List_Char(0,0,LCD_string0); //welcome </p><p>  delay_ms

80、(100); //delay 3s</p><p>  Display_List_Char(1,0,LCD_string1); //welcome </p><p>  delay_ms(300);</p><p>  write_lcd_command(0x01); //c

81、lean screen </p><p>  Display_List_Char(0,0,M_Time); //show time </p><p>  delay_ms(30);</p><p>  Display_List_Char(0,0,M_Time); //show t

82、ime </p><p>  delay_ms(100);</p><p>  Display_List_Char(1,0,M_Detect); //show detect interface</p><p>  delay_ms(100);</p><p>  // Display_List_Char(1,0,M_Det

83、ect); //show detect interface</p><p>  // delay_ms(300);</p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  _nop_();</b>

84、;</p><p>  if(k0==0||k1==0||k2==0||k3==0)</p><p><b>  {</b></p><p><b>  if(k0==0)</b></p><p><b>  { </b></p><p><b&g

85、t;  flag=0;</b></p><p>  Display_List_Char(1,0,M_Detect1); //show detect interface</p><p>  delay_ms(50);</p><p>  data_char= Adc0832 (0);</p><p>  data_temp

86、=data_char;</p><p>  delay_ms(10);</p><p>  xs_int(data_temp,1);</p><p>  delay_ms(10);</p><p>  if(data_temp>=set_value)</p><p><b>  {</b>&

87、lt;/p><p><b>  alarm=0;</b></p><p><b>  }</b></p><p>  else { alarm=1;}</p><p><b>  }</b></p><p><b>  if(k1==0)<

88、/b></p><p><b>  {</b></p><p>  Display_List_Char(1,0,M_Detect2); </p><p>  xs_int(set_value,1);</p><p><b>  flag=1;</b></p><p>&

89、lt;b>  }</b></p><p>  if(k2==0&&flag==1)</p><p><b>  {</b></p><p>  delay_ms(10);</p><p><b>  if(k2==0)</b></p><p>

90、;<b>  { </b></p><p>  set_value=set_value+10;</p><p>  xs_int(set_value,1); </p><p><b>  }</b></p><p>  delay_ms(50);</p><p><b&

91、gt;  }</b></p><p>  if(k3==0&&flag==1)</p><p><b>  {</b></p><p>  delay_ms(10);</p><p><b>  if(k3==0)</b></p><p><

92、b>  {</b></p><p>  set_value=set_value-10;</p><p>  xs_int(set_value,1); </p><p><b>  }</b></p><p>  delay_ms(50);</p><p><b>  }

93、</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  顯示程序 LCD1602.c</p><p>  #include<reg52.h&g

94、t;</p><p>  #include<string.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int </p><p>  #define LCDPORT P0</p><p>  sbit RS=

95、P2^5;//RS數(shù)據(jù)命令選擇端,高電平數(shù)據(jù),低電平命令</p><p>  sbit RW=P2^6;//RW讀寫選擇端,高電平讀操作,低電平寫操作</p><p>  sbit EN=P2^7;//EN使能控制端,E高電平跳變?yōu)榈碗娖綍r(shí)LCD執(zhí)行命令</p><p>  /*****************************

96、*LCD1602驅(qū)動(dòng)程序*************************************/</p><p>  void lcd_delay(uchar delaytime)</p><p><b>  {</b></p><p>  while(delaytime)delaytime--;</p><p>&

97、lt;b>  }</b></p><p>  void write_lcd_command(uchar write_command)</p><p><b>  {</b></p><p>  lcd_delay(40);</p><p><b>  RS=0;</b></p

98、><p><b>  RW=0;</b></p><p>  LCDPORT=write_command;</p><p><b>  EN=1;</b></p><p><b>  EN=0;</b></p><p><b>  }</b&

99、gt;</p><p>  void write_lcd_data(uchar write_data)</p><p><b>  {</b></p><p>  lcd_delay(40);</p><p><b>  RS=1;</b></p><p><b>

100、  RW=0;</b></p><p>  LCDPORT=write_data;</p><p><b>  EN=1;</b></p><p><b>  EN=0;</b></p><p><b>  }</b></p><p>  v

101、oid Display_One_Char( uchar x,uchar y,uchar dat) //x表示行,y表示列</p><p><b>  {</b></p><p><b>  switch(x)</b></p><p><b>  {</b></p><p>&l

102、t;b>  case 0:</b></p><p>  write_lcd_command(0x80+y);</p><p><b>  break;</b></p><p><b>  case 1:</b></p><p>  write_lcd_command(0xc0+y)

103、;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  write_lcd_data(dat); </p><p><b>  } </b></p><p>  void Display_Li

104、st_Char(uchar x,uchar y,uchar *str)</p><p><b>  {</b></p><p>  /*switch(x)</p><p><b>  {</b></p><p><b>  case 0:</b></p><

105、;p>  write_lcd_command(0x80+y);</p><p><b>  break;</b></p><p><b>  case 1:</b></p><p>  write_lcd_command(0xc0+y);</p><p><b>  break;&l

106、t;/b></p><p><b>  }</b></p><p>  while (*str!='\0')</p><p><b>  {</b></p><p>  write_lcd_data(*str);</p><p><b>  s

107、tr++;</b></p><p><b>  }</b></p><p><b>  */</b></p><p>  while (*str!='\0')</p><p><b>  {</b></p><p>  Dis

108、play_One_Char(x,y,*str);</p><p><b>  str++;</b></p><p><b>  y++;</b></p><p><b>  if(y==16)</b></p><p>  { //若y等于16,進(jìn)入if語句&

109、lt;/p><p>  y=0;x^=1; // y賦0,x與1按位異或取反</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void display(

110、unsigned int shuju,bit t) //顯示一個(gè)數(shù)字</p><p>  {unsigned int huancun[6]={0};</p><p>  unsigned char biaozhi=0,i;</p><p>  if (shuju < 10) biaozhi = 1;</p><p>  else

111、 if(shuju < 100) biaozhi = 2;</p><p>  else if(shuju < 1000) biaozhi = 3;</p><p>  else if(shuju < 10000) biaozhi = 4;</p><p>  else if(shuju <=65535) biaozhi = 5;</p

112、><p>  switch(biaozhi)</p><p>  {case 5:huancun[5] = shuju/10000; </p><p>  case 4:huancun[4] = shuju%10000/1000;</p><p>  case 3:huancun[3] = shuju%1000/100;</p>&

113、lt;p>  case 2:huancun[2] = shuju%100/10;</p><p>  case 1:huancun[1] = shuju%10; </p><p><b>  break;</b></p><p>  default:break;</p><p><b>  }</b

114、></p><p>  for(i=6;i>1;i--)</p><p><b>  {</b></p><p>  Display_One_Char(t,15-i,0x30+huancun[i-1]);</p><p><b>  } </b></p><p>

115、  Display_One_Char(t,14,'*');</p><p>  Display_One_Char(t,15,'g'); </p><p><b>  } </b></p><p>  void initial_lcd1602(void) //初始化LCD1602</p>

116、<p><b>  {</b></p><p><b>  uchar i;</b></p><p><b>  EN=0;</b></p><p>  for(i=200;i>0;i--)</p><p>  lcd_delay(248);</p>

117、<p>  write_lcd_command(0x38);//0x38命令,雙行顯示,顯示5x7的點(diǎn)陣字符</p><p>  for(i=4;i>0;i--)</p><p>  lcd_delay(248);</p><p>  write_lcd_command(0x38);//再寫一次0x38命令,雙行顯示,顯示5x7的

118、點(diǎn)陣字符</p><p>  for(i=4;i>0;i--)</p><p>  lcd_delay(248);</p><p>  write_lcd_command(0x0c); //無光標(biāo),不閃爍</p><p>  for(i=4;i>0;i--)</p><p>  lcd_de

119、lay(248);</p><p>  write_lcd_command(0x06); //光標(biāo)右移,文字不移動(dòng)</p><p>  for(i=4;i>0;i--)</p><p>  lcd_delay(248);</p><p>  write_lcd_command(0x01);//清屏</p>

120、<p>  for(i=4;i>0;i--)</p><p>  lcd_delay(248);//[5]</p><p><b>  }</b></p><p>  /*A/D轉(zhuǎn)換程序AD0832.c*/</p><p>  #include<reg52.h></p>&

121、lt;p>  #include <intrins.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit ADCLK = P3^4; /* AD時(shí)鐘信號(hào) */</p><p&

122、gt;  sbit ADCS = P3^1; /* AD片選信號(hào) */</p><p>  sbit ADD0 = P3^0; /* 數(shù)據(jù)輸入 */</p><p>  sbit ADDI = P3^0; /* 數(shù)據(jù)輸出 */</p><p>  uchar adc_result = 0;

123、 /* AD計(jì)算結(jié)果 */</p><p>  /* 讀取AD輸出的8bit數(shù)據(jù) */</p><p>  uchar Adc0832(unsigned char channel) //AD轉(zhuǎn)換,返回結(jié)果</p><p><b>  {</b></p><p>  uchar i=0;</p&g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論