
#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;
}

