【STM32F103ZET6——库函数】2.按键控制蜂鸣器
目录
配置按键引脚
引脚图
使能按键引脚时钟
配置蜂鸣器引脚
引脚图
使能蜂鸣器引脚时钟
例程
例程说明
main.h
main.c
Key.h
Key.c
FengMingQi.h
FengMingQi.c
配置按键引脚
引脚图
配置引脚号
配置引脚速度
配置引脚的模式
引脚初始化
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);
使能按键引脚时钟
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
配置蜂鸣器引脚
引脚图
配置引脚号
配置引脚速度
配置引脚的模式
引脚初始化
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);
使能蜂鸣器引脚时钟
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
例程
例程说明
通过按键控制蜂鸣器响还是不响
main.h
#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
#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
#ifndef __KEY_H_
#define __KEY_H_
#include "stdio.h"
#include "delay.h"
void Key_Init();
u8 Key_GetKeynum();
#endif
Key.c
#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
#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
#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);
}