一、設(shè)計(jì)意義
二、硬件設(shè)計(jì)
1、設(shè)計(jì)框圖
2、乙醇信號(hào)檢測(cè)及調(diào)理電路
3、單片機(jī)電路
4、顯示電路
5、供電及程序下載電路
三、Protel硬件開(kāi)發(fā)軟件
1.Protel軟件組成
2.PCB板設(shè)計(jì)
四、軟件編程
1、軟件流程圖
2、主程序
五、下載與調(diào)試
1、USB轉(zhuǎn)串口驅(qū)動(dòng)安裝
2、下載程序
參考文獻(xiàn)
程序
一、設(shè)計(jì)意義
自《道路交通安全法》正式實(shí)施,“醉酒駕駛”正式入刑。不僅交警部門(mén),而且很多車(chē)主都期盼能夠有便攜儀器方便地測(cè)量氣體酒精濃度,為安全駕駛提供保障,有效減少重大交通事故的發(fā)生。
本研究設(shè)計(jì)的酒精濃度測(cè)試儀是一款實(shí)用性強(qiáng)、安全可靠的氣體乙醇濃度檢測(cè)工具,采用高精度MQ-3乙醇?xì)怏w傳感器對(duì)空氣中的乙醇濃度進(jìn)行檢測(cè),利用宏晶公司高性能低成本單片機(jī)STC89C52對(duì)檢測(cè)信號(hào)進(jìn)行A/D轉(zhuǎn)換和處理,最后通過(guò)液晶屏顯示輸出。本研究設(shè)計(jì)的酒精濃度測(cè)試儀還具有醉酒閾值設(shè)定功能,可以根據(jù)法律法規(guī)或用戶(hù)需要設(shè)定修改醉酒閾值,并進(jìn)行保存。
二、硬件設(shè)計(jì)
1、設(shè)計(jì)框圖
本研究設(shè)計(jì)的酒精濃度測(cè)試儀框圖如圖1所示。MQ-3乙醇?xì)怏w傳感器輸出信號(hào)經(jīng)信號(hào)調(diào)理電路處理,輸出隨乙醇濃度變化的電壓信號(hào),該電壓信號(hào)送入單片機(jī)系統(tǒng),經(jīng)AD轉(zhuǎn)換,與設(shè)定的醉酒閾值進(jìn)行比較,并顯示或報(bào)警。
圖1酒精濃度測(cè)試儀方框圖
2、乙醇信號(hào)檢測(cè)及調(diào)理電路
MQ-3乙醇?xì)怏w傳感器可以應(yīng)用用于機(jī)動(dòng)車(chē)駕駛?cè)藛T及其他嚴(yán)禁酒后作業(yè)人員的現(xiàn)場(chǎng)檢測(cè),也用于其他場(chǎng)所乙醇蒸汽的檢測(cè)。其技術(shù)特點(diǎn)為:
對(duì)乙醇蒸汽有很高的靈敏度和良好的選擇性
快速的響應(yīng)恢復(fù)特性
長(zhǎng)期的壽命和可靠的穩(wěn)定性
簡(jiǎn)單的驅(qū)動(dòng)回路
主要技術(shù)指標(biāo):
MQ-3乙醇?xì)怏w傳感器靈敏度曲線(xiàn)如圖2所示,其傳感原理為氣敏電阻的輸出阻值隨乙醇?xì)怏w等濃度變化而變化。
圖2MQ-3乙醇?xì)怏w傳感器靈敏度曲線(xiàn)
MQ-3乙醇?xì)怏w傳感器管腳與測(cè)試電路如圖3所示。
(a)管腳圖(b)測(cè)試電路
圖3MQ-3乙醇?xì)怏w傳感器管腳及測(cè)試電路
MQ-3乙醇?xì)怏w傳感器及其調(diào)理電路原理如圖4所示。其外形如圖5所示。經(jīng)過(guò)調(diào)理,檢測(cè)信號(hào)由電阻值轉(zhuǎn)變成電壓值,便于后續(xù)電路進(jìn)行A/D轉(zhuǎn)換和處理。
圖4傳感器及調(diào)理模塊原理圖
該傳感器模塊具有如下特點(diǎn),方便與單片機(jī)系統(tǒng)接口組成檢測(cè)儀器。
具有信號(hào)輸出指示。
雙路信號(hào)輸出(模擬量輸出及TTL電平輸出)
TTL輸出有效信號(hào)為低電平。
(當(dāng)輸出低電平時(shí)信號(hào)燈亮,可直接接單片機(jī))
模擬量輸出0~5V電壓,濃度越高電壓越高。
3、單片機(jī)電路
本設(shè)計(jì)選用宏晶公司高性能單片機(jī)STC89C52,其管腳如圖6所示。
圖6STC89C52單片機(jī)管腳圖
該芯片為52內(nèi)核8位單片機(jī),適用于常用檢測(cè)電路。由STC89C52組成的單片機(jī)系統(tǒng)原理圖如圖7所示。圖中AOUT為MQ-3傳感器模塊輸出的檢測(cè)電壓信號(hào),送入ADC0832采集芯片端口進(jìn)行處理,該信號(hào)可以根據(jù)乙醇?xì)怏w濃度直接輸出報(bào)警信號(hào),報(bào)警閾值通過(guò)模塊上的電位器進(jìn)行調(diào)節(jié)。
圖7單片機(jī)系統(tǒng)原理圖
圖7中,按鍵K2和K3為醉酒閾值調(diào)整鍵,其中K2為“增加”,K3為“減小”按鍵。L2和L3為報(bào)警指示燈,分別可以進(jìn)行酒后和醉酒兩級(jí)報(bào)警。
4、顯示電路
顯示部分采用SMC1602液晶屏進(jìn)行數(shù)據(jù)顯示,其主要技術(shù)參數(shù)為:
表1液晶屏技術(shù)指標(biāo)
接口信號(hào)說(shuō)明如表2所示。
表2液晶屏接口信號(hào)說(shuō)明
與單片機(jī)接口電路如圖8所示。其中J2的3腳為背光引腳,R9和R10電阻用于調(diào)節(jié)背光亮度。J2的4、5、6引腳分別接液晶的RS、E/W和E控制引腳,J2的7—14引腳為數(shù)據(jù)引腳。
圖8LCD與單片機(jī)接口電路
5、供電及程序下載電路
本設(shè)計(jì)采用電池盒接口供電,電源電壓5V。同時(shí),其電路原理如圖10所示。
圖10供電及程序下載電路
三、Protel硬件開(kāi)發(fā)軟件
Protel是目前國(guó)內(nèi)最流行的通用EDA軟件,它是將電路原理圖設(shè)計(jì)、PCB板圖設(shè)計(jì)、電路仿真和PLD設(shè)計(jì)等多個(gè)實(shí)用工具軟件組合后構(gòu)成的EDA工作平臺(tái),是第一個(gè)將EDA軟件設(shè)計(jì)成基于Windows的普及型產(chǎn)品。它集成了軟件界面、仿真功能和PLD設(shè)計(jì)和信號(hào)完整性分析,在此基礎(chǔ)上Protel99SE又增加了一些新的功能,用戶(hù)使用更加方便靈活。Protel的功能十分強(qiáng)大,在電子電路設(shè)計(jì)領(lǐng)域占有極其重要的地位。它以其強(qiáng)大功能和實(shí)用性,逐漸獲得廣大硬件設(shè)計(jì)人員的青睞,是目前眾多EDA設(shè)計(jì)軟件中用戶(hù)最多的產(chǎn)品之一。
1.Protel軟件組成
Protel軟件主要由電路原理圖設(shè)計(jì)模塊、印制電路板設(shè)計(jì)模塊(PCB設(shè)計(jì)模塊)、電路信號(hào)仿真模塊和PLD邏輯器件設(shè)計(jì)模塊等組成,各模塊具有強(qiáng)大的功能,可以很好的實(shí)現(xiàn)電路設(shè)計(jì)與分析。
(1)原理圖設(shè)計(jì)模塊(Schematic模塊)
電路原理圖是表示電氣產(chǎn)品或電路工作原理的重要技術(shù)文件,電路原理圖主要由代表各種電子器件的圖形符號(hào)、線(xiàn)路和結(jié)點(diǎn)組成。圖4.1所示為一張電路原理圖。該原理圖是由Schematic模塊設(shè)計(jì)完成的。Schematic模塊具有如下功能:豐富而靈活的編輯功能、在線(xiàn)庫(kù)編輯及完善的庫(kù)管理功能、強(qiáng)大的設(shè)計(jì)自動(dòng)化功能、支持層次化設(shè)計(jì)功能等。
(2)印制電路板設(shè)計(jì)模塊(PCB設(shè)計(jì)模塊)
印制電路板(PCB)制板圖是由電路原理圖到制作電路板的橋梁。設(shè)計(jì)了電路原理圖后,需要根據(jù)原理圖生設(shè)計(jì)成印制電路板的制板圖,然后在根據(jù)制板圖制作具體的電路板。印制電路板設(shè)計(jì)模塊具有如下主要功能和特點(diǎn):可完成復(fù)雜印制電路板(PCB)的設(shè)計(jì);方便而又靈活的編輯功能;強(qiáng)大的設(shè)計(jì)自動(dòng)化功能;在線(xiàn)式庫(kù)編輯及完善的庫(kù)管理;完備的輸出系統(tǒng)等。
(3)電路信號(hào)仿真模塊
電路信號(hào)仿真模塊是一個(gè)功能強(qiáng)大的數(shù)字/模擬混合信號(hào)電路仿真器,能提供連續(xù)的模擬信號(hào)和離散的數(shù)字信號(hào)仿真。它運(yùn)行在Protel的EDA/Client集成環(huán)境下,與ProtelAdvancedSchematic原理圖輸入程序協(xié)同工作,作為AdvancedSchematic的擴(kuò)展,為用戶(hù)提供了一個(gè)完整的從設(shè)計(jì)到驗(yàn)證仿真設(shè)計(jì)環(huán)境。
在Protel中進(jìn)行仿真,只需從仿真用元器件庫(kù)中放置所需的元器件,連接好原理圖,加上激勵(lì)源,然后單擊防真按鈕即可自動(dòng)開(kāi)始。
2.PCB板設(shè)計(jì)
(1)定元件的封裝
①打開(kāi)網(wǎng)絡(luò)表(可以利用一些編輯器輔助編輯),將所有封裝瀏覽一遍,確保所有元件的封裝都正確無(wú)誤并且元件庫(kù)中包含所有元件的封裝,網(wǎng)絡(luò)表中所有信息全部大寫(xiě),一面載入出問(wèn)題,或PCBBOM不連續(xù)。
②標(biāo)準(zhǔn)元件全部采用公司統(tǒng)一元件庫(kù)中的封裝。
③④⑥⑤元件庫(kù)中不存在的封裝,應(yīng)自己建立元器件庫(kù)。
(2)建立PCB板框
①根據(jù)PCB結(jié)構(gòu)圖,或相應(yīng)的模板建立PCB文件,包括安裝孔、禁布區(qū)等相關(guān)信息。
②尺寸標(biāo)注。在鉆孔層中應(yīng)標(biāo)明PCB的精確結(jié)構(gòu),且不可以形成封閉尺寸標(biāo)注。
(3)載入網(wǎng)絡(luò)表
①載入網(wǎng)表并排除所有載入問(wèn)題,具體請(qǐng)看《PROTEL技術(shù)大全》。其他軟件載入問(wèn)題有很多相似之處,可以借鑒。
②如果使用PROTEL,網(wǎng)表須載入兩次以上(沒(méi)有任何提示信息)才可以確認(rèn)載入無(wú)誤。
(4)布局
①首先要確定參考點(diǎn)。
一般參考點(diǎn)都設(shè)置在左邊和底邊的邊框線(xiàn)的交點(diǎn)(或延長(zhǎng)線(xiàn)的交點(diǎn))上或印制板的插件的第一個(gè)焊盤(pán)。
②一但參考點(diǎn)確定以后,元件布局、布線(xiàn)均以此參考點(diǎn)為準(zhǔn)。布局推薦使用25MIL網(wǎng)格。
③根據(jù)要求先將所有有定位要求的元件固定并鎖定。
④布局的基本原則
A.遵循先難后易、先大后小的原則。
B.布局可以參考硬件工程師提供的原理圖和大致的布局,根據(jù)信號(hào)流向規(guī)律放置主要原器件。
C.總的連線(xiàn)盡可能的短,關(guān)鍵信號(hào)線(xiàn)最短。
D.強(qiáng)信號(hào)、弱信號(hào)、高電壓信號(hào)和弱電壓信號(hào)要完全分開(kāi)。
E.高頻元件間隔要充分。
F.模擬信號(hào)、數(shù)字信號(hào)分開(kāi)。
⑤相同結(jié)構(gòu)電路部分應(yīng)盡可能采取對(duì)稱(chēng)布局。
⑥按照均勻分布、重心平衡、版面美觀(guān)的標(biāo)準(zhǔn)來(lái)優(yōu)化布局。
(5)PCB設(shè)計(jì)遵循的規(guī)則
①地線(xiàn)回路規(guī)則:
圖11地線(xiàn)回路規(guī)則
環(huán)路最小規(guī)則,即信號(hào)線(xiàn)與其回路構(gòu)成的環(huán)面積要盡可能小,環(huán)面積要盡可能小,環(huán)面積越小,對(duì)外的輻射越少,接收外界的干擾也越小。針對(duì)這一規(guī)則,在地平面分割時(shí),要考慮到地平面與重要信號(hào)走線(xiàn)的分布,防止由于地平面開(kāi)槽等帶來(lái)的問(wèn)題;在雙層板設(shè)計(jì)中,在為電源留下足夠空間的情況下,應(yīng)該將留下的部分用參考地填充,且增加一些必要的過(guò)孔,將雙面信號(hào)有效連接起來(lái),對(duì)一些關(guān)鍵信號(hào)盡量采用地線(xiàn)隔離,對(duì)一些頻率較高的設(shè)計(jì),需特別考慮其地平面信號(hào)回路問(wèn)題,建議采用多層板為宜。
②竄擾控制
竄擾(CrossTalk)是指PCB上不同網(wǎng)絡(luò)之間因較長(zhǎng)的平行布線(xiàn)引起的相互干擾,主要是由于平行線(xiàn)間的分布電容和分布電感的作用??朔Z擾的主要措施是:
A.加大平行布線(xiàn)的間距,遵循3W規(guī)則。
B.在平行線(xiàn)間插入接地的隔離線(xiàn)。
C.減少布線(xiàn)層與地平面的距離
③屏蔽保護(hù)
圖12屏蔽保護(hù)
對(duì)應(yīng)地線(xiàn)回路規(guī)則,實(shí)際上也是為了盡量減小信號(hào)的回路面積,多用于一些比較重要的信號(hào),如時(shí)鐘信號(hào),同步信號(hào);對(duì)一些特別重要,頻率特別高的信號(hào),應(yīng)該考慮采用銅軸電纜屏蔽結(jié)構(gòu)設(shè)計(jì),即將所布的線(xiàn)上下左右用地線(xiàn)隔離,而且還要考慮好如何有效的讓屏蔽地與實(shí)際地平面有效結(jié)合。
④走線(xiàn)方向控制規(guī)則
相鄰層的走線(xiàn)方向成正交結(jié)構(gòu),避免將不同的信號(hào)線(xiàn)在相鄰層走成同一方向,以減少不必要的層間竄擾;當(dāng)由于板結(jié)構(gòu)限制(如某些背板)難以避免出現(xiàn)該情況,特別是信號(hào)速率較高時(shí),應(yīng)考慮用地平面隔離各布線(xiàn)層,用地信號(hào)線(xiàn)隔離各信號(hào)線(xiàn)。
⑤電源與地線(xiàn)層的完整性規(guī)則
對(duì)于導(dǎo)通孔密集的區(qū)域,要注意避免孔在電源和地層的挖空區(qū)域相互連接,形成對(duì)平面層的分割,從而破壞平面層的完整性,并進(jìn)而導(dǎo)致信號(hào)線(xiàn)在地層的回路面積增大。
四、軟件編程1、軟件流程圖
本設(shè)計(jì)軟件主程序流程圖如圖13所示。
圖13主程序流程圖
2、主程序
下面介紹main.c主程序編寫(xiě),其他程序略。
頭文件和一些宏定義
五、下載與調(diào)試
當(dāng)程序在uVision環(huán)境下編寫(xiě)完成,并編譯生成.hex文件后,就可以下載并進(jìn)行調(diào)試了。
1、USB轉(zhuǎn)串口驅(qū)動(dòng)安裝
打開(kāi)USB驅(qū)動(dòng)文件夾下的PL2303_Prolific_DriverInstaller_v130.exe安裝文件,按提示安裝USB轉(zhuǎn)串口驅(qū)動(dòng)程序。安裝完成后,插入U(xiǎn)SB下載線(xiàn)后,在[開(kāi)始]-[控制面板]-[打印機(jī)和其他硬件]-[設(shè)備管理器],在“端口”分支下有(ProlificUSB-to-SerialCommPort(COMX)。X表示串口號(hào),如果沒(méi)有說(shuō)明USB轉(zhuǎn)串口驅(qū)動(dòng)沒(méi)有安裝,須重新安裝。記住括號(hào)里的COM口號(hào)。
圖14成功安裝USB轉(zhuǎn)串口驅(qū)動(dòng)示意圖
2、下載程序
打開(kāi)STC單片機(jī)下載軟件文件夾,點(diǎn)擊運(yùn)行STC_ISP_V481.exe程序,出現(xiàn)如下界面。
圖15下載軟件
正確選擇MCU類(lèi)型,COM口(與剛才安裝的COM號(hào)一致),最高波特率和最低波特率都選2400bps或者1200bps(下載線(xiàn)內(nèi)PL2303芯片所限,沒(méi)辦法?。?,并打開(kāi)正確的.hex數(shù)據(jù)文件。
點(diǎn)擊“Download/下載”按紐,窗口出現(xiàn)提示:
Chinese:正在嘗試與MCU/單片機(jī)握手連接...
Connectionisfailure.Youcantry:
1.GiveyourMCUPowerOnReset.
2.Stopoperation,thenre-selectCOMPort.
3.BecausePLCC-DIP/PQFP-DIPSockettracetoolong.
4.UpdatetheSTCISP.exeversion.
5.Ifstillerror,yourMCUFirmwareiserror
ornull.
Chinese:連接失敗,請(qǐng)嘗試以下操作:
1.在單片機(jī)停電狀態(tài)下,點(diǎn)下載按鈕,再給單片機(jī)上電
2.停止下載,重新選擇RS-232串口,接好電纜
3.可能需要先將P1.0/P1.1短接到地
4.可能外部時(shí)鐘未接
5.因PLCC、PQFP轉(zhuǎn)換座引線(xiàn)過(guò)長(zhǎng)而引起時(shí)鐘不振蕩,請(qǐng)
調(diào)整參數(shù)
6.可能要升級(jí)電腦端的STCISP.exe軟件
7.若仍然不成功,可能MCU/單片機(jī)內(nèi)無(wú)ISP系統(tǒng)引導(dǎo)碼,
或需退回升級(jí),或MCU已損壞
8.若使用USB轉(zhuǎn)RS-232串口線(xiàn)下載,可能會(huì)遇到不兼容
的問(wèn)題,可以讓我們幫助購(gòu)買(mǎi)兼容的USB轉(zhuǎn)RS-232
串口線(xiàn)
仍在連接中,請(qǐng)給MCU上電...
按下電路板上的電源按紐,保證其有個(gè)失電至上電的過(guò)程,則窗口顯示開(kāi)始燒錄芯片。
芯片燒錄成功后,程序開(kāi)始運(yùn)行,酒精濃度測(cè)試儀正常工作。
單片機(jī)源碼:
-
#include //調(diào)用單片機(jī)頭文件
-
#define uchar unsigned char //無(wú)符號(hào)字符型 宏定義 變量范圍0~255
-
#define uint unsigned int //無(wú)符號(hào)整型 宏定義 變量范圍0~65535
-
-
#include
-
//#include "lcd1602.h"
-
-
sbit CS=P2^4; //CS定義為P2口的第4位腳,連接ADC0832CS腳
-
sbit SCL=P2^3; //SCL定義為P2口的第3位腳,連接ADC0832SCL腳
-
sbit DO=P2^2; //DO定義為P2口的第4位腳,連接ADC0832DO腳
-
-
sbit beep = P3^2; //蜂鳴器IO口定義
-
long dengji,s_dengji = 50; //酒精等級(jí)
-
-
-
bit flag_300ms ;
-
uchar key_can; //按鍵值的變量
-
uchar menu_1; //菜單設(shè)計(jì)的變量
-
uchar flag_clock;
-
#include "eeprom52.h"
-
-
#include "lcd1602.h"
-
-
-
-
/***********************1ms延時(shí)函數(shù)*****************************/
-
void delay_1ms(uint q)
-
{
-
uint i,j;
-
for(i=0;i
-
for(j=0;j<120;j++);
-
}
-
-
-
/******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eeprom中******************/
-
void write_eeprom()
-
{
-
SectorErase(0x2000);
-
// byte_write(0x2000, s_dengji);
-
byte_write(0x2001, s_dengji);
-
byte_write(0x2060, a_a);
-
}
-
-
/******************把數(shù)據(jù)從單片機(jī)內(nèi)部eeprom中讀出來(lái)*****************/
-
void read_eeprom()
-
{
-
// s_dengji = byte_read(0x2000);
-
s_dengji = byte_read(0x2001);
-
a_a = byte_read(0x2060);
-
}
-
-
/**************開(kāi)機(jī)自檢eeprom初始化*****************/
-
void init_eeprom()
-
{
-
read_eeprom(); //先讀
-
if(a_a != 2) //新的單片機(jī)初始單片機(jī)內(nèi)問(wèn)eeprom
-
{
-
s_dengji = 80;
-
a_a = 2;
-
write_eeprom();
-
}
-
}
-
-
/***********讀數(shù)模轉(zhuǎn)換數(shù)據(jù)********************************************************/
-
//請(qǐng)先了解ADC0832模數(shù)轉(zhuǎn)換的串行協(xié)議,再來(lái)讀本函數(shù),主要是對(duì)應(yīng)時(shí)序圖來(lái)理解,本函數(shù)是模擬0832的串行協(xié)議進(jìn)行的
-
// 1 0 0 通道
-
// 1 1 1 通道
-
unsigned char ad0832read(bit SGL,bit ODD)
-
{
-
unsigned char i=0,value=0,value1=0;
-
SCL=0;
-
DO=1;
-
CS=0; //開(kāi)始
-
SCL=1; //第一個(gè)上升沿
-
SCL=0;
-
DO=SGL;
-
SCL=1; //第二個(gè)上升沿
-
SCL=0;
-
DO=ODD;
-
SCL=1; //第三個(gè)上升沿
-
SCL=0; //第三個(gè)下降沿
-
DO=1;
-
for(i=0;i<8;i++)
-
{
-
SCL=1;
-
SCL=0; //開(kāi)始從第四個(gè)下降沿接收數(shù)據(jù)
-
value<<=1;
-
if(DO)
-
value++;
-
}
-
for(i=0;i<8;i++)
-
{ //接收校驗(yàn)數(shù)據(jù)
-
value1>>=1;
-
if(DO)
-
value1+=0x80;
-
SCL=1;
-
SCL=0;
-
}
-
CS=1;
-
SCL=1;
-
if(value==value1) //與校驗(yàn)數(shù)據(jù)比較,正確就返回?cái)?shù)據(jù),否則返回0
-
return value;
-
return 0;
-
}
-
-
-
/*************定時(shí)器0初始化程序***************/
-
void time_init()
-
{
-
EA = 1; //開(kāi)總中斷
-
TMOD = 0X01; //定時(shí)器0、定時(shí)器1工作方式1
-
ET0 = 1; //開(kāi)定時(shí)器0中斷
-
TR0 = 1; //允許定時(shí)器0定時(shí)
-
}
-
-
/****************按鍵處理顯示函數(shù)***************/
-
void key_with()
-
{
-
if(key_can == 1)
-
{
-
s_dengji ++ ; //酒精濃度設(shè)置數(shù)加1
-
if(s_dengji > 999)
-
s_dengji = 999;
-
}
-
if(key_can == 2)
-
{
-
s_dengji -= 1; //酒精濃度設(shè)置數(shù)減1
-
if(s_dengji <= 1)
-
s_dengji = 1 ;
-
}
-
write_sfm2(2,9,s_dengji); //顯示酒精等級(jí)
-
write_eeprom(); //保存數(shù)據(jù)
-
-
}
-
-
/********************獨(dú)立按鍵程序*****************/
-
uchar key_can; //按鍵值
-
-
void key() //獨(dú)立按鍵程序
-
{
-
static uchar key_new;
-
key_can = 20; //按鍵值還原
-
P1 |= 0x0f;
-
if((P1 & 0x0f) != 0x0f) //按鍵按下
-
{
-
delay_1ms(1); //按鍵消抖動(dòng)
-
if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
-
{ //確認(rèn)是按鍵按下
-
key_new = 0;
-
switch(P1 & 0x0f)
-
{
-
case 0x0b: key_can = 2; break; //得到k3鍵值
-
case 0x07: key_can = 1; break; //得到k4鍵值
-
}
-
}
-
}
-
else
-
key_new = 1;
-
}
-
-
/****************報(bào)警函數(shù)***************/
-
void clock_h_l()
-
{
-
static uchar value;
-
if(dengji >= s_dengji ) //報(bào)警
-
{
-
value ++;
-
if(value >= 2)
-
{
-
value = 10;
-
beep = ~beep; //蜂鳴器報(bào)警
-
}
-
}else
-
{
-
if(dengji < s_dengji) //取消報(bào)警
-
{
-
value = 0;
-
beep = 1;
-
}
-
}
-
}
-
-
/***************主函數(shù)*****************/
-
void main()
-
{
-
beep = 0; //開(kāi)機(jī)叫一聲
-
delay_1ms(150);
-
P0 = P1 = P2 = P3 = 0xff; //單片機(jī)IO口初始化為1
-
init_eeprom(); //讀eeprom數(shù)據(jù)
-
time_init(); //初始化定時(shí)器
-
init_1602();
-
while(1)
-
{
-
key(); //獨(dú)立按鍵程序
-
if(key_can < 10)
-
{
-
key_with(); //按鍵按下要執(zhí)行的程序
-
}
-
if(flag_300ms == 1)
-
{
-
flag_300ms = 0;
-
clock_h_l(); //報(bào)警函數(shù)
-
dengji = ad0832read(1,0);
-
……………………
-
-
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
-
復(fù)制代碼
(以上內(nèi)容來(lái)自互聯(lián)網(wǎng))
深圳兆為科技酒精測(cè)試儀推薦閱讀: