1、长按KEY_UP实现红绿LED交替闪烁5次,中间间隔时间500ms;
2、单击KEY0控制红色LED闪烁,双击KEY0控制绿色LED闪烁,单击KEY_UP停止闪烁。
u8 KeyUp_flag=0; //0,没有按下,1,按下,加号键
u8 KeyUpLong_flag=0; //0,没有按下,1,按下,加号键
u16 Up_status=0; //加号键按下状态
u16 Up_counter =0; //加号键,短时间累加
u8 Up_mcounter =0; //加号键,长时间累加
/*按键扫描*/
void Key_UP_Scan(void)
{
/******************KEY UP 按下*******************/
if(Key_up ==0))//UP
{
if(Up_status==0)
{
Up_counter++;
if(Up_counter ==20)//短按
{
if(Key_up ==0)
{Up_counter =0;KeyUp_flag =1;Up_status=1;}
}
}
if(Up_status==1)
{
Up_mcounter++; //长久按下则一直运行
if(Up_mcounter ==150)
{
if(Key_up ==0)
{Up_mcounter =100;KeyUpLong_flag =1;}
}
}
}
/******************KEY UP 抬起*******************/
if(Key_up ==1)//UP
{
if(Up_status==1)
{
Up_counter++;
if(Up_counter ==10)
{
if(Key_up !=0)
{
Up_counter =0;
KeyUp_flag =0;
KeyUpLong_flag =0;
Up_status=0;
}
}
}
}
/******************KEY UP 抬起*******************/
}
u8 Key0_Flag1 =0;
u8 Key0_Flag2 =0;
u8 Key0_num =0;
u16 Key0_num_Cnt =0;
u16 Key0_status=0; //加号键按下状态
u16 Key0_counter =0; //加号键,短时间累加
/*按键扫描*/
void Key0_Scan(void)
{
/******************KEY0按下*******************/
if(Key_up ==0))//UP
{
if(Up_status==0)//短按
{
Up_counter++;
if(Up_counter ==10)//短按
{
if(Key_up ==0)
{
Up_counter =0;
KeyUp_flag =1;
Up_status=1;
Key0_Flag1 =1;
Key0_num++;
}
}
}
}
/******************KEY0 抬起*******************/
if(Key_up ==1)//UP
{
if(Up_status==1)
{
Up_counter++;
if(Up_counter ==10)
{
if(Key_up !=0)
{
Up_counter =0;
KeyUp_flag =0;
Up_status=0;Up_mcounter =0;
}
}
}
}
/******************KEY1.5秒按两次*******************/
if(Key0_num ==1)Key0_num_Cnt;
if(Key0_num ==2&&Key0_num_Cnt<150)
{
Key0_num =0;
Key0_num_Cnt =0;
Key0_Flag2 =1;
}
}
u16 LED_Cnt;
//定时器定时10MS
void TIM3_IRQHandler(void)
{
if(TIM3->STS&0X0001)
{
Key_UP_Scan();
Key0_Scan();
LED_Blink();
}
TIM3->STS &= ~(1<<0);//清除中断标志
}
u8 LED_Blink_FLAG =0;
void LED_Blink(void)
{
//长按KEY_UP实现红绿LED交替闪烁5次
if(KeyUpLong_flag ==1)
{
//交替5次就是2500MS
LED_Cnt++;if(LED_Cnt>=250)//2500MS
{
LED_Cnt =0;
KeyUpLong_flag =0;
}
else
{
if((LED_Cnt%500)=0)//500MS标志位翻转
{
if(LED_Blink_FLAG==0) LED_Blink_FLAG =1;
else LED_Blink_FLAG =0;
}
}
//500M交替一次
if(LED_Blink_FLAG==0)
{
LED_RED =0;
LED_GREEN =1;
}
else
{
LED_RED =1;
LED_GREEN =0;
}
}
//单击KEY_UP停止闪烁
if(KeyUp_flag ==1)
{
KeyUpLong_flag =0;
KeyUp_flag =0;
Key0_Flag1 =0;
Key0_Flag2 =0;
LED_RED =0;
LED_GREEN =0;
}
//单击KEY0控制红色LED闪烁
if(Key0_Flag1 ==1)
{
LED_RED = !LED_RED;
}
//双击KEY0控制绿色LED闪烁
if(Key0_Flag2 ==1)
{
LED_GREEN = !LED_GREEN;
}
}