蜂鸣器的硬件电路:
蜂鸣器实验步骤:
实验步骤基本和跑马灯一样,代码和跑马灯也基本一样,只是用的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_Hvoid 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;// 无按键按下
}