效果:KEY0按下时,绿灯闪烁指定次数后熄灭;KEY1按下时,红灯闪烁指定次数后熄灭;KEY2按下时,红绿灯常亮。
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
int ledtime1; /* LED1计数器 */
int ledtime2; /* LED2计数器 */
int targetclick; /* 目标计数值 */
int main(void)
{
uint8_t key;
HAL_Init(); /* 初始化HAL库 */
sys_stm32_clock_init(360, 25, 2, 8); /* 设置时钟,180Mhz */
delay_init(180); /* 延时初始化 */
led_init(); /* 初始化LED */
key_init(); /* 初始化按键 */
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,SET); /* 点亮红灯 */
ledtime1 = 0; /* LED1计数器清零 */
ledtime2 = 0; /* LED2计数器清零 */
targetclick = 20; /* 设置计数目标 */
while (1)
{
key = key_scan(0); /* 得到键值 */
if (key)
{
switch (key)
{
case KEY0_PRES: /* 当KEY0被按下时 */
while (ledtime1 < targetclick)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
HAL_Delay(200);
ledtime1++;
}
ledtime1 = 0;
break;
case KEY1_PRES: /* 当KEY1被按下时 */
while (ledtime2 < targetclick)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
HAL_Delay(200);
ledtime2++;
}
ledtime2 = 0;
break;
case KEY2_PRES: /* 当KEY2被按下时 */
LED0(0);
LED1(0);
break;
}
}
else
{
delay_ms(10);
}
}
}