#include"drv_key.h"
#include"drv_systick.h"
#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)
#define KEY2 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)
#define KEY3 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11)
#define KEYA GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12)
void KEY_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
// 1,´ò¿ªÊ±ÖÓ GPIOA,GPIOB GPIOC,GPIODºÍAFIO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
// 2,Ó³ÉäPA15,PB3 PB4
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGdisable,ENABLE);
// 3,³õʼ»¯ GPIOA GPIOB GPIOC GPIOD (GPIOAºÍGPIOCÅäÖóÉÉÏÀÊäÈë)
GPIO_InitStruct.GPIO_Mode =GPIO_Mode_IPU;//ÉÏÀÊäÈë
GPIO_InitStruct.GPIO_Pin =GPIO_Pin_15; //ÅäÖÃ15Òý½Å
GPIO_InitStruct.GPIO_Speed =GPIO_Speed_2MHz;// ÅäÖóÉËÙÂÊ10
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode =GPIO_Mode_IPU; //ÉÏÀÊäÈë
GPIO_InitStruct.GPIO_Pin =GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
GPIO_InitStruct.GPIO_Speed =GPIO_Speed_2MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode =GPIO_Mode_Out_PP;//ÍÆÍìÊä³ö
GPIO_InitStruct.GPIO_Pin =GPIO_Pin_5|GPIO_Pin_4|GPIO_Pin_3;
GPIO_InitStruct.GPIO_Speed =GPIO_Speed_2MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode =GPIO_Mode_Out_PP;//ÍÆÍìÊä³ö
GPIO_InitStruct.GPIO_Pin =GPIO_Pin_2;
GPIO_InitStruct.GPIO_Speed =GPIO_Speed_10MHz;
GPIO_Init(GPIOD,&GPIO_InitStruct);
// 4,½«GPIOBºÍGPIODµÄ2£¬3£¬4£¬5ÅäÖÃ³É¸ßµçÆ½1
GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_SetBits(GPIOA,GPIO_Pin_15);
GPIO_SetBits(GPIOC,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12);
}
char KEY_data(void)
{
GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_SetBits(GPIOA,GPIO_Pin_15);
GPIO_SetBits(GPIOC,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12);
// ɨÃèµÚÒ»ÐÐ
// ¸øGPIODÖÐPD2ÖÃ0
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
if(KEY1==0 |KEY2==0|KEY3==0| KEYA==0){
Systicks_DelayNms(30);//Ïû¶¶
if(KEYA==0){
return '1';
}
if(KEY3==0){
return '2';
}
}
if(KEY2==0){
return '3';
}
if(KEY1==0){
return 'A';
}
GPIO_ResetBits(GPIOB,GPIO_Pin_4);
if(KEY1==0 |KEY2==0 |KEY3==0 |KEYA==0){
Systicks_DelayNms(30);//Ïû¶¶
if(KEY1==0){
return 'B';
}
}
if(KEY2==0){
return '6';
}
if(KEY3==0){
return '5';
}
if(KEYA==0){
return '4';
}
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
if(KEY1==0 |KEY2==0 |KEY3==0 |KEYA==0){
Systicks_DelayNms(30);//Ïû¶¶
if(KEY1==0){
return 'C';
}
if(KEY2==0){
return '9';
}
if(KEY3==0){
return '8';
}
if(KEYA==0){
return '7';
}
}
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
if(KEY1==0 |KEY2==0 |KEY3==0 |KEYA==0){
Systicks_DelayNms(30);//Ïû¶¶
if(KEY1==0){
return 'D';
}
if(KEY2==0){
return '#';
}
if(KEY3==0){
return '0';
}
if(KEYA==0){
return '*';
}
}
return 0;
}