思路與跑馬燈類似,還是通過位帶操作來實現某個IO 口的輸出控制, BEEP 就直接代表了 PB8 的輸出狀態。我們只需要令 BEEP=1 ,就可以讓蜂鳴器發聲。
直接上代碼:
beep.c
#include "beep.h"
//初始化PB8為輸出口,並是能這個口的時鍾
//LED IO初始化
void BEEP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能GPIOB端口時鍾
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //BEEP->GPIO8端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 速度為50MHz
GPIO_Init(GPIOB,&GPIO_InitStructure); // 根據參數初始化GPIOB.8
GPIO_ResetBits(GPIOB,GPIO_Pin_8); //輸出0,關閉蜂鳴器輸出
}
beep.h
#define __BEEP_H
#include "sys.h"
//蜂鳴器定義
#define BEEP PBout(8) //BEEP,定義PB8口為蜂鳴器接口
void BEEP_Init(void); //初始化函數
#endif
main.c
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
int main(void)
{
delay_init(); //延時函數初始化
LED_Init(); //初始化與LED連接的硬件接口
BEEP_Init(); //初始化蜂鳴器端口
while(1)
{
LED0=0;
BEEP=0;
delay_ms(1000);
LED0=1;
BEEP=1;
delay_ms(1000);
}
}