版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p><b> 目錄1</b></p><p><b> 1. 實(shí)驗(yàn)任務(wù)2</b></p><p><b> 2.設(shè)計(jì)方案2</b></p><p><b> 2.1硬件設(shè)計(jì)2
2、</b></p><p> 2.1.1 MCU微控制單元2</p><p> 2.1.2 MQ-3酒精傳感器4</p><p> 2.1.3 TLC549模數(shù)轉(zhuǎn)換5</p><p> 2.1.4 LCD1602液晶顯示5</p><p><b> 2.2軟件設(shè)計(jì)6<
3、;/b></p><p> 2.2.1 編譯語(yǔ)言的選擇6</p><p> 2.2.2 主程序模塊6</p><p> 2.2.3 A/D轉(zhuǎn)換模塊6</p><p> 2.2.4 按鍵輸入模塊7</p><p> 2.2.5 液晶顯示輸出模塊8</p><p><
4、;b> 3.實(shí)驗(yàn)結(jié)果9</b></p><p><b> 4.心得體會(huì)9</b></p><p><b> 附錄10</b></p><p> 附錄1 參考文獻(xiàn)10</p><p> 附錄2 硬件電路原理圖12</p><p> 附
5、錄3 硬件電路PCB圖14</p><p> 附錄4 程序清單15</p><p><b> 1. 實(shí)驗(yàn)任務(wù)</b></p><p> 設(shè)計(jì)一個(gè)基于單片機(jī)的酒精濃度檢測(cè)系統(tǒng),檢測(cè)結(jié)果用LED或LCD顯示器顯示?;赟TC89C52單片機(jī),MQ-3酒精濃度傳感器,本設(shè)計(jì)設(shè)計(jì)一種具有檢測(cè)及超限報(bào)警功能的酒精濃度測(cè)試系統(tǒng)。</p&
6、gt;<p><b> 2.設(shè)計(jì)方案</b></p><p><b> 2.1硬件設(shè)計(jì)</b></p><p> 由于本次設(shè)計(jì)需要用到單片機(jī),來(lái)完成對(duì)酒精濃度的檢測(cè),分析了網(wǎng)上的相似課題,有很多是用酒精濃度傳感器MQ-3來(lái)完成酒精濃度檢測(cè)系統(tǒng)的設(shè)計(jì)。鑒于本次時(shí)間限制,本次設(shè)計(jì)中采用的是STC89S52單片機(jī)來(lái)控制整個(gè)電路,電路
7、中采用的是LCD1602來(lái)顯示實(shí)驗(yàn)實(shí)時(shí)數(shù)據(jù)。A/D芯片的選擇中,用到的是TI公司生產(chǎn)的TLC549,主要是這塊芯片的性能優(yōu)良,時(shí)序操作簡(jiǎn)單,能很好的解決本次設(shè)計(jì)中對(duì)實(shí)時(shí)數(shù)據(jù)轉(zhuǎn)換的要求。系統(tǒng)結(jié)構(gòu)框圖如圖1所示:</p><p><b> 圖1 系統(tǒng)結(jié)構(gòu)框圖</b></p><p> 2.1.1微控制單元STC89C52</p><p> 基
8、于本系統(tǒng)設(shè)計(jì)內(nèi)容的需要,綜合考慮后,我們選擇STC89C52單片機(jī)為控制核心。主要基于考慮STC89C52是低功耗,超低價(jià),高速,高可靠,強(qiáng)抗靜電,強(qiáng)抗干擾,功能強(qiáng)大的單片機(jī)。</p><p> STC89C52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2個(gè)讀寫(xiě)口線,片內(nèi)振蕩器及時(shí)鐘電路。同時(shí)STC89C52可降至0Hz的靜態(tài)邏
9、輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其他所有部件工作直到下一個(gè)硬件復(fù)位。其將通用的微處理器和Flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫(xiě)的Flash存儲(chǔ)器可有效地降低開(kāi)發(fā)本。STC單片機(jī)有PDIP、PQFP/TQFP及PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。</p><p&
10、gt; STC89C52單片機(jī)引腳如圖2:</p><p> 圖2 STC89C52引腳圖</p><p><b> ?Vcc:電源電壓</b></p><p><b> ?GND:地</b></p><p> ?P0口:P0口是一組8位漏極開(kāi)路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。
11、</p><p> ?P1口:P1是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)電路。</p><p> ?P2口:P2是一個(gè)帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級(jí)可驅(qū)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)電路。</p><p> ?P3口:P3口時(shí)一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩
12、沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)電路。</p><p> ?RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。</p><p> ?ALE :當(dāng)訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。<
13、/p><p> ? :程序儲(chǔ)存允許( )輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)89C5X單片機(jī)由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次 有效,即輸出兩個(gè)脈沖。在次期間,當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,將跳過(guò)兩次 信號(hào)。</p><p> ? /VPP:外部訪問(wèn)允許。欲使CPU僅訪問(wèn)外部程序存儲(chǔ)器(地址為0000H-FFFH), 端必須保持低電平(接地)。</p>&l
14、t;p> ?XTAL1:振蕩器反相放大器及內(nèi)部時(shí)鐘發(fā)生器的輸入端。</p><p> ?XTAL2:振蕩器反相放大器的輸出端</p><p> 2.1.2 MQ-3酒精傳感器</p><p> MQ-3酒精傳感器對(duì)乙醇蒸氣有很高的靈敏度,并且響應(yīng)和恢復(fù)快速。另外,MQ-3酒精傳感器簡(jiǎn)單的驅(qū)動(dòng)回路和可靠的穩(wěn)定性是相比較于其他型號(hào)傳感器的優(yōu)點(diǎn)。MQ-3酒
15、精傳感器可用于機(jī)動(dòng)車(chē)駕駛?cè)藛T及其他嚴(yán)禁酒后作業(yè)人員的現(xiàn)場(chǎng)檢測(cè),也可用于其他場(chǎng)所乙醇蒸氣的檢測(cè)。</p><p> MQ-3酒精傳感器有6只針狀管腳,其中4個(gè)管腳(兩個(gè)A和兩個(gè)B)用于信號(hào)讀取,兩個(gè)H腳用于提供加熱電流。電路圖如下圖3:</p><p> 圖3 MQ-3傳感器電路原理圖</p><p> 2.1.3 TLC549模數(shù)轉(zhuǎn)換</p>
16、<p> TLC549是 TI公司生產(chǎn)的一種低價(jià)位、高性能的8位 A/D轉(zhuǎn)換器,它以8位開(kāi)關(guān)電容逐次逼近的方法實(shí)現(xiàn) A/D轉(zhuǎn)換,其轉(zhuǎn)換速度小于 17us,最大轉(zhuǎn)換速率為 40000HZ,4MHZ典型內(nèi)部系統(tǒng)時(shí)鐘,電源為 3V至 6V。它能方便地采用三線串行接口方式與各種微處理器連接,構(gòu)成各種廉價(jià)的測(cè)控應(yīng)用系統(tǒng)。TLC549有8引腳,為雙列直插是封裝,起相應(yīng)引腳功能如下:</p><p> REF+
17、:正基準(zhǔn)電壓輸入 2.5V≤REF+≤Vcc+0.1。 </p><p> REF-:負(fù)基準(zhǔn)電壓輸入端,-0.1V≤REF-≤2.5V。且要求:(REF+)-(REF-)≥1V。 </p><p> VCC:系統(tǒng)電源3V≤Vcc≤6V。 </p><p><b> GND:接地端。 </b></p><p> ?。?/p>
18、芯片選擇輸入端,要求輸入高電平 VIN≥2V,輸入低電平 VIN≤0.8V。 </p><p> DATA OUT:轉(zhuǎn)換結(jié)果數(shù)據(jù)串行輸出端,與 TTL 電平兼容,輸出時(shí)高位在前,低位在后。 </p><p> ANALOGIN:模擬信號(hào)輸入端,0≤ANALOGIN≤Vcc,當(dāng) ANALOGIN≥REF+電壓時(shí),轉(zhuǎn)換結(jié)果為全“1”(0FFH),ANALOGIN≤REF-電壓時(shí),轉(zhuǎn)換結(jié)果為
19、全“0”(00H)。 </p><p> I/O CLOCK:外接輸入/輸出時(shí)鐘輸入端,同于同步芯片的輸入輸出操作,無(wú)需與芯片內(nèi)部系統(tǒng)時(shí)鐘同步。</p><p> 在實(shí)際使用過(guò)程中,起時(shí)序圖如圖4所示。</p><p> 圖4 TLC549時(shí)序圖</p><p> 2.1.4 LCD1602液晶顯示</p><
20、p> LCD1602字符型液晶顯示模塊是一種專(zhuān)門(mén)用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,目前常用16×1,16×2,20×2和40×2行等的液晶顯示模塊,模塊組件內(nèi)部主要由LCD顯示屏、控制器、列驅(qū)動(dòng)器和偏壓產(chǎn)生電路構(gòu)成。</p><p><b> 2.2軟件設(shè)計(jì)</b></p><p> 2.2.1 編譯語(yǔ)言的選擇
21、</p><p> 對(duì)于單片機(jī)的開(kāi)發(fā)應(yīng)用中,逐漸引入了高級(jí)語(yǔ)言,C語(yǔ)言就是其中的一種。匯編語(yǔ)言的可控性較高級(jí)語(yǔ)言來(lái)說(shuō)更具優(yōu)越性。程序編寫(xiě)語(yǔ)言比較常見(jiàn)的有C語(yǔ)言、匯編語(yǔ)言。匯編語(yǔ)言的機(jī)器代碼生成效率高,控制性好,但就是移植性不高。</p><p> C語(yǔ)言編寫(xiě)的程序比用匯編編寫(xiě)的程序更符合人們的思考習(xí)慣。還有很多處理器都支持C編譯器,這樣意味著處理器也能很快上手。且具有良好的模塊化、容易
22、閱讀、維護(hù)等優(yōu)點(diǎn),且編寫(xiě)的模塊程序易于移植?;贑語(yǔ)言和匯編語(yǔ)言的優(yōu)缺點(diǎn),本系統(tǒng)采用C語(yǔ)言編寫(xiě)方法。</p><p> 軟件編寫(xiě)的主體思路是將系統(tǒng)按功能模塊化劃分,然后根據(jù)模塊要實(shí)現(xiàn)的功能寫(xiě)各個(gè)子程序。整個(gè)軟件程序的編寫(xiě)采用查詢(xún)式方式編寫(xiě)的。</p><p> 2.2.2 主程序模塊</p><p> 主程序?qū)崿F(xiàn)的功能:與硬件相結(jié)合實(shí)現(xiàn)酒精濃度檢測(cè)系統(tǒng)的各個(gè)功
23、能。主要是檢測(cè)與顯示,門(mén)限調(diào)整與顯示,檢測(cè)數(shù)據(jù)顯示功能子函數(shù)的調(diào)用。見(jiàn)圖5</p><p> 圖5 主程序流程圖</p><p> 2.2.3 A/D轉(zhuǎn)換模塊</p><p> (1)模數(shù)轉(zhuǎn)換模塊的主要功能就是將經(jīng)放大器放大的模擬電壓信號(hào)轉(zhuǎn)化為MCU能夠處理的數(shù)字信號(hào),并傳送給MCU。</p><p> (2)TLC549轉(zhuǎn)換的流程
24、圖見(jiàn)下圖6</p><p> 圖 6 數(shù)轉(zhuǎn)換流程圖</p><p> 當(dāng)變?yōu)榈碗娖胶螅?TLC549芯片被選中, 同時(shí)前次轉(zhuǎn)換結(jié)果的最高有效位MSB (A7)自 DATA OUT 端輸出,接著要求自 I/O CLOCK 端輸入8個(gè)外部時(shí)鐘信號(hào),前7個(gè) I/O CLOCK信號(hào)的作用,是配合 TLC549 輸出前次轉(zhuǎn)換結(jié)果的 A6-A0 位,并為本次轉(zhuǎn)換做準(zhǔn)備:在第4個(gè) I/O CLOC
25、K 信號(hào)由高至低的跳變之后,片內(nèi)采樣/保持電路對(duì)輸入模擬量采樣開(kāi)始,第8個(gè) I/O CLOCK 信號(hào)的下降沿使片內(nèi)采樣/保持電路進(jìn)入保持狀態(tài)并啟動(dòng) A/D開(kāi)始轉(zhuǎn)換。轉(zhuǎn)換時(shí)間為 36 個(gè)系統(tǒng)時(shí)鐘周期,最大為 17us。直到 A/D轉(zhuǎn)換完成前的這段時(shí)間內(nèi),TLC549 的控制邏輯要求:或者保持高電平,或者 I/O CLOCK 時(shí)鐘端保持36個(gè)系統(tǒng)時(shí)鐘周期的低電平。由此可見(jiàn),在自 TLC549的 I/O CLOCK 端輸入8個(gè)外部時(shí)鐘信號(hào)期間
26、需要完成以下工作:讀入前次A/D轉(zhuǎn)換結(jié)果;對(duì)本次轉(zhuǎn)換的輸入模擬信號(hào)采樣并保持;啟動(dòng)本次 A/D轉(zhuǎn)換開(kāi)始。</p><p> 2.2.4 按鍵輸入模塊</p><p> (1)按鍵時(shí)顯現(xiàn)人機(jī)對(duì)話(huà)的一個(gè)控制按鈕,通過(guò)按鍵的操作,對(duì)系統(tǒng)進(jìn)行發(fā)送操作指令,后經(jīng)與MCU串行通信,然后在液晶上顯示。</p><p> (2)按鍵查詢(xún)式的流程圖見(jiàn)下圖7:</p>
27、<p> 圖 7 按鍵查詢(xún)式的流程圖</p><p> 按鍵的四個(gè)鍵分別接P1.0,P1.1,P1.2,P1.3,由于P1口具有上拉電阻,所以不再需要加上拉電阻進(jìn)行電壓的放大。</p><p> 2.2.5 液晶顯示輸出模塊</p><p> LCD1602模塊在本系統(tǒng)中主要起著開(kāi)界面數(shù)字顯示,以及各控制效果的顯示。采用直接訪問(wèn)方式。液晶顯示
28、的操作流程圖見(jiàn)下圖8:</p><p> 圖8 液晶顯示的操作流程圖</p><p> 液晶顯示D0到D7口接P0.0到 P0.7,單獨(dú)使用一個(gè)口,為了避免數(shù)據(jù)的干擾,由于P0口沒(méi)有上拉電阻,所以需要一個(gè)排阻進(jìn)行電壓的擴(kuò)大.</p><p><b> 3.實(shí)驗(yàn)結(jié)果</b></p><p> 本次設(shè)計(jì)的酒精濃度檢測(cè)
29、系統(tǒng),通過(guò)設(shè)計(jì)相關(guān)的硬件電路及進(jìn)行相應(yīng)的軟件調(diào)試,最后實(shí)現(xiàn)了實(shí)時(shí)檢測(cè)酒精濃度,并的在LCD1602上顯示的目的。設(shè)計(jì)出的電路,完全符合本次實(shí)驗(yàn)的設(shè)計(jì)要求,通過(guò)按鍵可以實(shí)現(xiàn)調(diào)整門(mén)限值,對(duì)于檢測(cè)到的酒精濃度高于設(shè)定門(mén)限值時(shí),會(huì)顯示實(shí)時(shí)酒精濃度值,系統(tǒng)會(huì)自動(dòng)實(shí)現(xiàn)燈光報(bào)警功能。</p><p> 硬件成品圖 硬件上電開(kāi)機(jī)界面</p><
30、p> 酒精濃度低 紅燈不報(bào)警 酒精濃度高 紅燈報(bào)警</p><p><b> 4.心得體會(huì)</b></p><p> 通過(guò)本次課程設(shè)計(jì),讓我重新的系統(tǒng)的復(fù)習(xí)了微機(jī)原理與單片機(jī)方面的知識(shí),收獲頗豐。首先,對(duì)于以前學(xué)習(xí)過(guò)的有關(guān)單片機(jī)方面的知識(shí),在設(shè)計(jì)電路過(guò)程中又有了新的認(rèn)識(shí),對(duì)于各種概念的理解也有了提高。<
31、/p><p> 在做板的過(guò)程中要非常小心。硬件調(diào)試過(guò)程是相對(duì)繁鎖的,要特別注意以下幾點(diǎn)。其一,通電之后看AT89S51晶振是否起振,晶振起振后是標(biāo)準(zhǔn)的正弦波,示波器測(cè)得其頻率為11.0592MHz;其二,硬件電路的設(shè)計(jì)既要追求實(shí)際功能的實(shí)現(xiàn),也要考慮元器件的購(gòu)買(mǎi)方便。</p><p> 在本次課設(shè)中學(xué)到的知識(shí),我將它們發(fā)揮到其他的學(xué)習(xí)中去,也將在今后的學(xué)習(xí)中不斷的提高和完善;而在此期間發(fā)現(xiàn)
32、的不足,我將努力改善,通過(guò)學(xué)習(xí)實(shí)踐等方式不斷提高,克服那些知識(shí)障礙,以求在今后的學(xué)習(xí)過(guò)程中獲得更大的進(jìn)步!</p><p><b> 附錄</b></p><p><b> 附錄1 參考文獻(xiàn)</b></p><p> [1]《微機(jī)原理及應(yīng)用》 黃冰等編著 重慶:重慶大學(xué)出版社 ,2003</p>&l
33、t;p> [2] 李維提,郭強(qiáng).《液晶顯示應(yīng)用技術(shù)》 北京:電子工業(yè)出版社,2000.</p><p> [3]《基于Proteus的電路及單片機(jī)系統(tǒng)設(shè)計(jì)與仿真》 周潤(rùn)景等編著 北京:北京航空航天大學(xué)出版社,2006</p><p> [4]《單片機(jī)實(shí)驗(yàn)與實(shí)踐教程》萬(wàn)光毅等編著 北京:北京航空航天大學(xué)出版社,2006</p><p> [5]《單片機(jī)
34、人機(jī)接口實(shí)例集》公茂法等編著 北京:北京航空航天大學(xué)出版社,1997</p><p> [6]《單片機(jī)應(yīng)用設(shè)計(jì)200例》張洪潤(rùn)等編著 北京:北京航空航天大學(xué)出版社,2006</p><p> [7]《單片機(jī)程序設(shè)計(jì)實(shí)例》先鋒工作室編著 北京:清華大學(xué)出版社,2003</p><p> [8]《單片機(jī)C語(yǔ)言編程與實(shí)例》趙亮,侯國(guó)銳編著 北京:人民郵電出版社,20
35、03</p><p> [9]《新編MCS-51單片機(jī)應(yīng)用設(shè)計(jì)》張毅剛等編著 哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2004</p><p> 附錄2 硬件電路原理圖</p><p> 附錄3 硬件電路PCB圖</p><p><b> 附錄4 程序清單</b></p><p> 主程序
36、main.c</p><p> #include<reg52.h></p><p> #include<intrins.h></p><p> /*******************宏定義**********************/ </p><p> #define uint unsigned int&l
37、t;/p><p> #define uchar unsigned char</p><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_valu
38、e up</p><p> sbit k3=P1^3; //the stand_value down</p><p> sbit alarm=P2^0; //the alarm port</p><p> /*************************變量及字符串的定義*************************/</p><
39、;p> uchar LCD_Char[]="0123456789ABCDEF-.";</p><p> uchar LCD_string0[]="welcome to guet";</p><p> uchar LCD_string1[]="102021226";</p><p> uchar
40、 M_Time[]="2011--9--8";// show time</p><p> uchar M_Detect[]="Detect:"; //檢測(cè) </p><p> uchar M_Detect1[]="Alcohol:"; </p><p> uchar M_Detect2[
41、]="set_val:"; </p><p> //uchar M_time1[]={"Time"}; //時(shí)間</p><p> //uchar M_Storage[]={"Storage"}; //memory</p><p> uint data_temp=0;</p&
42、gt;<p> uint flag=0;</p><p> /*******************函數(shù)聲明**********************/ </p><p> extern void initial_lcd1602(void); </p><p> extern void Display_List_Char(uchar
43、 x,uchar y,uchar *str); //the extern have no mean ,only to explain the function is in the other file</p><p> extern void write_lcd_command( uchar write_data); //the funct
44、ion of write command</p><p> extern void 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(un
45、signed int shuju,bit t); </p><p> extern unsigned char ADconv(void);</p><p> extern void display(unsigned int shuju,bit t);</p><p> /*******************子函數(shù)*********************
46、*/ </p><p> void delay_ms(uint n)</p><p> { uint i,j; //delay 10ms</p><p> for(i=n;i>0;i--)</p><p><b> {</b></p><p> for(j=
47、1200;j>0;j--) </p><p><b> {</b></p><p> _nop_(); </p><p><b> }</b></p><p><b> }</b></p><p><b> }</b&g
48、t;</p><p> /******************主函數(shù)**********************/ </p><p> void main()</p><p><b> {</b></p><p> uint set_value=200; //is mean 20.
49、0mg/ml ; the big_value is 800.0mg/ml mean alcohol; alcohol drive is 20.0mg/100ml=0.2mg/ml</p><p> uchar data_char=0;</p><p> initial_lcd1602();</p><p> delay_ms(100);</p>
50、<p> Display_List_Char(0,0,LCD_string0); //welcome </p><p> delay_ms(100); //delay 3s</p><p> Display_List_Char(1,0,LCD_string1); //welcome
51、</p><p> delay_ms(300);</p><p> write_lcd_command(0x01); //clean screen </p><p> Display_List_Char(0,0,M_Time); //show time
52、 </p><p> delay_ms(30);</p><p> Display_List_Char(0,0,M_Time); //show time </p><p> delay_ms(100);</p><p> Display_List_Char(1,0,M_Detect); //show det
53、ect interface</p><p> delay_ms(100);</p><p> // Display_List_Char(1,0,M_Detect); //show detect interface</p><p> // delay_ms(300);</p><p><b> wh
54、ile(1)</b></p><p><b> {</b></p><p><b> _nop_();</b></p><p> if(k0==0||k1==0||k2==0||k3==0)</p><p><b> {</b></p><
55、;p><b> if(k0==0)</b></p><p><b> { </b></p><p><b> flag=0;</b></p><p> Display_List_Char(1,0,M_Detect1); //show detect interface</p
56、><p> delay_ms(50);</p><p> data_char=ADconv();</p><p> data_temp=data_char;</p><p> delay_ms(10);</p><p> xs_int(data_temp,1);</p><p> del
57、ay_ms(10);</p><p> if(data_temp>=set_value)</p><p><b> {</b></p><p><b> alarm=0;</b></p><p><b> }</b></p><p> e
58、lse { alarm=1;}</p><p><b> }</b></p><p><b> if(k1==0)</b></p><p><b> {</b></p><p> Display_List_Char(1,0,M_Detect2); </p>
59、<p> xs_int(set_value,1);</p><p><b> flag=1;</b></p><p><b> }</b></p><p> if(k2==0&&flag==1)</p><p><b> {</b><
60、;/p><p> delay_ms(10);</p><p><b> if(k2==0)</b></p><p><b> { </b></p><p> set_value=set_value+10;</p><p> xs_int(set_value,1); &l
61、t;/p><p><b> }</b></p><p> delay_ms(50);</p><p><b> }</b></p><p> if(k3==0&&flag==1)</p><p><b> {</b></p&g
62、t;<p> delay_ms(10);</p><p><b> if(k3==0)</b></p><p><b> {</b></p><p> set_value=set_value-10;</p><p> xs_int(set_value,1); </p&g
63、t;<p><b> }</b></p><p> delay_ms(50);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p>
64、;<b> }</b></p><p> 顯示程序 LCD1602.c</p><p> #include<reg52.h></p><p> #include<string.h></p><p> #define uchar unsigned char</p><p
65、> #define uint unsigned int </p><p> #define LCDPORT P0</p><p> sbit RS=P2^5;//RS數(shù)據(jù)命令選擇端,高電平數(shù)據(jù),低電平命令</p><p> sbit RW=P2^6;//RW讀寫(xiě)選擇端,高電平讀操作,低電平寫(xiě)操作</p><p&
66、gt; sbit EN=P2^7;//EN使能控制端,E高電平跳變?yōu)榈碗娖綍r(shí)LCD執(zhí)行命令</p><p> /******************************LCD1602驅(qū)動(dòng)程序*************************************/</p><p> void lcd_delay(uchar delaytime)</p>
67、<p><b> {</b></p><p> while(delaytime)delaytime--;</p><p><b> }</b></p><p> void write_lcd_command(uchar write_command)</p><p><b>
68、; {</b></p><p> lcd_delay(40);</p><p><b> RS=0;</b></p><p><b> RW=0;</b></p><p> LCDPORT=write_command;</p><p><b>
69、 EN=1;</b></p><p><b> EN=0;</b></p><p><b> }</b></p><p> void write_lcd_data(uchar write_data)</p><p><b> {</b></p>
70、<p> lcd_delay(40);</p><p><b> RS=1;</b></p><p><b> RW=0;</b></p><p> LCDPORT=write_data;</p><p><b> EN=1;</b></p>
71、<p><b> EN=0;</b></p><p><b> }</b></p><p> void Display_One_Char( uchar x,uchar y,uchar dat) //x表示行,y表示列</p><p><b> {</b></p>&
72、lt;p><b> switch(x)</b></p><p><b> {</b></p><p><b> case 0:</b></p><p> write_lcd_command(0x80+y);</p><p><b> break;<
73、;/b></p><p><b> case 1:</b></p><p> write_lcd_command(0xc0+y);</p><p><b> break;</b></p><p><b> }</b></p><p> w
74、rite_lcd_data(dat); </p><p><b> } </b></p><p> void Display_List_Char(uchar x,uchar y,uchar *str)</p><p><b> {</b></p><p> /*switch(x)<
75、;/p><p><b> {</b></p><p><b> case 0:</b></p><p> write_lcd_command(0x80+y);</p><p><b> break;</b></p><p><b> ca
76、se 1:</b></p><p> write_lcd_command(0xc0+y);</p><p><b> break;</b></p><p><b> }</b></p><p> while (*str!='\0')</p><
77、p><b> {</b></p><p> write_lcd_data(*str);</p><p><b> str++;</b></p><p><b> }</b></p><p><b> */</b></p>&l
78、t;p> while (*str!='\0')</p><p><b> {</b></p><p> Display_One_Char(x,y,*str);</p><p><b> str++;</b></p><p><b> y++;</b&g
79、t;</p><p><b> if(y==16)</b></p><p> { //若y等于16,進(jìn)入if語(yǔ)句</p><p> y=0;x^=1; // y賦0,x與1按位異或取反</p><p><b> } </b></p><p&
80、gt;<b> }</b></p><p><b> }</b></p><p> void xs_int(unsigned int shuju,bit t) //顯示一個(gè)數(shù)字</p><p> {unsigned int huancun[6]={0};</p><p> unsign
81、ed char biaozhi=0,i;</p><p> if (shuju < 10) biaozhi = 1;</p><p> else if(shuju < 100) biaozhi = 2;</p><p> else if(shuju < 1000) biaozhi = 3;</p><p> el
82、se if(shuju < 10000) biaozhi = 4;</p><p> else if(shuju <=65535) biaozhi = 5;</p><p> switch(biaozhi)</p><p> {case 5:huancun[0] = shuju/10000; </p><p> case
83、4:huancun[5] = shuju%10000/1000;</p><p> case 3:huancun[4] = shuju%1000/100;</p><p> case 2:huancun[3] = shuju%100/10;</p><p> case 1:huancun[1] = shuju%10; </p><p>
84、<b> break;</b></p><p> default:break;</p><p><b> }</b></p><p> for(i=6;i>1;i--)</p><p> {if(i==3)Display_One_Char(t,12,'.');<
85、/p><p> else Display_One_Char(t,15-i,0x30+huancun[i-1]); } </p><p> Display_One_Char(t,14,'m');</p><p> Display_One_Char(t,15,'g'); </p><p><b>
86、} </b></p><p> void display(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
87、< 10) biaozhi = 1;</p><p> else if(shuju < 100) biaozhi = 2;</p><p> else if(shuju < 1000) biaozhi = 3;</p><p> else if(shuju < 10000) biaozhi = 4;</p><p&g
88、t; else if(shuju <=65535) biaozhi = 5;</p><p> switch(biaozhi)</p><p> {case 5:huancun[5] = shuju/10000; </p><p> case 4:huancun[4] = shuju%10000/1000;</p><p>
89、case 3:huancun[3] = shuju%1000/100;</p><p> case 2:huancun[2] = shuju%100/10;</p><p> case 1:huancun[1] = shuju%10; </p><p><b> break;</b></p><p> defau
90、lt:break;</p><p><b> }</b></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
91、><b> } </b></p><p> Display_One_Char(t,14,'*');</p><p> Display_One_Char(t,15,'g'); </p><p><b> } </b></p><p> void init
92、ial_lcd1602(void) //初始化LCD1602</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> EN=0;</b></p><p> for(i=200;i>0;i--)
93、</p><p> lcd_delay(248);</p><p> write_lcd_command(0x38);//0x38命令,雙行顯示,顯示5x7的點(diǎn)陣字符</p><p> for(i=4;i>0;i--)</p><p> lcd_delay(248);</p><p> writ
94、e_lcd_command(0x38);//再寫(xiě)一次0x38命令,雙行顯示,顯示5x7的點(diǎn)陣字符</p><p> for(i=4;i>0;i--)</p><p> lcd_delay(248);</p><p> write_lcd_command(0x0c); //無(wú)光標(biāo),不閃爍</p><p>
95、for(i=4;i>0;i--)</p><p> lcd_delay(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
96、> write_lcd_command(0x01);//清屏</p><p> for(i=4;i>0;i--)</p><p> lcd_delay(248);</p><p><b> }</b></p><p> A/D轉(zhuǎn)換程序Tlc549.c</p><p>
97、 #include<reg52.h></p><p> #include <intrins.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit CLK = P3^4;
98、 /* AD時(shí)鐘信號(hào) */</p><p> sbit CS = P3^5; /* AD片選信號(hào) */</p><p> sbit DOUT = P3^3; /* 數(shù)據(jù)輸出 */</p><p> uchar adc_result = 0; /* AD計(jì)算結(jié)果 */</p>
99、<p> void delay(uchar us) </p><p><b> {</b></p><p> while(us--);</p><p><b> }</b></p><p> /* 讀取AD輸出的8bit數(shù)據(jù) */</p><p>
100、 uchar ADconv(void)</p><p><b> {</b></p><p> uchar data_out=0;</p><p><b> uchar i;</b></p><p><b> CS = 1;</b></p><p&
101、gt;<b> _nop_();</b></p><p><b> CS = 0;</b></p><p> for (i=0; i<8; i++) /* 讀取8位數(shù)據(jù) */</p><p> { </p><p><b> CLK = 0;<
102、/b></p><p> data_out = (data_out<<1)|DOUT;</p><p><b> CLK = 1;</b></p><p> _nop_(); </p><p> } </p><p&g
103、t; CLK = 0; </p><p><b> CS = 1; </b></p><p> delay(2); /*轉(zhuǎn)換間隔 延時(shí)21us以上 */ </p><p> return(data_out);</p><p><b> }<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)報(bào)告--基于stc89c52單片機(jī)的實(shí)驗(yàn)平臺(tái)開(kāi)發(fā)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告--基于stc89c52單片機(jī)的實(shí)驗(yàn)平臺(tái)開(kāi)發(fā)設(shè)計(jì)
- 基于單片機(jī)模塊stc89c52模塊的酒精濃度測(cè)試畢業(yè)論文
- STC89C52單片機(jī).doc
- STC89C52單片機(jī).doc
- STC89C52單片機(jī).doc
- stc89c52單片機(jī).pdf
- stc89c52單片機(jī).pdf
- STC89C52單片機(jī).doc
- stc89c52單片機(jī).pdf
- STC89C52單片機(jī).doc
- STC89C52單片機(jī).doc
- STC89C52單片機(jī).doc
- STC89C52單片機(jī).doc
- STC89C52單片機(jī).doc
- stc89c52單片機(jī).pdf
- STC89C52單片機(jī).doc
- stc89c52單片機(jī).pdf
- 單片機(jī)課程設(shè)計(jì)---基于stc89c52的旋轉(zhuǎn)led時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)報(bào)告--基于stc89c52單片機(jī)的電子時(shí)鐘(日歷)
評(píng)論
0/150
提交評(píng)論