测甲醛浓度,一二级报警设置

2019-07-15 08:33发布

思路:按键k1,k2,k3分别为数值增大,数值减小,保存为一级报警值理想效果:K1,K2调整数值,K3保存阈值,当前浓度小于一级报警值,绿 {MOD}指示灯亮        红 {MOD}指示灯不亮,蜂鸣器不响。,当前浓度小于二级报警值大于一级报警值,绿 {MOD}指示灯闪烁        红 {MOD}指示灯不亮,蜂鸣器不响。当前浓度大于二级报警值,绿 {MOD}指示灯不亮        红 {MOD}指示灯亮,蜂鸣器响
可是现在只有绿 {MOD}亮无论怎么调整都没有用
程序只选用超限处理,按键模块,还有主程序。

void proc()   //超限处理{        if(ch2o/100>=ch2o_H1&&ch2o/100<=ch2o_H2)  //当前浓度小于二级报警值大于一级报警值        {                while(1)                {                led_1=0;                   //绿 {MOD}指示灯闪烁        红 {MOD}指示灯不亮                delay(500);                led_1=1;                delay(500);                }                led_2=1;                                  beep1=1;                  //蜂鸣器不响        }        else if(ch2o/100>=ch2o_H1)                  {                led_1=1;           //红灯点亮 绿灯不亮                led_2=0;                beep1=1;           //蜂鸣器不响        }        else        {                led_1=0;           //对应指示灯点亮                led_2=1;                beep1=0;        }
void key(){        if(!key_1)   //判断按下        {                ms=sec=0;                delay(888);   //按键延时去抖                if(!key_1)  //判断按下                {                        if(ch2o_H2<700)ch2o_H2++;                        ms=sec=0;          //清楚按键按下计时  重新计时                        while(!key_1)         //按键判断释放                        {                                show();                                proc();                        }                        SectorErase(0x2000);         //保存上限值                        byte_write(0x2000,ch2o_H2/256);                        byte_write(0x2001,ch2o_H2%256);                        if(!key_3)                        {                                ms=sec=0;                                delay(888);   //按键延时去抖                                if(!key_3)                                {                                        ms=sec=0;                                        while(!key_3)                                        {                                           proc();                                        }                                        SectorErase(0x2002);         //保存上限值                                        byte_write(0x2002,ch2o_H2/256);                                        byte_write(0x2003,ch2o_H2%256);                                }                                                 }                                                else                        {                                SectorErase(0x2002);                                byte_write(0x2002,0);                                byte_write(0x2003,0);                                proc();                        }

                }       
        }
        if(!key_2)    //判断按下        {                ms=sec=0;                delay(888);  //按键延时去抖                if(!key_2)  //判断按下                {                        if(ch2o_H2>0) ch2o_H2--;                        ms=sec=0;                        while(!key_2)        //按键判断释放                        {                                show();                                proc();                        }                        SectorErase(0x2000);         //保存二级报警 值                        byte_write(0x2000,ch2o_H2/256);                        byte_write(0x2001,ch2o_H2%256);                                if(!key_3)                        {                                ms=sec=0;                                delay(888);   //按键延时去抖                                if(!key_3)                                {                                        ch2o_H1=ch2o_H2;                                        ms=sec=0;                                        while(!key_3)                                        {                                           proc();                                        }                                        SectorErase(0x2002);         //保存一级报警值                                        byte_write(0x2002,ch2o_H1/256);                                        byte_write(0x2003,ch2o_H1%256);                                }                                                 }                                                else                        {                                        SectorErase(0x2002);                                        byte_write(0x2002,0);                                        byte_write(0x2003,0);                                        proc();                        }
                  }   }}
void main(){        uchar h,l,h1,l1;        LCD1602_cls();          //LCD 1602   调用初始化程序        TMOD=0x21;        //配置定时        TH0=0x4c;                //50ms  定时赋值        TL0=0x00;        ET0=1;        TR0=1;        TH1=0xfd;                //串口波特率定时初始        TL1=0xfd;        SCON=0x50;        //只发送        EA=1;                //打开定时总中断        ES=1;                //打开串口中断                           
0条回答

一周热门 更多>