蓝桥杯嵌入式第十一届(第一场)省赛

简介: 蓝桥杯嵌入式第十一届(第一场)省赛


一.题目

二.解题思路

这套题也比较常规,考察LED,LCD,按键,ADC以及定时器的使用。

同前面的题目一样,套模板即可。

2.1 按键模块

struct key
{
   int flag;
   int count;
   int press;
};
struct key keys[4]={0};
void scan_key()
{
   
    keys[0].flag=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);
    keys[1].flag=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);
    keys[2].flag=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);
    keys[3].flag=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
    for(int i=0;i<4;i++)
    {
      switch(keys[i].count)
      {
          case 0:
              if(keys[i].flag==0)
                  keys[i].count++;
               break;
          case 1:
              if(keys[i].flag==0)
                  keys[i].count++;
              else keys[i].count=0;
              break;
          case 2:
              if(keys[i].flag==1)
              {
                keys[i].press=1;
                keys[i].count=0;
              
              }
              break;
          default :break;
       
      }
    
    }
  
}

2.2 ADC模块

double Get_ADC(ADC_HandleTypeDef  adc)
{
    uint16_t temp = 0;
    HAL_ADC_Start(&adc);                  
    temp = HAL_ADC_GetValue(&adc);       
    HAL_ADC_Stop(&adc);                     
    return temp*3.3/4096;
 
 
}

2.3 LED模块

void led_proc()
{
    
    uint16_t Led_Gpio;
    Led_Gpio=(uint16_t)(LED_s<<8);
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
          |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12,GPIO_PIN_SET);
    
    
     HAL_GPIO_WritePin(GPIOC, Led_Gpio, GPIO_PIN_RESET);
    
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET); 
}

2.4 主函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if(htim->Instance==TIM3)
  {   
      
      scan_key();
       do_key();
      led_proc();
     
      if(_UI==0)
      { 
        V_value=Get_ADC(hadc2);
          if(V_value<UI_min)flag=1;
        if(V_value>=UI_min&&flag==1)
        {
            flag=0;
            time_now=uwTick;
            T_start=1;
            LED_s|=0x02;
            LCD_ClearLine(Line3);
                    
        }
        if(V_value>=UI_max)
        {  
            T_start=0;
            LED_s&=0xfd;
        }            
        if(T_start==1)T_time=(uwTick-time_now)/100;        
        sprintf(text,"  V:%.2fV",V_value);
        LCD_DisplayStringLine(Line0,(unsigned char *)"      Data"); 
        LCD_DisplayStringLine(Line2,(unsigned char *)text); 
        sprintf(text,"  T:%ds",T_time);         
        LCD_DisplayStringLine(Line3,(unsigned char *)text); 
     
      }
      else if(_UI==1)
      {
      
        LCD_DisplayStringLine(Line0,(unsigned char *)"      Para"); 
          sprintf(text," Vmax:%.1fV",V_max);
        LCD_DisplayStringLine(Line2,(unsigned char *)text);
          sprintf(text," Vmin:%.1fV",V_min);
        LCD_DisplayStringLine(Line3,(unsigned char *)text);  
      
      }
  }
}

三.工程文件

这届蓝桥杯难度较易,工程文件在这里,你们可以参考使用,如有什么问题可以讨论,谢谢阅读。

链接:https://pan.baidu.com/s/1rOe4auzJPswFoqD7lRIw3A?pwd=6666

提取码:6666

目录
相关文章
|
6月前
|
C语言
蓝桥杯嵌入式零基础如何准备
蓝桥杯嵌入式零基础如何准备
|
6月前
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
|
6月前
蓝桥杯嵌入式第十二届省赛
蓝桥杯嵌入式第十二届省赛
105 0
|
6月前
蓝桥杯嵌入式第十一届(第二场)省赛
蓝桥杯嵌入式第十一届(第二场)省赛
117 0
|
6月前
|
芯片
蓝桥杯嵌入式创建第一个工程(点亮led灯)
蓝桥杯嵌入式创建第一个工程(点亮led灯)
94 0
|
内存技术
蓝桥杯嵌入式之 Keil 仿真与调试
蓝桥杯嵌入式之 Keil 仿真与调试
382 1
|
存储 数据采集
【蓝桥杯嵌入式】蓝桥杯嵌入式第十四届省赛程序真题,真题分析与代码讲解
【蓝桥杯嵌入式】蓝桥杯嵌入式第十四届省赛程序真题,真题分析与代码讲解
1231 1
|
存储 数据采集 数据格式
【蓝桥杯嵌入式】蓝桥杯第十三届省赛程序真题,真题分析与代码讲解
【蓝桥杯嵌入式】蓝桥杯第十三届省赛程序真题,真题分析与代码讲解
735 0
【蓝桥杯嵌入式】定时器实现按键单击,双击,消抖以及长按的代码实现
【蓝桥杯嵌入式】定时器实现按键单击,双击,消抖以及长按的代码实现
844 0