资源简介
可以 任意管脚 数据结构实现 只需添加管脚无需其他修改 即可返回按键值
代码片段和文件信息
#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矩阵键盘扫描程序\
- 上一篇:ssm整合项目视频+源码
- 下一篇:BC35.rar
相关资源
- STM32蓝牙控制LED
- STM32F407 GPIO LED点亮例程
- 数据结构编程题汇总
- 全套数据结构视频-网盘资源
- STM32f407核心板电路AD原理图和PCB图
- 基于stm32的小车红外避障
- STM32F103C8T6使用ULN2003模块控制28BYJ-48电
- DS3231代码,STM32已测试通过
- 基于STM32的避障循迹寻光检测硬币小车
-
Jli
nk unlock for F1 - W5500视频资料代码讲解视频
- STM32F103ZET6库函数模板
- 矩阵键盘4*3
- STM32F103 TIM1650驱动
- stm32产生方波信号
- 数据结构电梯代码
- stm32最全的封装库
- 实验二 线性表的链式存储和实现
- STM32H750 pcb封装altium
- STM32H750 原理图封装altium
- 树与二叉树的转换
- STM32嵌入式大棚系统设计
- stm32f205 IAP程序
- 数据结构课程设计n皇后问题的代码实
- stm32f4xx_DFP2.14.0网盘链接.txt
- STM32系列芯片AD封装及元件库其中包括
- 数据结构之双向链表(完整版)
- STM32F1灭火小车程序-灭火机器人
- 东北大学数据结构实验2欧洲旅行
- STM32 dsp库
评论
共有 条评论