一.题目
二.解题思路
这套题也比较常规,考察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