思路:按键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; //打开串口中断
一周热门 更多>