一、题目分析
考察内容:
- led
- 按键(短按)
- PWM输出(PA1)
- 串口接收
- lcd显示
根据PWM输出占空比调节,高频与低频切换
串口接收(指令解析)【中断接收】
2个显示界面
led灯闪烁定时器
二、Usr.c
/* Includes ------------------------------------------------------------------*/
#include "usr.h"
#include "usart.h"
/* values --------------------------------------------------------------------*/
struct keys key[4]={0,0,0,0};
uint8_t menu = 0;
uint8_t password_valid = 0;//密码有效信号
uint8_t password_err_3 = 0;//密码3次及以上输入错误信号
uint8_t password_err_time = 0;//密码3次及以上输入错误次数
uint8_t B1 = '@';
uint8_t B2 = '@';
uint8_t B3 = '@';
uint16_t F = 1000;
uint16_t D = 50;
uint16_t password = 123;//密码
/* define --------------------------------------------------------------------*/
#define MENU_PSD 0
#define MENU_STA 1
/*----------------------------------------------------------------------------*/
void led_set(uint8_t led_dis)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);//关闭所有led
HAL_GPIO_WritePin(GPIOC,led_dis<<8,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
void led_2_toggle(void){
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_9);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
//key_control
void key_control(void)
{
if(key[0].single_flag == 1){
key[0].single_flag = 0;
//仅在PSD有效
if(menu == MENU_PSD){
if(B1 == '@'){
B1 = '0';
}else{
B1++;
if(B1>'9'){
B1 = '0';
}
}
}
}else if(key[1].single_flag == 1){
key[1].single_flag = 0;
if(menu == ME