/*
 * key.c
 *
 *  Created on: 2023年6月18日
 *      Author: wdh19
 */

#include "driverlib.h"
#include "key.h"

void KEY_Init(void)
{
    //
    // GPIO0 and GPIO1 are inputs
    //
    GPIO_setPadConfig(GPIO_PIN_KEY1, GPIO_PIN_TYPE_PULLUP);//上拉输入
    GPIO_setDirectionMode(GPIO_PIN_KEY1,GPIO_DIR_MODE_IN);          //设置成输入
    GPIO_setQualificationMode(GPIO_PIN_KEY1, GPIO_QUAL_SYNC);//同步采样

    GPIO_setPadConfig(GPIO_PIN_KEY2, GPIO_PIN_TYPE_PULLUP);//上拉输入
    GPIO_setDirectionMode(GPIO_PIN_KEY2,GPIO_DIR_MODE_IN);          //设置成输入
    GPIO_setQualificationMode(GPIO_PIN_KEY2, GPIO_QUAL_6SAMPLE);//6个采样周期采样

    // Set qualification period for GPIO0 to GPIO7
    // 每个采样窗口列表 510*SYSCLKOUT
    GPIO_setQualificationPeriod(3,510);//八个一组  我也不是很清楚

}


/**********
 * 函数名称：uint16_t KEY_Scan(uint16_t mode)
 * 功能：用于返回KEY值;
 * mode = 1;支持连续按  mode = 0 不支持连续按
 */
uint16_t KEY_Scan(uint16_t mode)
{
    static uint16_t key_up=1;//按键按松开标志
    if(mode)key_up=1;  //支持连按
    if(key_up&&(USER_KEY1==0||USER_KEY2==0))//判断是否按下
    {
        key_up=0;
        if(USER_KEY1==0)return KEY1_PRES;
        else if(USER_KEY2==0)return KEY2_PRES;
    }else if(USER_KEY1==1&&USER_KEY2==1)key_up=1;
    return 0;// 无按键按下
}


