嵌入式-使用蜂鸣器加LED灯实现按键发送SOS求救信号

2024-02-09 11:04:37 浏览数 (1)

1. 实验目的

使用蜂鸣器加LED灯实现按键发送SOS求救信号

2. 实验原理

GPIO:GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚,STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。

STM32 芯片的 GPIO 被分成很多组,每组有 16 个引脚,如型号为 STM32F4IGT6 型号的芯片有 GPIOA、GPIOB、GPIOC 至 GPIOI 共 9 组 GPIO,芯片一共 176 个引脚,其中 GPIO就占了一大部分,所有的 GPIO 引脚都有基本的输入输出功能。

最基本的输出功能是由 STM32 控制引脚输出高、低电平,实现开关控制,如把 GPIO引脚接入到 LED 灯,那就可以控制 LED 灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或三极管控制外部大功率电路的通断。

最基本的输入功能是检测外部输入电平,如把 GPIO 引脚连接到按键,通过电平高低区分按键是否被按下

按键检测:这些按键在没有被按下的时候,GPIO 引脚的输入状态为高电平(按键所在的电路不通,引脚接地),当按键按下时,GPIO 引脚的输入状态为低电平(按键所在的电路导通,引脚接到电源)。只要我们检测引脚的输入电平,即可判断按键是否被按下。

蜂鸣器:蜂鸣器与我们用到一个 NPN 三极管(S8050)来驱动蜂鸣器,R61 主要用于防止蜂鸣器的误发声。当 PB5 输出高电平的时候,蜂鸣器将发声,当 PB5 输出低电平的时候,蜂鸣器停止发声。

3. 主要仪器设备

GEC-STM32F429开发板和keil 5软件

4. 实验内容及步骤

1,首先用keil软件打开实验项目,确保可编译之后。

2,开发板使用usb连接线连接上电脑

3,然后使用点击load加载到开发板上。

4,修改代码

代码语言:c复制
#include "stm32f4xx.h"
#include "./led/bsp_led.h"
#include "./key/bsp_key.h" 
#include "./beep/bsp_beep.h"

int i=0;
void delay(int time);
void start();
int led1 = 0;
int led2 = 0;


/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{
	/* LED 端口初始化 */
	LED_GPIO_Config();	 
  
  /*初始化按键*/
  Key_GPIO_Config();
	
 
	/*峰名器 初始化*/
	BEEP_GPIO_Config(); 

	
	/* 轮询按键状态,若按键按下则反转LED */ 

	while(1)                            
	{	   
	
		if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON  )
		{
			led1 = 1;
			
			while(led1){
				start();
			}
			//LED2反转
				LED1(ON);
				LED2(ON);
				LED3(ON);
				BEEP_OFF;			
		}
	}
}

void delay(int time){
if( Key_Scan(KEY2_GPIO_PORT,KEY2_PIN) == KEY_ON  )
{
				led1 = 0;
}
			 
	for(;i<time;i  ){
		
		}
	i = 0;
	return;
}

void start(){
			/*LED1反转*/
			LED1(OFF);              //S
			LED2(OFF);
			LED3(ON);
				
			BEEP_ON;
			delay(3000000);
			BEEP_OFF;
			delay(6000000);
			BEEP_ON;
			delay(3000000);
			BEEP_OFF;
			delay(6000000);
			BEEP_ON;
			delay(3000000);	
			BEEP_OFF;
			delay(6000000);				
			delay(21000000);
				
			
			LED1(ON);               //O
			LED2(ON);
			LED3(OFF);             
			
			BEEP_ON;
			delay(9000000);
			BEEP_OFF;
			delay(6000000);
				BEEP_ON;
			delay(9000000);
			BEEP_OFF;
			delay(6000000);
			BEEP_ON;
			delay(9000000);
			BEEP_OFF;
			delay(6000000);
			delay(21000000);
			
			
			LED1(OFF);              //S
			LED2(OFF);
			LED3(ON);
				
			BEEP_ON;
			delay(3000000);
			BEEP_OFF;
			delay(6000000);
			BEEP_ON;
			delay(3000000);
			BEEP_OFF;
			delay(6000000);
			BEEP_ON;
			delay(3000000);	
			BEEP_OFF;
			delay(6000000);	
			delay(21000000);		
}

5. 实验结果与分析

通过观看上述代码可以知道,我实验效果的按键检测是即使当你按下了按键关闭,也得发送完一个SOS信号,因为我觉得要是求救的时候只发送一两个S或O就被迫终止了,那别人或许都不知道你啥意思。因此应该按下关闭按钮的时候也得先发送完一个SOS信号。

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

0 人点赞