STM32之 声音传感器LM393的流水灯

文章介绍了使用STM32F1单片机的GPIO功能,配合声音传感器实现当检测到声音时,控制LED灯依次点亮和熄灭的电路设计。代码给出了GPIO配置、声音传感器初始化和LED灯控制的相关函数。
摘要由CSDN通过智能技术生成

1.简介

本次没有用到模拟量采集,声音传感器听到声音,产生电平去点灯就可以了,可以自己去调节精度,不用太过灵敏

电源:5V  地:GND   引脚:PC11

流水灯:PC0 PC1 PC2

2.代码

voice.h

#ifndef __VOICE_H
#define __VOICE_H

#include "stm32f1xx_hal.h"

#define VOICE_GPIO_PORT                  GPIOC
#define VOICE_GPIO_PIN                   GPIO_PIN_11
#define VOICE_GPIO_CLK_ENABLE()          do{ __HAL_RCC_GPIOC_CLK_ENABLE(); }while(0)             /* PA口时钟使能 */
 
#define VOICE 							HAL_GPIO_ReadPin(VOICE_GPIO_PORT,VOICE_GPIO_PIN)

void VoiceSensor_Init(void);
 
uint8_t VoiceSensor_Get(void);
 
#endif


voice.c

#include "./BSP/VOICE/voice.h"
#include "stm32f1xx_hal.h"
 
void VoiceSensor_Init(void)
{
	GPIO_InitTypeDef gpio_init_struct;						/*调用GPIO结构体*/
	
	
	VOICE_GPIO_CLK_ENABLE();                                /* VOICE时钟使能 */	
 
	gpio_init_struct.Pin   = VOICE_GPIO_PIN;                /* VOICE引脚 */
    gpio_init_struct.Mode  = GPIO_MODE_INPUT;            	/* 推挽输出 */
    gpio_init_struct.Pull  = GPIO_PULLDOWN;                 /* 下拉保持低电平 */
    gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;         	/* 高速 */
	HAL_GPIO_Init(VOICE_GPIO_PORT, &gpio_init_struct);      /* 初始化VOICE引脚 */

}

 
uint8_t VoiceSensor_Get(void)    							 /*读取PC11口的电平*/
{
	return  HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_11);
}

led.h

#ifndef _LED_H
#define _LED_H
#include "./SYSTEM/sys/sys.h"


/******************************************************************************************/
/* 引脚 定义 */

#define LED0_GPIO_PORT                  GPIOC
#define LED0_GPIO_PIN                   GPIO_PIN_0
#define LED0_GPIO_CLK_ENABLE()          do{ __HAL_RCC_GPIOC_CLK_ENABLE(); }while(0)             /* PA口时钟使能 */

#define LED1_GPIO_PORT                  GPIOC
#define LED1_GPIO_PIN                   GPIO_PIN_1
#define LED1_GPIO_CLK_ENABLE()          do{ __HAL_RCC_GPIOC_CLK_ENABLE(); }while(0)             /* PA口时钟使能 */

#define LED2_GPIO_PORT                  GPIOC
#define LED2_GPIO_PIN                   GPIO_PIN_2
#define LED2_GPIO_CLK_ENABLE()          do{ __HAL_RCC_GPIOC_CLK_ENABLE(); }while(0)             /* PA口时钟使能 */






/******************************************************************************************/
/* LED端口定义 */
#define LED0(x)   do{ x ? \
                      HAL_GPIO_WritePin(LED0_GPIO_PORT, LED0_GPIO_PIN, GPIO_PIN_SET) : \
                      HAL_GPIO_WritePin(LED0_GPIO_PORT, LED0_GPIO_PIN, GPIO_PIN_RESET); \
                  }while(0)      /* LED0翻转 */

#define LED1(x)   do{ x ? \
                      HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_SET) : \
                      HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_RESET); \
                  }while(0)      /* LED1翻转 */

#define LED2(x)   do{ x ? \
                      HAL_GPIO_WritePin(LED2_GPIO_PORT, LED2_GPIO_PIN, GPIO_PIN_SET) : \
                      HAL_GPIO_WritePin(LED2_GPIO_PORT, LED2_GPIO_PIN, GPIO_PIN_RESET); \
                  }while(0)      /* LED1翻转 */


/* LED取反定义 */
#define LED0_TOGGLE()   do{ HAL_GPIO_TogglePin(LED0_GPIO_PORT, LED0_GPIO_PIN); }while(0)        /* 翻转LED0 */
#define LED1_TOGGLE()   do{ HAL_GPIO_TogglePin(LED1_GPIO_PORT, LED1_GPIO_PIN); }while(0)        /* 翻转LED1 */
#define LED2_TOGGLE()   do{ HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_GPIO_PIN); }while(0)        /* 翻转LED2 */

/******************************************************************************************/
/* 外部接口函数*/
void led_init(void);                                                                            /* 初始化 */

#endif

led.c 

#include "./BSP/LED/led.h"


/**
 * @brief       初始化LED相关IO口, 并使能时钟
 * @param       无
 * @retval      无
 */
void led_init(void)
{
    GPIO_InitTypeDef gpio_init_struct;						/*调用GPIO结构体*/
	
    LED0_GPIO_CLK_ENABLE();                                 /* LED0时钟使能 */
    LED1_GPIO_CLK_ENABLE();                                 /* LED1时钟使能 */
    LED2_GPIO_CLK_ENABLE();                                 /* LED0时钟使能 */

	
	
    gpio_init_struct.Pin 	= LED0_GPIO_PIN | LED1_GPIO_PIN  | LED2_GPIO_PIN;                   /* LED0引脚 */
    gpio_init_struct.Mode 	= GPIO_MODE_OUTPUT_PP;            /* 推挽输出 */
    gpio_init_struct.Pull 	= GPIO_PULLUP;                    /* 上拉 */
    gpio_init_struct.Speed  = GPIO_SPEED_FREQ_HIGH;          /* 高速 */



/*初始化引脚*/
    HAL_GPIO_Init(LED0_GPIO_PORT, &gpio_init_struct);       /* 初始化LED0引脚 */
    HAL_GPIO_Init(LED1_GPIO_PORT, &gpio_init_struct);       /* 初始化LED1引脚 */
    HAL_GPIO_Init(LED2_GPIO_PORT, &gpio_init_struct);       /* 初始化LED2引脚 */



    LED0(1);                                                /* 关闭 LED0 */
    LED1(1);                                                /* 关闭 LED1 */
    LED2(1);                                                /* 关闭 LED2 */

}

main.c

部分代码,自己上面加初始化哦

while(1)
	{
		
		if (VoiceSensor_Get() == 1)     //如果PA11口为高电平,即有声音,灯亮
		{

			LED0(0);
			delay_ms(100);
			LED0(1);
			LED1(0);
			delay_ms(100);
			LED1(1);
			LED2(0);
			delay_ms(100);
			LED2(1);
				
		

		}
		else
		{
			LED0(1);LED1(1);LED2(1);
		}

3.视频演示

声音传感器点灯

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值