第十一届蓝桥杯嵌入式组别底层驱动程序-拓展板(矩阵)

第十一届蓝桥杯嵌入式组别底层驱动程序-拓展板(矩阵)

扩展板的8个按键根据AD采样到相应引脚的电压来判断是哪一按键
扩展版按键通过跳线帽将PA5与AKEY相连

#include "button.h"

void button_Init()
{
    
    
    ADC_InitTypeDef ADC_InitStructure;
	
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);

  
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    	
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel = 1;
    ADC_Init(ADC1, &ADC_InitStructure);
      
    ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_55Cycles5);
    
    ADC_Cmd(ADC1, ENABLE);  
    ADC_ResetCalibration(ADC1);
    while(ADC_GetResetCalibrationStatus(ADC1));
    ADC_StartCalibration(ADC1);
    while(ADC_GetCalibrationStatus(ADC1));
}

u8 get_button()
{
    
    
	u16 btn_tmp;
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);
	while(!ADC_GetFlagStatus( ADC1,  ADC_FLAG_EOC));
	btn_tmp=ADC_GetConversionValue(ADC1);
	
	if(btn_tmp <= 0x0020)
	{
    
    
		return 1;
	}
	else if((btn_tmp >= 0x00B0) && (btn_tmp <= 0x0100))
	{
    
    
		return 2;
	}
	else if((btn_tmp >= 0x0240) && (btn_tmp <= 0x0300))
	{
    
    
		return 3;
	}
	else if((btn_tmp >= 0x03B0) && (btn_tmp <= 0x0450))
	{
    
    
		return 4;
	}
	else if((btn_tmp >= 0x0450) && (btn_tmp <= 0x0700))
	{
    
    
		return 5;
	}
	else if((btn_tmp >= 0x0700) && (btn_tmp <= 0x0800))
	{
    
    
		return 6;
	}
	else if((btn_tmp >= 0x0840) && (btn_tmp <= 0x0940))
	{
    
    
		return 7;
	}
	else if(btn_tmp <= 0x0B50)
	{
    
    
		return 8;
	}
	else
	{
    
    
		return 0;	//error status & no key
	}
}

	uint8_t button_dat = 0;
//矩阵
	button_Init();
	
		button_dat = get_button();//按键按下之后的返回值
		snprintf((char *)str, sizeof(str), " %.2d", button_dat);
		LCD_DisplayStringLine(Line9, str);

原文链接:https://blog.csdn.net/Zach_z/article/details/80548423

猜你喜欢

转载自blog.csdn.net/weixin_43352501/article/details/103354231