//文件buz.h#ifndef _BUZ_H_
#define _BUZ_H_//SetupBzhx(M_BZ_KEY) ;
//=====buz 驱动频率定义==============
//声音结束符定义==
#define     VFR0    0
#define     VFR1    VP3K3
#define     VFR2    VP4K1
#define     VFR3    VP4K9#define        VP2K3   2609  //2k
#define     VP2K6   2308
#define     VP2K9   2069  //#define     VP3K3   1818//12000/2/3.3  //4K
#define     VP4K1   1463//12000/2/4.1
#define     VP4K9   1224//12000/2/4.9  ////=====buz 驱动port定义==============
sbit    P_BZV = P2^6 ;   //BUZ 充电
sbit    P_BUZ = P0^2 ;  //BUZ 驱动//=====BUZ port操作==================
#define     BUZ_ON      P_BUZ = 1
#define     BUZ_OFF     P_BUZ = 0//#define     BuzVcc_ON       P_BZV = 0
#define     BuzVcc_OFF      P_BZV = 1//=====蜂鸣器声音种类================
#define     M_BZ            (unsigned char)0    //无
#define     M_BZ_KEY        (unsigned char)1    //按键音
#define     M_BZ_ON         (unsigned char)2    //开机音
#define     M_BZ_OFF        (unsigned char)3    //关机音//=====蜂鸣器工作过程状态==========
#define     MBZ_RST     (unsigned char)0
#define     MBZ_P1      (unsigned char)1
#define     MBZ_P2      (unsigned char)2
#define     MBZ_P3      (unsigned char)3
#define     MBZ_P4      (unsigned char)4    //=====蜂鸣器声音结构定义=====
typedef struct tBUZHX
{uint16 BzFre ; //蜂鸣器 频率uint8 T_BzO ; //蜂鸣间 频率输出时间uint8 T_BzV  ; //蜂鸣器 VCC供电时间}tBuzHx ;//====函数声明=====
extern void SetupBzhx(uint8 MBz) ;
extern void CmdBzhx(void) ;#endif//文件buz.c
#include "global.h"
#include "hxbuz.h"tBuzHx  *tBzHx ;#define     VTB1      20  //20
#define     VTB2      6 //20
#define     VTB3      100 //50const tBuzHx Bzx0[]={{VFR0,0,0}} ;
const tBuzHx Bzx1[]={{VFR2,VTB3,VTB2},{VFR0,0,0}} ;
//const tBuzHx Bzx2[]={{VP2K3,20,20},{VP2K6,20,20},{VP2K9,210,10},{VFR0,0,0}} ;
//const tBuzHx Bzx3[]={{VP2K9,20,20},{VP2K6,20,20},{VP2K3,210,10},{VFR0,0,0}} ;const tBuzHx Bzx2[]={{VFR1,VTB1,VTB2},{VFR2,VTB1,VTB2},{VFR3,VTB3,VTB2},{VFR0,0,0}} ;
const tBuzHx Bzx3[]={{VFR3,VTB1,VTB2},{VFR2,VTB1,VTB2},{VFR1,VTB3,VTB2},{VFR0,0,0}} ;uint8 RBzStatus = 0 ;
//***************************************
// 函数名称:SetupBzhx
// 函数功能:设置蜂鸣器模式
// 入口參数:该模式下的蜂鸣次数 蜂鸣相关数据清0
// 出口參数:无
// 返 回 值:无
//***************************************
void SetupBzhx(uint8 MBz)
{      RBzStatus = MBZ_P1 ;    BuzVcc_OFF ; BUZ_OFF ;TIMER5_IE_DIS ;switch(MBz){case M_BZ_KEY:tBzHx = Bzx1 ; break ;case M_BZ_ON:tBzHx = Bzx2 ;  break ;      case M_BZ_OFF:tBzHx = Bzx3 ; break ;  default :tBzHx = Bzx0 ; RBzStatus = MBZ_RST ; break ;     }
}
//*************************************
// 函数名称:CmdBzhx
// 函数功能:蜂鸣器控制             -
// 入口參数:无
// 出口參数:无
// 返 回 值:无
//***************************************
void CmdBzhx(void)
{static tBuzHx  Bx1 ;            switch(RBzStatus){case MBZ_P1 : Bx1 = *tBzHx  ;Timer5_Reload(Bx1.BzFre) ;//设置频率if(Bx1.BzFre != VFR0) //非结束符{RBzStatus = MBZ_P2 ; if(Bx1.T_BzV != 0){Bx1.T_BzV -- ;   BuzVcc_ON ; }     else        {//    BuzVcc_OFF ;                           }  if(Bx1.T_BzO != 0){Bx1.T_BzO -- ;  TIMER5_IE_ENB ;}     else{//    TIMER5_IE_DIS ;                       }           }else //为结束符{RBzStatus = MBZ_RST ;   }             break ;case MBZ_P2 : if(Bx1.T_BzV != 0){Bx1.T_BzV -- ;   BuzVcc_ON ; }     else        {BuzVcc_OFF ;                           }  if(Bx1.T_BzO != 0){Bx1.T_BzO -- ;  TIMER5_IE_ENB ;}     else{TIMER5_IE_DIS ;BUZ_OFF ;  tBzHx ++ ; //取下一个音调RBzStatus = MBZ_P1 ;            }                   break ;default :break ;                               }}//======简易例程===========
void main(void)
{Delay() ;SetupBzhx(M_BZ_KEY) ; //调用音调程序-按键音while(1){if(F_10MS){F_10MS = 0 ;CmdBzhx() ;   //10MS调用一次程序}}}//-----定时器5中断程序------- 产生所须要的频率// [定时器5中断入口]
void Timer5Interrupt() interrupt 1 //timer5
{
//    P0 ^= SETB3 ;Bank1;ClrTF5  ;   //Bank1;Bank0;P_BUZ ^= P_BUZ ;}
本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5243067.html,如需转载请自行联系原作者

单片机控制蜂鸣器和弦音发音程序相关推荐

  1. 单片机控制蜂鸣器唱生日快乐歌曲 PROTEUS 和51单片机教程(附仿真文件+源代码)

    功能:按一下开关后,单片机控制蜂鸣器唱生日快乐歌曲 PROTEUS 和51单片机教程 单片机控制蜂鸣器唱生日快乐歌曲 程序源代码如下: /* 生日歌 */ #include <reg51.h&g ...

  2. 51单片机蜂鸣器演奏《小苹果》C语言程序,单片机控制蜂鸣器演奏音阶实例

    单片机可以控制蜂鸣器发声音 蜂鸣器是非常常见的发音元器,音乐卡.报警装置.电子琴.各种小家电等都会用到.单片机的PWM功能可以设置输出不同频率的信号,所以我们可以利用单片机的PWM控制三极管的通断来推 ...

  3. 51单片机控制蜂鸣器发SOS国际求救信号声音实验

    说明:本文是51单片机控制蜂鸣器发声实验的高级版,和上个实验差不多,上个实验是控制蜂鸣器发声,本实验可以理解为控制蜂鸣器间断发出不同长度的声音,本文同样重在夯实基础,如果是大神,请自觉飘过. 好了我们 ...

  4. 单片机18b20c语言程序,AVR单片机控制DS18B20的示例C程序

    原标题:AVR单片机控制DS18B20的示例C程序 #include #include #include #include unsigned char data_H, data_L,wendu; un ...

  5. 步进电机-STM32单片机控制四相五线步进电机的程序

    单片机控制步进电机的方法很简单,可以用IO口输出脉冲控制线圈电流驱动电机旋转,可分为四相四拍,四相八拍.四相电机,有四相四拍运行方式AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC ...

  6. 单片机控制蜂鸣器发出和弦音(硬件+软件)

    文章目录 前言 硬件设计 电路分析 io口分析 软件设计 准备工作 设计思路 实际代码 H文件 C文件 说明 总结 前言 刚学习单片机时,用的都是开发板上的蜂鸣器,硬件电路是非常简单的,只需调好管脚的 ...

  7. 51单片机控制步进电机的c语言程序,用AT89C51单片机控制步进电机的汇编源程序...

    描述 下面程序完成的主要功能:实现步进电机的正反转,加速.减速:显示电机转速(转速级别)和工作状态(正转.反转.不转). 源程序 SPEED EQU 10H ;SPEED为转速等级标志,共7级,即1~ ...

  8. 单片机控制灯光亮度c语言程序,基于51单片机控制LED灯光亮度并报警

    利用pwm控制led灯光亮度大小.可以显示许多亮度等级 到最低或者最高亮度等级会发出报警.设计思路: LED一般是恒流操作的,如何改变LED的亮度呢?答案就是PWM控制.在一定的频率的方波中,调整高电 ...

  9. c语言自行车存放管理系统,C语言程序编写单片机控制的电动自行车驱动系统程序...

    >1); CCPR1L=FULLDUTY; asm("CLRWDT"); }while(voltage>=1; curek=gcur-currenth;//计算本次偏差 ...

最新文章

  1. html javascript 遍历数组、字符串
  2. iOS:消除项目中警告
  3. 160 - 35 cupofcoffe.1
  4. 老生常谈:抽象工厂模式
  5. VS调试启动编辑并继续功能
  6. eigrp配置实验_EIGRP负载均衡的实现
  7. 自己动手写ORM框架
  8. 软件自动化测试订飞机票,飞机订票系统自动化测试方案
  9. 基于STM32F4系列 之 霍尔编码器减速直流电机
  10. 麒麟下适配mellanox网卡驱动
  11. 悦保车牌识别相机优势
  12. 【RTD】铂电阻测温原理与具体方法
  13. android自动截图实现,Android实现截屏功能
  14. 个人对*xx与**xx的理解
  15. 怎么把webm转换成mp4?步骤教程
  16. 淘宝能承受几百上亿的访问点击,而铁道部的网站为啥分分钟崩溃?
  17. Hi3516EV200使用UART1笔记
  18. 2017年8月23日 星期三 --出埃及记 Exodus 29:2
  19. CNN、Capsule详解
  20. AngularJS学习之 ngTable 翻页 功能以及利用angular service准备测试数据

热门文章

  1. Golang 浮点数运算 避免精度损失 Decimal包
  2. 负载均衡_Maglev
  3. tm1688_TM1668驱动LED 子程序
  4. 根据圆的面积公式计算圆周率
  5. 【Android源码面试宝典】MMKV从使用到原理分析(一)
  6. app 嵌套h5页面问题
  7. vue阻止浏览器默认事件
  8. php 二维数组为空,php 判断数组是否为空的几种方法
  9. 汉画轩国学传承国学精髓 解惑修身之道
  10. FLD5302升压8.4V充电IC芯片和FLD5303升压12.6V充电IC芯片规格书datasheet