这是我在做备赛期间做第十一届省赛的总结
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