• 大小: 1KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: 其他
  • 标签: 矩阵按键  

资源简介

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\

评论

共有 条评论