移植到stm32f1,实现手动线赋码控制器功能
This commit is contained in:
83
source/interface/if_key.c
Normal file
83
source/interface/if_key.c
Normal file
@@ -0,0 +1,83 @@
|
||||
|
||||
#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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user