学习stm32单片机按键输入所遇到的问题

任务一:初始两个LED的状态为亮,当第1次按下KEY0时,LED0灭,LED1保持不变,当第2次按下KEY0时,LED1熄灭,LED0亮,第3次按下KEY0时,两个LED熄灭,第1次按下KEY1时,LED0,LED1同时以1HZ的频率闪,当第2次按下KEY1时,,LED0,LED1以同时2HZ的频率闪,当第3次按下KEY1时,LED0跟LED1交互翻转(频率为1HZ),当按下KEY_UP时,实现复位功能,回到初始状态(如果已经被锁定,那么,就不能实现复位功能),LED0,LED1全亮。任务二:在任务一的基础上完成,连续按下KEY0七次后进入锁定模式,此时按下任何按键的任务都无法执行,如需解锁,要连续按下KEY1五次,解锁后,再按下其他按键就能正常地进行其对应的按键任务。(注:锁定(解锁)过程中,若按了其他按键,则需要重新连续按KEY0七次(KEY1五次))
我在编写代码的过程中,使用了自加,实现了KEY0三次按键应实现的功能,但KEY2无法实现,任务二不知道以什么思路,以下是我的代码

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
int i=0;
int key=0; 



 int main(void)
 {
 delay_init();       //延时函数初始化   
 LED_Init();      //初始化与LED连接的硬件接口
 KEY_Init();   //初始化与按键连接的硬件接口
 LED0=0; 
  LED1=0;  //两个灯初始为亮
 while(1)
 {
 

   key=KEY_Scan(0); //得到键值
     if(key)
   {         
   if( key==WKUP_PRES) //复位
   { LED0=0; 
    LED1=0;
   } 

    else if( key==KEY0_PRES)
    {
    i+=1;//自加
    if(i==1)
    {
    LED0=1;
    }
    if(i==2)
    {
    LED0=0;
    LED1=1;
    }
    if(i==3)
    {
    LED0=1;
    LED1=1;
    }
    if(i==7)
    {
     return 0;//退出程序
    }
     }
   else if(key==KEY1_PRES)
    {
     i+=1;
     if(i==1)
     {
      while(1){ GPIO_SetBits(GPIOB,GPIO_Pin_5);//跑马灯
            GPIO_SetBits(GPIOE,GPIO_Pin_5);
             delay_ms(100);
  
             GPIO_ResetBits(GPIOB,GPIO_Pin_5);
             GPIO_ResetBits(GPIOE,GPIO_Pin_5);
            delay_ms(100);}

     }
     else if(i==2)//跑马灯
     {
       while(1){GPIO_SetBits(GPIOB,GPIO_Pin_5);
            GPIO_SetBits(GPIOE,GPIO_Pin_5);
             delay_ms(200);
  
             GPIO_ResetBits(GPIOB,GPIO_Pin_5);
             GPIO_ResetBits(GPIOE,GPIO_Pin_5);
            delay_ms(200);}
      
     }
     else if(i==3)//翻转
     {
      LED0!=LED0;
      LED1!=LED1;
      delay_ms(100);
     }
    }
   }    
     

  else 
  {
  delay_ms(10);
  } 
 }  
}


引用头文件均为正点原子官方提供

“某个LED以1HZ的频率闪烁”意思是1s闪烁一次,即亮500ms,灭500ms,所以需要用到定时器