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

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


一.题目

二.思路导向

这套题目相对简单,考察LCD屏幕,LED,PWM,ADC,以及按键等知识点,相互结合起来也比较简单。我们只需要先分模块写好各部分即可。具体如下:

2.1 ADC模块

这里使用STM32CubeMX配置的时候使用的是adc2的通道15即PB15。自行配置即可

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;//参考电压为3.3V,通道是12位的所以除以4096(2的12次方)
 
 
}

2.2 按键模块

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

2.3 配置定时器

我工程配置的是定时器3,时间为100ms,最后在定时器中断中添加相关逻辑部分即可,如下:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  
  char text[100];
  static int count=0;
if(htim->Instance==TIM3)
{ 
    times=1;    
    count++;
    scan_key();
      if(key[0].key_press==1)
     { 
          _UI=!_UI;
          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);
         
         if(_UI==0) HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_RESET);
           
        
         else if(_UI==1) HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET);
               
         
         HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
         HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
         
         LCD_Clear(Black);
       LCD_SetBackColor(Black);
         key[0].key_press=0;
         LCD_SetTextColor(Green);
         
     
     
     
      }
      if(key[1].key_press==1)
     {   
         if(_UI==0)return ;
          pa6_duty+=10;
         if(pa6_duty==100)pa6_duty=10;
         __HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty); 
         
         key[1].key_press=0;
         LCD_SetTextColor(Blue);     
     
     
      }
     if(key[2].key_press==1)
     {    
         if(_UI==0)return ;
          pa7_duty+=10;
         if(pa7_duty==100)pa7_duty=10;
         __HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,pa7_duty); 
         
         key[2].key_press=0;
         LCD_SetTextColor(Red);     
     
     
      }
      if(key[3].key_press==1)
     { 
          _mode=~_mode;
         key[3].key_press=0;
         LCD_SetTextColor(Yellow);        
      }
      
if(_UI==0)
{
double temp=Get_ADC(hadc2);
sprintf(text,"    V:%.2fV",temp);
__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,temp*100/3.3); 
__HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,temp*100/3.3); 
LCD_DisplayStringLine(Line1,(unsigned char *)"     Data");
LCD_DisplayStringLine(Line3,(unsigned char *)text);
if(_mode==0)      
LCD_DisplayStringLine(Line5,(unsigned char *)"    Mode:AUTO"); 
else LCD_DisplayStringLine(Line5,(unsigned char *)"    Mode:MANU"); 
}
else
{
  LCD_DisplayStringLine(Line1,(unsigned char *)"      Para");
  sprintf(text,"    PA6:%d%%",pa6_duty);
  LCD_DisplayStringLine(Line3,(unsigned char *)text); 
  sprintf(text,"    PA7:%d%%",pa7_duty);
  LCD_DisplayStringLine(Line5,(unsigned char *)text);
}
}
        
}

三.工程文件

文件也属实有点多,可以到这里自取博主的代码进行参考。如有什么问题也可以评论区进行交流(博主会看评论区)最后感谢阅读。

链接:https://pan.baidu.com/s/11nfGSuzsEeDCWtdyrCY3Pw?pwd=6666 提取码:6666

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