蜂鸣器驱动方式源程序--有源无源通用
2013-07-28 21:17
489 查看
/* 1、此程序适用有源和无源蜂鸣器的驱动 2、可自由定义多种蜂鸣声音 3、只需传递一个参数就能达到让BUZ的声音重复响几次 4、程序结构清晰 操作方便 */ //=====蜂鸣器驱动寄存器定义===== typedef struct tBUZ { uint8 RM_BZ ; //蜂鸣器模式 uint16 T_BzFre ; //蜂鸣间隔时间 uint8 T_BBNum ; //蜂鸣器在模式下的蜂鸣次数 uint8 F_Buz ; //驱动信号标志 }tBuz ; tBuz tBz ; //定义结构体 #define RM_BZ tBz.RM_BZ #define T_BzFre tBz.T_BzFre #define T_BBNum tBz.T_BBNum #define F_Buz tBz.F_Buz //=====buz 驱动端口==== #define P_BUZ PC7_OUT #define BUZ_PCPL PC_OUT ^= SETB7 ; //BUZ IO 取反 //=====BUZ 端口操作==== 有效端口为1 0 #define OFFIO_BUZ {P_BUZ = 0 ; F_Buz = 0 ;}// #define ONIO_BUZ F_Buz = 1// //---------------------------------- #define VT_BUZ(x) (x) //宏定义 BUZ的几中常见声音 #define M_BZ (unsigned char)0 #define M_BZ_KEY (unsigned char)1 //短响 #define M_BZ_BB (unsigned char)3 //滴..滴 定时音 #define M_BZ_LKEY (unsigned char)4 //长响 #define M_BZ_ERR (unsigned char)5 //报警 //************************************* // 函数名称:SetBuz // 函数功能:设置蜂鸣器模式 // 入口参数:该模式下的蜂鸣次数 // 出口参数:无 // 返 回 值:无 //*************************************** void SetupBz(uint8 RM_BZIn,uint8 BNum) { T_BzFre = 0 ; //蜂鸣频率 T_BBNum = BNum ;//该蜂鸣模式的蜂鸣总次数 RM_BZ = RM_BZIn ; //蜂鸣模式 OFFIO_BUZ ; } //************************************* // 函数名称:CmdBuz // 函数功能:蜂鸣器控制 // 入口参数:无 // 出口参数:无 // 返 回 值:无 // 备注 :以下编写了四种常用的蜂鸣器的提示音 读者可自行修改声音及再增加声音类型 //*************************************** void CmdBz(void) { switch(RM_BZ) { case M_BZ: SetupBz(M_BZ,0); break ; //-------------------- case M_BZ_KEY: // 计1次 T_BzFre ++ ; if(T_BzFre <= VT_BUZ(10))//5 { ONIO_BUZ ; } else { SetupBz(M_BZ,0); } break ; //---------------------------- case M_BZ_BB : //定时音提示-翻炒提示音 if(T_BBNum != 0) { T_BzFre ++ ; if(T_BzFre<= VT_BUZ(20)) { ONIO_BUZ ; } else if(T_BzFre <= VT_BUZ(30)) { OFFIO_BUZ ; } else if(T_BzFre <= VT_BUZ(50)) { ONIO_BUZ ; } else if(T_BzFre <= VT_BUZ(100)) { OFFIO_BUZ ; } else { T_BzFre = 0 ; T_BBNum -- ; } } else { SetupBz(M_BZ,0); } break ; //---------------------------- case M_BZ_LKEY ://关机 长响音 if(T_BBNum != 0) { T_BzFre ++ ; if(T_BzFre <= VT_BUZ(80))//BZ_T1 { ONIO_BUZ ; } else if(T_BzFre <= VT_BUZ(100))//BZ_T2 { OFFIO_BUZ ; } else { T_BzFre = 0 ; T_BBNum -- ; } } else { SetupBz(M_BZ,0); } break ; //------------------- case M_BZ_ERR : if(T_BBNum != 0) { T_BzFre ++ ; if(T_BzFre <= VT_BUZ(12)) { ONIO_BUZ ; } else if(T_BzFre <= VT_BUZ(20)) { OFFIO_BUZ ; } else { T_BzFre = 0 ; T_BBNum -- ; } } else { SetupBz(M_BZ,0); } break ; //------------------- default : SetupBz(M_BZ,0); break ; } } //---应用实例----- void main(void) { SetupBz(M_BZ_LKEY,2) ;//上电蜂鸣器长响两声 while(1) { while(!F_10MS) ; //10MS跑一次主程序 F_10MS = 0 ; CmdBz() ; } } //中断服务程序 void interrupt server(void) { //定时125U中断一次 if(F_Buz) { BUZ_PCPL ; //BUZ 取反 针对无源BUZ -- 4K //ONIO_BUZ ; // BUZ直驱 针对有源BUZ } }
相关文章推荐
- 晶振、蜂鸣器之有源无源理解
- arm9按键驱动:查询的方式获取按键值
- 树莓派uboot的串口初始化(uboot驱动结构 2通用解析)
- 转:Selenium2.0介绍——WebDriver两种驱动浏览器的方式
- Action接收参数的3种方式(属性,域模型,模型驱动,struts2.1.8)
- Linux SPI总线和设备驱动架构之二:SPI通用接口层
- Linux块设备方式的nvram驱动实例
- 【Java】以纯Java驱动方式(JDBC)连接Oracle数据库
- Linux SPI总线和设备驱动架构之二:SPI通用接口层
- js实现类似于add(1)(2)(3)调用方式的通用方法
- Linux驱动的两种加载方式过程分析
- 飞凌Fl2440开发板蜂鸣器pwm的驱动
- 基于ARM-contexA9-蜂鸣器pwm驱动开发
- 串行 Flash 通用驱动库 SFUD (Serial Flash Universal Driver)
- Android Studio【通用&方便】插件方式打包jar(不包含资源文件)
- 测试-ConstantForce的驱动方式以及是否穿透
- 3、STM32联网驱动__接口方式_TCP/UDP协议栈_通信方式
- linux驱动中的阻塞访问方式
- 蜂鸣器驱动
- android通用listview和gridview万能适配器实现的两种方式