BSP_bz(无源蜂鸣器函数库)
#ifndef __BSP_BZ_H
#define __BSP_BZ_H
#include "IntDrv.h"
#include "IomDrv.h"
typedef unsigned char u8;
typedef unsigned int u16; //short
typedef unsigned long u32;
typedef struct FMQ_Contlol{
u8 u8OnOff; //连续响应标志
u32 u32Delay; //延时时间
u32 u32OnTime; //工作时间
u32 u32OffTime; //关闭时间
u32 u32BackupOnTime;
u32 u32BackupOffTime;
u32 u32Cycle; //循环次数
}FMQ_Contlol_T;
/***************************************************************************************************
** 函数名称: Timer_BZ_Configuration
** 函数功能:定时器初始化(蜂鸣器) (timer1 and timer2)
** 入口参数:无
** 出口参数: 无
****************************************************************************************************/
void BSP_Timer_BZ_Configuration(void);
/***************************************************************************************************
** 函数名称: BEEP_Init
** 函数功能:初始化
** 入口参数:无
** 出口参数: 无
****************************************************************************************************/
void BSP_BEEP_Init(void);
/*******************************************************************************
*********************
** 函数名称:void BSP_BeepCtrl( u8 u8OnOff,u32 u32DelayTime)
** 函数功能:蜂鸣器鸣叫控制
** 入口参数:u8OnOff (输入) BEEP_OFF 0 关闭蜂鸣器
BEEP_ON 1 打开蜂鸣器
** u32DelayTime (输入)鸣叫时间(单位ms )
** 出口参数: 无
*****************************************************************************************************/
void BSP_BeepCtrl( u8 u8OnOff,u32 u32DelayTime);
/****************************************************************************************************
原型 u8 BSP_BeepCycle( u32 u32OnTime,u32 u32OffTime,u32 u32Cycle)
功能 蜂鸣器循环鸣叫
参数 u32OnTime (输入)开启时间(单位ms )
u32OffTime (输入)关闭时间(单位ms )
u32Cycle (输入)循环次数
返回 无
注释 无
实例 无
*****************************************************************************************************/
void BSP_BeepCycle( u32 u32OnTime,u32 u32OffTime,u32 u32Cycle);
/****************************************************************************************************
** 函数名称:void BSP_BeepCycle_int( void)
** 函数功能:蜂鸣器循环鸣叫 (timer2 中断调用)
** 入口参数:无
** 出口参数: 无
*****************************************************************************************************/
void BSP_BeepCycle_or_Ctrl_int(void);
// u32Cycle (输入)循环次数
/****************************************************************************************************
** 函数名称:void BSP_BeepCtrl_timecount_int(void)
** 函数功能:蜂鸣器鸣叫控制 (timer1 中断调用) 计时
** 入口参数:无
** 出口参数: 无
*****************************************************************************************************/
void BSP_BeepCtrl_timercount_int(void);
/****************************************************************************************************
** 函数名称:void BSP_BeepCycle_timercount_int( void)
** 函数功能:蜂鸣器循环鸣叫 (timer1 中断调用) 计时
** 入口参数:无
** 出口参数: 无
*****************************************************************************************************/
void BSP_BeepCycle_timercount_int(void);
/****************************************************************************************************
** 函数名称:BSP_ReedBzLibraryVersion
** 函数功能:读取库版本号
** 入口参数:无
** 出口参数: 无
** 返回值: Bz库版本号
*****************************************************************************************************/
u16 BSP_ReedBzLibraryVersion(void);
/**********************************************************
注意事项:
1、需要将两个~timecount_int函数放在同一定时器中断函数里(timer1);
2、需要将~ int 函数放在另外一个定时器中断函数里(timer2);
3、用户直接调用 BSP_BeepCtrl 或 BSP_BeepCycle 实现鸣叫
**********************************************************/
#endif
#include "BSP_bz.h"
#define fmq 2
FMQ_Contlol_T FmqMessage;
/***************************************************************************************************
** 函数名称: Timer_BZ_Configuration
** 函数功能:定时器初始化(蜂鸣器) (timer0 and timer1)
** 入口参数:无
** 出口参数: 无
定时器 0,1工作方式1,定时器0,500us 中断一次用于产生1KHZ 方波,定时器1,1ms 中断一次用于定时控制
****************************************************************************************************/
void BSP_Timer_BZ_Configuration(void)
{
TMOD |= 0x01; //工作方式1
TH0 = (65336-500)/256; //500us中断一次 1KHZ方波
TL0 = (65336-500)%256; //
ET0=1;
TR0=1;
TMOD |= 0x10; //工作方式1
TH1 = (65336-1000)/256; //1ms中断一次
TL1 = (65336-1000)%256;
ET1=1;
TR1=1;
EA=1;
}
/***************************************************************************************************
** 函数名称: BEEP_Init
** 函数功能:初始化
** 入口参数:无
** 出口参数: 无
****************************************************************************************************/
void BSP_BEEP_Init(void)
{
//i/o口的初始化
Iom_GpioConfig(fmq); //enable gpio
Iom_InOutSel(fmq, 1); //设置为输出模式
}
/****************************************************************************************************
** 函数名称:void BSP_BeepCtrl( u8 u8OnOff,u32 u32DelayTime)
** 函数功能:蜂鸣器鸣叫控制
** 入口参数:u8OnOff (输入) BEEP_OFF 0 关闭蜂鸣器
BEEP_ON 1 打开蜂鸣器
** u32DelayTime (输入)鸣叫时间(单位ms ) ** 出口参数: 无
*****************************************************************************************************/
void BSP_BeepCtrl( u8 u8OnOff,u32 u32DelayTime)
{
if(u8OnOff==0)
{
FmqMessage.u8OnOff=0;
}
else
{
FmqMessage.u8OnOff=1;
FmqMessage.u32Delay=u32DelayTime;
TR0=1; //打开定时器
}
}
/****************************************************************************************************
原型 u8 BSP_BeepCycle( u32 u32OnTime,u32 u32OffTime,u32 u32Cycle)
功能 蜂鸣器循环鸣叫
参数 u32OnTime (输入)开启时间(单位ms )
u32OffTime (输入)关闭时间(单位ms )
u32Cycle (输入)循环次数
返回 无
注释 无
实例 无
*****************************************************************************************************/
void BSP_BeepCycle( u32 u32OnTime,u32 u32OffTime,u32 u32Cycle)
{
FmqMessage.u32Cycle=u32Cycle;
FmqMessage.u32OnTime=FmqMessage.u32BackupOnTime=u32OnTime;
FmqMessage.u32OffTime=FmqMessage.u32BackupOffTime=u32OffTime;
//BSP_TimerEnable
}
/****************************************************************************************************
** 函数名称:void BSP_BeepCycle_int( void)
** 函数功能:蜂鸣器循环鸣叫 (timer0 中断调用) 输出方波
** 入口参数:无
** 出口参数: 无
*****************************************************************************************************/
void BSP_BeepCycle_or_Ctrl_int(void)
{
static u8 i;
TH0 = (65336-500)/256; //500us中断一次 1KHZ方波
TL0 = (65336-500)%256; //
//fmq=~fmq; //产生1KHZ 的方波
i++;
i=i%2;
if(i)
Iom_SetVal(fmq, 0); //out 0
else
Iom_SetVal(fmq, 1);
}
/****************************************************************************************************
** 函数名称:void BSP_BeepCtrl_timecount_int(void)
** 函数功能:蜂鸣器鸣叫控制 (timer0 中断调用) 计时
** 入口参数:无
** 出口参数: 无
*****************************************************************************************************/
void BSP_BeepCtrl_timercount_int(void)
{
if(FmqMessage.u8OnOff==1)
{
if(FmqMessage.u32Delay>0)
{
TR0=1;
FmqMessage.u32Delay--;
}
else
{
TR0=0;
}
}
}
/****************************************************************************************************
** 函数名称:void BSP_BeepCycle_timercount_int( void)
** 函数功能:蜂鸣器循环鸣叫 (timer1 中断调用) 计时
** 入口参数:无
** 出口参数: 无
*****************************************************************************************************/
void BSP_BeepCycle_timercount_int(void)
{
if(FmqMessage.u32Cycle>0)
{
if(FmqMessage.u32OnTime>0)
{
FmqMessage.u32OnTime--;
TR0=1;
}
else
{
TR0=0; //
if(FmqMessage.u32OffTime>0)
{
FmqMessage.u32OffTime--;
}
else
{
FmqMessage.u32Cycle--;
FmqMessage.u32OnTime=FmqMessage.u32BackupOnTime;
FmqMessage.u32OffTime=FmqMessage.u32BackupOffTime;
}
}
}
}
/****************************************************************************************************
** 函数名称:BSP_ReedBzLibraryVersion
** 函数功能:读取库版本号
** 入口参数:无
** 出口参数: 无
** 返回值: Bz库版本号
*****************************************************************************************************/
u16 BSP_ReedBzLibraryVersion(void)
{
return 0;
}