单片机控制蜂鸣器和弦音发音程序
//文件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 ;}
单片机控制蜂鸣器和弦音发音程序相关推荐
- 单片机控制蜂鸣器唱生日快乐歌曲 PROTEUS 和51单片机教程(附仿真文件+源代码)
功能:按一下开关后,单片机控制蜂鸣器唱生日快乐歌曲 PROTEUS 和51单片机教程 单片机控制蜂鸣器唱生日快乐歌曲 程序源代码如下: /* 生日歌 */ #include <reg51.h&g ...
- 51单片机蜂鸣器演奏《小苹果》C语言程序,单片机控制蜂鸣器演奏音阶实例
单片机可以控制蜂鸣器发声音 蜂鸣器是非常常见的发音元器,音乐卡.报警装置.电子琴.各种小家电等都会用到.单片机的PWM功能可以设置输出不同频率的信号,所以我们可以利用单片机的PWM控制三极管的通断来推 ...
- 51单片机控制蜂鸣器发SOS国际求救信号声音实验
说明:本文是51单片机控制蜂鸣器发声实验的高级版,和上个实验差不多,上个实验是控制蜂鸣器发声,本实验可以理解为控制蜂鸣器间断发出不同长度的声音,本文同样重在夯实基础,如果是大神,请自觉飘过. 好了我们 ...
- 单片机18b20c语言程序,AVR单片机控制DS18B20的示例C程序
原标题:AVR单片机控制DS18B20的示例C程序 #include #include #include #include unsigned char data_H, data_L,wendu; un ...
- 步进电机-STM32单片机控制四相五线步进电机的程序
单片机控制步进电机的方法很简单,可以用IO口输出脉冲控制线圈电流驱动电机旋转,可分为四相四拍,四相八拍.四相电机,有四相四拍运行方式AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC ...
- 单片机控制蜂鸣器发出和弦音(硬件+软件)
文章目录 前言 硬件设计 电路分析 io口分析 软件设计 准备工作 设计思路 实际代码 H文件 C文件 说明 总结 前言 刚学习单片机时,用的都是开发板上的蜂鸣器,硬件电路是非常简单的,只需调好管脚的 ...
- 51单片机控制步进电机的c语言程序,用AT89C51单片机控制步进电机的汇编源程序...
描述 下面程序完成的主要功能:实现步进电机的正反转,加速.减速:显示电机转速(转速级别)和工作状态(正转.反转.不转). 源程序 SPEED EQU 10H ;SPEED为转速等级标志,共7级,即1~ ...
- 单片机控制灯光亮度c语言程序,基于51单片机控制LED灯光亮度并报警
利用pwm控制led灯光亮度大小.可以显示许多亮度等级 到最低或者最高亮度等级会发出报警.设计思路: LED一般是恒流操作的,如何改变LED的亮度呢?答案就是PWM控制.在一定的频率的方波中,调整高电 ...
- c语言自行车存放管理系统,C语言程序编写单片机控制的电动自行车驱动系统程序...
>1); CCPR1L=FULLDUTY; asm("CLRWDT"); }while(voltage>=1; curek=gcur-currenth;//计算本次偏差 ...
最新文章
- html javascript 遍历数组、字符串
- iOS:消除项目中警告
- 160 - 35 cupofcoffe.1
- 老生常谈:抽象工厂模式
- VS调试启动编辑并继续功能
- eigrp配置实验_EIGRP负载均衡的实现
- 自己动手写ORM框架
- 软件自动化测试订飞机票,飞机订票系统自动化测试方案
- 基于STM32F4系列 之 霍尔编码器减速直流电机
- 麒麟下适配mellanox网卡驱动
- 悦保车牌识别相机优势
- 【RTD】铂电阻测温原理与具体方法
- android自动截图实现,Android实现截屏功能
- 个人对*xx与**xx的理解
- 怎么把webm转换成mp4?步骤教程
- 淘宝能承受几百上亿的访问点击,而铁道部的网站为啥分分钟崩溃?
- Hi3516EV200使用UART1笔记
- 2017年8月23日 星期三 --出埃及记 Exodus 29:2
- CNN、Capsule详解
- AngularJS学习之 ngTable 翻页 功能以及利用angular service准备测试数据