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。不知道是什么原因造成的,望大神指导下方向。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>