如果你需要用蜂鸣器制造一段有节奏音乐的需求,则可以移植代码进行使用:
- 代码所占code少于0.5K
- 可移植性高,只需要提供底层PWM_Set()和配置对应音乐节奏节点
注意:系统需要存在一个至少为10ms的时钟中断
01 - Buzzer.h
#ifndef __BUZZER_H__
#define __BUZZER_H__
#include "MCU.h"
typedef enum {
beepOff = 0,
beepButton,
beepAlarm,
beepMax
} buzzerMode_t;
typedef void (*fpBuzzerCallBack)(void);
/* 可以在SetMode后调用,每次SetMode会把cb置为NULL。设置后可以在对应Mode蜂鸣结束后回调函数cb */
extern void buzzerSetCallBackFunc(fpBuzzerCallBack cb);
extern void buzzerService_10ms(void);
extern void buzzerSetMode(buzzerMode_t Mode);
#endif
02 - Buzzer.c
#include "buzzer.h"
extern void PWM_SetFreq(uint16_t FreqHZ);
#define BuzzerMaxNode 4
/* 自定义音频节点 */
typedef struct {
uint16_t FreqHZ; /* 蜂鸣器频率 */
uint8_t On; /* 打开时间(10ms单位) */
uint8_t Off; /* 关闭时间(10ms单位) */
} buzzerNode;
/* 自定义一段音频 */
typedef struct {
uint8_t DataLen; /* Data的使用长度 */
uint8_t RepeatCounter; /* 重复的次数 */
uint8_t RepeatIntervalTime; /* 每次重复的间隔(10ms单位) */
buzzerNode Data[BuzzerMaxNode];