04、基于STM32的按键操作

void deply(uint32_t count)
{
	while(count--);
}

void InitLED()
{

	GPIO_InitTypeDef GPIO_InitStrue;
	
	//打开端口A、E、F时钟,使能通电
	RCC_AHB1PeriphClockCmd(  RCC_AHB1Periph_GPIOA 
							|RCC_AHB1Periph_GPIOE
							|RCC_AHB1Periph_GPIOF,ENABLE);
	
	//设置端口F为输出模式
	GPIO_InitStrue.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//设置引脚9、10
	GPIO_InitStrue.GPIO_Mode = GPIO_Mode_OUT;//设置为输出模式
	GPIO_InitStrue.GPIO_OType = GPIO_OType_PP;//设置为推挽模式
	GPIO_InitStrue.GPIO_PuPd = GPIO_PuPd_NOPULL;//设置为无上下拉电阻
	GPIO_InitStrue.GPIO_Speed = GPIO_Speed_100MHz;//设置输出速率为100MHz
	GPIO_Init(GPIOF,&GPIO_InitStrue);//初始化端口F
	
	GPIO_InitStrue.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14;//设置引脚13、14
	
	GPIO_Init(GPIOE,&GPIO_InitStrue);//初始化端口E
	
	GPIO_InitStrue.GPIO_Pin = GPIO_Pin_0;//设置引脚0
	GPIO_InitStrue.GPIO_Mode = GPIO_Mode_IN;//设置为输入模式
	GPIO_InitStrue.GPIO_PuPd = GPIO_PuPd_NOPULL;//设置无上下拉电阻
	GPIO_InitStrue.GPIO_Speed = GPIO_Speed_100MHz;//设置输出速率为100MHz
	GPIO_Init(GPIOA,&GPIO_InitStrue);//初始化话端口A
	
	GPIO_InitStrue.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;//设置引脚2、3、4
	GPIO_Init(GPIOE,&GPIO_InitStrue);//初始化端口E
		
	
	GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
	
	
	GPIO_SetBits(GPIOE,GPIO_Pin_13|GPIO_Pin_14);
	
	
}

void LED_on()
{
	GPIO_ResetBits(GPIOF,GPIO_Pin_9);
	deply(0x0FFFFF);
	GPIO_SetBits(GPIOF,GPIO_Pin_9);
	deply(0x0FFFFF);
	
	GPIO_ResetBits(GPIOF,GPIO_Pin_10);
	deply(0x0FFFFF);
	GPIO_SetBits(GPIOF,GPIO_Pin_10);
	deply(0x0FFFFF);
	
	GPIO_ResetBits(GPIOE,GPIO_Pin_13);
	deply(0x0FFFFF);
	GPIO_SetBits(GPIOE,GPIO_Pin_13);
	deply(0x0FFFFF);
	
	GPIO_ResetBits(GPIOE,GPIO_Pin_14);
	deply(0x0FFFFF);
	GPIO_SetBits(GPIOE,GPIO_Pin_14);
	deply(0x0FFFFF);
}

void LED_off()
{
	GPIO_SetBits(GPIOF,GPIO_Pin_9);
	GPIO_SetBits(GPIOF,GPIO_Pin_10);
	GPIO_SetBits(GPIOE,GPIO_Pin_13);
	GPIO_SetBits(GPIOE,GPIO_Pin_14);
}

void LED_cycle()
{
	while(1)
	{
		//按下key0
		if(Bit_RESET==GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0))
		{
			LED_on();
		}
		else
		{
			LED_off();
		}
		
		//按下key1
		if(Bit_RESET==GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2))
		{
			LED_on();
		}
		else
		{
			LED_off();
		}
		
		//按下key2
		if(Bit_RESET==GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3))
		{
			LED_on();
		}
		else
		{
			LED_off();
		}
		
		//按下key3
		if(Bit_RESET==GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4))
		{
				LED_on();
		}
		else
		{
			LED_off();
		}
	}
}

int main(void)
{
	InitLED();

	LED_cycle();
	
	
}
原文地址:https://www.cnblogs.com/lp06/p/11841439.html