【STM32F103ZET6——库函数】2.按键控制蜂鸣器

目录

配置按键引脚

引脚图

使能按键引脚时钟

配置蜂鸣器引脚

引脚图

使能蜂鸣器引脚时钟

例程

例程说明

main.h

main.c

Key.h

Key.c

FengMingQi.h

FengMingQi.c

配置按键引脚

引脚图

  1. 配置引脚号

  2. 配置引脚速度

  3. 配置引脚的模式

  4. 引脚初始化

cpp 复制代码
GPIO_InitTypeDef Key;
//PA0
Key.GPIO_Pin=GPIO_Pin_0;
Key.GPIO_Mode=GPIO_Mode_IPU;//上拉输入
Key.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&Key);//初始化PA0引脚
GPIO_WriteBit(GPIOA,GPIO_Pin_0,0);
//PC13
Key.GPIO_Pin=GPIO_Pin_13;
GPIO_Init(GPIOC,&Key);
GPIO_WriteBit(GPIOC,GPIO_Pin_13,0);

使能按键引脚时钟

cpp 复制代码
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

配置蜂鸣器引脚

引脚图

  1. 配置引脚号

  2. 配置引脚速度

  3. 配置引脚的模式

  4. 引脚初始化

cpp 复制代码
GPIO_InitTypeDef FMQ;
//PC0
FMQ.GPIO_Pin=GPIO_Pin_0;
FMQ.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
FMQ.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&FMQ);
GPIO_WriteBit(GPIOC,GPIO_Pin_0,0);

使能蜂鸣器引脚时钟

cpp 复制代码
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

例程

例程说明

通过按键控制蜂鸣器响还是不响

main.h

cpp 复制代码
#ifndef _MAIN_H_
#define _MAIN_H_

#include "stm32f10x.h"                  // Device header
#include "stm32f10x_gpio.h"             // Keil::Device:StdPeriph Drivers:GPIO
#include "stm32f10x_tim.h"              // Keil::Device:StdPeriph Drivers:TIM
#include <stm32f10x_rcc.h>
#include <stm32f10x_usart.h>
#include <stm32f10x_sdio.h>
#include <misc.h>
#include <stdio.h>
#include "usart.h"
#include <delay.h>
#include "timch.h"

#include "Key.h"
#include "FengMingQi.h"

#endif

main.c

cpp 复制代码
#include "main.h"

int main(){
	u8 key_num;
	u8 FMQ=0;

	delay_init();
	Key_Init();
	FengMingQi_Init();
	while(1){	
		key_num=Key_GetKeynum();
		if(key_num==1){
			FengMingQi_NO();
		}
		else if(key_num==2){
			FengMingQi_OFF();
		}
	}
}

Key.h

cpp 复制代码
#ifndef __KEY_H_
#define __KEY_H_

#include "stdio.h"
#include "delay.h"

void Key_Init();
u8 Key_GetKeynum();

#endif

Key.c

cpp 复制代码
#include "Key.h"

void Key_Init(){
	GPIO_InitTypeDef Key;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	
	Key.GPIO_Pin=GPIO_Pin_0;
	Key.GPIO_Mode=GPIO_Mode_IPU;//上拉输入
	Key.GPIO_Speed=GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOA,&Key);//初始化PA0引脚
	GPIO_WriteBit(GPIOA,GPIO_Pin_0,0);
	
	Key.GPIO_Pin=GPIO_Pin_13;
	GPIO_Init(GPIOC,&Key);
	GPIO_WriteBit(GPIOC,GPIO_Pin_13,0);
}

u8 Key_GetKeynum(){
	u8 key_num=0;
	if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1){
		delay_ms(10);
		if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1){
			key_num=1;
		}
		while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1);
	}
	else if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1){
		delay_ms(10);
		if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1){
			key_num=2;
		}
		while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1);
	}
	return key_num;
}

FengMingQi.h

cpp 复制代码
#ifndef __FENGMINGQI_H_
#define __FENGMINGQI_H_

#include "stdio.h"
#include "sys.h"

void FengMingQi_Init();
void FengMingQi_NO();
void FengMingQi_OFF();
void FengMingQi_NO_OFF(u8 flag);

#endif

FengMingQi.c

cpp 复制代码
#include "FengMingQi.h"

void FengMingQi_Init(){
	GPIO_InitTypeDef FMQ;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	
	FMQ.GPIO_Pin=GPIO_Pin_0;
	FMQ.GPIO_Mode=GPIO_Mode_Out_PP;
	FMQ.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&FMQ);
	GPIO_WriteBit(GPIOC,GPIO_Pin_0,0);
}

void FengMingQi_NO(){
	GPIO_WriteBit(GPIOC,GPIO_Pin_0,1);
}

void FengMingQi_OFF(){
	GPIO_WriteBit(GPIOC,GPIO_Pin_0,0);
}

void FengMingQi_NO_OFF(u8 flag){
	GPIO_WriteBit(GPIOC,GPIO_Pin_0,flag);
}
相关推荐
爱睡觉的王宇昊1 小时前
二、【ESP32开发全栈指南:ESP32 GPIO深度使用】
单片机·嵌入式硬件
学生哥-_-7 小时前
STM32通过KEIL pack包轻松移植LVGL,并学会使用GUI guider
stm32·lvgl·tftlcd·gui guider·gt911
三三十二7 小时前
STM32实战:数字音频播放器开发指南
stm32·单片机·嵌入式硬件
想搞嵌入式的小白9 小时前
STM32外设问题总结
单片机·嵌入式硬件
让子弹飞0210 小时前
35.成功解决编写关于“江协科技”编写技巧第二期标志位积累的问题
stm32·按键
木子单片机11 小时前
基于STM32语音识别柔光台灯
stm32·单片机·嵌入式硬件·proteus·语音识别·keil
广药门徒11 小时前
澄清 STM32 NVIC 中断优先级
单片机·嵌入式硬件
小禾苗_12 小时前
32单片机——窗口看门狗
单片机·嵌入式硬件
小灰灰搞电子12 小时前
单片机0-10V电压输出电路分享
单片机·嵌入式硬件
Moonnnn.13 小时前
【单片机期末】串行口循环缓冲区发送
笔记·单片机·嵌入式硬件·学习