【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);
}
相关推荐
FreakStudio1 小时前
MicroPython 内核开发者直接狂喜!这个 Claude 插件市场,把开发全流程做成了「对话式外挂」
python·单片机·嵌入式·面向对象·并行计算·电子diy
天诚智能门锁2 小时前
天诚公租房管控平台CAT.1人脸猫眼智能锁助力青神县公租房管理
人工智能·嵌入式硬件·物联网·智能家居·智能硬件
m0_377108145 小时前
5月1日zzz
单片机
踏着七彩祥云的小丑5 小时前
嵌入式——认识电子元器件——晶体谐振器系列
单片机·嵌入式硬件
玩转单片机与嵌入式5 小时前
TinyML应用场景解析:动作识别!
人工智能·单片机·嵌入式硬件·嵌入式ai·ai+嵌入式
xiangw@GZ5 小时前
智能锁TouchKey的抗干扰设计-1.概述
单片机·嵌入式硬件
这波不该贪内存的5 小时前
嵌入式开发避坑指南
单片机·嵌入式硬件
振南的单片机世界5 小时前
单片机是嵌入设备的“单芯片计算机”
单片机·嵌入式硬件
zhangrelay5 小时前
三分钟云课实践速通--单片机原理与应用--Arduino--SimulIDE--
linux·单片机·嵌入式硬件·学习·ubuntu