第十五届蓝桥杯嵌入式模拟考试II

2024-03-24 10:44

本文主要是介绍第十五届蓝桥杯嵌入式模拟考试II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第十五届蓝桥杯嵌入式模拟考试II

模拟网址

这个题目就很简单,满分85分都拿到,就是评测系统有时会很抽搐,非显示说乱码

题目

image-20240323212716402

image-20240323212726204

image-20240323212742893

image-20240323212751202

image-20240323212759622

程序

main.c
/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.* All rights reserved.</center></h2>** This software component is licensed by ST under BSD 3-Clause license,* the "License"; You may not use this file except in compliance with the* License. You may obtain a copy of the License at:*                        opensource.org/licenses/BSD-3-Clause********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "adc.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "lcd.h"
#include "key.h"
#include "led.h"
#include "usart1.h"
#include "myadc.h"
#include <stdio.h>
#include <string.h>
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
extern uint8_t pointer;
extern uint8_t buffer[3];
extern uint8_t rxdata[1];
extern Key key[4];
uint8_t	menu = 0;
float temp,val;
uint8_t mode[5] = "Auto";
uint8_t m =0;// 0自动 1手动
uint8_t gear = 1;
uint8_t K = 10,b= 10;
uint8_t lcdtext[20];
uint32_t led4time;
uint8_t led4enable;
uint8_t led;
uint8_t printtext[20];
uint32_t BandRxtime; 
/* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void key_process(void)
{if(key[0].key_flag){key[0].key_flag = 0;LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);BandRxtime = uwTick;if(menu==0){if(m==0){strcpy((char *)mode,"Manu");}else{strcpy((char *)mode,"Auto");}m^=1;}if(menu == 1){menu = 0;}}if(key[1].key_flag){key[1].key_flag = 0;LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);BandRxtime = uwTick;if(menu==0&&m==1){gear++;if(gear>3)gear = 3;}if(menu == 1){menu = 0;}}if(key[2].key_flag){key[2].key_flag = 0;LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);BandRxtime = uwTick;if(menu==0&&m==1){gear--;if(gear<1)gear = 1;}if(menu == 1){menu = 0;}}
}void adc_process(void)
{temp = get_adc(&hadc2)*K+b;if(temp<20){temp = 20.0;}else if(temp>40){temp = 40.0;}if(m==0){if(temp<25){gear = 1;}else if(temp>=25&&temp<=30){gear = 2;}else if(temp>30){gear = 3;}}}void lcd_process(void)
{switch(menu){case 0:{sprintf((char *)lcdtext,"    DATA");LCD_DisplayStringLine(Line1,lcdtext);sprintf((char *)lcdtext,"   TEMP:%.1f",temp);LCD_DisplayStringLine(Line3,lcdtext);sprintf((char *)lcdtext,"   MODE:%s",mode);LCD_DisplayStringLine(Line4,lcdtext);sprintf((char *)lcdtext,"   GEAR:%d",gear);LCD_DisplayStringLine(Line5,lcdtext);}break;case 1:{sprintf((char *)lcdtext,"    SLEEPING");LCD_DisplayStringLine(Line4,lcdtext);sprintf((char *)lcdtext,"    TEMP:%.1f",temp);LCD_DisplayStringLine(Line5,lcdtext);}break;}
}void rx_process(void)
{if(pointer>0){led4enable = 1;BandRxtime = uwTick;led4time = uwTick;if(buffer[0]=='B'){if(buffer[1]=='1'){key[0].key_flag = 1;}else if(buffer[1]=='2'){key[1].key_flag = 1;}else if(buffer[1]=='3'){key[2].key_flag = 1;}else{sprintf((char *)printtext,"NULL");HAL_UART_Transmit(&huart1,printtext,sizeof(printtext),100);}}else{sprintf((char *)printtext,"NULL");HAL_UART_Transmit(&huart1,printtext,sizeof(printtext),100);}pointer = 0;memset(buffer,0,sizeof(buffer));}
}void pwm_process()
{switch(gear){case 1:{TIM2->CCR2 = (TIM2->ARR)*0.1f;}break;case 2:{TIM2->CCR2 = (TIM2->ARR)*0.4f;}break;case 3:{TIM2->CCR2 = (TIM2->ARR)*0.8f;}break;}
}void led_process(void)
{if(gear==1){led|=0x01;}else{led&=~0x01;}if(gear == 2){led|=0x02;}else{led&=~0x02;}if(gear==3){led|=0x04;}else{led&=~0x04;}if(led4enable){if(uwTick-led4time>=3000)led4enable = 0;led|=0x08;}else{led&=~0x08;}if(strcmp((char *)mode,"Auto")==0){led|=0x80;}else{led&=~0x80;}led_display(led);
}void BandRx_process(void)
{if(uwTick-BandRxtime>=5000){menu = 1;BandRxtime = uwTick;LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);}
}
/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
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_ADC2_Init();MX_TIM2_Init();MX_TIM4_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */LCD_Init();/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);HAL_TIM_Base_Start_IT(&htim4);HAL_UART_Receive_IT(&huart1,rxdata,1);HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);led_display(0x00);while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */adc_process();lcd_process();key_process();led_process();pwm_process();rx_process();BandRx_process();}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};/** Configure the main internal regulator output voltage*/HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV2;RCC_OscInitStruct.PLL.PLLN = 20;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}/** Initializes the peripherals clocks*/PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_ADC12;PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_SYSCLK;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state *//* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

这篇关于第十五届蓝桥杯嵌入式模拟考试II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/841358

相关文章

LoRaWAN在嵌入式网络通信中的应用:打造高效远程监控系统(附代码示例)

引言 随着物联网(IoT)技术的发展,远程监控系统在各个领域的应用越来越广泛。LoRaWAN(Long Range Wide Area Network)作为一种低功耗广域网通信协议,因其长距离传输、低功耗和高可靠性等特点,成为实现远程监控的理想选择。本文将详细介绍LoRaWAN的基本原理、应用场景,并通过一个具体的项目展示如何使用LoRaWAN实现远程监控系统。希望通过图文并茂的讲解,帮助读

嵌入式学习——数据结构(哈希、排序)——day50

1. 查找二叉树、搜索二叉树、平衡二叉树 2. 哈希表——人的身份证——哈希函数 3. 哈希冲突、哈希矛盾 4. 哈希代码 4.1 创建哈希表 4.2  5. 算法设计 5.1 正确性 5.2 可读性(高内聚、低耦合) 5.3 健壮性 5.4 高效率(时间复杂度)时间复杂度越低,效率越高, 5.5 低储存(空间复杂度)空间复杂度越低,存储空间越少 6.排序算法 6.1 冒

代码随想录算法训练营第三十九天|62.不同路径 63. 不同路径 II 343.整数拆分 96.不同的二叉搜索树

LeetCode 62.不同路径 题目链接:62.不同路径 踩坑:二维的vector数组需要初始化,否则会报错访问空指针 思路: 确定动态数组的含义:dp[i][j]:到达(i,j)有多少条路经递推公式:dp[i][j] = dp[i-1][j] + dp[i][j-1]初始化动态数组:dp[0][0] = 1遍历顺序:从左到右,从上到下 代码: class Solution {pu

上位机图像处理和嵌入式模块部署(mcu和swd接口)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         最近学习mcu的时候,接触了不少调试器,这里面有daplink、st-link v2、j-link v9。虽然模块的形状可能不太一样,但是硬件的连线都差不多,都是mcu上的3.3v、clk、dio和gnd四根连线。出于好奇,今天花了点时间了解了一下debug port、sw

leetcode刷题(39)——反转链表 II

这道题可以说是非常难的,2中解法,迭代和递归,递归更加难想出来 解法1:迭代链接反转 算法 在看具体算法之前,有必要先弄清楚链接反转的原理以及需要哪些指针。举例而言,有一个三个不同结点组成的链表 A → B → C,需要反转结点中的链接成为 A ← B ← C。 假设我们有两个指针,一个指向结点 A,一个指向结点 B。 分别记为 prev 和 cur。则可以用这两个指针简单地实现 A 和 B

leetcode刷题(38)——142. 环形链表 II

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:tail connects to node index 1

leetcode刷题(93)——213. 打家劫舍 II

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例 1: 输入: [2,3,2]输出: 3解释:

嵌入式linux系统中LCD屏驱动实现思路分析

在 Linux 下 LCD 的使用更加广泛,在搭配 QT 这样的 GUI 库下可以制作出非常精美的 UI 界面。接下来就来学习一下如何在 Linux 下驱动 LCD 屏幕。                           第一:Framebuffer设备简介       先来回顾一下裸机的时候 LCD 驱动是怎么编写的,裸机 LCD 驱动编写流程如下: ①、初始化 I.MX6U

嵌入式中逻辑分析仪与示波器的基本原理

大家好,今天主要给大家分享一下,嵌入式中如何使用逻辑分析仪和示波器的方法,希望对大家有所帮助。                 https://dreamsourcelab.cn/ 第一:什么是逻辑分析仪      是否遇到使用示波器分析数字电路的冏境:深度不够,时间太短,无法抓到想要的波形,没有协议内容解析?      逻辑分析仪是专门针对数字信号的调试工具,可长时间

针对ARM64嵌入式系统的Linux内核参数优化

文章目录 0. 概要1. 网络性能优化开启TCP连接重用减少TCP连接超时时间 2. 文件系统和I/O优化提高文件描述符限制 3. 内存管理优化提高内存可用性 4. 内核调度优化调整CFS调度器的调度周期 5. 完整配置文件 0. 概要 在ARM64架构的嵌入式系统中,系统性能和资源优化至关重要。这类系统通常在资源受限的环境下运行,如物联网设备、移动设备等。合理配置Linux