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腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!