大家看看这是什么情况?

[复制链接]
1288|4
 楼主| ningling_21 发表于 2013-3-22 21:25 | 显示全部楼层 |阅读模式
MCU需检测一个引脚电平,正常为低低电平,如果为高表示产生告警,显示告警,并记录告警的时间存入EEPROM。
程序:
if(power_pin==Nomol)                                          //引脚正常
{
     if(lcd_disp_stat_back==2 && alm_value==0)
                {
                         lcd_disp_stat_back=0;                 //返回正常状态
                        flag_power_off_alm=0;             //告警撤消,下次告警可继续产生记录
               }
}
else if(Power_check==POWER_OFF)                 //引脚告警
{
    if(lcd_disp_stat_back==0)                             //如果为待机状态,则转为告警状态
                {
                         lcd_disp_stat_back=2;                  //显示告警状态
                        if(        flag_power_off_alm==0)   //如果当前告警记录未产生,则产生记录并储存
                        {
                               flag_power_off_alm=1;      //防止重复产生记录信息
                               。。。。。。。。              //产生记录,并储存
                        }
                }
}

现在的问题是:如果引脚变高,本来只产生一个告警记录就够了,但现在有告警时总会产生2个相同的告警记录,什么原因?
MCU;STC11F60

uet_cache 发表于 2013-3-22 23:58 | 显示全部楼层
没做消抖?
ayb_ice 发表于 2013-3-23 08:03 | 显示全部楼层
static bit b;

void alarm(void)
{
    if(power_pin != b && power_pin == ALARM){
          ....;   // 记录
    }

     b == ALARM

}
 楼主| ningling_21 发表于 2013-3-23 22:13 | 显示全部楼层
uet_cache 发表于 2013-3-22 23:58
没做消抖?

调用这个子程序会间隔一定时间,所以这种情况下消抖可以不要...
 楼主| ningling_21 发表于 2013-3-26 22:33 | 显示全部楼层
ayb_ice 发表于 2013-3-23 08:03
static bit b;

void alarm(void)

问题已解决。

中间的记录存储删掉就可以了,记录在别处存储.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5015

主题

17845

帖子

51

粉丝
快速回复 在线客服 返回列表 返回顶部