打印
[其他ST产品]

按键控制lLED亮灭和光敏模块传感器控制蜂鸣器

[复制链接]
780|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
按键解析
按键的模式要配置成GPIO的输入模式,在下图1中,STM32要配置成上拉输入模式,这样按键没有按下时,就是高电平,按下时就是低电平,在下图2中,STM32可以配置成上拉输入模式和浮空输入模式,上拉模式可以使高电平信号更强,更稳定,在浮空模式下,按键不按下是高电平,按下就是低电平,图三配置成下拉输入模式,图四配置成下拉输入或者浮空输入模式。



二.按键控制LED亮灭2.1 接线图

2.2 代码

main

#include "stm32f10x.h"  // Device header

#include "LED.h"

#include "Delay.h"

#include "Key.h"


uint8_t Keynum;


int main()

{

        LEDInit();

        Key_Init();

        while(1)

        {

                Keynum = Key_Getnum();

                if(Keynum == 1)

                {

                        LED1_Turn();

                }

                if(Keynum == 2)

                {

                        LED2_Turn();

                }

        }

}




使用特权

评论回复
沙发
大鹏2365|  楼主 | 2024-1-29 15:31 | 只看该作者
LED.c
include "stm32f10x.h"                  // Device header

void LEDInit()
{
        GPIO_InitTypeDef GPIOstruct;
        GPIOstruct.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIOstruct.GPIO_Pin=(GPIO_Pin_1 | GPIO_Pin_2);
        GPIOstruct.GPIO_Speed=GPIO_Speed_50MHz;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        GPIO_Init(GPIOA,&GPIOstruct);
       
        GPIO_SetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_2); //初始化高电平,不亮
       
}

void LED1_On(void) //亮灯
{
        GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}

void LED1_Turn(void) //一开始默认高电平先执行else,在执行if
{
        if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)==0)
        {
                GPIO_SetBits(GPIOA,GPIO_Pin_1);
        }
        else
        {
                GPIO_ResetBits(GPIOA,GPIO_Pin_1);
        }
}

void LED2_Turn(void)
{
        if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)==0)
        {
                GPIO_SetBits(GPIOA,GPIO_Pin_2);
        }
        else
        {
                GPIO_ResetBits(GPIOA,GPIO_Pin_2);
        }
}

void LED1_Off(void)        //灭灯
{
        GPIO_SetBits(GPIOA,GPIO_Pin_1);
}

void LED2_On(void)
{
        GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}

void LED2_Off(void)
{
        GPIO_SetBits(GPIOA,GPIO_Pin_2);
}

使用特权

评论回复
板凳
大鹏2365|  楼主 | 2024-1-29 15:31 | 只看该作者
LED.h

#ifndef __LED_H
#define __LED_H

void LEDInit(void);
void LED1_On(void);
void LED1_Turn(void);
void LED2_Turn(void);
void LED1_Off(void);
void LED2_On(void);
void LED2_Off(void);


#endif

使用特权

评论回复
地板
大鹏2365|  楼主 | 2024-1-29 15:31 | 只看该作者
Key.c
#include "stm32f10x.h"                  // Device header
#include "Delay.h"

void Key_Init(void)
{
        GPIO_InitTypeDef GPIOstruct;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        GPIOstruct.GPIO_Mode=GPIO_Mode_IPU;
        GPIOstruct.GPIO_Pin=(GPIO_Pin_1 | GPIO_Pin_11);
        GPIOstruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIOstruct);
       
}

uint8_t Key_Getnum(void)
{
        uint8_t Keynum = 0;
        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0)
        {
                Delay_ms(20);
                while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0);
                Delay_ms(20);
                Keynum=1;
        }
       
        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) == 0)
        {
                Delay_ms(20);
                while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) == 0);
                Delay_ms(20);
                Keynum=2;
        }
       
        return Keynum;
}

使用特权

评论回复
5
大鹏2365|  楼主 | 2024-1-29 15:32 | 只看该作者
Key.h
#ifndef __KEY_H
#define __KEY_H

#include "stm32f10x.h"                  // 这里定义头文件是因为uint8_t在这里面才有
void Key_Init(void);
uint8_t Key_Getnum(void);


#endif

使用特权

评论回复
6
大鹏2365|  楼主 | 2024-1-29 15:32 | 只看该作者
三.光敏传感器控制蜂鸣器
3.1 接线图

使用特权

评论回复
7
大鹏2365|  楼主 | 2024-1-29 15:32 | 只看该作者
3.2 光敏模块介绍
根据下图可知,所以我们把stm32的IO口设置为上拉输入模式,当遮住时,光线亮度没有超过阈值时,光敏模块DO口输出高电平和AO口输出模拟信号增大,模块的指示灯会灭,此时IO口无变化,没有遮住时,光线亮度超过阈值时,光敏模块DO口输出低电平和AO口输出模拟信号减小,此时IO口变化成低电平,模式指示灯亮了,说明改变了。


使用特权

评论回复
8
大鹏2365|  楼主 | 2024-1-29 15:32 | 只看该作者
3.3 代码
main
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "Buzzer.h"
#include "Lightsensor.h"

int main()
{
        Buzzer_Init();
        Lightsensor_Init();
        while(1)
        {
                if(Lightsensor_Get() == 1)
                {
                        Buzzer_On();
                }
                else
                {
                        Buzzer_Off();
                }
        }
}

使用特权

评论回复
9
大鹏2365|  楼主 | 2024-1-29 15:33 | 只看该作者
Buzzer.c

#include "stm32f10x.h"                  // Device header

void Buzzer_Init(void) //蜂鸣器初始化
{
        GPIO_InitTypeDef GPIOInitStruct;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        GPIOInitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIOInitStruct.GPIO_Pin=GPIO_Pin_12;
        GPIOInitStruct.GPIO_Speed=GPIO_Speed_50MHz;
       
        GPIO_Init(GPIOB,&GPIOInitStruct);
       
        GPIO_SetBits(GPIOB,GPIO_Pin_12);

}

void Buzzer_Turn()  //反转
{
        if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12) == 0 )
        {
                GPIO_SetBits(GPIOB,GPIO_Pin_12);
        }
        else
        {
                GPIO_ResetBits(GPIOB,GPIO_Pin_12);
        }
       
}

void Buzzer_On()  //打开蜂鸣器
{
        GPIO_ResetBits(GPIOB,GPIO_Pin_12);
}

void Buzzer_Off()  //关闭蜂鸣器
{
        GPIO_SetBits(GPIOB,GPIO_Pin_12);
}

使用特权

评论回复
10
大鹏2365|  楼主 | 2024-1-29 15:34 | 只看该作者
Buzzer.h

#ifndef __BUZZER_H
#define __BUZZER_H

void Buzzer_Init(void);
void Buzzer_Turn(void);
void Buzzer_On(void);
void Buzzer_Off(void);

#endif

使用特权

评论回复
11
大鹏2365|  楼主 | 2024-1-29 15:34 | 只看该作者
Lightsensor.c
#include "stm32f10x.h"                  // Device header


void Lightsensor_Init(void)
{
        GPIO_InitTypeDef GPIOInitStruct;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        GPIOInitStruct.GPIO_Mode=GPIO_Mode_IPU;
        GPIOInitStruct.GPIO_Pin=GPIO_Pin_13;
        GPIOInitStruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIOInitStruct);
}

uint8_t Lightsensor_Get(void)
{
        return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13);
}

使用特权

评论回复
12
大鹏2365|  楼主 | 2024-1-29 15:34 | 只看该作者
Lightsensor.h
#ifndef __LIGHTSENSOR_H
#define __LIGHTSENSOR_H

#include "stm32f10x.h"                  // Device header

void Lightsensor_Init(void);
uint8_t Lightsensor_Get(void);

#endif

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

659

帖子

0

粉丝