[mw_shl_code=c,true]#include "MatrixKey.h"
#include"sys.h"
#include"delay.h"
void MatrixKey_Init(void) //矩阵键盘I/O初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin=MatrixKey_Line; //I/O 0,1,2,3
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(MatrixKey_GPIO,&GPIO_InitStructure);//初始化GPIOB 0,1,2,3
GPIO_SetBits(GPIOA, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3); //使GPIOB 0,1,2,3 全部高电平
GPIO_InitStructure.GPIO_Pin=MatrixKey_Row; //I/O 4,5,6,7
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//上拉输入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(MatrixKey_GPIO,&GPIO_InitStructure);//初始化GPIOB 4,5,6,7
GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); //使GPIOB 4,5,6,7 全部低叩缙?
//GPIO_ResetBits(GPIOB,GPIO_Pin_4) ;
}
u16 MatrixKey_scan(void)
{
u16 KeyValue=0;
if ((GPIO_ReadInputData(MatrixKey_GPIO)&0xff!=0x0f))
{
delay_ms(10);
if ((GPIO_ReadInputData(MatrixKey_GPIO)&0xff!=0x0f))
{
GPIO_SetBits(MatrixKey_GPIO, GPIO_Pin_0);
GPIO_ResetBits(MatrixKey_GPIO,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
switch(GPIO_ReadInputData(MatrixKey_GPIO)&0xff)
{
case 0x11:KeyValue=0;break;
case 0x21:KeyValue=4;break;
case 0x41:KeyValue=8;break;
case 0x81:KeyValue=12;break;
}
GPIO_SetBits(MatrixKey_GPIO, GPIO_Pin_1);
GPIO_ResetBits(MatrixKey_GPIO,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3);
switch(GPIO_ReadInputData(MatrixKey_GPIO)&0xff)
{
case 0x12:KeyValue=1;break;
case 0x22:KeyValue=5;break;
case 0x42:KeyValue=9;break;
case 0x82:KeyValue=13;break;
}
GPIO_SetBits(MatrixKey_GPIO, GPIO_Pin_2);
GPIO_ResetBits(MatrixKey_GPIO,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3);
switch(GPIO_ReadInputData(MatrixKey_GPIO)&0xff)
{
case 0x14:KeyValue=2;break;
case 0x24:KeyValue=6;break;
case 0x44:KeyValue=10;break;
case 0x84:KeyValue=14;break;
}
GPIO_SetBits(MatrixKey_GPIO, GPIO_Pin_3);
GPIO_ResetBits(MatrixKey_GPIO,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
switch(GPIO_ReadInputData(MatrixKey_GPIO)&0xff)
{
case 0x18:KeyValue=3;break;
case 0x28:KeyValue=7;break;
case 0x48:KeyValue=11;break;
case 0x88:KeyValue=15;break;
}
GPIO_SetBits(MatrixKey_GPIO, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
GPIO_ResetBits(MatrixKey_GPIO,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
while((GPIO_ReadInputData(MatrixKey_GPIO))&0xff!=0x0f);
return KeyValue;
}
}
return 0;
}
[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
[mw_shl_code=c,true].h文件:[/mw_shl_code]
[mw_shl_code=c,true]#ifndef _MatrixKey_H
#define _MatrixKey_H
#include "sys.h"
#define Interrupt_Scan
#define DELAY_COUNT 0x0ffff
#define MatrixKey_GPIO GPIOA
#define MatrixKey_Line_1 GPIO_Pin_0
#define MatrixKey_Line_2 GPIO_Pin_1
#define MatrixKey_Line_3 GPIO_Pin_2
#define MatrixKey_Line_4 GPIO_Pin_3
#define MatrixKey_Row_1 GPIO_Pin_4
#define MatrixKey_Row_2 GPIO_Pin_5
#define MatrixKey_Row_3 GPIO_Pin_6
#define MatrixKey_Row_4 GPIO_Pin_7
#define MatrixKey_Line (MatrixKey_Line_1|MatrixKey_Line_2|MatrixKey_Line_3|MatrixKey_Line_4)
#define MatrixKey_Row (MatrixKey_Row_1|MatrixKey_Row_2|MatrixKey_Row_3|MatrixKey_Row_4)
#define MatrixKey_Exti_Row_1 EXTI_Line4
#define MatrixKey_Exti_Row_2 EXTI_Line5
#define MatrixKey_Exti_Row_3 EXTI_Line6
#define MatrixKey_Exti_Row_4 EXTI_Line7
#define MatrixKey_Exti_Row_all (MatrixKey_Exti_Row_1|MatrixKey_Exti_Row_2|MatrixKey_Exti_Row_3|MatrixKey_Exti_Row_4)
#define MatrixKey_Source_GPIO GPIO_PortSourceGPIOB
#define MatrixKey_Source_PIN_1 GPIO_PinSource4
#define MatrixKey_Source_PIN_2 GPIO_PinSource5
#define MatrixKey_Source_PIN_3 GPIO_PinSource6
#define MatrixKey_Source_PIN_4 GPIO_PinSource7
#endif
void MatrixKey_Init(void);
u16 MatrixKey_scan(void);
[/mw_shl_code]
为什么键盘无返回值啊,,帮看一下。。。 |