#include "stm32f10x.h"
#include "keyscan.h"
#include "delay.h"

void KEY_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE); //使能PB,PE端口时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
						   RCC_APB2Periph_GPIOC|
						   RCC_APB2Periph_GPIOD,ENABLE); //使能PA,PC,PD端口时钟
    
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;       //推挽输出
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;      //IO口速度为50MHZ
    
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;              //LED0-->PB.5   端口配置
    GPIO_Init(GPIOA,&GPIO_InitStructure);                //根据设定参数初始化GPIOB.5
    GPIO_SetBits(GPIOA,GPIO_Pin_0);                      //PB.5 输出高
                                                         
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;              //LED1-->PE.5 端口配置,推挽输出
    GPIO_Init(GPIOA,&GPIO_InitStructure);                //推挽输出,IO口速度为50MHZ
    GPIO_SetBits(GPIOA,GPIO_Pin_8);                      //PE.5 输出高

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;              //LED1-->PE.5 端口配置,推挽输出
    GPIO_Init(GPIOC,&GPIO_InitStructure);                //推挽输出,IO口速度为50MHZ
    GPIO_SetBits(GPIOC,GPIO_Pin_13);
    
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;              //LED1-->PE.5 端口配置,推挽输出
    GPIO_Init(GPIOD,&GPIO_InitStructure);                //推挽输出,IO口速度为50MHZ
    GPIO_SetBits(GPIOD,GPIO_Pin_3);
                      
}

//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//0，没有任何按键按下
//1，KEY0按下
//2，KEY1按下
//3，KEY2按下 
//4，KEY3按下 WK_UP
//注意此函数有响应优先级,KEY0>KEY1>KEY2>KEY3!!

u8 key_scan(u8 mode)
{
	static u8 key_up=1;//按键按松开标志
	if(mode)key_up=1;  //支持连按		  
	if(key_up&&(key0==0||key1==0||key2==0||key3==0))
	{
		delay_ms(10);//去抖动 
		key_up=0;
		if(key0==0)return 	  KEY_UP;
		else if(key1==0)return KEY_TAMPER;
		else if(key2==0)return KEY_USER1;
		else if(key3==0)return KEY_USER2;
	}else if(key0==1&&key1==1&&key2==1&&key3==1)key_up=1; 	    
 	return 0;// 无按键按下
}
