【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);
}
相关推荐
LaoZhangGong1239 分钟前
W5500使用ioLibrary库创建TCP客户端
网络·经验分享·stm32·网络协议·tcp/ip
一月千帆11 分钟前
51单片机课设基于GM65模块的二维码加条形码识别
单片机·嵌入式硬件·51单片机
O。o.尊都假都1 小时前
STM32就业前景和下载KEIL软件(保姆级)
stm32·单片机·嵌入式硬件
「QT(C++)开发工程师」2 小时前
STM32 | FreeRTOS 消息队列
stm32·单片机·嵌入式硬件
sword devil9002 小时前
STM32烧录程序正常,但是运行异常
stm32·单片机·嵌入式硬件
YOYO--小天3 小时前
4G和5G模块的使用
linux·嵌入式硬件·5g
百里东风3 小时前
STM32IIC实战-OLED模板
stm32·单片机·嵌入式硬件
一月千帆4 小时前
基于STM32的INA226电压电流检测仪
stm32·单片机·嵌入式硬件
A-花开堪折6 小时前
OpenMCU(七):STM32F103开发环境搭建
stm32·单片机·嵌入式硬件
#金毛14 小时前
四、STM32 HAL库API完全指南:从功能分类到实战示例
stm32·单片机·嵌入式硬件