第十五届蓝桥杯嵌入式模拟考试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

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

嵌入式方向的毕业生,找工作很迷茫

一个应届硕士生的问题: 虽然我明白想成为技术大牛需要日积月累的磨练,但我总感觉自己学习方法或者哪些方面有问题,时间一天天过去,自己也每天不停学习,但总感觉自己没有想象中那样进步,总感觉找不到一个很清晰的学习规划……眼看 9 月份就要参加秋招了,我想毕业了去大城市磨练几年,涨涨见识,拓开眼界多学点东西。但是感觉自己的实力还是很不够,内心慌得不行,总怕浪费了这人生唯一的校招机会,当然我也明白,毕业

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

深入探索嵌入式 Linux

摘要:本文深入探究嵌入式 Linux。首先回顾其发展历程,从早期尝试到克服诸多困难逐渐成熟。接着阐述其体系结构,涵盖硬件、内核、文件系统和应用层。开发环境方面包括交叉编译工具链、调试工具和集成开发环境。在应用领域,广泛应用于消费电子、工业控制、汽车电子和智能家居等领域。关键技术有内核裁剪与优化、设备驱动程序开发、实时性增强和电源管理等。最后展望其未来发展趋势,如与物联网融合、人工智能应用、安全性与

C语言蓝桥杯

一、语言基础 竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_s