【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);
}
相关推荐
三佛科技-134163842129 小时前
便携式榨汁机方案开发,榨汁机果汁机MCU控制方案设计
单片机·嵌入式硬件·智能家居·pcb工艺
yongui4783410 小时前
基于TMS320F28027实现光伏MPPT控制
单片机·嵌入式硬件
炸膛坦客12 小时前
Cortex-M3 内核 MCU-STM32F1 开发之路:(一)单片机 MCU 的构成,包括 FLASH 和 SRAM 的区别,以及引脚类型
stm32·单片机·嵌入式硬件
A9better12 小时前
嵌入式开发学习日志39——stm32之I2C总线物理层与常用术语
stm32·单片机·嵌入式硬件·学习
三佛科技-1873661339712 小时前
FT62FC3X 8位MCU单片机选型表,详细解析FT62FC31A/32A/33A/35A/3FA
单片机·嵌入式硬件
充哥单片机设计12 小时前
【STM32项目开源】基于STM32的智能衣柜系统
stm32·单片机·嵌入式硬件
Try1harder13 小时前
极海APM32F107V6 + 合宙Air780E
单片机·嵌入式硬件·物联网·合宙air780
文火冰糖的硅基工坊13 小时前
[嵌入式系统-134]:智能体以及其嵌入式硬件架构
科技·嵌入式硬件·架构·嵌入式·gpu
电鱼智能的电小鱼13 小时前
服装制造企业痛点解决方案:EFISH-SBC-RK3588 柔性化吊挂调度方案
网络·人工智能·嵌入式硬件·算法·制造
清风66666614 小时前
基于单片机的便携式温湿度检测烘干机设计
单片机·嵌入式硬件·毕业设计·课程设计