找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 18441|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

GY-906 MLX90614紅外測(cè)溫模塊單片機(jī)代碼及全部注釋 OLED顯示 非接觸式智能測(cè)溫系統(tǒng)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:578997 發(fā)表于 2020-10-22 10:36 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本程序出自:http://www.torrancerestoration.com/bbs/dpj-181601-1.html
本作品大部分內(nèi)容來(lái)自于網(wǎng)上轉(zhuǎn)載,做出了一些修改,目前也不是很完善,望大家能繼續(xù)完善本開(kāi)源作品,一起學(xué)習(xí),共同進(jìn)步,感謝開(kāi)源作者,感謝大家:

非接觸式智能測(cè)溫系統(tǒng)

本系統(tǒng)以單片機(jī)STC89C51為核心,使用紅外傳感器作為感應(yīng)器,檢測(cè)是否有人要進(jìn)行溫度測(cè)量,將檢測(cè)的結(jié)果轉(zhuǎn)化為電信號(hào)傳輸至單片機(jī)中。單片機(jī)再進(jìn)行判斷是否啟用紅外測(cè)溫傳感器進(jìn)行溫度數(shù)據(jù)采集。將采集的數(shù)據(jù)送至單片機(jī)進(jìn)行計(jì)算、處理后傳輸?shù)?/font>OLED顯示屏進(jìn)行顯示,并且由MP3播放器進(jìn)行播報(bào)溫度是否正常。


隨著人們對(duì)自身安全和健康要求的不斷提高,原有接觸式水銀溫度腋測(cè)法的缺點(diǎn)不斷顯露。其接觸式的體溫測(cè)量方法可能直接導(dǎo)致發(fā)熱類(lèi)的傳播。臨床上常用的水銀體溫計(jì)雖價(jià)格便宜,測(cè)量性能穩(wěn)定,但缺點(diǎn)明顯,測(cè)溫時(shí)間長(zhǎng),消毒繁瑣,易破損,造成水銀泄漏,增加護(hù)理工作量和潛在危險(xiǎn)性,
不適用于人員流動(dòng)較大的公共場(chǎng)所進(jìn)行體溫篩查。選擇一種快速、簡(jiǎn)單、精確的體溫篩查器械尤為重要,紅外體溫測(cè)量裝置在大規(guī)模人群防控傳染病監(jiān)測(cè)中具有較好的應(yīng)用效果,具有適應(yīng)性高、響應(yīng)快、精度高、可動(dòng)態(tài)監(jiān)測(cè)等優(yōu)勢(shì)。
因此許多國(guó)家紛紛采取措施,主要方法是采用手持式的紅外測(cè)溫儀檢測(cè)。該方式的優(yōu)點(diǎn)是不接觸皮膚,對(duì)人體無(wú)任何害處,而且速度快,在1秒鐘內(nèi)就能鑒別被檢測(cè)者是否發(fā)燒,缺點(diǎn)是增加了檢測(cè)者的感染幾率,給他們?cè)斐珊艽蟮男睦碡?fù)擔(dān)。在復(fù)學(xué)的同時(shí),我們迎來(lái)了電子系統(tǒng)設(shè)計(jì),借助這次設(shè)計(jì)作品的機(jī)會(huì)我們研發(fā)了一款具有自動(dòng)感應(yīng)、自動(dòng)測(cè)量、智能播報(bào)的非接觸式智能測(cè)溫系統(tǒng),該系統(tǒng)不僅可以提高測(cè)量效率,還可以有效地解決檢測(cè)者被感染的問(wèn)題。
二、系統(tǒng)硬件的具體設(shè)計(jì)與實(shí)現(xiàn)
2.1系統(tǒng)原理和框圖
非接觸式智能測(cè)溫系統(tǒng)的硬件組成如下圖2-1所示。本系統(tǒng)主要由STC89C51單片機(jī)及其外圍電路、紅外檢測(cè)傳感器、紅外測(cè)溫傳感器、顯示裝置、MP3播放器等五部分組成。單片機(jī)循環(huán)檢測(cè)由紅外傳感器檢測(cè)傳輸來(lái)的電信號(hào),據(jù)此產(chǎn)生的電信號(hào)來(lái)判斷是否有人,同時(shí)紅外測(cè)溫傳感器進(jìn)行相應(yīng)的工作方式。當(dāng)檢測(cè)到有人靠近時(shí),紅外測(cè)溫傳感器開(kāi)始運(yùn)行,此時(shí)OLED顯示屏上將會(huì)顯示當(dāng)前檢測(cè)者的溫度,并且進(jìn)行語(yǔ)音播報(bào)溫度是否正常(體溫在36.2°—37.2°之間播放:體溫正常且綠燈亮起;否則,播報(bào)體溫異常且紅燈亮起)。如果沒(méi)有人靠近,OLED顯示屏將會(huì)在2秒之后進(jìn)行熄屏。此時(shí)紅外傳感器繼續(xù)檢測(cè)是否有人。
                                    
           圖2-1系統(tǒng)設(shè)計(jì)框圖

2.2主控芯片
該作品采用了STC89C51作為控制核心,對(duì)每個(gè)模塊傳送過(guò)來(lái)的數(shù)據(jù)進(jìn)行處理并發(fā)送。該單片機(jī)是一種低功耗、高性能CMOS8位微控制器,具有8K字節(jié)系統(tǒng)可編程Flash存儲(chǔ)器,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C51為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。內(nèi)部看門(mén)狗定時(shí)器、低電壓復(fù)位和低電壓檢測(cè)等內(nèi)部保護(hù)特性。
2.3紅外測(cè)溫傳感器
2.3.1紅外測(cè)溫原理
紅外測(cè)溫系統(tǒng)是采用紅外測(cè)溫模塊接收不同光譜,經(jīng)過(guò)STC89C51單片機(jī)處理后在OLED顯示模塊上顯示不同數(shù)字來(lái)實(shí)現(xiàn)的。物體或人的不同溫度反應(yīng)出不同的光譜,紅外測(cè)溫系統(tǒng)發(fā)射一束光到物體或人的表面,然后反射到紅外測(cè)溫模塊中接收,其物體或人的溫度的光譜經(jīng)過(guò)紅外測(cè)溫模塊處理后,將以數(shù)字信號(hào)傳給單片機(jī),再由OLED顯示模塊顯示出來(lái)。
2.3.2 GY-906 MLX90614的特點(diǎn)
1)應(yīng)用范圍廣泛,適用于恒溫控制、工業(yè)系統(tǒng)、消費(fèi)類(lèi)產(chǎn)品、溫度計(jì)或任何熱敏系統(tǒng)。
2)體積小巧,可安裝于狹小的空間范圍內(nèi),進(jìn)行溫度測(cè)量。
3)易集成。
4)3V和5V電源電壓。
(5)節(jié)能工作模式。
(6)車(chē)用級(jí)別標(biāo)準(zhǔn)。
2.4紅外感應(yīng)傳感器
該傳感器對(duì)環(huán)境光線適應(yīng)能力強(qiáng),其具有一對(duì)紅外線發(fā)射與接收管,發(fā)射管發(fā)射出一定頻率的紅外線,當(dāng)檢測(cè)方向遇到障礙物(反射面)時(shí),紅外線反射回來(lái)被接收管接收。經(jīng)過(guò)比較器電路處理之后綠色指示燈會(huì)亮起,同時(shí)信號(hào)輸出接口輸出數(shù)字信號(hào)(一個(gè)低電平)。該傳感器的探測(cè)距離可以通過(guò)電位器調(diào)節(jié)、具有干擾小、便于裝配、使用方便等特點(diǎn)。



2.5顯示裝置
OLED(Organic Light-Emitting Diode)有機(jī)發(fā)光二極管又稱(chēng)為有機(jī)激光顯示、OLED顯示技術(shù)具有自發(fā)光的特性、采用非常薄的有機(jī)材料涂層和玻璃基板、當(dāng)有電流通過(guò)時(shí)、這些有機(jī)材料就會(huì)發(fā)光、而且OLED顯示屏幕可視角大、功耗低、OLED由于同時(shí)具備自發(fā)光、不需背光源、對(duì)比度高、厚度薄視角廣、反應(yīng)速度快、可用于撓曲面板、使用溫度范圍廣、結(jié)構(gòu)及制程等優(yōu)異之特性、先接觸的1286屏都是LCD的、需要背光、功耗較高,OLED的功耗低、更加適合小系統(tǒng)、由于兩者發(fā)光材料的不同、在不同的環(huán)境中、OLED的顯示效果好、模塊供電可以是3.3v也可以是5v、不需要修改模塊電路、OLED屏具有多個(gè)控制指令、可以控制OLED的亮度、對(duì)比度、開(kāi)關(guān)升壓電路等指令、操作方便、功能豐富、可顯示漢字、ASCII、圖案等、同時(shí)為了方便應(yīng)用在產(chǎn)品上、預(yù)留4個(gè)M3固定孔、方便用戶固在機(jī)殼上。
2.6 MP3播放器
YS-M3語(yǔ)音播放器的特點(diǎn)有:
(1)觸發(fā)一次播放一次。
(2)9個(gè)觸發(fā)端口,直接觸發(fā)播放。
(3)結(jié)合單片機(jī)IO口編碼觸發(fā)播放31首MP3。
(4)內(nèi)部帶3W功放,滿足大部分應(yīng)用要求。
三、系統(tǒng)軟件設(shè)計(jì)
3.1 程序描述
程序中主要用到的知識(shí)點(diǎn)有:?jiǎn)纹瑱C(jī)定時(shí)器、紅外測(cè)溫傳感器的I2C通信方式和溫度計(jì)算、OLED的顯示、延時(shí)函數(shù)的調(diào)用以及LED燈的亮滅等。其中,單片機(jī)中的定時(shí)器尤為重要,主要用于產(chǎn)生固定時(shí)間,也可以作為UART等外設(shè)的頻率發(fā)生器。
3.2 程序設(shè)計(jì)思路
紅外感應(yīng)傳感器一旦檢測(cè)到有人靠近,紅外測(cè)溫模塊開(kāi)始采集溫度數(shù)據(jù)并送至單片機(jī)進(jìn)行計(jì)算,再將單片機(jī)計(jì)算出來(lái)的數(shù)據(jù)進(jìn)行比較,若在正常范圍值,則單片機(jī)發(fā)送一個(gè)低電平信號(hào)到MP3播放器進(jìn)行播報(bào)“體溫正常”且綠燈亮起。否則,播報(bào)“體溫異!鼻壹t燈亮起。同時(shí),OLED顯示屏也將從單片機(jī)得到處理完的溫度數(shù)據(jù)進(jìn)行顯示當(dāng)前檢測(cè)溫度,若在兩秒后沒(méi)人檢測(cè)溫度,OLED顯示屏將會(huì)熄滅。此時(shí)紅外感應(yīng)傳感器持續(xù)檢測(cè)是否有人。
3.3 程序流程圖
作品的程序流程圖如下圖3-1所示,紅外感應(yīng)傳感器一旦檢測(cè)到有人,將會(huì)發(fā)送一個(gè)低電平信號(hào)到單片機(jī)中,單片機(jī)即發(fā)出開(kāi)始信號(hào)START,緊接著在總線上發(fā)出尋址信號(hào)(AddressByte),其地址信息的讀/寫(xiě)控制位為1時(shí),表示對(duì)GY-906進(jìn)行讀操作。單片機(jī)接收到GY-906的應(yīng)答信號(hào),通信建立起來(lái),接著GY-906發(fā)送溫度數(shù)據(jù)的高8位。單片機(jī)則開(kāi)始一位一位的接收GY-906發(fā)出的溫度數(shù)據(jù),然后保存,完成8位數(shù)據(jù)接收后,單片機(jī)便發(fā)送一個(gè)應(yīng)答信號(hào)。GY-906收到應(yīng)答信號(hào)后,再發(fā)送溫度數(shù)據(jù)的低8位。單片機(jī)收到并保存低8位數(shù)據(jù)后,單片機(jī)在緊隨的下一個(gè)周期拉高SDA,發(fā)送不應(yīng)答信號(hào)。由此單片機(jī)將得到十六位二進(jìn)制數(shù)并加以處理,變成十進(jìn)制的BCD碼,最后通過(guò)顯示屏顯示出來(lái)。

                                               

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


四、系統(tǒng)創(chuàng)新
1、相對(duì)于額溫槍而言,該作品采用了智能感應(yīng),實(shí)現(xiàn)了非接觸式紅外測(cè)溫,可以有效地解決檢測(cè)者被感染的問(wèn)題。
2、在OLED顯示溫度的基礎(chǔ)上,增加了智能語(yǔ)音播報(bào)系統(tǒng),免去了人眼去獲取數(shù)據(jù)的步驟。
3、在GY-906紅外測(cè)溫的探頭上添加了菲涅爾光學(xué)透鏡,增加了紅外探頭的測(cè)試距離,也使整個(gè)測(cè)試系統(tǒng)更加穩(wěn)定。
五、相關(guān)調(diào)試
5.1 電前檢查
任何電子電路在組裝好之后,都必須要進(jìn)行線路檢查,以免出現(xiàn)短路。檢查的方法就是按照一定順序?qū)φ罩娐穲D進(jìn)行逐級(jí)檢查,其中要特別注意電源是否連接正確,電源與地是否有短接,集成電路和晶體管的引腳是否連接正確,用手輕輕觸動(dòng)一下元器件看焊點(diǎn)是否焊牢等等。
5.2 通電檢查
將所需電源電壓數(shù)值先調(diào)試好之后,就可以接通電路電源。電源接通之后,先觀察電路是否出現(xiàn)異,F(xiàn)象,例如出現(xiàn)冒煙、異常氣味以及器件發(fā)燙等等。如果出現(xiàn)上述異,F(xiàn)象就應(yīng)該立即斷開(kāi)電源,在確保 排除故障后才能再次接通電源。然后,測(cè)量每個(gè)集成塊的電源引腳電壓是否正常,確保集成電路已進(jìn)行正常的通電工作。
5.3 軟件調(diào)試
硬件調(diào)試完之后還要進(jìn)行軟件調(diào)試,就是將程序?qū)懭氲絾纹瑱C(jī)的存儲(chǔ)器中來(lái)實(shí)現(xiàn)整個(gè)實(shí)物的設(shè)計(jì)功能。
六、結(jié)論
體溫作為防控篩查的重要指標(biāo)之一,其數(shù)據(jù)需高度準(zhǔn)確,以利于醫(yī)護(hù)人員及時(shí)采取防控措施。在體溫篩查中,應(yīng)用非接觸式智能測(cè)溫系統(tǒng)進(jìn)行體溫初步篩查安全、有效,測(cè)量時(shí)間短,節(jié)約時(shí)間,降低感染風(fēng)險(xiǎn),節(jié)省工作人員勞動(dòng)量等。
在此次非接觸式智能測(cè)溫控制系統(tǒng)的設(shè)計(jì)中,讓我感覺(jué)到了單片機(jī)應(yīng)用的廣泛性,它很貼切我們的日常生活,應(yīng)用無(wú)處不有,它并不是想象中的那么復(fù)雜。在設(shè)計(jì)中,要充分了解所用芯片的使用條件及輸入輸出的特性,這樣才能避免因使用錯(cuò)誤而多走彎路。電路設(shè)計(jì)部分應(yīng)該有的精神就是廣集資料。只憑借自己頭腦中的知識(shí)是遠(yuǎn)遠(yuǎn)不夠的。哪里出現(xiàn)了問(wèn)題,就要翻書(shū)本,或上網(wǎng)查資料。當(dāng)然也要開(kāi)動(dòng)自己的腦筋怎樣使系統(tǒng)電路更完美。例如我的設(shè)計(jì)是非接觸式智能測(cè)溫系統(tǒng)。有非接觸式測(cè)溫,自然會(huì)用到紅外測(cè)溫傳感器,每種紅外測(cè)溫傳感器都有不同的特性和功能,你就要進(jìn)行選擇了。例如對(duì)紅外測(cè)溫傳感器的選擇,你就要選擇你所熟悉的、所了解的。在電路設(shè)計(jì)時(shí),應(yīng)充分發(fā)揮單片機(jī)的記憶運(yùn)算、判斷控制能力,避免采用復(fù)雜的、穩(wěn)定性較差的模擬電路。為了使微機(jī)控制系統(tǒng)各種硬件設(shè)備能夠正常運(yùn)行,有效地實(shí)現(xiàn)作品的相關(guān)功能,除了要設(shè)計(jì)合理的硬件電路,還必須要有高質(zhì)量的軟件支持,兩者相輔相成,共同維持系統(tǒng)的正常運(yùn)作。
   七、單片機(jī)+MLX90614代碼及作品圖
  1. #include "reg52.h"
  2. #include "stdio.h"
  3. #include "LQ12864.h"
  4. #include "GY906.h"
  5. #include "eepom.h"

  6. sbit  hongwai=P1^5;                                  //紅外感應(yīng)傳感器
  7. sbit MP3_1 = P2^4;                                              //語(yǔ)音播放異常
  8. sbit MP3_2 = P2^5;                                                  //語(yǔ)音播放正常
  9. sbit LED1 = P1^2;                                                  //紅色LED燈
  10. sbit LED2 = P1^3;                                                  //綠色LED燈

  11. float  wendu_change;
  12. unsigned int temp_int;
  13. unsigned int  temp ;
  14. unsigned int ceshi ;
  15. uint temp_[3]={0};
  16. uint biaohao_num_[3]={0};
  17. uchar diaplay_5s = 0;                        //讀取顯示
  18. uchar flage_5s;                         //5s計(jì)時(shí)
  19. uint zhancun;
  20. uchar first_flage = 1;


  21. /*

  22. 紅外感應(yīng)傳感器 P1^5;
  23. 語(yǔ)音播放       P2^4/P2^5
  24. LED            P1^2/P1^3

  25. oled  端口定義
  26. sbit SCL_OLED=P1^0; //串行時(shí)鐘
  27. sbit SDA_OLED=P1^1; //串行數(shù)據(jù)

  28. //GY-906 端口定義
  29. sbit  SCL=P2^6;// 時(shí)鐘線
  30. sbit  SDA=P2^7;// 數(shù)據(jù)線
  31. */



  32. void oled_gd_diaplay()
  33. {
  34.         
  35.                 OLED_P16x16Ch(70,0,0);         //溫
  36.                 OLED_P16x16Ch(90,0,1);        //度
  37.                 OLED_P16x16Ch(110,0,2);        //:
  38. //                dxzm('.',70,0);                        //.
  39.         
  40. }

  41. void oled_wendu()
  42. {

  43.         char i;
  44.         if(temp > 0)
  45.         {
  46.                         if (0 == diaplay_5s)        
  47.                         {
  48.                                 
  49.                                         OLED_P16x16Ch(0,0,3);          // 閩
  50.                                 OLED_P16x16Ch(20,0,4);             // 南
  51.                                         OLED_P16x16Ch(40,0,5);          // 科
  52.                                 OLED_P16x16Ch(60,0,6);             // 技
  53.                                         OLED_P16x16Ch(80,0,7);          // 學(xué)
  54.                                 OLED_P16x16Ch(100,0,8);             // 院

  55.                                 OLED_P16x16Ch(0,4,0);              // 溫
  56.                                 OLED_P16x16Ch(20,4,1);             // 度
  57.                                 OLED_P16x16Ch(40,4,2);             //  :
  58.                                 
  59.                                         //我們要達(dá)到的體溫精度是0.1,因此要有三位數(shù)
  60. //                                dxzm(((int)(temp)/100)+48,50,0);
  61.                                 dxzm(((temp)/100)+48,60,4);          //進(jìn)行顯示百位        
  62.                                 dxzm(((temp)/10%10)+48,70,4); //進(jìn)行顯示十位
  63.                                 dxzm('.',80,4);                                  //進(jìn)行顯示.
  64.                                 dxzm(((temp)%10+48),90,4);          //進(jìn)行顯示個(gè)位
  65.                         }
  66.                         
  67.                         else                                       //讀取溫度標(biāo)志位等于 1
  68.                         {
  69.                                         oled_gd_diaplay();                                 
  70.                                         TR0 =1;                              //打開(kāi)定時(shí)器
  71.                                        
  72.                                 for(i = 0;i < 3;i++)
  73.                                 {
  74.                                        
  75.                                                 dxzm(0+48,70,i*2+2);
  76.                                                 dxzm((temp_[i]/100)+48,80,i*2+2);
  77.                                                 dxzm((temp_[i]/10%10)+48,90,i*2+2);
  78.                                                 dxzm('.',100,i*2+2);                        //.
  79.                                                 dxzm((temp_[i]%10)+48,110,i*2+2);        
  80.                                        
  81.                                 }
  82.                                 
  83.                                 if(flage_5s >= 100)          //顯示5s
  84.                                 {
  85.                                         TR0 = 0;
  86.                                         diaplay_5s = 0;
  87.                                         flage_5s = 0;
  88.                                         OLED_Fill(00);
  89.                                 }
  90.                                 
  91.                         }
  92.         }
  93.                
  94. }

  95. /******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eepom中******************/
  96. void write_eepom(uchar num)
  97. {        char num_num,i;
  98.         if(1 == first_flage)
  99.         {
  100.                 SectorErase(0x2000);
  101.                 first_flage = 0;
  102.         }
  103.         
  104.         if(5 == num)
  105.         {
  106.                 for(i=0;i<9;i++)
  107.                 {
  108.                         byte_write(0x2000+i,0);
  109.                 }

  110.         }
  111.         else if(num!=5)
  112.         {
  113.                 num_num = num*3;
  114.                 byte_write(0x2000+num_num,(temp) % 256);
  115.                 byte_write(0x2001+num_num,(temp) / 256);
  116.                 byte_write(0x2002+num_num,num);
  117.         }

  118. }

  119. /******************把數(shù)據(jù)從單片機(jī)內(nèi)部eepom中讀出來(lái)*****************/
  120. void read_eepom(uchar tem_num, uchar biao ,uchar num)
  121. {
  122.         temp_[tem_num]  = byte_read(0x2001+num*3);
  123.         temp_[tem_num]  <<= 8;
  124.         temp_[tem_num]   |= byte_read(0x2000+num*3);
  125.         biaohao_num_[biao] = byte_read(0x2002+num*3);

  126. }

  127. void read_all_data()
  128. {
  129.         uchar i;
  130.         for(i =0;i<3;i++)
  131.         {
  132.                 read_eepom(i,i,i);
  133. //                delay(50);
  134.         }
  135. }

  136. void Tim_init()
  137. {
  138.                 SCON = 0x50;        /* 010 1 0000B,工作方式1, 8位UART,波特率可變,允許接收 */
  139.                 TMOD = 0x21;        /* T1工作于方式2 T0工作在方式1*/
  140.                 TCON = 0x40;        /* 定時(shí)器1開(kāi)始計(jì)數(shù) */
  141.                 TH1 = 250;                /* T1計(jì)數(shù)初值 */
  142.                 TL1 = 250;
  143.                 PCON = 0x80;        /* SMOD置1,雙倍速率 */
  144.                 RI = 0;
  145.                 TI = 1;                //串口打印必需為1
  146.         
  147.     TL0 = (65536-50000)%256;                     //reload timer0 low byte
  148.     TH0 = (65536-50000)/256;               //reload timer0 high byte
  149. //    TR0 = 1;                        //timer0 start running
  150.     ET0 = 1;                        //enable timer0 interrupt
  151.     EA = 1;                         //open global interrupt switch
  152. }


  153.    

  154. int main(void)
  155. {
  156.         Tim_init();                                            //定時(shí)器和串口的初始化
  157.         i2c_Init();                                            //屏幕通訊初始化
  158.         OLED_Init();                                    //oled顯示初始

  159.         while(1)
  160.         {
  161.                  if(hongwai==0)                                                        //紅外感應(yīng)傳感器判斷是否有人
  162.                   {
  163.                          temp = (int)(memread()*10);                //  讀取溫度,讀取小數(shù)點(diǎn)后一位所以*10        
  164.                          oled_wendu();                                       //        oled顯示當(dāng)前溫度
  165.                           if(temp>372)                                            //判斷溫度是否大于37.2
  166.                           {
  167.                             MP3_1=0;                                            //播放體溫異常
  168.                                 LED1=0;                                                    // 同時(shí)紅色LED燈亮起
  169.                                    delay(1000);                                    // 給語(yǔ)音播放和紅色lED燈亮,留一點(diǎn)時(shí)間
  170.                                    MP3_1=1;                                            // 關(guān)閉語(yǔ)音播放
  171.                                  LED1=1;                                            //關(guān)閉紅色LED
  172.                           }
  173.                           else if(temp<361)                                    //判斷溫度是否小于36.1
  174.                           {
  175.                             MP3_1=0;                                            //播放體溫異常
  176.                                    LED1=0;                                                    // 同時(shí)紅色LED燈亮起
  177.                                    delay(1000);                                        // 給語(yǔ)音播放和紅色lED燈亮留一點(diǎn)時(shí)間
  178.                                   MP3_1=1;                                                // 關(guān)閉語(yǔ)音播放
  179.                                 LED1=1;                                                        //關(guān)閉紅色LED
  180.                           }
  181.                           else                                                                // 溫度在36.1-37.2之間         
  182.                           {
  183.                                     MP3_2=0;                                                //播放體溫正常
  184.                                   LED2=0;                                                // 同時(shí)綠色LED燈亮起
  185.                                     delay(1000);                                // 給語(yǔ)音播放和綠色lED燈亮,留一點(diǎn)時(shí)間
  186.                                     MP3_2=1;                                                // 關(guān)閉語(yǔ)音播放
  187.                                   LED2=1;                                                //關(guān)閉綠色LED
  188.                           }
  189.                            delay(1200);                                                //使得一秒左右的時(shí)間,只采集一次,避免測(cè)量者再測(cè)溫的時(shí)候一下子采集了好幾組數(shù)據(jù)
  190.                
  191.                   }
  192.                   else                                                                        //紅外檢測(cè)沒(méi)人
  193.                   {
  194.                   
  195.                           MP3_1=1;                                                        // 關(guān)閉語(yǔ)音播放
  196.                         MP3_2=1;                                                        // 關(guān)閉語(yǔ)音播放
  197.                         LED1=1;                                                                //關(guān)閉紅色LED
  198.                         LED2=1;                                                                //關(guān)閉綠色LED
  199.                            delay(1200);                                                //調(diào)用延時(shí) ,讓最后一個(gè)的體溫?cái)?shù)據(jù)顯示停留一段時(shí)間
  200.                         OLED_Fill(0x00);                    //進(jìn)行清屏,熄滅屏幕
  201.                   }
  202.          
  203.         }
  204. }



  205. /* Timer0 interrupt routine */
  206. void tm0_isr() interrupt 1 using 1                //50ms中斷計(jì)時(shí)
  207. {
  208.     TL0 = (65536-50000)%256;                     //reload timer0 low byte
  209.     TH0 = (65536-50000)/256;               //reload timer0 high byte
  210.                 flage_5s++;

  211. }



  212.         

復(fù)制代碼




本程序出自:http://www.torrancerestoration.com/bbs/dpj-181601-1.html
本作品大部分內(nèi)容來(lái)自于網(wǎng)上轉(zhuǎn)載,做出了一些修改,目前也不是很完善,望大家能繼續(xù)完善本開(kāi)源作品,一起學(xué)習(xí),共同進(jìn)步,感謝開(kāi)源作者,感謝大家:
上圖代碼的Keil工程文件51hei附件下載:
非接觸式智能測(cè)溫系統(tǒng)-程序.zip (94.66 KB, 下載次數(shù): 239)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏11 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:699194 發(fā)表于 2020-10-22 20:40 | 只看該作者
你好,這是我關(guān)注的博主發(fā)的,你抄別人的程序,然后原博主都不標(biāo)志名字。。。你有點(diǎn)那個(gè)。。。。拿別的博主程序加了個(gè)提醒。。。。
回復(fù)

使用道具 舉報(bào)

板凳
ID:97678 發(fā)表于 2020-10-23 11:00 | 只看該作者
我叫小大打 發(fā)表于 2020-10-22 20:40
你好,這是我關(guān)注的博主發(fā)的,你抄別人的程序,然后原博主都不標(biāo)志名字。。。你有點(diǎn)那個(gè)。。。。拿別的博 ...

在哪里抄的?
說(shuō)明一下。!
回復(fù)

使用道具 舉報(bào)

地板
ID:699194 發(fā)表于 2020-10-24 19:51 | 只看該作者
jovew 發(fā)表于 2020-10-23 11:00
說(shuō)明一下。。

想看看原博主的東西嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:876653 發(fā)表于 2021-1-15 17:36 來(lái)自觸屏版 | 只看該作者
請(qǐng)問(wèn)MP3模塊怎么接線呢,試了下能測(cè)體溫,但是為什么每次測(cè)人體溫都是40多度了,求教
回復(fù)

使用道具 舉報(bào)

6#
ID:905656 發(fā)表于 2021-5-23 22:54 來(lái)自觸屏版 | 只看該作者
請(qǐng)問(wèn)MP3模塊具體型號(hào)是什么
回復(fù)

使用道具 舉報(bào)

7#
ID:957243 發(fā)表于 2021-8-1 12:02 | 只看該作者
海鷹zero 發(fā)表于 2021-1-15 17:36
請(qǐng)問(wèn)MP3模塊怎么接線呢,試了下能測(cè)體溫,但是為什么每次測(cè)人體溫都是40多度了,求教

原理圖能分享一下嗎?
回復(fù)

使用道具 舉報(bào)

8#
ID:328014 發(fā)表于 2021-8-1 17:12 | 只看該作者
直接看程序里面的引腳定義,如果和你的不同,根據(jù)自己的電路修改

回復(fù)

使用道具 舉報(bào)

9#
ID:990898 發(fā)表于 2021-12-12 23:11 | 只看該作者
那些沒(méi)有的頭文件是怎么打出來(lái)的?
回復(fù)

使用道具 舉報(bào)

10#
ID:1020809 發(fā)表于 2022-4-23 23:48 | 只看該作者
51hei團(tuán)團(tuán) 發(fā)表于 2021-8-1 17:12
直接看程序里面的引腳定義,如果和你的不同,根據(jù)自己的電路修改

你好,可以分享一下這個(gè)程序的全圖嗎?
回復(fù)

使用道具 舉報(bào)

11#
ID:1052693 發(fā)表于 2022-11-18 19:53 | 只看該作者
jovew 發(fā)表于 2020-10-23 11:00
說(shuō)明一下。!

我也想知道,我翔咨詢(xún)點(diǎn)GY-906的問(wèn)題
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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