key_board.c文件
#include "stm32f10x.h" // Device header
#include "key_board.h"
#include "Delay.h" // Device header
//引脚分配
#define KeyScan_C1 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)
#define KeyScan_C2 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)
#define KeyScan_C3 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10)
#define KeyScan_C4 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)
#define KeyScan_R1 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7)
#define KeyScan_R2 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6)
#define KeyScan_R3 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5)
#define KeyScan_R4 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_4)
void KEY1_Board_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_11|GPIO_Pin_10;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
}
void KEY2_Board_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_0|GPIO_Pin_11|GPIO_Pin_10;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_0|GPIO_Pin_11|GPIO_Pin_10);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
int KeyScan(void)
{
u8 column=0;
u8 KeyValue=0;
KEY1_Board_Init();
if( KeyScan_C4==0)
{
Delay_ms(50);
if( KeyScan_C4==0)
{
column=4;
}
}
if( KeyScan_C3==0)
{
Delay_ms(50);
if( KeyScan_C3==0)
{
column=3;
}
}
if( KeyScan_C2==0)
{
Delay_ms(50);
if( KeyScan_C2==0)
{
column=2;
}
}
if( KeyScan_C1==0)
{
Delay_ms(50);
if( KeyScan_C1==0)
{
column=1;
}
}
if(column==1)
{
KEY2_Board_Init();
if( KeyScan_R1==1)
{
KeyValue=1;
}
if( KeyScan_R2==1)
{
KeyValue=5;
}
if( KeyScan_R3==1)
{
KeyValue=9;
}
if( KeyScan_R4==1)
{
KeyValue=13;
}
}
if(column==2)
{
KEY2_Board_Init();
if( KeyScan_R1==1)
{
KeyValue=2;
}
if( KeyScan_R2==1)
{
KeyValue=6;
}
if( KeyScan_R3==1)
{
KeyValue=10;
}
if( KeyScan_R4==1)
{
KeyValue=14;
}
}
if(column==3)
{
KEY2_Board_Init();
if( KeyScan_R1==1)
{
KeyValue=3;
}
if( KeyScan_R2==1)
{
KeyValue=7;
}
if( KeyScan_R3==1)
{
KeyValue=11;
}
if( KeyScan_R4==1)
{
KeyValue=15;
}
}
if(column==4)
{
KEY2_Board_Init();
if( KeyScan_R1==1)
{
KeyValue=4;
}
if( KeyScan_R2==1)
{
KeyValue=8;
}
if( KeyScan_R3==1)
{
KeyValue=12;
}
if( KeyScan_R4==1)
{
KeyValue=16;
}
}
return KeyValue;
}
key_board.h头文件
#ifndef __KEYBOARD_H
#define __KEYBOARD_H
void KEY1_Board_Init(void);
void KEY2_Board_Init(void);
int KeyScan(void);
#endif
用就完事了,亲测有效,根据条件修改引脚就行
版权声明:本文为qq_52068493原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。