找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 35160|回復(fù): 25
收起左側(cè)

單片機(jī)酒精濃度測試儀設(shè)計(jì)資料 含源碼與電路原理圖

  [復(fù)制鏈接]
ID:335470 發(fā)表于 2018-5-22 10:18 | 顯示全部樓層 |閱讀模式
IMG_20180128_204646_副本_副本.jpg
一、 設(shè)計(jì)意義
二、 硬件設(shè)計(jì)
1、設(shè)計(jì)框圖
2、乙醇信號(hào)檢測及調(diào)理電路
3、單片機(jī)電路
4、顯示電路
5、供電及程序下載電路
三、 Protel硬件開發(fā)軟件
1.Protel軟件組成
2.PCB板設(shè)計(jì)
四、 軟件編程
1、軟件流程圖
2、主程序
五、 下載與調(diào)試
1、 USB轉(zhuǎn)串口驅(qū)動(dòng)安裝
2、 下載程序
參考文獻(xiàn)
程序
一、     設(shè)計(jì)意義
自《道路交通安全法》正式實(shí)施,“醉酒駕駛”正式入刑。不僅交警部門,而且很多車主都期盼能夠有便攜儀器方便地測量氣體酒精濃度,為安全駕駛提供保障,有效減少重大交通事故的發(fā)生。
本研究設(shè)計(jì)的酒精濃度測試儀是一款實(shí)用性強(qiáng)、安全可靠的氣體乙醇濃度檢測工具,采用高精度MQ-3乙醇?xì)怏w傳感器對(duì)空氣中的乙醇濃度進(jìn)行檢測,利用宏晶公司高性能低成本單片機(jī)STC89C52對(duì)檢測信號(hào)進(jìn)行A/D轉(zhuǎn)換和處理,最后通過液晶屏顯示輸出。本研究設(shè)計(jì)的酒精濃度測試儀還具有醉酒閾值設(shè)定功能,可以根據(jù)法律法規(guī)或用戶需要設(shè)定修改醉酒閾值,并進(jìn)行保存。
二、     硬件設(shè)計(jì)
1、設(shè)計(jì)框圖
本研究設(shè)計(jì)的酒精濃度測試儀框圖如圖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 酒精濃度測試儀方框圖
2、乙醇信號(hào)檢測及調(diào)理電路
MQ-3乙醇?xì)怏w傳感器可以應(yīng)用用于機(jī)動(dòng)車駕駛?cè)藛T及其他嚴(yán)禁酒后作業(yè)人員的現(xiàn)場檢測,也用于其他場所乙醇蒸汽的檢測。其技術(shù)特點(diǎn)為:
  • 對(duì)乙醇蒸汽有很高的靈敏度和良好的選擇性
  • 快速的響應(yīng)恢復(fù)特性
  • 長期的壽命和可靠的穩(wěn)定性
  • 簡單的驅(qū)動(dòng)回路
主要技術(shù)指標(biāo):
MQ-3乙醇?xì)怏w傳感器靈敏度曲線如圖2所示,其傳感原理為氣敏電阻的輸出阻值隨乙醇?xì)怏w等濃度變化而變化。
圖2 MQ-3乙醇?xì)怏w傳感器靈敏度曲線
MQ-3乙醇?xì)怏w傳感器管腳與測試電路如圖3所示。
    (a) 管腳圖                   (b) 測試電路
圖3 MQ-3乙醇?xì)怏w傳感器管腳及測試電路
    MQ-3乙醇?xì)怏w傳感器及其調(diào)理電路原理如圖4所示。其外形如圖5所示。經(jīng)過調(diào)理,檢測信號(hào)由電阻值轉(zhuǎn)變成電壓值,便于后續(xù)電路進(jìn)行A/D轉(zhuǎn)換和處理。
圖4 傳感器及調(diào)理模塊原理圖
  該傳感器模塊具有如下特點(diǎn),方便與單片機(jī)系統(tǒng)接口組成檢測儀器。
  •             具有信號(hào)輸出指示。
  •             雙路信號(hào)輸出(模擬量輸出及TTL電平輸出)
  •             TTL輸出有效信號(hào)為低電平。
(當(dāng)輸出低電平時(shí)信號(hào)燈亮,可直接接單片機(jī))               
  •             模擬量輸出0~5V電壓,濃度越高電壓越高。
3、單片機(jī)電路
本設(shè)計(jì)選用宏晶公司高性能單片機(jī)STC89C52,其管腳如圖6所示。
圖6  STC89C52單片機(jī)管腳圖
該芯片為52內(nèi)核8位單片機(jī),適用于常用檢測電路。由STC89C52組成的單片機(jī)系統(tǒng)原理圖如圖7所示。圖中AOUT為MQ-3傳感器模塊輸出的檢測電壓信號(hào),送入ADC0832采集芯片端口進(jìn)行處理,該信號(hào)可以根據(jù)乙醇?xì)怏w濃度直接輸出報(bào)警信號(hào),報(bào)警閾值通過模塊上的電位器進(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、顯示電路
顯示部分采用SMC 1602液晶屏進(jìn)行數(shù)據(jù)顯示,其主要技術(shù)參數(shù)為:
表1  液晶屏技術(shù)指標(biāo)
接口信號(hào)說明如表2所示。
表2  液晶屏接口信號(hào)說明
與單片機(jī)接口電路如圖8所示。其中J2的3腳為背光引腳,R9和R10電阻用于調(diào)節(jié)背光亮度。J2的4、5、6引腳分別接液晶的RS、E/W和E控制引腳,J2的7—14引腳為數(shù)據(jù)引腳。
圖8  LCD與單片機(jī)接口電路
5、供電及程序下載電路
本設(shè)計(jì)采用電池盒接口供電,電源電壓5V。同時(shí),其電路原理如圖10所示。
圖10  供電及程序下載電路
三、     Protel硬件開發(fā)軟件
Protel是目前國內(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ǔ)上Protel 99SE又增加了一些新的功能,用戶使用更加方便靈活。Protel的功能十分強(qiáng)大,在電子電路設(shè)計(jì)領(lǐng)域占有極其重要的地位。它以其強(qiáng)大功能和實(shí)用性,逐漸獲得廣大硬件設(shè)計(jì)人員的青睞,是目前眾多EDA設(shè)計(jì)軟件中用戶最多的產(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)、線路和結(jié)點(diǎn)組成。圖4.1所示為一張電路原理圖。該原理圖是由Schematic模塊設(shè)計(jì)完成的。Schematic模塊具有如下功能:豐富而靈活的編輯功能、在線庫編輯及完善的庫管理功能、強(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)化功能;在線式庫編輯及完善的庫管理;完備的輸出系統(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)境下,與Protel Advanced Schematic原理圖輸入程序協(xié)同工作,作為Advanced Schematic的擴(kuò)展,為用戶提供了一個(gè)完整的從設(shè)計(jì)到驗(yàn)證仿真設(shè)計(jì)環(huán)境。
在Protel中進(jìn)行仿真,只需從仿真用元器件庫中放置所需的元器件,連接好原理圖,加上激勵(lì)源,然后單擊防真按鈕即可自動(dòng)開始。
2.PCB板設(shè)計(jì)
(1)  定元件的封裝
① 打開網(wǎng)絡(luò)表(可以利用一些編輯器輔助編輯),將所有封裝瀏覽一遍,確保所有元件的封裝都正確無誤并且元件庫中包含所有元件的封裝,網(wǎng)絡(luò)表中所有信息全部大寫,一面載入出問題,或PCB BOM不連續(xù)。
② 標(biāo)準(zhǔn)元件全部采用公司統(tǒng)一元件庫中的封裝。
③ ④⑥⑤元件庫中不存在的封裝,應(yīng)自己建立元器件庫。
(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)表并排除所有載入問題,具體請看《PROTEL技術(shù)大全》。其他軟件載入問題有很多相似之處,可以借鑒。
② 如果使用PROTEL,網(wǎng)表須載入兩次以上(沒有任何提示信息)才可以確認(rèn)載入無誤。
(4) 布局
① 首先要確定參考點(diǎn)。
一般參考點(diǎn)都設(shè)置在左邊和底邊的邊框線的交點(diǎn)(或延長線的交點(diǎn))上或印制板的插件的第一個(gè)焊盤。
② 一但參考點(diǎn)確定以后,元件布局、布線均以此參考點(diǎn)為準(zhǔn)。布局推薦使用25MIL網(wǎng)格。
③ 根據(jù)要求先將所有有定位要求的元件固定并鎖定。
④ 布局的基本原則
A. 遵循先難后易、先大后小的原則。
B. 布局可以參考硬件工程師提供的原理圖和大致的布局,根據(jù)信號(hào)流向規(guī)律放置主要原器件。
C. 總的連線盡可能的短,關(guān)鍵信號(hào)線最短。
D. 強(qiáng)信號(hào)、弱信號(hào)、高電壓信號(hào)和弱電壓信號(hào)要完全分開。
E. 高頻元件間隔要充分。
F. 模擬信號(hào)、數(shù)字信號(hào)分開。
⑤ 相同結(jié)構(gòu)電路部分應(yīng)盡可能采取對(duì)稱布局。
⑥ 按照均勻分布、重心平衡、版面美觀的標(biāo)準(zhǔn)來優(yōu)化布局。
(5) PCB設(shè)計(jì)遵循的規(guī)則
① 地線回路規(guī)則:

圖11 地線回路規(guī)則

環(huán)路最小規(guī)則,即信號(hào)線與其回路構(gòu)成的環(huán)面積要盡可能小,環(huán)面積要盡可能小,環(huán)面積越小,對(duì)外的輻射越少,接收外界的干擾也越小。針對(duì)這一規(guī)則,在地平面分割時(shí),要考慮到地平面與重要信號(hào)走線的分布,防止由于地平面開槽等帶來的問題;在雙層板設(shè)計(jì)中,在為電源留下足夠空間的情況下,應(yīng)該將留下的部分用參考地填充,且增加一些必要的過孔,將雙面信號(hào)有效連接起來,對(duì)一些關(guān)鍵信號(hào)盡量采用地線隔離,對(duì)一些頻率較高的設(shè)計(jì),需特別考慮其地平面信號(hào)回路問題,建議采用多層板為宜。
② 竄擾控制
竄擾(CrossTalk)是指PCB上不同網(wǎng)絡(luò)之間因較長的平行布線引起的相互干擾,主要是由于平行線間的分布電容和分布電感的作用?朔Z擾的主要措施是:
A.加大平行布線的間距,遵循3W規(guī)則。
B.在平行線間插入接地的隔離線。
C.減少布線層與地平面的距離
屏蔽保護(hù)

圖12  屏蔽保護(hù)

對(duì)應(yīng)地線回路規(guī)則,實(shí)際上也是為了盡量減小信號(hào)的回路面積,多用于一些比較重要的信號(hào),如時(shí)鐘信號(hào),同步信號(hào);對(duì)一些特別重要,頻率特別高的信號(hào),應(yīng)該考慮采用銅軸電纜屏蔽結(jié)構(gòu)設(shè)計(jì),即將所布的線上下左右用地線隔離,而且還要考慮好如何有效的讓屏蔽地與實(shí)際地平面有效結(jié)合。
④ 走線方向控制規(guī)則
相鄰層的走線方向成正交結(jié)構(gòu),避免將不同的信號(hào)線在相鄰層走成同一方向,以減少不必要的層間竄擾;當(dāng)由于板結(jié)構(gòu)限制(如某些背板)難以避免出現(xiàn)該情況,特別是信號(hào)速率較高時(shí),應(yīng)考慮用地平面隔離各布線層,用地信號(hào)線隔離各信號(hào)線。
電源與地線層的完整性規(guī)則
對(duì)于導(dǎo)通孔密集的區(qū)域,要注意避免孔在電源和地層的挖空區(qū)域相互連接,形成對(duì)平面層的分割,從而破壞平面層的完整性,并進(jìn)而導(dǎo)致信號(hào)線在地層 的回路面積增大。
四、     軟件編程1、軟件流程圖
本設(shè)計(jì)軟件主程序流程圖如圖13所示。
圖13 主程序流程圖
2、主程序
    下面介紹main.c主程序編寫,其他程序略。
  • 頭文件和一些宏定義

五、     下載與調(diào)試
當(dāng)程序在uVision環(huán)境下編寫完成,并編譯生成.hex文件后,就可以下載并進(jìn)行調(diào)試了。
1、 USB轉(zhuǎn)串口驅(qū)動(dòng)安裝
打開USB驅(qū)動(dòng)文件夾下的PL2303_Prolific_DriverInstaller_v130.exe安裝文件,按提示安裝USB轉(zhuǎn)串口驅(qū)動(dòng)程序。安裝完成后,插入U(xiǎn)SB下載線后,在[開始]-[控制面板]-[打印機(jī)和其他硬件]-[設(shè)備管理器],在“端口”分支下有(Prolific USB-to-Serial Comm Port(COMX)。X表示串口號(hào),如果沒有說明USB轉(zhuǎn)串口驅(qū)動(dòng)沒有安裝,須重新安裝。記住括號(hào)里的COM口號(hào)。
圖14 成功安裝USB轉(zhuǎn)串口驅(qū)動(dòng)示意圖
2、 下載程序
打開STC單片機(jī)下載軟件文件夾,點(diǎn)擊運(yùn)行STC_ISP_V481.exe程序,出現(xiàn)如下界面。
圖15 下載軟件
正確選擇MCU 類型,COM口(與剛才安裝的COM號(hào)一致),最高波特率和最低波特率都選2400bps或者1200bps (下載線內(nèi)PL2303芯片所限,沒辦法。,并打開正確的.hex數(shù)據(jù)文件。
點(diǎn)擊“Download/下載”按紐,窗口出現(xiàn)提示:
Chinese:正在嘗試與 MCU/單片機(jī) 握手連接 ...
Connection is failure. You can try:
1.Give your MCU Power On Reset.
2.Stop operation, then re-select COM Port.
3.Because PLCC-DIP/PQFP-DIP Socket trace too long.
4.Update the STC ISP.exe version.
5.If still error, your MCU Firmware is error
   or null.
Chinese:連接失敗,請嘗試以下操作:
1.在單片機(jī)停電狀態(tài)下,點(diǎn)下載按鈕,再給單片機(jī)上電
2.停止下載,重新選擇 RS-232 串口, 接好電纜
3.可能需要先將 P1.0/P1.1 短接到地
4.可能外部時(shí)鐘未接
5.因 PLCC、PQFP 轉(zhuǎn)換座引線過長而引起時(shí)鐘不振蕩,請
   調(diào)整參數(shù)
6.可能要升級(jí)電腦端的 STC ISP.exe 軟件
7.若仍然不成功,可能 MCU/單片機(jī)內(nèi)無 ISP 系統(tǒng)引導(dǎo)碼,
   或需退回升級(jí),或 MCU 已損壞
8.若使用 USB 轉(zhuǎn) RS-232 串口線下載,可能會(huì)遇到不兼容
   的問題,可以讓我們幫助購買兼容的 USB 轉(zhuǎn) RS-232
   串口線

仍在連接中, 請給 MCU 上電...

按下電路板上的電源按紐,保證其有個(gè)失電至上電的過程,則窗口顯示開始燒錄芯片。
芯片燒錄成功后,程序開始運(yùn)行,酒精濃度測試儀正常工作。

單片機(jī)源碼:
  1. #include <reg52.h>             //調(diào)用單片機(jī)頭文件
  2. #define uchar unsigned char  //無符號(hào)字符型 宏定義    變量范圍0~255
  3. #define uint  unsigned int     //無符號(hào)整型 宏定義    變量范圍0~65535

  4. #include <intrins.h>
  5. //#include "lcd1602.h"

  6. sbit CS=P2^4;        //CS定義為P2口的第4位腳,連接ADC0832CS腳
  7. sbit SCL=P2^3;        //SCL定義為P2口的第3位腳,連接ADC0832SCL腳
  8. sbit DO=P2^2;        //DO定義為P2口的第4位腳,連接ADC0832DO腳

  9. sbit beep = P3^2;   //蜂鳴器IO口定義
  10. long dengji,s_dengji = 50;     //酒精等級(jí)


  11. bit flag_300ms ;
  12. uchar key_can;         //按鍵值的變量
  13. uchar menu_1;        //菜單設(shè)計(jì)的變量
  14. uchar flag_clock;
  15. #include "eeprom52.h"

  16. #include "lcd1602.h"



  17. /***********************1ms延時(shí)函數(shù)*****************************/
  18. void delay_1ms(uint q)
  19. {
  20.     uint i,j;
  21.     for(i=0;i<q;i++)
  22.         for(j=0;j<120;j++);
  23. }


  24. /******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eeprom中******************/
  25. void write_eeprom()
  26. {
  27.     SectorErase(0x2000);
  28. //    byte_write(0x2000, s_dengji);
  29.     byte_write(0x2001, s_dengji);
  30.     byte_write(0x2060, a_a);   
  31. }

  32. /******************把數(shù)據(jù)從單片機(jī)內(nèi)部eeprom中讀出來*****************/
  33. void read_eeprom()
  34. {
  35. //    s_dengji   = byte_read(0x2000);
  36.     s_dengji = byte_read(0x2001);
  37.     a_a      = byte_read(0x2060);
  38. }

  39. /**************開機(jī)自檢eeprom初始化*****************/
  40. void init_eeprom()
  41. {
  42.     read_eeprom();        //先讀
  43.     if(a_a != 2)        //新的單片機(jī)初始單片機(jī)內(nèi)問eeprom
  44.     {
  45.         s_dengji = 80;
  46.         a_a = 2;
  47.         write_eeprom();
  48.     }   
  49. }

  50. /***********讀數(shù)模轉(zhuǎn)換數(shù)據(jù)********************************************************/   
  51. //請先了解ADC0832模數(shù)轉(zhuǎn)換的串行協(xié)議,再來讀本函數(shù),主要是對(duì)應(yīng)時(shí)序圖來理解,本函數(shù)是模擬0832的串行協(xié)議進(jìn)行的
  52.                         //  1  0  0 通道
  53.                         //  1  1  1 通道
  54. unsigned char ad0832read(bit SGL,bit ODD)
  55. {
  56.     unsigned char i=0,value=0,value1=0;        
  57.         SCL=0;
  58.         DO=1;
  59.         CS=0;        //開始
  60.         SCL=1;        //第一個(gè)上升沿   
  61.         SCL=0;
  62.         DO=SGL;
  63.         SCL=1;      //第二個(gè)上升沿
  64.         SCL=0;
  65.         DO=ODD;
  66.         SCL=1;        //第三個(gè)上升沿
  67.         SCL=0;        //第三個(gè)下降沿
  68.         DO=1;
  69.         for(i=0;i<8;i++)
  70.         {
  71.             SCL=1;
  72.             SCL=0; //開始從第四個(gè)下降沿接收數(shù)據(jù)
  73.             value<<=1;
  74.             if(DO)
  75.                 value++;                        
  76.         }
  77.         for(i=0;i<8;i++)
  78.         {            //接收校驗(yàn)數(shù)據(jù)
  79.             value1>>=1;
  80.             if(DO)
  81.                 value1+=0x80;
  82.             SCL=1;
  83.             SCL=0;
  84.         }
  85.         CS=1;
  86.         SCL=1;   
  87.         if(value==value1)                //與校驗(yàn)數(shù)據(jù)比較,正確就返回?cái)?shù)據(jù),否則返回0   
  88.             return value;
  89.     return 0;
  90. }


  91. /*************定時(shí)器0初始化程序***************/
  92. void time_init()      
  93. {
  94.     EA   = 1;           //開總中斷
  95.     TMOD = 0X01;      //定時(shí)器0、定時(shí)器1工作方式1
  96.     ET0  = 1;          //開定時(shí)器0中斷
  97.     TR0  = 1;          //允許定時(shí)器0定時(shí)
  98. }

  99. /****************按鍵處理顯示函數(shù)***************/
  100. void key_with()
  101. {
  102.     if(key_can == 1)
  103.     {
  104.         s_dengji ++ ;            //酒精濃度設(shè)置數(shù)加1
  105.         if(s_dengji > 999)
  106.             s_dengji = 999;
  107.     }
  108.     if(key_can == 2)
  109.     {
  110.             s_dengji -= 1;    //酒精濃度設(shè)置數(shù)減1
  111.         if(s_dengji <= 1)
  112.             s_dengji = 1 ;
  113.     }
  114.     write_sfm2(2,9,s_dengji);           //顯示酒精等級(jí)
  115.     write_eeprom();       //保存數(shù)據(jù)                    
  116.             
  117. }  

  118. /********************獨(dú)立按鍵程序*****************/
  119. uchar key_can;     //按鍵值

  120. void key()     //獨(dú)立按鍵程序
  121. {
  122.     static uchar key_new;
  123.     key_can = 20;                   //按鍵值還原
  124.     P1 |= 0x0f;
  125.     if((P1 & 0x0f) != 0x0f)        //按鍵按下
  126.     {
  127.         delay_1ms(1);             //按鍵消抖動(dòng)
  128.         if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
  129.         {                        //確認(rèn)是按鍵按下
  130.             key_new = 0;
  131.             switch(P1 & 0x0f)
  132.             {
  133.                 case 0x0b: key_can = 2; break;       //得到k3鍵值
  134.                 case 0x07: key_can = 1; break;       //得到k4鍵值
  135.             }        
  136.         }            
  137.     }
  138.     else
  139.         key_new = 1;   
  140. }

  141. /****************報(bào)警函數(shù)***************/
  142. void clock_h_l()
  143. {
  144.     static uchar value;
  145.     if(dengji >= s_dengji )        //報(bào)警
  146.     {
  147.         value ++;
  148.         if(value >= 2)
  149.         {
  150.             value = 10;
  151.             beep = ~beep;      //蜂鳴器報(bào)警
  152.         }
  153.     }else
  154.     {
  155.         if(dengji < s_dengji)      //取消報(bào)警
  156.         {
  157.             value = 0;
  158.             beep = 1;
  159.         }   
  160.     }
  161. }

  162. /***************主函數(shù)*****************/
  163. void main()
  164. {
  165.     beep = 0;                        //開機(jī)叫一聲   
  166.     delay_1ms(150);
  167.     P0 = P1 = P2 = P3 = 0xff;        //單片機(jī)IO口初始化為1   
  168.     init_eeprom();                  //讀eeprom數(shù)據(jù)
  169.     time_init();                //初始化定時(shí)器
  170.     init_1602();
  171.     while(1)
  172.     {
  173.         key();                    //獨(dú)立按鍵程序
  174.         if(key_can < 10)
  175.         {
  176.             key_with();            //按鍵按下要執(zhí)行的程序
  177.         }
  178.         if(flag_300ms == 1)
  179.         {        
  180.             flag_300ms = 0;
  181.             clock_h_l();       //報(bào)警函數(shù)
  182.             dengji = ad0832read(1,0);   
  183.             dengji = dengji * 450 / 255.0;
  184.             dengji = dengji - 130;              //首先減去零點(diǎn)漂移,一般是1V
  185.             if(dengji < 0)
  186.                 dengji = 0;   
  187.             dengji = dengji * 2;             //將mV轉(zhuǎn)變成mg/L,系數(shù)需要校準(zhǔn)   
  188.                                   //電壓每升高0.1V,實(shí)際被測氣體的濃度增加20ppm
  189.                                   //1ppm=1mg/kg=1mg/L=1×10-6 常用來表示氣體濃度,或者溶液濃度。      

  190.             write_sfm2(1,9,dengji);          //顯示酒精濃度
  191.         }
  192.     }
  193. }

  194. /*************定時(shí)器0中斷服務(wù)程序***************/
  195. void time0_int() interrupt 1
  196. {   
  197.     static uchar value;
  198.     TH0 = 0x3c;
  199.     TL0 = 0xb0;     // 50ms
  200.     value ++;     
  201.     if(value % 6 == 0)
  202.     {
  203.         flag_300ms = 1;       //300ms
  204.         value = 0;
  205.     }
  206. }

復(fù)制代碼

以上圖文的Word格式文檔下載(內(nèi)容和本網(wǎng)頁上的一模一樣,方便保存):
酒精濃度測試儀.doc (954.52 KB, 下載次數(shù): 316)
酒精濃度檢測 - 硬件電路.pdf (197.55 KB, 下載次數(shù): 212)
缺少頭文件,無法編譯大家能修正一下嗎

回復(fù)

使用道具 舉報(bào)

ID:418149 發(fā)表于 2018-10-30 20:22 | 顯示全部樓層
好東西,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:426557 發(fā)表于 2018-11-14 18:11 | 顯示全部樓層
這是個(gè)好東西啊
值得學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:374595 發(fā)表于 2018-12-10 08:51 | 顯示全部樓層
請問里面也有上面那些圖文嗎?
回復(fù)

使用道具 舉報(bào)

ID:374595 發(fā)表于 2018-12-10 09:02 | 顯示全部樓層
沒有整體的仿真圖嗎?
回復(fù)

使用道具 舉報(bào)

ID:374595 發(fā)表于 2018-12-10 09:16 | 顯示全部樓層
想求整體的仿真圖,這個(gè)給的是各個(gè)單個(gè)的模塊
回復(fù)

使用道具 舉報(bào)

ID:458800 發(fā)表于 2018-12-31 11:49 | 顯示全部樓層
代碼放去keiv 顯示錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

ID:465321 發(fā)表于 2019-1-9 19:57 | 顯示全部樓層
好厲害啊
回復(fù)

使用道具 舉報(bào)

ID:483635 發(fā)表于 2019-3-7 21:37 來自手機(jī) | 顯示全部樓層
有沒有完整電路圖
回復(fù)

使用道具 舉報(bào)

ID:500523 發(fā)表于 2019-3-31 12:51 | 顯示全部樓層
#include "eeprom52.h"這個(gè)函數(shù)沒有寫報(bào)錯(cuò)了
回復(fù)

使用道具 舉報(bào)

ID:566228 發(fā)表于 2020-2-11 12:15 | 顯示全部樓層
學(xué)習(xí),值得好好研究一下,果然高手在人間阿
回復(fù)

使用道具 舉報(bào)

ID:735923 發(fā)表于 2020-4-26 18:11 | 顯示全部樓層
請問不用USB接口,怎么把程序刷進(jìn)去
回復(fù)

使用道具 舉報(bào)

ID:600952 發(fā)表于 2020-4-27 10:40 | 顯示全部樓層
好厲害!程序不錯(cuò),單片機(jī)酒精濃度測試儀,好資料,萬用板電路焊的也很漂亮,學(xué)習(xí)到了,謝謝樓主分享。!
不知道乙醇?xì)怏w傳感器什么原理
回復(fù)

使用道具 舉報(bào)

ID:48541 發(fā)表于 2020-5-4 22:06 | 顯示全部樓層
mark 一下
回復(fù)

使用道具 舉報(bào)

ID:747867 發(fā)表于 2020-5-9 18:53 | 顯示全部樓層
可以,好東西學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

ID:635237 發(fā)表于 2020-5-18 10:43 來自手機(jī) | 顯示全部樓層
好東西
回復(fù)

使用道具 舉報(bào)

ID:635237 發(fā)表于 2020-5-18 18:12 | 顯示全部樓層

真的香
回復(fù)

使用道具 舉報(bào)

ID:635237 發(fā)表于 2020-5-18 18:17 | 顯示全部樓層
王達(dá)豬 發(fā)表于 2018-11-14 18:11
這是個(gè)好東西啊
值得學(xué)習(xí)

嗯  感覺蠻好的
回復(fù)

使用道具 舉報(bào)

ID:764410 發(fā)表于 2020-5-31 13:15 | 顯示全部樓層
值得學(xué)習(xí),向知識(shí)致敬。
回復(fù)

使用道具 舉報(bào)

ID:44347 發(fā)表于 2020-11-28 22:35 | 顯示全部樓層
經(jīng)典的  歷史的 , 也是我學(xué)習(xí)的!
回復(fù)

使用道具 舉報(bào)

ID:782510 發(fā)表于 2020-12-8 23:34 | 顯示全部樓層
頭文件找不到誒
回復(fù)

使用道具 舉報(bào)

ID:501389 發(fā)表于 2021-2-3 21:52 來自手機(jī) | 顯示全部樓層
這個(gè)好啊,有沒有做好的兄弟
回復(fù)

使用道具 舉報(bào)

ID:957243 發(fā)表于 2021-8-13 21:51 | 顯示全部樓層
請問這個(gè)電壓轉(zhuǎn)換成濃度是怎么計(jì)算的,下載看了之后還是有些不明白。謝謝啦
回復(fù)

使用道具 舉報(bào)

ID:964929 發(fā)表于 2021-9-8 17:31 | 顯示全部樓層
想問一下怎么完成這樣一個(gè)東西需要什么材料啊
回復(fù)

使用道具 舉報(bào)

ID:957243 發(fā)表于 2021-9-20 15:17 | 顯示全部樓層
這里的定時(shí)器有什么用
回復(fù)

使用道具 舉報(bào)

ID:1081303 發(fā)表于 2023-6-1 10:54 | 顯示全部樓層

好東西值得學(xué)習(xí),向知識(shí)致敬。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表