蓝桥杯15届备战Day2
13届蓝桥杯省赛
文章目录
前言
备战蓝桥杯嵌入式,刷题第二天,对象为13届蓝桥杯省赛题
工程代码在此 网盘
提取码:xrpg
提示:以下是本篇文章正文内容,下面案例可供参考
主观题程序设计
1.CUBEMAX配置
时钟配置 选择外部高速时钟 80M就行了官方用的80M
按键配置
定时器配置 10ms 80M / (80 - 1) / (10000 - 1)
PA1 配置PWM输出 f = Clock/(psc + 1)/(counter + 1)
串口配置 异步模式 一定要勾选串口中断
2.代码部分(分享思路和简单实现任务)
按键的代码如下:
struct My_Key_Structure
{
uint8_t key_flag;
uint8_t key_state;
uint8_t key_short;
uint8_t key_long;
uint8_t key_zt;
uint16_t key_tim;
};
struct My_Key_Structure mykey[4]={0};
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
uint8_t i = 0;
if(htim->Instance == TIM17)
{
mykey[0].key_state = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);
mykey[1].key_state = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);
mykey[2].key_state = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);
mykey[3].key_state = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
}
for(i = 0;i < 4 ;i++)
{
if(mykey[i].key_zt == 0 && mykey[i].key_state == 0)
{
mykey[i].key_tim = 0;
mykey[i].key_zt++;
}
else if(mykey[i].key_zt == 1 && mykey[i].key_state == 0)
{
mykey[i].key_zt++;
}
else if(mykey[i].key_zt == 2 && mykey[i].key_state == 0)
{
mykey[i].key_tim++;
if(mykey[i].key_tim>=200)
{
mykey[i].key_long = 1;
}
}
else if(mykey[i].key_zt == 2 && mykey[i].key_state == 1)//松手时释放状态
{
mykey[i].key_zt = 0;
if(mykey[i].key_tim<50)
{
mykey[i].key_short = 1;
}
}
}
}
//串口部分,只有7个字符所以我们有8位,最后一位是字符串的结束符'\0'
uint8_t tdata;
uint8_t data_s[8];
uint8_t rx_flag = 0;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
static uint8_t cnt;
if(huart->Instance == USART1)
{
if(rx_flag == 0)
{
data_s[cnt] = tdata;
cnt++;
if(cnt == 7)
{
data_s[cnt] = '\0';
rx_flag = 1;
cnt = 0;
}
}
}
HAL_UART_Receive_IT(huart,&tdata,1);
}
//任务部分
uint8_t check_code(void)//密码检查
{
uint8_t ta_num = 0;
for(uint8_t i = 0 ; i < 3 ;i++)
{
if(my_code[i] == my_taget_code[i])
{
ta_num++;
}
}
return ta_num;
}
void Change_code(void)//密码更改
{
uint8_t ta_num = 0;
for(uint8_t i = 0 ; i < 3 ;i++)
{
my_taget_code[i] = data_s[4+i];
}
}
void return_code(void)//密码还原
{
uint8_t ta_num = 0;
for(uint8_t i = 0 ; i < 3 ;i++)
{
my_code[i] = '@';
}
}
注意一定要在while前初始化这些外设
/* USER CODE BEGIN 2 */
LCD_Init();
LCD_Clear(Black);
LCD_SetBackColor(Black);
LCD_SetTextColor(White);
HAL_TIM_Base_Start_IT(&htim17);
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
HAL_UART_Receive_IT(&huart1,&tdata,1);//很重要
/* USER CODE END 2 */
总结
以上就是今天要讲的内容,蓝桥杯不要纠结什么好看的代码,目标是能在规定的时间内完成尽可能多的任务,以及复习了数电模电单片机的相关知识,看完不要忘记点赞谢谢铁铁们,可以在评论区交流
标签:HAL,++,uint8,蓝桥,state,key,FQQQ,mykey From: https://blog.csdn.net/m0_72442777/article/details/137479360