蓝桥杯嵌入式十一届省赛笔记

这是我在做备赛期间做第十一届省赛的总结

1、按键模块:
使用定时器中断扫描按键,定义结构体
#include "stdbool.h"//需要使用到改头文件

struct keys
{
    uchar judge_sta;//判断按键进行到哪一步了
    bool key_sta;//判断按键是否为按下状态
    bool key_flag;//确认按键按下
};

HAL_TIM_Base_Start_IT(&htim3);以中断的方式打开定时器3
调用中断回调函数void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
按键判断写到中断函数里面,按键判断模块的代码如下

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM3)
	{
		key[0].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);
		key[1].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);
		key[2].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);
		key[3].key_sta=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
		
		 for(int i=0;i<4;i++)
		{
			switch(key[i].judge_sta)
			{
				case 0:
					if(key[i].key_sta==0)
					{
						key[i].judge_sta=1;
					}
				break;
				case 1:
					if(key[i].key_sta==0)
					{
						key[i].judge_sta=2;
						key[i].key_flag=1;
					}
					else
					{
						key[i].judge_sta=0;
					}
				break;
				case 2:
					if(key[i].key_sta==1)
					{
						key[i].judge_sta=0;
					}
				break;
			}
		}
	}
}

2、LED模块:
代码如下
//初始化,注意在主函数初始化时要把LED_Init();放在LCD_Init();的后面

#include "led.h"

void LED_Init()
{
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
//控制灯亮
void LDX_ON(uint16_t LDX)
{
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOC,LDX,GPIO_PIN_RESET);
  
}
//控制灯灭
void LDX_OFF(uint16_t LDX)
{
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOC,LDX,GPIO_PIN_SET);
}

3、LCD模块:
LCD_Clear(Black);//清屏黑色
LCD_SetBackColor(Black);//背景设为黑色
LCD_SetTextColor(White);//字体设为白色
先定义一个字符数组text[30]
sprintf(text,"    Mode:AUTO");//内容
LCD_DisplayStringLine(Line5, (uint8_t *)text);//放到第5行

4、PWM模块:
在CubeMX进行配置
HAL_TIM_Base_Start(&htim16);//打开定时器
HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);//开启定时器16的通道1
__HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,PA6);//输出波形

5、ADC模块:
实际电压=(采集到的值/4096)*最高电压3.3V
//获取ADC值

double getADC(ADC_HandleTypeDef *pin)
{
    uint adc;
    HAL_ADC_Start(pin);//开启ADC的使用
    adc=HAL_ADC_GetValue(pin);//采集到的值
    return adc*3.3/4096;
}


pin=&hadc1  or  &hadc2

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值