蓝桥杯嵌入式——KEY按键

一、基本资料
书
1.GPIO分别为PA0/PA8,PB1/PB2。
2.按键可以用按键扫描和中断,我喜欢用扫描。

二、主要代码

key.c

#include "stm32f10x.h"
#include "key.h"

void KEY_Init(void)
{
	GPIO_InitTypeDef   GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_8;
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

unsigned char KEY_Scan(void)
{
	unsigned char ucKEY_Val;
	if(~GPIO_ReadInputData(GPIOA) & 0x101)
	{
		if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)) ucKEY_Val = 1;
		if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)) ucKEY_Val = 2;
	}
	if(~GPIO_ReadInputData(GPIOA) & 6)
	{
		if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)) ucKEY_Val = 3;
		if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)) ucKEY_Val = 4;
	}
	return ucKEY_Val;
}

key.h

#ifndef  __KEY_H_
#define  __KEY_H_
		
void KEY_Init(void);
unsigned char KEY_Scan(void);

#endif

main.c

//按键关于扫描
void KEY_Proc(void)
{ 
 if(ulTick_ms%10 == 0)
 {
	u8 KEY_Val;
	KEY_Val = KEY_Scan();
	if(KEY_Val != KEY_Long)	
	{
		KEY_Long = KEY_Val;
		Tick_ms = ulTick_ms;
	}
	else KEY_Val = 0;
	switch(KEY_Val)
	{
	}
	if(ulTick - Tick_ms > 500)
	{
		switch(KEY_Long)
		{
		}
	}

三、文献参考
1.fei…作者代码
2.NanKing-芒果作者代码
3.ReCclay作者代码
4.Zach_z作者代码

原创文章 26 获赞 4 访问量 810

猜你喜欢

转载自blog.csdn.net/qq_42280105/article/details/105462810