一、题目分析
考察内容:
- led
- 按键(长按/短按)
- adc(模拟输入)
- PWM输出(PA1)
- 脉冲捕获(PA7)
根据PWM输出进行占空比调节,高频与低频切换(步进)
频率测量转换为速度值
三个显示界面
锁定解锁
任务多次执行时长间隔要求
二、按键部分
//放在定时器中断函数
if(htim->Instance == TIM6) //0.01s进入一次
{
key[0].key_sta = HAL_GPIO_ReadPin(B1_PORT,B1_PIN);
key[1].key_sta = HAL_GPIO_ReadPin(B2_PORT,B2_PIN);
key[2].key_sta = HAL_GPIO_ReadPin(B3_PORT,B3_PIN);
key[3].key_sta = HAL_GPIO_ReadPin(B4_PORT,B4_PIN);
for(uint8_t i = 0;i < 4;i ++){
switch(key[i].judge_sta){
case 0:{ //判断按键是否按下
if(key[i].key_sta == 0){
key[i].judge_sta = 1;
key[i].key_time = 0; //按键时间清零
}else{
key[i].judge_sta = 0;
}
}break;
case 1:{ //消抖
if(key[i].key_sta == 0){
key[i].judge_sta = 2;
}else{
key[i].judge_sta = 0;
}
}break;
case 2:{ //判断按键松开
if(key[i].key_sta == 1){
key[i].judge_sta = 0;
if(key[i].key_time < Short_time){
key[i].single_flag = 1; //短按键
key[i].key_time = 0;
}
}else{ //按键没松开
key[i].key_time++; //继续计时
if(key[i].key_time > Long_time){
key[i].long_flag = 1;
key[i].key_time = 0;
}