|
发表于 2023-12-23 09:21:33
|
显示全部楼层
#include "STC15F104E.H"
#include "intrins.h"
#define COUNT 2000 //状态改变延时时间 最高65535
unsigned int stateCnt[4]={0,0,0,0}; //状态计数变量组
unsigned char state=0; //状态机状态:0为继电器吸合 1为继电器断开
void KSFSM() //按键开关状态机
{ //0为按键断开,1为按键按下
if(P33&&P32) //11
stateCnt[3]++;
else if(P33&&!P32) //10
stateCnt[2]++;
else if(!P33&&P32) //01
stateCnt[1]++;
else if(!P33&&!P32) //00
stateCnt[0]++;
if((stateCnt[0]>=COUNT)||(stateCnt[1]>=COUNT)||(stateCnt[2]>=COUNT))
{ //00、01、10 按键按下 继电器吸合
unsigned char s;
for(s=0;s<4;s++)
stateCnt=0; //状态计数变量组清0
state=0;
}
else if(stateCnt[3]>=COUNT)
{ //11状态按键都未按下 继电器断开
unsigned char s;
for(s=0;s<4;s++)
stateCnt=0;
state=1;
}
}
void RlyFSM() //继电器状态机
{
if(state==0) //继电器闭合
{
P35 = 0;
}
else if(state==1) //继电器断开
{
P35 = 1;
}
}
void main()
{
// P3M0 = 0x00;
// P3M1 = 0x00;
P3 = 0xFF;
WDT_CONTR=0x34; //看门狗使能
while (1)
{
KSFSM(); //按键开关状态机
RlyFSM(); //继电器状态机
WDT_CONTR=0x34; //看门狗使能
}
} |
|