久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1781|回復: 1
打印 上一主題 下一主題
收起左側

非接觸式測溫系統部分代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:495574 發表于 2020-10-10 08:19 來自手機 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  部分代碼及作品圖
#include "reg52.h"
#include "stdio.h"
#include "LQ12864.h"
#include "GY906.h"
#include "eepom.h"

sbit  hongwai=P1^5;                                  //紅外感應傳感器
sbit MP3_1 = P2^4;                                              //語音播放異常
sbit MP3_2 = P2^5;                                                  //語音播放正常
sbit LED1 = P1^2;                                                  //紅色LED燈
sbit LED2 = P1^3;                                                  //綠色LED燈

float  wendu_change;
unsigned int temp_int;
unsigned int  temp ;
unsigned int ceshi ;
uint temp_[3]={0};
uint biaohao_num_[3]={0};
uchar diaplay_5s = 0;                        //讀取顯示
uchar flage_5s;                         //5s計時
uint zhancun;
uchar first_flage = 1;


/*

紅外感應傳感器 P1^5;
語音播放       P2^4/P2^5
LED            P1^2/P1^3

oled  端口定義
sbit SCL_OLED=P1^0; //串行時鐘
sbit SDA_OLED=P1^1; //串行數據

//GY-906 端口定義
sbit  SCL=P2^6;// 時鐘線
sbit  SDA=P2^7;// 數據線
*/



void oled_gd_diaplay()
{
        
                OLED_P16x16Ch(70,0,0);         //溫
                OLED_P16x16Ch(90,0,1);        //度
                OLED_P16x16Ch(110,0,2);        //:
//                dxzm('.',70,0);                        //.
        
}

void oled_wendu()
{

        char i;
        if(temp > 0)
        {
                        if (0 == diaplay_5s)        
                        {
                                
                                        OLED_P16x16Ch(0,0,3);          // 閩
                                OLED_P16x16Ch(20,0,4);             // 南
                                        OLED_P16x16Ch(40,0,5);          // 科
                                OLED_P16x16Ch(60,0,6);             // 技
                                        OLED_P16x16Ch(80,0,7);          // 學
                                OLED_P16x16Ch(100,0,8);             // 院

                                OLED_P16x16Ch(0,4,0);              // 溫
                                OLED_P16x16Ch(20,4,1);             // 度
                                OLED_P16x16Ch(40,4,2);             //  :
                                
                                        //我們要達到的體溫精度是0.1,因此要有三位數
//                                dxzm(((int)(temp)/100)+48,50,0);
                                dxzm(((temp)/100)+48,60,4);          //進行顯示百位        
                                dxzm(((temp)/10%10)+48,70,4); //進行顯示十位
                                dxzm('.',80,4);                                  //進行顯示.
                                dxzm(((temp)%10+48),90,4);          //進行顯示個位
                        }
                        
                        else                                       //讀取溫度標志位等于 1
                        {
                                        oled_gd_diaplay();                                 
                                        TR0 =1;                              //打開定時器
                                       
                                for(i = 0;i < 3;i++)
                                {
                                       
                                                dxzm(0+48,70,i*2+2);
                                                dxzm((temp_[i]/100)+48,80,i*2+2);
                                                dxzm((temp_[i]/10%10)+48,90,i*2+2);
                                                dxzm('.',100,i*2+2);                        //.
                                                dxzm((temp_[i]%10)+48,110,i*2+2);        
                                       
                                }
                                
                                if(flage_5s >= 100)          //顯示5s
                                {
                                        TR0 = 0;
                                        diaplay_5s = 0;
                                        flage_5s = 0;
                                        OLED_Fill(00);
                                }
                                
                        }
        }
               
}

//把數據保存到單片機內部
void write_eepom(uchar num)
{        char num_num,i;
        if(1 == first_flage)
        {
                SectorErase(0x2000);
                first_flage = 0;
        }
        
        if(5 == num)
        {
                for(i=0;i<9;i++)
                {
                        byte_write(0x2000+i,0);
                }

        }
        else if(num!=5)
        {
                num_num = num*3;
                byte_write(0x2000+num_num,(temp) % 256);
                byte_write(0x2001+num_num,(temp) / 256);
                byte_write(0x2002+num_num,num);
        }

}

//把數據從單片機內讀出
void read_eepom(uchar tem_num, uchar biao ,uchar num)
{
        temp_[tem_num]  = byte_read(0x2001+num*3);
        temp_[tem_num]  <<= 8;
        temp_[tem_num]   |= byte_read(0x2000+num*3);
        biaohao_num_[biao] = byte_read(0x2002+num*3);

}

void read_all_data()
{
        uchar i;
        for(i =0;i<3;i++)
        {
                read_eepom(i,i,i);
//                delay(50);
        }
}

void Tim_init()
{
                SCON = 0x50;        /* 010 1 0000B,工作方式1, 8位UART,波特率可變,允許接收 */
                TMOD = 0x21;        /* T1工作于方式2 T0工作在方式1*/
                TCON = 0x40;        /* 定時器1開始計數 */
                TH1 = 250;                /* T1計數初值 */
                TL1 = 250;
                PCON = 0x80;        /* SMOD置1,雙倍速率 */
                RI = 0;
                TI = 1;                //串口打印必需為1
        
    TL0 = (65536-50000)%256;                     //reload timer0 low byte
    TH0 = (65536-50000)/256;               //reload timer0 high byte
//    TR0 = 1;                        //timer0 start running
    ET0 = 1;                        //enable timer0 interrupt
    EA = 1;                         //open global interrupt switch
}


   

int main(void)
{
        Tim_init();                                            //定時器和串口的初始化
        i2c_Init();                                            //屏幕通訊初始化
        OLED_Init();                                    //oled顯示初始

        while(1)
        {
                 if(hongwai==0)                                                        //紅外感應傳感器判斷是否有人
                  {
                         temp = (int)(memread()*10);                //  讀取溫度,讀取小數點后一位所以*10        
                         oled_wendu();                                       //        oled顯示當前溫度
                          if(temp>372)                                            //判斷溫度是否大于37.2
                          {
                            MP3_1=0;                                            //播放體溫異常
                                LED1=0;                                                    // 同時紅色LED燈亮起
                                   delay(1000);                                    // 給語音播放和紅色lED燈亮,留一點時間
                                   MP3_1=1;                                            // 關閉語音播放
                                 LED1=1;                                            //關閉紅色LED
                          }
                          else if(temp<361)                                    //判斷溫度是否小于36.1
                          {
                            MP3_1=0;                                            //播放體溫異常
                                   LED1=0;                                                    // 同時紅色LED燈亮起
                                   delay(1000);                                        // 給語音播放和紅色lED燈亮留一點時間
                                  MP3_1=1;                                                // 關閉語音播放
                                LED1=1;                                                        //關閉紅色LED
                          }
                          else                                                                // 溫度在36.1-37.2之間         
                          {
                                    MP3_2=0;                                                //播放體溫正常
                                  LED2=0;                                                // 同時綠色LED燈亮起
                                    delay(1000);                                // 給語音播放和綠色lED燈亮,留一點時間
                                    MP3_2=1;                                                // 關閉語音播放
                                  LED2=1;                                                //關閉綠色LED
                          }
                           delay(1200);                                                //使得一秒左右的時間,只采集一次,避免測量者再測溫的時候一下子采集了好幾組數據
               
                  }
                  else                                                                        //紅外檢測沒人
                  {
                  
                          MP3_1=1;                                                        // 關閉語音播放
                        MP3_2=1;                                                        // 關閉語音播放
                        LED1=1;                                                                //關閉紅色LED
                        LED2=1;                                                                //關閉綠色LED
                           delay(1200);                                                //調用延時 ,讓最后一個的體溫數據顯示停留一段時間
                        OLED_Fill(0x00);                    //進行清屏,熄滅屏幕
                  }
         
        }
}



/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1                //50ms中斷計時
{
    TL0 = (65536-50000)%256;                     //reload timer0 low byte
    TH0 = (65536-50000)/256;               //reload timer0 high byte
                flage_5s++;

}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:497410 發表于 2021-3-20 21:26 | 只看該作者
   if(5 == num)
        {
                for(i=0;i<9;i++)
                {
                        byte_write(0x2000+i,0);
                }

        }  這一段什么意思 為啥num==5
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品一区| 国产精品久久久 | 国产精品久久九九 | 天堂一区二区三区 | 综合久久99| 日韩毛片| 午夜激情小视频 | 久草.com | 亚洲欧洲精品一区 | 色综合九九 | av资源中文在线 | 夜夜爽99久久国产综合精品女不卡 | 欧美日韩成人影院 | 精品视频一区二区 | 日本久久综合网 | 精品视频一二区 | 国产一二区免费视频 | 成人一区二区三区 | 欧美日韩在线一区 | 成人免费观看视频 | 久久久亚洲精品视频 | 亚洲 欧美 在线 一区 | 日韩综合在线 | 一区二区三区精品视频 | 一区二区三区四区毛片 | 美女在线观看国产 | 国产精品视频一二三区 | 亚洲精品美女视频 | 免费亚洲成人 | 青娱乐av | 国产精品成人一区 | 91精品国产91久久久久久最新 | 亚洲成人高清 | 亚洲福利在线观看 | 日韩欧美国产一区二区三区 | 男人天堂网址 | gav成人免费播放视频 | 日韩a| 天天拍天天操 | 久久精品久久久 | 一区二区三区免费 |