独立按键程序
4 个按键:KEY0、KEY1、KEY2、和 KEY3
KEY0、KEY1 和 KEY2 ,KEY3是低电平有效的,在我的板子上
main.c
#include "sys.h"
#include "delay.h"
#include "key.h"
int main(void)
{
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //系统时钟设置PLL作为系统时钟
delay_init(); //初始化延时函数
KEY_independen_TEST(); //独立键盘检验函数
}
key.c
#include "key.h"
#include "delay.h"
unsigned char key=0; //用于得到键值
//led初始化用于检验独立按键函数
void LED_independen_Init(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = LED_flicker_GPIO; //流水灯GPIO引脚配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; //最高输出速率50MHz
GPIO_Init(GPIOD, &GPIO_InitStructure); //IO口初始化
}
//独立键盘引脚配置
void KEY_independen_Init(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能GPIO时钟
GPIO_InitStructure.GPIO_Pin = KEY_independen_GPIO; //GPIOD,0-3为输入上拉
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; //最高输出速率50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //输入上拉
GPIO_Init(GPIOC, &GPIO_InitStructure); //IO口初始化
}
//独立键盘扫描函数
unsigned char KEY_independen_Scan(void)
{
KEY_independen_Init();
delay_ms(20); //去抖动
if(KEY0==0||KEY1==0||KEY2==0||KEY3==0)
{
delay_ms(20);//去抖动
if(KEY0==0) //按键0按下
return 1;
else if(KEY1==0) //按键1按下
return 2;
else if(KEY2==0) //按键2按下
return 3;
else if(KEY3==0) //按键3按下
return 4;
}
return 0;// 无按键按下
}
//独立键盘检验函数
unsigned char KEY_independen_TEST(void)
{
LED_independen_Init(); //led初始化
while(1)
{
key=KEY_independen_Scan(); //得到键值
switch(key)
{
case 1:
GPIO_WriteBit(GPIOD, GPIO_Pin_0, Bit_RESET); //按键0按下产生的现象
break;
case 2:
GPIO_WriteBit(GPIOD, GPIO_Pin_1, Bit_RESET); //按键1按下产生的现象
break;
case 3:
GPIO_WriteBit(GPIOD, GPIO_Pin_2, Bit_RESET); //按键2按下产生的现象
break;
case 4:
GPIO_WriteBit(GPIOD, GPIO_Pin_3, Bit_RESET); //按键3按下产生的现象
break;
default:
GPIO_Write(GPIOD,0XFF);
break;
}
}
}
key.h
#include "sys.h"
#define KEY_independen_GPIO GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3 //独立键盘引脚配置
//led引脚
#define LED_flicker_GPIO GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3
#define KEY0 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0) //读GPIO端口的输入,输入等于0返回1
#define KEY1 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1) //读GPIO端口的输入,输入等于0返回2
#define KEY2 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2) //读GPIO端口的输入,输入等于0返回3
#define KEY3 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3) //读GPIO端口的输入,输入等于0返回4
void KEY_independen_Init(void); //独立键盘初始化
unsigned char KEY_independen_Scan(void); //独立键盘扫描函数四个键KEY0,KEY1,KEY2,KEY3分别返回1,2,3,4
unsigned char KEY_independen_TEST(void); //独立键盘检验函数
//led初始化用于检验独立按键函数
void LED_independen_Init(void);