基于STM32的按键操作

void deply(__IO uint32_t count)
{
    while(count--);
}

void InitLED()
{

    GPIO_InitTypeDef GPIO_InitStrue;
    
    //打开端口A、E、F时钟,使能通电
    RCC_AHB1PeriphClockCmd(  RCC_AHB1Periph_GPIOA 
                            |RCC_AHB1Periph_GPIOE
                            |RCC_AHB1Periph_GPIOF,ENABLE);
    
    //设置端口F为输出模式
    GPIO_InitStrue.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//设置引脚9、10
    GPIO_InitStrue.GPIO_Mode = GPIO_Mode_OUT;//设置为输出模式
    GPIO_InitStrue.GPIO_OType = GPIO_OType_PP;//设置为推挽模式
    GPIO_InitStrue.GPIO_PuPd = GPIO_PuPd_NOPULL;//设置为无上下拉电阻
    GPIO_InitStrue.GPIO_Speed = GPIO_Speed_100MHz;//设置输出速率为100MHz
    GPIO_Init(GPIOF,&GPIO_InitStrue);//初始化端口F
    
    GPIO_InitStrue.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14;//设置引脚13、14
    
    GPIO_Init(GPIOE,&GPIO_InitStrue);//初始化端口E
    
    GPIO_InitStrue.GPIO_Pin = GPIO_Pin_0;//设置引脚0
    GPIO_InitStrue.GPIO_Mode = GPIO_Mode_IN;//设置为输入模式
    GPIO_InitStrue.GPIO_PuPd = GPIO_PuPd_NOPULL;//设置无上下拉电阻
    GPIO_InitStrue.GPIO_Speed = GPIO_Speed_100MHz;//设置输出速率为100MHz
    GPIO_Init(GPIOA,&GPIO_InitStrue);//初始化话端口A
    
    GPIO_InitStrue.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;//设置引脚2、3、4
    GPIO_Init(GPIOE,&GPIO_InitStrue);//初始化端口E
        
    
    GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
    
    
    GPIO_SetBits(GPIOE,GPIO_Pin_13|GPIO_Pin_14);
    
    
}

void LED_on()
{
    GPIO_ResetBits(GPIOF,GPIO_Pin_9);
    deply(0x0FFFFF);
    GPIO_SetBits(GPIOF,GPIO_Pin_9);
    deply(0x0FFFFF);
    
    GPIO_ResetBits(GPIOF,GPIO_Pin_10);
    deply(0x0FFFFF);
    GPIO_SetBits(GPIOF,GPIO_Pin_10);
    deply(0x0FFFFF);
    
    GPIO_ResetBits(GPIOE,GPIO_Pin_13);
    deply(0x0FFFFF);
    GPIO_SetBits(GPIOE,GPIO_Pin_13);
    deply(0x0FFFFF);
    
    GPIO_ResetBits(GPIOE,GPIO_Pin_14);
    deply(0x0FFFFF);
    GPIO_SetBits(GPIOE,GPIO_Pin_14);
    deply(0x0FFFFF);
}

void LED_off()
{
    GPIO_SetBits(GPIOF,GPIO_Pin_9);
    GPIO_SetBits(GPIOF,GPIO_Pin_10);
    GPIO_SetBits(GPIOE,GPIO_Pin_13);
    GPIO_SetBits(GPIOE,GPIO_Pin_14);
}

void LED_cycle()
{
    while(1)
    {
        //按下key0
        if(Bit_RESET==GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0))
        {
            LED_on();
        }
        else
        {
            LED_off();
        }
        
        //按下key1
        if(Bit_RESET==GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2))
        {
            LED_on();
        }
        else
        {
            LED_off();
        }
        
        //按下key2
        if(Bit_RESET==GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3))
        {
            LED_on();
        }
        else
        {
            LED_off();
        }
        
        //按下key3
        if(Bit_RESET==GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4))
        {
                LED_on();
        }
        else
        {
            LED_off();
        }
    }
}

int main(void)
{
    InitLED();

    LED_cycle();
    
    
}

猜你喜欢

转载自www.cnblogs.com/lp06/p/11841439.html