蓝桥杯嵌入式2021年第十二届第二场省赛主观题解析

news2024/12/26 21:03:01

1  题目 

2  解析

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "adc.h"
#include "tim.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "string.h"
#include "i2c_hal.h"
#include "lcd.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
int cnt1,cnt_down1,f1,cnt2,cnt_down2,f2;
double duty1,val[20],val_avg,duty2;
int num=1;
char buf1[20],buf2[20],buf3[20],buf4[20],buf5[20],buf6[20],buf7[20];
struct keys{
	int step;
	int state;
	int cnt;
}key[5];
int R=4;
int sta;
int comp;
/* 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 */
void LCD_close()
{
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM2&&htim->Channel==HAL_TIM_ACTIVE_CHANNEL_2)//PA1测量外加信号频率和占空比
	{
		cnt1=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2);
		cnt_down1=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);
		f1=80000000/cnt1;
		duty1=(double)cnt_down1/(double)cnt1;
		__HAL_TIM_SetCounter(&htim2,0);
	}
	if(htim->Instance==TIM3&&htim->Channel==HAL_TIM_ACTIVE_CHANNEL_2)//PA4测量PA7输出信号的频率和占空比
	{
		cnt2=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);
		cnt_down2=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_1);
		f2=1000000/cnt2;
		duty2=(double)cnt_down2/(double)cnt2;
		__HAL_TIM_SetCounter(&htim3,0);
	}
}

void ADC()//电压采样(经过数据处理)
{
	HAL_ADC_Start(&hadc2);
	for(int i=0;i<20;i++)
	{
		val[i]=HAL_ADC_GetValue(&hadc2);
	}
	for(int i=0;i<20;i++)
	{
		for(int j=0;j<20;j++)
		{
			if(val[i]>val[j]) 
			{
				double temp=val[i];
				val[i]=val[j];
				val[j]=temp;
			}
		}
	}
	val_avg=0;
	for(int i=5;i<15;i++)
	{
		val_avg+=val[i];
	}
	val_avg/=10;
	//memset(val,0,sizeof(val));
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM1)//按键处理
	{
		key[1].state=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);
		key[2].state=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);
		key[3].state=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);
		key[4].state=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
		switch(key[1].step)
		{
			case 0:
			{
				if(key[1].state==GPIO_PIN_RESET)
				{
					key[1].step=1;
				}
			}
			break;
			case 1:
			{
				if(key[1].state==GPIO_PIN_RESET)
				{
					key[1].step=2;
				}
				else
				{
					key[1].step=0;
				}
			}
			break;
			case 2:
			{
				if(key[1].state==GPIO_PIN_SET)
				{
					key[1].step=0;
					key[1].cnt++;
					if(key[1].cnt%2==0) num=1;
					else num=2;
				}
			}
			break;
		}
		switch(key[2].step)
		{
			case 0:
			{
				if(key[2].state==GPIO_PIN_RESET)
				{
					key[2].step=1;
				}
			}
			break;
			case 1:
			{
				if(key[2].state==GPIO_PIN_RESET)
				{
					key[2].step=2;
				}
				else
				{
					key[2].step=0;
				}
			}
			break;
			case 2:
			{
				if(key[2].state==GPIO_PIN_SET)
				{
					key[2].step=0;
					R+=2;
					if(R==12) R=2;
				}
			}
			break;
		}
		switch(key[3].step)
		{
			case 0:
			{
				if(key[3].state==GPIO_PIN_RESET)
				{
					key[3].step=1;
				}
			}
			break;
			case 1:
			{
				if(key[3].state==GPIO_PIN_RESET)
				{
					key[3].step=2;
				}
				else
				{
					key[3].step=0;
				}
			}
			break;
			case 2:
			{
				if(key[3].state==GPIO_PIN_SET)
				{
					key[3].step=0;
					R-=2;
					if(R==0) R=10;
				}
			}
			break;
		}
		switch(key[4].step)
		{
			case 0:
			{
				if(key[4].state==GPIO_PIN_RESET)
				{
					key[4].step=1;
				}
			}
			break;
			case 1:
			{
				if(key[4].state==GPIO_PIN_RESET)
				{
					key[4].step=2;
				}
				else
				{
					key[4].step=0;
				}
			}
			break;
			case 2:
			{
				if(key[4].state==GPIO_PIN_SET)
				{
					key[4].step=0;
					key[4].cnt++;
					if(key[4].cnt%2==0)
					{
						HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
						HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);
						sta=0;
					}
					if(key[4].cnt%2==1) 
					{
						LCD_close();
						HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
						sta=1;
					}
				}
			}
			break;
		}
	}
	
}
/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* 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_TIM17_Init();
  MX_TIM1_Init();
  MX_TIM15_Init();
  MX_TIM3_Init();
  /* USER CODE BEGIN 2 */
	LCD_Init();
	LCD_close();
	LCD_Clear(White);
	LCD_SetBackColor(Black);
	LCD_SetTextColor(White);
	sprintf(buf1,"       Data");
	sprintf(buf4,"       Para");
	HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
	HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
	HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
	HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
	HAL_TIM_Base_Start_IT(&htim1);
	HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);//外加产生PWM
	HAL_TIM_PWM_Start(&htim15,TIM_CHANNEL_2);//PA7输出PWM
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		ADC();
		comp=1000*val_avg/4096;
	__HAL_TIM_PRESCALER(&htim17,80000 * R / f1);
	__HAL_TIM_SetCounter(&htim17,0);
	__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,comp);
		sprintf(buf3,"   R37:%.2lfV",val_avg*3.3/4096);
		sprintf(buf2,"   FRQ:%dHz",f1);
		sprintf(buf5,"      R:%d",R);
		sprintf(buf6,"   PA7:%dHz",f2);
		sprintf(buf7,"   duty:%.4lf",duty2);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
		if(num==1)
		{
			LCD_Clear(Black);
			LCD_DisplayStringLine(Line1,(uint8_t*)buf1);
			LCD_DisplayStringLine(Line3,(uint8_t*)buf2);
			LCD_DisplayStringLine(Line5,(uint8_t*)buf3);
			LCD_DisplayStringLine(Line7,(uint8_t*)buf6);
			LCD_DisplayStringLine(Line9,(uint8_t*)buf7);
			if(sta==0)
			{
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET);
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
			}
		}
		if(num==2)
		{
			LCD_Clear(Black);
			LCD_DisplayStringLine(Line1,(uint8_t*)buf4);
			LCD_DisplayStringLine(Line3,(uint8_t*)buf5);
			if(sta==0)
			{
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET);
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET);
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
			}
		}
		if(val_avg*3.3/4096>=3||val_avg*3.3/4096<1)
		{
			if(sta==0)
			{
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,GPIO_PIN_RESET);
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
			}
		}
		else 
		{
			if(sta==0)
			{
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,GPIO_PIN_SET);
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
			}
		}
		if(f1>=5000||f1<1000)
		{
			if(sta==0)
			{
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_RESET);
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
			}
		}
		else
		{
			if(sta==0)
			{
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET);
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
			}
		}
		HAL_Delay(300);
  }
  /* USER CODE END 3 */
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1525107.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sql join

-- 创建事实表 CREATE TABLE product_facts (id INT AUTO_INCREMENT PRIMARY KEY,product_name VARCHAR(255),price DECIMAL(10, 2) );-- 插入数据 INSERT INTO product_facts (product_name, price) VALUES (Product A, 100.00); INSERT INTO product_facts (product_name, pr…

【GPT-SOVITS-03】SOVITS 模块-生成模型解析

说明&#xff1a;该系列文章从本人知乎账号迁入&#xff0c;主要原因是知乎图片附件过于模糊。 知乎专栏地址&#xff1a; 语音生成专栏 系列文章地址&#xff1a; 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

分布式搜索引擎(3)

1.数据聚合 **[聚合&#xff08;](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html)[aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html)[&#xff09;](https://www.ela…

旅游系统-软件与环境

一. 软件 1.Navicat、phpstudy、Idea、Vsode 参考 网盘链接 二.配置文件 1.NodeJS、JDK、Mysql 参考 网盘链接 注意点&#xff1a; 1.Mysql 切记需要环境变量配置 2.数据库密码要好记点的&#xff0c;别乱设 3.环境变量配置的路径要能找到 三.安装运行 1.下载网盘内的软件&am…

html系列:按钮被样式图片挡着了,无法点击怎么办

​ 背景 在开发中会遇到一些奇奇怪怪的需求&#xff0c;比如在按钮上要显示一个样式图片&#xff0c;同时还要能不影响按钮的点击使用&#xff1b;这时候&#xff0c;设置好了样式&#xff0c;按钮无法点击怎么办&#xff1f; 在查阅资料的时候找到了解决方案。 解决方案 …

kafka集群介绍

介绍 kafka是一个高性能、低延迟、分布式的消息传递系统&#xff0c;特点在于实时处理数据。集群由多个成员节点broker组成&#xff0c;每个节点都可以独立处理消息传递和存储任务。 路由策略 发布消息由key、value组成&#xff0c;真正的消息是value&#xff0c;key是标识路…

前端面试题01(css)

前端面试题01&#xff08;css&#xff09; 文章目录 前端面试题01&#xff08;css&#xff09;1、CSS选择器的优先级2、隐藏元素的方法有哪些3、px和rem的区别4、重绘和重排的区别5、水平垂直居中的方式6、CSS的那些属性可以继承7、预处理器 &#x1f389;写在最后 hello hello…

2023安洵杯 ezjava

2023安洵杯 ezjava 附件地址&#xff1a;https://github.com/D0g3-Lab/i-SOON_CTF_2023 先看依赖&#xff1a; <dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.3.1</version><…

Google云计算原理与应用(三)

目录 五、分布式存储系统Megastore&#xff08;一&#xff09;设计目标及方案选择&#xff08;二&#xff09;Megastore数据模型&#xff08;三&#xff09;Megastore中的事务及并发控制&#xff08;四&#xff09;Megastore基本架构&#xff08;五&#xff09;核心技术——复制…

Transformer的前世今生 day02(神经网络语言模型

神经网络语言模型 使用神经网络的方法&#xff0c;去完成语言模型的两个问题&#xff0c;下图为两层感知机的神经网络语言模型&#xff1a; 以下为预备概念 感知机 线性模型可以用下图来表示&#xff1a;输入经过线性层得到输出 线性层 / 全连接层 / 稠密层&#xff1a;假…

【C++ leetcode 】双指针问题

1. 183. 移动零 题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 画图 和 文字 分…

无尘室设计常用参数与选型

无尘车间(Clean Room)是指空气无尘度达到规定级别的受控空间。其功能是把空气中的微粒子、有害空气、细菌等污染物排除室外,并将室内的无尘度、温度、湿度、室内压力、气流速度与气流分布、噪音、振动、照明及静电控制在某一需求范围内。无尘车间最主要的作用在于控制产品所…

《前端系列》之前端学习路线

目录 1 前言2 前端学习路线2.1 入门阶段2.1.1 HTML2.1.2 CSS2.1.3 JavaScript2.1.4 网络基础 2.2 基础阶段2.2.1 前端框架2.2.2 深入JavaScript2.2.3 ES62.2.4 工程化知识 2.3 进阶阶段2.3.1 CSS2.3.2 Javascript2.3.3 单元测试2.3.4 性能优化 3 总结 1 前言 在技术更新迭代发…

如何在没有备份的情况下恢复 Android 上已删除的照片?

丢失 Android 设备上的珍贵照片可能是一场噩梦&#xff0c;尤其是在没有备份的情况下。无论是意外删除图像还是由于Android 崩溃而丢失图像&#xff0c;一想到它们可能会永远消失就令人沮丧。幸运的是&#xff0c;有多种方法可以在 Android 上恢复已删除的照片。 如何在没有备份…

C语言中内存函数的使用

memcpy函数的使用和模拟实现 memcpy的使用 函数使用说明&#xff1a; • 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 \0 的时候并不会停下来。 • 如果source和destination有任何的重叠&#xff0c;复制的结…

CSS案例-2.简单版侧边栏练习

效果 知识点 标签显示模式 块级元素 block-level 常见元素:<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>等。 特点: 独占一行长度、宽度、边距都可以控制宽度默认是容器(父级宽度)的100%是一个容器及盒子,里面可以放行内或者…

matplotlib画堆叠、并列直方图

在用 matplotlib.pyplot.hist 画分布图时&#xff0c;若总分布由几个分量组成&#xff08;如高斯混合&#xff09;&#xff0c;想用不同颜色标识出来&#xff0c;方便看到各分量占比&#xff0c;参考 [1]。 效果&#xff1a; 分布由两个分量&#xff08;x、y&#xff09;组成…

Web入门

一Spring简单介绍&#xff1a; Spring Boot 是基于Spring的但是&#xff0c;Spring更为简单高效。 1.2Spring Boot快速入门&#xff1a; 二HTTP协议&#xff1a; 2.1HTTP协议概述 2.2请求协议 <!DOCTYPE html> <html lang"en"> <head><meta ch…

ArkTS 基础组件

目录 一、常用组件 二、文本显示&#xff08;Text/Span) 2.1 创建文本 2.2 属性 2.3 添加子组件(Span) 2.4 添加事件 三、按钮&#xff08;Button&#xff09; 3.1 创建按钮 3.2 设置按钮类型 3.3 悬浮按钮 四、文本输入&#xff08;TextInput/TextArea&#xff09;…

十四、GPT

在GPT-1之前&#xff0c;传统的 NLP 模型往往使用大量的数据对有监督的模型进行任务相关的模型训练&#xff0c;但是这种有监督学习的任务存在两个缺点&#xff1a;预训练语言模型之GPT 需要大量的标注数据&#xff0c;高质量的标注数据往往很难获得&#xff0c;因为在很多任务…