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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

溫濕度藍牙煙霧光照

[復制鏈接]
跳轉到指定樓層
樓主
ID:918728 發表于 2024-4-2 17:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "reg51.h"
#include "ADC0832.h"
#include "DHT11.h"
#include "lcd1602.h"
#define uchar unsigned char
#define uint unsigned int
       
sbit REN_P     = P1^0;    // 人體
sbit beep=P1^5;//蜂鳴器
sbit shuibeng=P1^7;//shuibeng
sbit fengshan=P2^0;//fengshan
sbit Led_P     = P1^6;                //  LED燈
sbit k1=P2^1;//按鈕
sbit k2=P2^2;
sbit k3=P2^3;
sbit k4=P2^4;
sbit k5=P3^7;
uchar time=0,sec=0;//系統定時
uchar YAN=0;//煙霧
uchar guangzhao=0;                                        // 保存光照
uchar down[]={1,15,30};//下限
uchar up[]={20,40,80};//上限
uchar disp1[]="00 ";
uchar disp2[]="00% ";
uchar mode=0;//模式
//主函數
uchar gCount=0;                                                                // 全局計數變量
uchar gIndex;                                                                        // 亮度變量,0是最暗,9是最亮,一共10檔
uint  gTime=0;                                                                // 計時變量,用于計時多久沒檢測到有人
unsigned char Tx_Buf[24];
unsigned char Tx_RENTI_Buf[12];
unsigned char Tx_YANWU_Buf[7];
unsigned char Tx_WENDU_Buf[7];
unsigned char Rx_buf[1];
unsigned char cmd, tx_flag = 0, cnt = 0;
/*********************************************************/
// 定時器初始化
/*********************************************************/
void TimerInit()
{
    TMOD = 0x21;
    SCON = 0x50;
    TL0 = 0xb0;
    TH0 = 0x3c;                        //賦初值50ms
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
    ET0 = 1;                                //打開定時器0中斷允許開關
    TR0 = 1;                                //打開定時器0定時開關
}
/**********************************************************************************************************
**函數名稱 :uart1_send(unsigned char buf)
**函數描述 :uart發送函數
**輸    入 :buf
**輸    出 :None
**********************************************************************************************************/
void uartx_send(unsigned char buf[])
{
   unsigned char i=0;
   while(  buf[i] != '\0')
   {
       SBUF = buf[i];
             delay1ms(10);
             TI = 0;
             i++;
   }
}
void number(void)
{
    Tx_Buf[0] = 'Y';                                                //幀頭
    Tx_Buf[1] = 'W';                                                //將庫存數據送往發送數組,送給藍牙模塊讓手機APP顯示
    Tx_Buf[2] = ':';                                                //
    Tx_Buf[3] = YAN / 10 + 0x30;                //
    Tx_Buf[4] = YAN%10 + 0x30;
    Tx_Buf[5] = '%';
       
    Tx_Buf[6] = 'G';                                                //幀頭
    Tx_Buf[7] = 'Z';                                                //將庫存數據送往發送數組,送給藍牙模塊讓手機APP顯示
    Tx_Buf[8] = ':';                                                //
    Tx_Buf[9] = guangzhao / 10 + 0x30;                //
    Tx_Buf[10] = guangzhao%10 + 0x30;
    Tx_Buf[11] = '%';
    Tx_Buf[12] = 'W';                                                //幀頭
    Tx_Buf[13] = 'D';                                                //將庫存數據送往發送數組,送給藍牙模塊讓手機APP顯示
    Tx_Buf[14] = ':';                                                //
    Tx_Buf[15] = dht11_dat[2]/10 + 0x30;                //
    Tx_Buf[16] = dht11_dat[2]%10 + 0x30;
    Tx_Buf[17] = 'C';
       
    Tx_Buf[18] = 'S';                                                //幀頭
    Tx_Buf[19] = 'D';                                                //將庫存數據送往發送數組,送給藍牙模塊讓手機APP顯示
    Tx_Buf[20] = ':';                                                //
    Tx_Buf[21] = dht11_dat[0] / 10 + 0x30;                //
    Tx_Buf[22] = dht11_dat[0]%10 + 0x30;
    Tx_Buf[23] = '%';       
}
void number2(void)
{
        Tx_RENTI_Buf[0] ='Y';       
        Tx_RENTI_Buf[1] ='O';       
        Tx_RENTI_Buf[2] ='U';       
        Tx_RENTI_Buf[3] ='R';       
        Tx_RENTI_Buf[4] ='E';       
        Tx_RENTI_Buf[5] ='N';       
        Tx_RENTI_Buf[6] ='J';       
        Tx_RENTI_Buf[7] ='I';
        Tx_RENTI_Buf[8] ='N';               
        Tx_RENTI_Buf[9] ='R';               
        Tx_RENTI_Buf[10] ='U';       
        Tx_RENTI_Buf[11] ='!';                       
}
void number3(void)
{
        Tx_YANWU_Buf[0] ='Y';       
        Tx_YANWU_Buf[1] ='A';       
        Tx_YANWU_Buf[2] ='N';       
        Tx_YANWU_Buf[3] ='W';       
        Tx_YANWU_Buf[4] ='U';       
        Tx_YANWU_Buf[5] ='!';       
        Tx_YANWU_Buf[6] ='!';       
        Tx_YANWU_Buf[7] ='!';               
}
void number4(void)
{
        Tx_WENDU_Buf[0] ='W';       
        Tx_WENDU_Buf[1] ='E';       
        Tx_WENDU_Buf[2] ='N';       
        Tx_WENDU_Buf[3] ='D';       
        Tx_WENDU_Buf[4] ='U';       
        Tx_WENDU_Buf[5] ='!';       
        Tx_WENDU_Buf[6] ='!';       
        Tx_WENDU_Buf[7] ='!';               
}
/*********************************************************/
// 是否需要報警判斷
/*********************************************************/
void AlarmJudge(void)
{
                //判斷
                if(YAN>up[0])//煙霧
                {
                 tx_flag = 1;
                 number3();       
                 uartx_send(Tx_YANWU_Buf);                               
                        fengshan=0;
                }
                else
                {
                  tx_flag = 0;                       
                        fengshan=1;
                }
                if(dht11_dat[2]>up[1])//溫度
                {
                 tx_flag = 1;
                 number4();       
                 uartx_send(Tx_WENDU_Buf);
                        shuibeng=0;
                       
                }
                else
                {
                  tx_flag = 0;       
                        shuibeng=1;       
                }
                //報警
                if((YAN<down[0])||(YAN>up[0]))
                        sec=10;
                if((dht11_dat[2]<down[1])||(dht11_dat[2]>up[1]))
                        sec=10;
                if((dht11_dat[0]<down[2])||(dht11_dat[0]>up[2]))
                        sec=10;       
}
/*********************************************************/
// 按鍵掃描,用于設置報警范圍
/*********************************************************/
void keyscan()
{
        if(!k1)                 //設置
                {
                        if(mode<3)
                                mode++;
                        else
                                mode=0;
                        while(!k1);
                }
                if(mode>0)//上下限設置
                {
                        if(!k2)
                        {
                                if(up[mode-1]<99)
                                        up[mode-1]++;
                                while(!k2);
                        }
                        if(!k3)
                        {
                                if(up[mode-1]>0)
                                        up[mode-1]--;
                                while(!k3);
                        }
                        if(!k4)
                        {
                                if(down[mode-1]<99)
                                        down[mode-1]++;
                                while(!k4);
                        }
                        if(!k5)
                        {
                                if(down[mode-1]>0)
                                        down[mode-1]--;
                                while(!k5);
                        }
                }
}
/*********************************************************/
// 自動控制
/*********************************************************/
void AutoControl(uchar num)
{
if(num<54)                                                                                                                // 最亮
Led_P=0;
else if((num>55)&&(num<65))                                        // 第三亮
gIndex=3;
else if((num>70)&&(num<75))
gIndex=5;
else if((num>80)&&(num<85))
gIndex=7;
else if((num>90)&&(num<95))
gIndex=9;
else if(num>100)                                                                                 // 最暗
Led_P=1;
}
/*********************************************************/
// 主函數
/*********************************************************/
void main()
{
        unsigned char i;
        disp1[2]=0xdf;
        init_1602();       
  TimerInit();
        while(1)
        {
                for(i=0;i<20;i++)
                {
                        number();
                        keyscan();
                        AlarmJudge();
                        AutoControl(guangzhao);                        // 進行自動控制       
                        if(REN_P==0)
                        {                       
                     beep=0;
                                 tx_flag = 1;
         number2();       
                                 uartx_send(Tx_RENTI_Buf);                               
                        }
                        else
                        {
                                tx_flag = 0;                               
                                 beep=1;
                        }                       
                }
                if(tx_flag == 1)
                {
                                tx_flag = 0;
                                uartx_send(Tx_Buf);
                }               
        }
}
//定時器中斷
void Timer0() interrupt 1
{       
        uint i,j;
        if(sec>0)  //蜂鳴器驅動
        {
                sec--;
                beep=0;
        }
        else
                beep=1;
       
        gCount++;                                                        // 每1毫秒,gCount變量加1
        if(gCount>=10)                                // 如果gCount加到10了
        {
                gCount=0;                                                // 則將gCount清零,進入新一輪的計數
                if(gIndex!=0)                                // 如果說臺燈不是最暗的(熄滅)
                {
                        Led_P=0;                                                // 則把臺燈點亮
                }
        }
        if(gCount==gIndex)                // 如果gCount計數到和gIndex一樣了
        {
                if(gIndex!=9)                                // 如果說臺燈不是最亮的
                {
                        Led_P=1;                                                // 則把臺燈熄滅
                }
        }       
       
        if(time<19)//0.5s
                time++;
        else
        {
                time=0;
                YAN=ADC(2);//測量煙霧
                i=YAN;
                YAN=i*99/127;
                guangzhao=ADC(1);//測量煙霧
                j=guangzhao;
                guangzhao=j*99/127;               
                dht11_recive();//測量溫濕度
                //顯示
                if(mode==0)
                {
                        write_string(1,0,"YAN:");//煙霧
                        disp2[0]=YAN/10+0x30;
                        disp2[1]=YAN%10+0x30;
                        write_string(1,4,disp2);
                       
                        write_string(1,8,"GUA:");//光照
                        disp2[0]=guangzhao/10+0x30;
                        disp2[1]=guangzhao%10+0x30;
                        write_string(1,12,disp2);       
                       
                        write_string(2,0,"tem:");//溫度
                        disp1[0]=dht11_dat[2]/10+0x30;
                        disp1[1]=dht11_dat[2]%10+0x30;
                        write_string(2,4,disp1);
                        write_string(2,8,"hum:");//濕度
                        disp2[0]=dht11_dat[0]/10+0x30;
                        disp2[1]=dht11_dat[0]%10+0x30;
                        write_string(2,12,disp2);
                }
                if(mode==1)//煙霧
                {
                        write_string(1,0,"YAN:   ");
                        write_string(2,0,"  H:");
                        write_string(1,8,"       ");//光照                       
                        disp2[0]=up[0]/10+0x30;
                        disp2[1]=up[0]%10+0x30;
                        write_string(2,4,disp2);
                        write_string(2,8,"  L:");
                        disp2[0]=down[0]/10+0x30;
                        disp2[1]=down[0]%10+0x30;
                        write_string(2,12,disp2);
                }
                if(mode==2)//溫度
                {
                        write_string(1,0,"temp:  ");
                        write_string(2,0,"  H:");
                        disp1[0]=up[1]/10+0x30;
                        disp1[1]=up[1]%10+0x30;
                        write_string(2,4,disp1);
                        write_string(2,8,"  L:");
                        disp1[0]=down[1]/10+0x30;
                        disp1[1]=down[1]%10+0x30;
                        write_string(2,12,disp1);
                }
                if(mode==3)//濕度
                {
                        write_string(1,0,"humi:  ");
                        write_string(2,0,"  H:");
                        disp2[0]=up[2]/10+0x30;
                        disp2[1]=up[2]%10+0x30;
                        write_string(2,4,disp2);
                        write_string(2,8,"  L:");
                        disp2[0]=down[2]/10+0x30;
                        disp2[1]=down[2]%10+0x30;
                        write_string(2,12,disp2);
                }
        }
        TH0=0X3C;
        TL0=0XB0;
}
void UART1_irq() interrupt 4 //處理接收的串口數據
{
   static unsigned char tmp;
    ES=0;  
    if(RI)                                      //接收到字節
    {
        tmp = SBUF;

        if(tmp == 0x01)
        {
            tx_flag = 1;
        }
        RI = 0;                                 //手動清零接收中斷標志位
    }
       
    ES=1;         
}


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91久久久久久久久 | 国产欧美一区二区三区在线播放 | 亚洲性网 | 久色网 | 久久成人人人人精品欧 | 欧美日韩视频在线播放 | 九九热在线免费观看 | 一区二区三区四区在线 | 亚洲一区二区在线视频 | 久久手机视频 | 91精品国产乱码久久久久久久久 | 久久久久久久国产精品视频 | 在线观看国产视频 | 日韩精品在线看 | 国产成人99久久亚洲综合精品 | 久久国产精品一区 | 玖玖色在线视频 | 日本精品一区二区三区视频 | 男女视频在线观看免费 | 一区二区三区网站 | 欧美一卡二卡在线 | 亚洲日本免费 | 国产精品福利视频 | 亚洲精品一区在线 | 中文字幕在线一区二区三区 | 一区二区三区中文字幕 | 一级毛片观看 | 免费看日韩视频 | 亚洲三级在线 | 亚洲国产精品久久久久秋霞不卡 | 欧美在线高清 | 日本精品在线一区 | 国产一区二区三区亚洲 | 久久网一区二区 | 国产成人精品免费视频 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 亚洲国产日韩欧美 | 久久久蜜桃一区二区人 | 国产精品1区2区 | 日韩美av| 在线婷婷|