蜂鸣器的硬件电路:
在这里插入图片描述

蜂鸣器实验步骤:
实验步骤基本和跑马灯一样,代码和跑马灯也基本一样,只是用的GPIO不同。

在这里插入图片描述
几种输入输出模式:
在这里插入图片描述

beep.c部分代码:

#include "beep.h"
#include "stm32f10x.h"

void BEEP_Init(void)
{
	GPIO_InitTypeDef GPIO_InitLed;//定义GPIO_InitTypeDef类型的结构体
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能GPIOB的时钟
	
	GPIO_InitLed.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitLed.GPIO_Pin=GPIO_Pin_8;
	GPIO_InitLed.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitLed);
	
	GPIO_ResetBits(GPIOB,GPIO_Pin_8)}

beep.h部分代码:

#ifndef _BEEP_H
#define _BEEP_H

void BEEP_Init(void);
#endif

main.c部分代码:

#include "stm32f10x.h"
#include "beep.h"
#include "delay.h"
int main(void)
{	
  delay_init();
  BEEP_Init();
  while(1)
	{
	  GPIO_SetBits(GPIOB,GPIO_Pin_8);/高电平响
	  delay_ms(500);
	  GPIO_ResetBits(GPIOB,GPIO_Pin_8);//低电平不响
	  delay_ms(500);
	}
}

按键部分代码:

主要是这个函数,通过设置静态变量来实现按键是否支持连按,若mode=0则不支持连按,就相当于开关,若mode=1则支持连按,就是若按键不松开则if中就会一直返回数值。

u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按键按松开标志
	if(mode)key_up=1;  //支持连按		  
	if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
	{
		delay_ms(100);//去抖动 
		key_up=0;
		if(KEY0==0)return KEY0_PRES;
		else if(KEY1==0)return KEY1_PRES;
		else if(KEY2==0)return KEY2_PRES;
		else if(WK_UP==1)return WKUP_PRES;
	}else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1; 	    
 	return 0;// 无按键按下
}
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐