资源简介
4*4矩阵按键只需要8个I/O口,根据自己的需求简单修改。
代码片段和文件信息
#include “stm32f10x.h“
#include “delay.h“
#include “KeyBoard.h“
void KeyBoard_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_KEY_GPIOENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(KEY_GPIO &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(KEY_GPIO &GPIO_InitStructure);
GPIO_SetBits(KEY_GPIOGPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
GPIO_ResetBits(KEY_GPIOGPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
}
u8 Read_KeyValue(void)
{
u8 KeyValue = 0;
if(GPIO_ReadInputData(KEY_GPIO)&0xf0)
{
delay_ms(10);
if(GPIO_ReadInputData(KEY_GPIO)&0xf0)
{
GPIO_SetBits(KEY_GPIOGPIO_Pin_0);
GPIO_ResetBits(KEY_GPIOGPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
switch(GPIO_ReadInputData(KEY_GPIO)&0xff)
{
case 0x11:KeyValue = 13; break;
case 0x21:KeyValue = 12; break;
case 0x41:KeyValue = 11; break;
case 0x81:KeyValue = 10; break;
}
GPIO_SetBits(KEY_GPIOGPIO_Pin_1);
GPIO_ResetBits(KEY_GPIOGPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3);
switch(GPIO_ReadInputData(KEY_GPIO)&0xff)
{
case 0x12:KeyValue = 15; break; //# 15
case 0x22:KeyValue = 9; break;
case 0x42:KeyValue = 6; break;
case 0x82:KeyValue = 3; break;
}
GPIO_SetBits(KEY_GPIOGPIO_Pin_2);
GPIO_ResetBits(KEY_GPIOGPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3);
switch(GPIO_ReadInputData(KEY_GPIO)&0xff)
{
case 0x14:KeyValue = 0; break;
case 0x24:KeyValue = 8; break;
case 0x44:KeyValue = 5; break;
case 0x84:KeyValue = 2; break;
}
GPIO_SetBits(KEY_GPIOGPIO_Pin_3);
GPIO_ResetBits(KEY_GPIOGPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
switch(GPIO_ReadInputData(KEY_GPIO)&0xff)
{
case 0x18:KeyValue = 14; break; //*14
case 0x28:KeyValue = 7; break;
case 0x48:KeyValue = 4; break;
case 0x88:KeyValue = 1; break;
}
while(GPIO_ReadInputData(KEY_GPIO)&0xf0);
GPIO_SetBits(KEY_GPIOGPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
GPIO_ResetBits(KEY_GPIOGPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
return KeyValue;
}
}
return 0xff;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2658 2017-04-13 11:48 KEY\KeyBoard.c
文件 209 2017-04-13 11:10 KEY\KeyBoard.h
目录 0 2017-04-13 11:48 KEY\
评论
共有 条评论