首页 > 其他分享 >FQQQ的蓝桥杯

FQQQ的蓝桥杯

时间:2024-04-07 21:58:17浏览次数:26  
标签:HAL ++ uint8 蓝桥 state key FQQQ mykey

蓝桥杯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

相关文章

  • 【每周例题】蓝桥杯 C++ 鸡哥的蛋糕大作战
    鸡哥的蛋糕大作战题目鸡哥的蛋糕大作战 题目分析1.使用一个for循环遍历全数,寻找最大洞的数2.使用一个while进行数位拆分,寻找洞的数量3.使用if从两个条件寻找最大洞的最小数符合最大洞的数洞数相同中的最小数代码#include<iostream>#include<bits/stdc++.h>using......
  • 【每周例题】蓝桥杯 C++ 鸡哥的奇特密码
    鸡哥的奇特密码题目鸡哥的奇特密码 题目分析 1.首先,我们需要想到用一个for循环去遍历整个数组,用if寻找出需要我们处理的部分2.如何处理:将重复的L丢出数组,可以运用pop_back()函数3.为了避免越界,我们可以从后往前遍历代码#include<iostream>#include<bits/stdc++.h>u......
  • 第十四届蓝桥杯省赛A组
    目录试题A:特殊日期题解试题B:分糖果试题C:三国游戏试题D:平均试题E:翻转试题F:子矩阵题解:暴力试题G:阶乘的和题解试题H:奇怪的数试题A:特殊日期题解mon=[0,31,28,31,30,31,30,31,31,30,31,30,31]defrun(x):#判断是否为闰年ifx%400==0or(x%4==0andx%100!=0):r......
  • Acwing2024蓝桥杯递归
    模板:欧几里得算法//若a,b互质则返回1,否则返回0intgcd(inta,intb){returnb?gcd(b,a%b):a;}题目:AcWing1360.有序分数暴力模拟法(AC):#include<iostream>#include<algorithm>#definexfirst#defineysecondusingnamespacestd;intn;typed......
  • 第十四届蓝桥杯省赛大学B组填空题(c++)
    日期统计:暴力枚举+set(自带排序加去重)#include<iostream>#include<set>usingnamespacestd;set<int>ans;inta[100]={5,6,8,6,9,1,6,1,2,4,9,1,9,8,2,3,6,4,7,7,5,9,5,0,3,8,7,5,8,1,5,8,6,1,8,3,0,3,7,9,2,7,0,5,8,......
  • P8600 [蓝桥杯 2013 省 B] 连号区间数 and CF526F
    问题转化很容易就能把原问题转化成:求满足Max-Min=r-l的区间个数暴力解法根据上面得到的性质,我们可以暴力枚举区间,来判断当前区间是否满足性质#include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#include<string.h>#def......
  • 蓝桥杯 历届真题 杨辉三角形【第十二届】【省赛】【C组】
    资源限制内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s思路:    由于我第一写没考虑到大数据的原因,直接判断导致只得了40分,下面是我的代码:#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN......
  • 第十四届蓝桥杯省赛B组
    目录试题A:2023题解正确题解试题B:硬币兑换试题C:松散子序列题解:动态规划试题D:管道题解:二分+区间合并试题E:保险箱试题A:2023题解a='2023'cnt,i,k=0,0,0forjinrange(12345678,98765433):whilei<len(a):whilek<8:ifa[i]==str(j)[k]:......
  • 并查集——蓝桥杯备赛【python】
    一、合根植物试题链接:[蓝桥杯2017国C]合根植物问题描述星球的一个种植园,被分成m×n个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成为一体。如果我们告诉你哪些小......
  • 差分和前缀和——蓝桥杯备赛
    一、大学里的树木要打药问题描述教室外有N棵树,根据不同的位置和树种,学校要对其上不同的药。因为树的排列成线性,且非常长,我们可以将它们看作一条直线给他们编号。树的编号从0∼N−1且N<1e6。对于树的药是成区间分布,比如3∼5号的树靠近下水道,所以他们要用驱蚊虫的药,20......