• HAL库实现按键点亮LED


    key.h

    #ifndef _KEY_H
    #define _KEY_H
    
    #include "stm32f4xx.h"
    #include "sys.h"
    
    #define KEY_UP_GPIO_PORT GPIOA
    #define KEY_UP_GPIO_PIN  GPIO_PIN_0
    
    #define KEY0_GPIO_PORT   GPIOH
    #define KEY0_GPIO_PIN    GPIO_PIN_3
    
    #define KEY1_GPIO_PORT   GPIOH
    #define KEY1_GPIO_PIN    GPIO_PIN_2
    
    #define KEY2_GPIO_PORT   GPIOC
    #define KEY2_GPIO_PIN    GPIO_PIN_13
    
    #define KEY_UP HAL_GPIO_ReadPin(KEY_UP_GPIO_PORT,KEY_UP_GPIO_PIN)
    #define KEY0   HAL_GPIO_ReadPin(KEY0_GPIO_PORT,KEY0_GPIO_PIN)
    #define KEY1   HAL_GPIO_ReadPin(KEY1_GPIO_PORT,KEY1_GPIO_PIN)
    #define KEY2   HAL_GPIO_ReadPin(KEY2_GPIO_PORT,KEY2_GPIO_PIN)
    
    #define KEY_UP_PRE 0X01
    #define KEY0_PRE   0x02
    #define KEY1_PRE   0x03
    #define KEY2_PRE   0x04
    
    void KEY_Init(void);
    u8 KEY_Scan(void);
    
    #endif

    key.c

    #include "key.h"
    #include "delay.h"
    
    void KEY_Init()
    {
        GPIO_InitTypeDef KEY_InitStructure;
        
        __HAL_RCC_GPIOA_CLK_ENABLE();
        __HAL_RCC_GPIOC_CLK_ENABLE();
        __HAL_RCC_GPIOH_CLK_ENABLE();
        
        //KEY_UP
        KEY_InitStructure.Pin=KEY_UP_GPIO_PIN;
        KEY_InitStructure.Mode=GPIO_MODE_INPUT;
        KEY_InitStructure.Pull=GPIO_PULLDOWN;
        KEY_InitStructure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;
        HAL_GPIO_Init(KEY_UP_GPIO_PORT,&KEY_InitStructure);
        
        //KEY0
        KEY_InitStructure.Pin=KEY0_GPIO_PIN;
        KEY_InitStructure.Pull=GPIO_PULLUP;
        HAL_GPIO_Init(KEY0_GPIO_PORT,&KEY_InitStructure);
        
        //KEY1
        KEY_InitStructure.Pin=KEY1_GPIO_PIN;
        HAL_GPIO_Init(KEY1_GPIO_PORT,&KEY_InitStructure);
        
        //KEY2
        KEY_InitStructure.Pin=KEY2_GPIO_PIN;
        HAL_GPIO_Init(KEY2_GPIO_PORT,&KEY_InitStructure);
    }
    
    u8 KEY_Scan(void)
    {
        if((KEY_UP==1)|(KEY0==0)|(KEY1==0)|(KEY2==0))
        {
            delay_ms(10);
            if(KEY_UP==1) return KEY_UP_PRE;
            else if(KEY0==0) return KEY0_PRE;
            else if(KEY1==0) return KEY1_PRE;
            else if(KEY2==0) return KEY2_PRE;
        }
        
        return 0;
    }

    main

    #include "sys.h"
    #include "delay.h"
    #include "usart.h"
    #include "led.h"
    #include "key.h"
    
    int main(void)
    {
        u8 key;
        HAL_Init();                     //³õʼ»¯HAL¿â   
        Stm32_Clock_Init(360,25,2,8);   //ÉèÖÃʱÖÓ,180Mhz
        delay_init(180);                //³õʼ»¯ÑÓʱº¯Êý
        LED_Init();                     //³õʼ»¯LED  
        KEY_Init();
        
        
        while(1)
        {
            key=KEY_Scan();
            switch(key)
            {
                case KEY_UP_PRE: LED_RED_ON;    break;
                case KEY0_PRE:   LED_RED_OFF;   break;
                case KEY1_PRE:   LED_GREEN_ON;  break;
                case KEY2_PRE:   LED_GREEN_OFF; break;
            }
        }
        
    }
  • 相关阅读:
    WordCount项目基本功能
    让自己的头脑极度开放
    Docker安装Mysql5.7
    MySQL中的函数索引(Generated Column)及一次SQL优化
    关于老系统的重构和优化选择
    JIRA笔记(一):安装部署JIRA
    Jenkins 配置GitLab插件和Git插件
    Loading descriptor for XXX.'has encountered a problem' A internal error occured during:"Loading ....."
    Newton插值的C++实现
    Lagrange插值C++程序
  • 原文地址:https://www.cnblogs.com/CaiFengYuanXing/p/13624027.html
Copyright © 2020-2023  润新知