资源简介

可以 任意管脚 数据结构实现 只需添加管脚无需其他修改 即可返回按键值

资源截图

代码片段和文件信息

#include “key.h“
#include “delay.h“

typedef struct 
{
GPIO_TypeDef* GPIOX;
uint16_t GPIO_Pin;
}KGPT[2][4]; //4*4
KGPT KPIN={ //只需要在下面填写横竖行的IO口和管脚   IO口和管脚都可以随意定义 无需在一个IO口 管脚也无需按顺序
{{GPIOGGPIO_Pin_4} {GPIOGGPIO_Pin_2} {GPIODGPIO_Pin_14}{GPIODGPIO_Pin_12}}//row 横行
{{GPIODGPIO_Pin_10}{GPIODGPIO_Pin_8} {GPIOBGPIO_Pin_14}{GPIOBGPIO_Pin_12}}  //col 竖行
};
#define row 0
#define col 1
#define RCC_APB2_GPIOX  RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG//IO时钟
#define MAX_Time   36000000 // 松手检测最大延时   
//按键初始化函数 
void KEY_Init(void)
{
  u8 i;
GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2_GPIOXENABLE);//使能PORTC时钟
  for(i=0;i<4;i++)

{
 GPIO_InitStructure.GPIO_Pin = KPIN[row][i].GPIO_Pin;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置成推挽输出
 GPIO_Init(KPIN[row][i].GPIOX &GPIO_InitStructure);//初始化row
 GPIO_ResetBits(KPIN[row][i].GPIOXKPIN[row][i].GPIO_Pin);
}
 for(i=0;i<4;i++)
{
 GPIO_InitStructure.GPIO_Pin  = KPIN[col][i].GPIO_Pin;//PC5
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
 GPIO_Init(KPIN[col][i].GPIOX &GPIO_InitStructure);//初始化col
}


u8 ReScan(GPIO_TypeDef* GPIOXuint16_t colPinu8 colIndex)
{
 u8 i;
 delay_ms(10);//消抖延时
 for(i = 0;i<4;i++){
  GPIO_SetBits(KPIN[row][i].GPIOXKPIN[row][i].GPIO_Pin);//每个行置1
  if((GPIO_ReadInputDataBit(GPIOX colPin) == 1)) //如果列也变了 行的值就知道了 为 i
{
GPIO_ResetBits(KPIN[row][i].GPIOXKPIN[row][i].GPIO_Pin); //行恢复 置0 
  return colIndex+i*4+1;//返回的数据 为1-16 对应4x4键盘的16个键
}
GPIO_ResetBits(KPIN[row][i].GPIOXKPIN[row][i].GPIO_Pin);     //行恢复 置0
 }
 return 0;
}
u8 KEY_Scan(void)
{  
 u8 ikeyvalue;
//u32 j=0;
for(i = 0;i<4;i++)
{
 if(GPIO_ReadInputDataBit(KPIN[col][i].GPIOXKPIN[col][i].GPIO_Pin) == 0)//检测列 列值为 i
 {
keyvalue = ReScan(KPIN[col][i].GPIOXKPIN[col][i].GPIO_Pini);//检测行 取键值
  while(GPIO_ReadInputDataBit(KPIN[col][i].GPIOXKPIN[col][i].GPIO_Pin) == 0);
// while((GPIO_ReadInputDataBit(KPIN[col][i].GPIOXKPIN[col][i].GPIO_Pin) == 0)&&(j return keyvalue;//返回键值
}
}
return 0;
}






 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2346  2017-07-09 21:44  4乘4矩阵键盘扫描程序\key.c
     文件         206  2017-07-09 21:43  4乘4矩阵键盘扫描程序\key.h
     目录           0  2017-07-09 21:44  4乘4矩阵键盘扫描程序\

评论

共有 条评论