文章目录
前言
本次分享的内容是关于第十三届蓝桥杯嵌入式省赛的解题思路和经验总结。这也是我自上月以来的首次更新,希望能够为大家提供一些有用的参考和指导。
一、题目介绍
二、相关模块介绍和重难点分析
1.相关模块
第十三届比赛主要有:LED、KEY、LCD、TIM、USART。
2.重难点分析
这届的目的是做一个密码锁,主要是对按键和屏幕处理的考查。通过按键输入密码,并且通过是否正确输入密码来改变PA1脉冲的输出状态和LED的闪烁情况,以及通过串口发送正确的指令来改变原有的密码。
**难点1:**按键从ASCII码@变成ASCII码0然后在依次增加变成9在变回0如此循环。
**难点2:**对LED1灯持续亮五秒和PWM脉冲持续输出2KHZ五秒再变回1KHZ的处理,这可能是本届最易出错的点。
三.题解
1、代码相关定义与函数声明:
char view;//LCD显示界面 0是输入密码界面 1是PWM输出界面
char temp[20];//LCD显示参数数组
char mark='@';//ASCII@变量
char secret_one,secret_sec,secret_thir;//定义3位输入参数变量
uint8_t judge;//判断串口数据是否合法
uint8_t uled;//LED显示参数
uint8_t pwm;//PWM输出状态界面 0是PWM输出1KHZ 1是PWM输出2KHZ
uint8_t flag;//输入密码超过三次报警标志位
uint8_t wordnum=0;//密码输入次数
uint8_t keynum=0;//按键值
uint8_t arr[7];//接受串口数据数组
uint8_t word[3]={
'1','2','3'};//初始化密码,储存密码数组
extern struct Chword New_word;
extern char Cword;
__IO uint32_t LED_tick;//LED计时时间
__IO uint32_t PWM_tick;//PWM计时时间
......函数声明......
void pro_view(void);//界面处理函数
void key_pro(uint8_t keyword);安检处
void dis_chword(void);
void LED_dis(void);
2、主函数代码:
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
secret_one=mark;//初始化输入密码界面的参数
secret_sec=mark;
secret_thir=mark;
LCD_Init();
LCD_Clear(Black);
LCD_SetBackColor(Black);
LCD_SetTextColor(White);
LED_pro(0x00);//使LED全部熄灭
HAL_UART_Receive_IT(&huart1,arr,7);//开启串口接收中断
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
keynum=Key_Read(