📄 buzzer.c
字号:
// 包含必要的头文件
#include <includes.h>
// 将较长的标识符定义成较短的形式
#define SysCtlPeriEnable SysCtlPeripheralEnable
#define SysCtlPeriDisable SysCtlPeripheralDisable
#define GPIOPinTypeOut GPIOPinTypeGPIOOutput
// 声明全局的系统时钟变量
unsigned long TheSysClock;
/***************************************************************************************************
功能:蜂鸣器初始化
参数:无
返回:无
***************************************************************************************************/
void BuzzerInit(void)
{
SysCtlPeriEnable(CCP3_PERIPH); // 使能CCP3所在的GPIO端口
GPIOPinTypeTimer(CCP3_PORT , CCP3_PIN); // 配置CCP3所在管脚为Timer功能
SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1); // 使能TIMER1模块
TimerConfigure(TIMER1_BASE , // 配置Timer1B为16位PWM
TIMER_CFG_16_BIT_PAIR | TIMER_CFG_B_PWM);
TheSysClock = SysCtlClockGet();
}
/***************************************************************************************************
功能:蜂鸣器发出指定频率的声音
参数:usFreq是发声频率,取值20~20000(Hz)
返回:无
***************************************************************************************************/
void BuzzerSound(unsigned short usFreq)
{
unsigned short usVal;
if ( (usFreq < 20 ) || (usFreq > 20000) )
{
BuzzerOff();
}
else
{
GPIOPinTypeTimer(CCP3_PORT , CCP3_PIN); // 配置CCP3所在管脚为Timer功能
usVal = TheSysClock / usFreq;
TimerLoadSet(TIMER1_BASE , TIMER_B , usVal); // 设置TimerB初值,决定PWM周期
TimerMatchSet(TIMER1_BASE , TIMER_B , usVal / 2); // 设置TimerB匹配值,决定PWM占空比
TimerEnable(TIMER1_BASE , TIMER_B); // 使能TimerB计数,PWM开始输出
}
}
/***************************************************************************************************
功能:蜂鸣器停止发声
参数:无
返回:无
***************************************************************************************************/
void BuzzerOff(void)
{
TimerDisable(TIMER1_BASE , TIMER_B); // 禁止TimerB计数,PWM停止输出
GPIOPinTypeOut(CCP3_PORT , CCP3_PIN); // 配置CCP3所在管脚为GPIO输出
GPIOPinWrite(CCP3_PORT , CCP3_PIN , 0x00); // 使CCP3所在管脚输出低电平
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -