十五届蓝桥杯嵌入式真题及代码解析

目录

前言

题目


前言

刚刚打完十五届蓝桥杯,今年的题目相较于去年比较简单,所以侥幸拿了个省一,想跟大家分享一下我的做题思路(如果有不对的地方,请帮忙指出,感谢大家)

题目

解析

第一步:cubemx设置外设

这个题目中的外设用的不多就不过多介绍了,无非就是把LED,LCD,KEY,输入捕获定时器引脚设置一下就行了

先初始化一个计时用的定时器,10ms刷新一次,以用于检测按键按下以及后面提到的时间窗口

另外打开两个输入捕获通道的定时器中断(我这里用到的是PB4—TIM3_CH1,PA15—TIM2_CH1),设置好模式,触发源,时钟源,直接间接通道,还有上升沿,下降沿

下图是定时器2的设置内容,定时器3也是一样的

第二步:代码编写

1、变量定义

struct KEY keys[5] = {0,0};//按键值
u8 face = 0;//界面
u8 display_val = 0;//数据显示界面变量

//频率
int frq_A = 0;
int frq_B = 0;
float frqA_khz = 0;
float frqB_khz = 0;

//周期
float time_A = 0;
float time_B = 0;

//设置参数变量
u8 PNUM = 0; //选择参数0.PD  1.PH  2.PX
u16 PD = 1000;
u16 PH = 5000;
int PX = 0;

//频率超限标志位
u8 PH_A = 1;  
u8 PH_B = 1;

//3s的时间窗口变量
u16 Timewindow = 0;

//频率超限变量
int frqA_MAX = 0;
int frqA_MIN = 0;
int frq_NDA = 0;  //frqA的差值

int frqB_MAX = 0;
int frqB_MIN = 0;
int frq_NDB = 0;  //frqB的差值

//记录参数变量
u8 NDA,NDB,NHA,NHB = 0;

//输入捕获值 1.直接 2.间接
uint32_t tim2_val1,tim2_val2 = 0;  
uint32_t tim3_val1,tim3_val2 = 0;

2、函数初始化

	LED_Disp(0x00);
	
    LCD_Init();
	LCD_Clear(Black);
	LCD_SetBackColor(Black);
	LCD_SetTextColor(White);

	HAL_TIM_Base_Start_IT(&htim6);
	
	HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
	HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
	HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
	HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);

3、功能函数编写

按键控制

                
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值