在stm32F103上用的,请大神指点指点
u8 key_scan(u8 mode)
{
static u8 key_mode = 1;
if(mode)key_mode = 1;
if(key_mode&&(PA_Data != 0xF0))
{
delay_ms(10);
if(PA_Data != 0xF0) //没按键按下时PA口的值是0xF0
{
u8 key = 0;
key |= PA_Data;
SCAN_B(); //设置PA0~3为上拉输入,PA4~7为推挽输出并置0 //00001111
key |= PA_Data;
SCAN_A(); //设置PA4~7为上拉输入,PA0~3为推挽输出并置0 //11110000 初始化状态
key_mode = 0;
return key;
}
return 0;
}
return 0;
}
下面是在.h文件上加的几个宏定义
#define PA_Data GPIO_ReadInputData(GPIOA)
#define SCAN_A() {GPIOA->CRL=0x88881111;GPIOA->ODR=0xF0;}
#define SCAN_B() {GPIOA->CRL=0x11118888;GPIOA->ODR=0xF;}
经实验,该函数各按键返回值为:
0x77 0x7B 0x7D 0x7E
0xB7 0xBB 0xBD 0xBE
0xD7 0xDB 0xDD 0xDE
0xE7 0xEB 0xED 0xEE
一周热门 更多>