#ifndef __KEY44
#define __KEY44
#include "sys.h"
#define R1 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4) //¶áè¡R1óDÎT°′¼ü°′ÏÂ
#define R2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5) //¶áè¡R2óDÎT°′¼ü°′ÏÂ
#define R3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6) //¶áè¡R3óDÎT°′¼ü°′ÏÂ
#define R4 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7) //¶áè¡R4óDÎT°′¼ü°′ÏÂ
#define S1 1
#define S2 2
#define S3 3
#define S4 4
#define S5 5
#define S6 6
#define S7 7
#define S8 8
#define S9 9
#define S10 10
#define S11 11
#define S12 12
#define S13 13
#define S14 14
#define S15 15
#define S16 16
void key44_Init(void);
u8 key44_Scan(void);
#endif
#include "key44.h"
#include "delay.h"
#include "sys.h"
void key44_Init(void)
{
RCC->APB2ENR|=1<<3; //ê1ÄüPORTBê±Öó
JTAG_Set(JTAG_SWD_DISABLE);
GPIOB->CRL&=0X88881111; //PB0-PB3éèÖÃ3éíÆíìêä3ö£¬

B4-PB7éèÖÃÎaêäèë
GPIOB->CRL|=0X88881111;
GPIOB->ODR|=0X000000F0; //PB4-PB7éèÖÃ3ééÏà-êäèë
}
u8 key44_Scan(void)
{
static u8 key_up=1;
GPIOB->ODR|=0X00000007;
GPIOB->ODR&=0XFFFFFFF7;
if(key_up&&(R1==0||R2==0||R3==0||R4==0))
{
delay_ms(10);
key_up=0;
if(R1==0)return S1;
else if(R2==0)return S2;
else if(R3==0)return S3;
else if(R4==0)return S4;
}
else if(R1==1&&R2==1&&R3==1&&R4==1)key_up=1;
GPIOB->ODR|=0X0000000B;
GPIOB->ODR&=0XFFFFFFFB;
if(key_up&&(R1==0||R2==0||R3==0||R4==0))
{
delay_ms(10);
key_up=0;
if(R1==0)return S5;
else if(R2==0)return S6;
else if(R3==0)return S7;
else if(R4==0)return S8;
}
else if(R1==1&&R2==1&&R3==1&&R4==1)key_up=1;
GPIOB->ODR|=0X0000000D;
GPIOB->ODR&=0XFFFFFFFD;
if(key_up&&(R1==0||R2==0||R3==0||R4==0))
{
delay_ms(10);
key_up=0;
if(R1==0)return S9;
else if(R2==0)return S10;
else if(R3==0)return S11;
else if(R4==0)return S12;
}
else if(R1==1&&R2==1&&R3==1&&R4==1)key_up=1;
GPIOB->ODR|=0X0000000E;
GPIOB->ODR&=0XFFFFFFFE;
if(key_up&&(R1==0||R2==0||R3==0||R4==0))
{
delay_ms(10);
key_up=0;
if(R1==0)return S13;
else if(R2==0)return S14;
else if(R3==0)return S15;
else if(R4==0)return S16;
}
else if(R1==1&&R2==1&&R3==1&&R4==1)key_up=1;
return 0;
}
一周热门 更多>