用STM32F103C8T6作的控制器,一个全局变量,数据有时自动变0

2019-07-21 00:45发布

int time, SetTime;//使用时间与设定时间
int mode;
_Bool Run_bit;
int BackTime = 0;//反馈时间
int BackMode;//反馈模式
char BackBit;
char key;
Bit_TypeDef  Temp[8] = {SET, SET, SET, SET, SET, SET, 0, 0};

void DIC200_Init(void);//控制器初始化
void Read_24c02_data(void);//读取数据
void Find_ID(void);///检测96位唯一ID
void err_in_out(void);
void Factory_Mode(void);//工厂模式
/**********工作模式**************/
void Tog_Mode(void);//点动
void Time_Mode(void);//时间模式
void Jop_Mode(void);//点动模式

int main(void)
{

DIC200_Init();
  while (1)
{
  
  IWDG_ReloadCounter();//最大间隔时间为1.86S 所以2S内必须喂狗

  if ((!SW_UP0 || !SW_UP1 || !SW_UP2 || !SW_UP3 || !SW_DOWN0 || !SW_DOWN1 || !SW_DOWN2 || !SW_DOWN3) && VAR)//有一个修改参数的键按下并且电磁阀没有运行
  {
   delay_ms(10);
   if ((!SW_UP0 || !SW_UP1 || !SW_UP2 || !SW_UP3 || !SW_DOWN0 || !SW_DOWN1 || !SW_DOWN2 || !SW_DOWN3) && VAR)
   {
    //EXTI->IMR &= ~(0x01 << 3);//关闭外部中断3
    key = 1;
    Key_Intput(&SetTime);//
   }
  }
  
   if (Falling_Edge_Detection(SW_TIME, &Temp[0], 20) && !Run_bit)//按下切换模式
   {
    switch (mode)
    {
     case 0: TIME_LED = RESET;//如果之前是点动模式,那么就变为时间模式
         mode = 1;
         break;
     case 1: TIME_LED = SET;
         mode = 0;
         break;
     default: TIME_LED = SET;
          mode = 0;
          break;
    }
    Stor_Idata(mode, 22, 6);//保存当前模式
   }
  
   if (mode)
   {
   
    if (!SW_BACK) //间隔时间开启
    {
     BackTime = VR_GetData();//开始转换ADC的值
     //printf("%d ", BackTime);
     Tog_Mode();
    }
    else
     Time_Mode();
     
   }
   else
    Jop_Mode();
  
}
}
这是部分代码。就是SetTime这个变量在一天工作当中会有一到两次自动变为0(客户没有按按键,断电会从24C02读取上次的值),修改这个值的地方只有Key_Intput()这个函数,客户现在设定的值是30。不知道是什么原因造成的,望大神指导下方向。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。