前言
第十二届省赛第一题考点主要有
- LED
- LCD
- USART串口
- PWM输出
- 按键
模块内容较简单,主要考查串口接收对数据的处理
模块代码总结请看这里
蓝桥杯嵌入式基于STM32G4的模块总结【HAL库】【省赛】
题目
整体框架
总结一下本体要实现以下功能
先把每个模块实现,在把每个模块串起来
代码实现
主函数
//全局变量
float prince_CNBR = 2.0, prince_VNBR = 4.0;
uint8_t num_CNBR = 2, num_VNBR = 4;
uint8_t No_Use_Num = 8;
int main(void)
{
//初始化
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_TIM3_Init();
//LCD初始化
LCD_Init();
LCD_Clear(Black);
LCD_SetBackColor(Black);
LCD_SetTextColor(White);
//关闭LED1 LED2
LED1_Dis(1);
LED2_Dis(1);
//打开串口中断
HAL_UART_Receive_IT(&huart1,(uint8_t *)&rx_one, 1);
//初始化PA7输出低电平
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2, 0);
while (1)
{
Lcd_Dis(); //LCD显示函数
key_proc(); //按键处理函数
Usart_proc(); //串口处理函数
}
}
按键
//按键相关变量
__IO uint32_t uwTick_key;
uint8_t key_val, key_dowm, key_up, key_old;
uint8_t duty=0;
void key_proc()
{
if(uwTick - uwTick_key < 50)return;
uwTick_key = uwTick;
key_val = key_scan();
key_dowm = key_val & (key_old ^ key_val);
key_up = ~key_val & (key_old ^ key_val);
key_old = key_val;
switch(key_dowm)
{
case 1:
Dis_mode ^= 0x1;
LCD_Clear(Black);
break;
case 2:
if(Dis_mode == 1)
{
prince_CNBR+=0.5;
prince_VNBR+=0.5;
}
break;
case