一、基本资料
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作者代码