新手,在学习GPIO的输入,按键部分,在使用KE1的时候,多按几次会错乱,会执行KEY0的部分,求解
key.h文件:
#ifndef _KEY_H
#define _KEY_H
#include"sys.h"
#define KEY0 PEin(4)
#define KEY1 PEin(3)
#define KEY0_PRES 1
#define KEY1_PRES 2
void key_init(void);
u8 key_scan(u8);
#endif
key.c文件:
#include"stm32f10x.h"
#include"key.h"
#include"sys.h"
#include"delay.h"
void key_init(void)
{
RCC->APB2ENR|=1<<6;
GPIOE->CRL&=0xfff00fff;
GPIOE->CRL|=0x00088000;
GPIOE->ODR|=1<<3;
GPIOE->ODR|=1<<4;
}
u8 key_scan(u8 mode)
{
static u8 key_up=1;
if(mode == 1) key_up=1;
if(key_up&&(KEY0==0||KEY1==0))
{
delay_ms(10);
key_up=0;
if(KEY0==0) return 1;
if(KEY1==0) return 2;
}
else if(~(KEY0==0||KEY1==0))
{
key_up=1;
return 0;
}
}
main函数:
#include"stm32f10x.h"
#include"led.h"
#include"delay.h"
#include"beep.h"
#include"key.h"
int main(void)
{
u8 key;
delay_init(72);
led_init();
beep_init();
key_init();
while(1)
{
key=key_scan(0);
if(key)
{
switch (key)
{
case KEY0_PRES:
{
beep=1;
break;
}
case KEY1_PRES:
{
beep=0;
break;
}
}
}
else delay_ms(10);
}
}
一周热门 更多>