实验3:按键输入实验

一、原理图

二、库函数

    (1)读取IO的状态

            uint8_t   GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

            参数:

                GPIO_Pin--->GPIO_Pin_x(x = 0~15)

            返回值:

                读取到的状态:0表示按键按下;1表示按键没有按下。

三、程序

key.h文件

#ifndef __KEY_H__
#define __KEY_H__

#include "stm32f4xx_conf.h"

void KEY_Config(void);
uint16_t KEY_Scan(void);


#endif

key.c文件

#include "./KEY/key.h"


/*
    key1--->PF9
    key2--->PF8
    key3--->PF7
    key4--->PE6
*/


/**********************
    功能:配置KEY
    参数:无
    返回值:无
***********************/
void KEY_Config(void)
{
    GPIO_InitTypeDef initValue;
    
    /*1、打开GPIO时钟*/
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    
    /*2、初始化KEY*/
    initValue.GPIO_Mode = GPIO_Mode_IN;
    initValue.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_8 | GPIO_Pin_7;
    initValue.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOF,&initValue);
    
    initValue.GPIO_Pin = GPIO_Pin_6;
    GPIO_Init(GPIOE,&initValue);
}


/*********************************
    功能:扫描按键
    参数:无
    返回值:
            1---表示key1按下
            2---表示key2按下
            3---表示key3按下
            4---表示key4按下
            0---表示所有key都没有按下
*********************************/
uint16_t KEY_Scan(void)
{
    if(GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_9) == 0)  //key1按下
    {
        return 1;
    }
    if(GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_8) == 0) //key2按下
    {
        return 2;
    }
    if(GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_7) == 0) //key3按下
    {
        return 3;
    }
    if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_6) == 0) //key4按下
    {
        return 4;
    }
    
    return 0;
}

main.c文件

#include "delay.h"
#include "./LED/led.h"
#include "./BEEP/beep.h"
#include "./KEY/key.h"

int main(void)
{
    uint16_t num;
    
    //配置LED
    LED_Config();
    
    //配置BEEP
    BEEP_Config();
    
    //配置KEY
    KEY_Config();
    num = KEY_Scan();
    
    while(1)
    {
        if(num == 1) //key1按下
        {
            BEEP_ON();
        }
        else
        {
            BEEP_OFF();
        }
        
        if(num == 2) //key2按下
        {
            LED_ON(1);
        }
        
        
        if(num == 3) //key3按下
        {
            LED_ON(2);
        }
        
        
        if(num == 4) //key4按下
        {
            LED_OFF(1);
            LED_OFF(1);
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值