Files
checker_slave/source/interface/if_key.c

84 lines
1.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "board.h"
#include "stm32f10x.h"
#include "if_key.h"
#include "core_delay.h"
#define GPIO_Initer() {.GPIO_Speed=GPIO_Speed_50MHz,\
.GPIO_Mode=GPIO_Mode_IPU,\
}
typedef struct{
int key_old;
}self_def;
static self_def g_self;
static int init(void)
{
GPIO_InitTypeDef init2=GPIO_Initer();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
init2.GPIO_Pin=(1<<0);
GPIO_Init(GPIOB,&init2);
}
static int scan(void)
{
self_def *s=&g_self;
int key=0,key2=0;
key=PININ(B,0);
if(key!=s->key_old)
{
//连续采集5次都为相反电平时才输出此电平
for(int i=0;i<2;i++)
{
delay_ms(20);
key2=PININ(B,0);
if(key!=key2) {
return key2;
}
}
return key;
}
return s->key_old;
}
// 读取按键1按下0未按下
static int read(void)
{
self_def *s=&g_self;
int key=scan();
int key_ret=0;
if(key!=s->key_old)
{
if(key==0){
key_ret=1;
}else{
key_ret=0;
}
s->key_old=key;
}
return key_ret;
}
static key_def g_key={
.init=init,
.read=read,
};
key_def *key(void)
{
return &g_key;
}