51单片机蜂鸣器播放音乐C语言程序实例,51单片机 使用蜂鸣器播放简单音乐
MCU型号 STC 89C52RC
#include
#defineRldTmr(fr)65536-(11059200/12)/(fr<<1)
#defineFuDian(n)(n<<1)/3//附点n分音符的换算
typedefunsignedcharUCHAR;
typedefunsignedintUINT;
typedefunsignedlongULONG;
sbitBUZZ=P1^6;
UINTcodenoteFreq[]={//中音1-7和高音1-7对应的频率列表
523,587,659,698,784,880,988,
1047,1175,1319,1397,1568,1760,1976
};
UINTcodetmrRld[]={//中音1-7和高音1-7对应的定时器重载值
RldTmr(523),RldTmr(587),RldTmr(659),RldTmr(698),RldTmr(784),RldTmr(880),RldTmr(988),
RldTmr(1047),RldTmr(1175),RldTmr(1319),RldTmr(1397),RldTmr(1568),RldTmr(1760),RldTmr(1976),
};
UCHARcodemusicNote[]={//音名
1,2,3,1,
1,2,3,1,
3,4,5,
3,4,5,
5,6,5,4,3,1,
5,6,5,4,3,1,
1,5,1,
1,5,1
};
UCHARcodenoteDuration[]={//音名对应的时值,4表示4分音符,8表示8分音符,16表示16分音符
4,4,4,4,
4,4,4,4,
4,4,2,
4,4,2,
FuDian(8),16,FuDian(8),16,4,4,
FuDian(8),16,FuDian(8),16,4,4,
4,4,2,
4,4,2
};
bitenable=1,tmrFlg=0;
UCHART0RH=0XFF,T0RL=0X00;
voidDelay(UINTn);
voidPlayMusic(UCHARspeed);//固定标准为4分音符的速度:例如speed=108表示一分钟扫过108个4分音符
voidmain(){
EA=1;
TMOD=0X01;
TH0=T0RH;
TL0=T0RL;
ET0=1;
TR0=1;
while(1){
PlayMusic(72);
Delay(40000u);
}
}
voidDelay(UINTn){
UINTi;
for(i=0;i}
voidPlayMusic(UCHARspeed){
UCHARi;
UCHARidx;
UINTcnt=0;
UINTdurationCnt=0;//当前音符的时值对应的定时器计数
UINTsoundCnt=0;//当前音符的发声时值对应的计数值
for(i=0;iwhile(!tmrFlg);
tmrFlg=0;
if(cnt==0){
idx=musicNote[i]-1;
T0RH=tmrRld[idx]>>8;
T0RL=tmrRld[idx];
durationCnt=(ULONG)240*(ULONG)noteFreq[idx]/((ULONG)noteDuration[i]*(ULONG)speed);
soundCnt=durationCnt-(durationCnt>>2);//当前音符时值的前3/4发声,后1/4静音
enable=1;
cnt++;
}
else{
if(cnt==durationCnt){
cnt=0;
i++;
}
else{
cnt++;
if(cnt==soundCnt){
enable=0;
}
}
}
}
}
voidInterruptTmr0()interrupt1{
TH0=T0RH;
TL0=T0RL;
tmrFlg=1;
if(enable)
BUZZ=~BUZZ;
else
BUZZ=1;
}
51单片机蜂鸣器播放音乐C语言程序实例,51单片机 使用蜂鸣器播放简单音乐相关推荐
- 51单片机蜂鸣器播放音乐C语言程序实例,51单片机蜂鸣器音乐之八月桂花播放源程序...
/************************************************************************ [文件名] C51音乐程序(八月桂花) [功能] ...
- 51单片机蜂鸣器播放音乐C语言程序实例,基于proteus的51单片机仿真实例八十八、用蜂鸣器播放一段音乐应用实例...
1.前面我们已经学习了如何让单片机控制蜂鸣器发出不同的声音.现在我们更进一步,让单片机控制蜂鸣器发出再复杂一些的声音:模拟乐音输出 2.关于音乐的乐谱和节拍这些知识,我们将在下一节进一步说明 3.在k ...
- 单片机独立式按键c语言程序,(原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询)...
(原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询) /************************************************************ ...
- 基于51单片机的光照强度检测c语言程序,基于51单片机光照强度检测报告.doc
基于51单片机光照强度检测报告 课程设计报告 课程名称: 智能仪器课程设计 题 目: 基于51单片机的光照强度 摘要 光敏电阻测光强度系统,该系统可以自动检测光照强度的强弱并显示让人们知道此时光照强度 ...
- 51单片机控制步进电机的c语言程序,用AT89C51单片机控制步进电机的汇编源程序...
描述 下面程序完成的主要功能:实现步进电机的正反转,加速.减速:显示电机转速(转速级别)和工作状态(正转.反转.不转). 源程序 SPEED EQU 10H ;SPEED为转速等级标志,共7级,即1~ ...
- 单片机控制灯光亮度c语言程序,基于51单片机控制LED灯光亮度并报警
利用pwm控制led灯光亮度大小.可以显示许多亮度等级 到最低或者最高亮度等级会发出报警.设计思路: LED一般是恒流操作的,如何改变LED的亮度呢?答案就是PWM控制.在一定的频率的方波中,调整高电 ...
- 单片机方波da转换c语言程序,基于51单片机的波形发生器DA转换(dac0832)
代码如下: #include"reg51.h" #define uchar unsigned char sbit ksaw=P2^0; //锯齿波按键. sbit ktran=P2 ...
- 超声波c语言程序,51单片机超声波模块的C语言程序.doc
51单片机超声波模块的C语言程序.doc 超声波模块程序 超声波模块程序 Trig P20 Echo P32 include define uchar unsigned char define uin ...
- c语言打铃器单片机程序,51单片机自动打铃C语言程序
51单片机自动打铃C语言程序: #include "reg51.h" #include "intrins.h" #define uchar unsigned c ...
- 洗衣机洗涤部分c语言程序,51单片机洗衣机控制板及C语言程序
51单片机洗衣机控制板及C语言程序,该控制板单片机采用AT89C51单片机,所设计全自动洗衣机功能有:标准洗衣.经济洗衣.单独洗衣以及排水四种洗衣等四种方式,有强洗.弱洗及运行/暂停.显示及报警功能, ...
最新文章
- Linux下pdf读取乱码
- 数学之美 系列十一 - Google 阿卡 47 的制造者阿米特.辛格博士
- 斐波那契数拓展问题:leetcode-70 爬楼梯问题 leetcode-1137 泰波那契数问题解法
- Struts1 处理接收参数插入到数据库之后呈乱码的问题解决
- sort命令详解及Nginx统计运用
- 前端学习(3224):字符串形式
- 复习Java的精华总结
- 扫靓号4.2去会员限制版|靓号扫号|免费扫号器|熊猫扫号|蚂蚁扫号|腾讯王卡阿里宝卡米粉卡等42个卡种扫号器
- java linux 时间戳转时间_Java时间和时间戳的相互转换
- 计算机水平cet2是什么等级,英语cet2等级考试试题
- Geosoft Oasis.Montaj.v7.1.1简介
- HTML基础DW使用教程
- 湖仓一体:从零开始搭建数据仓库
- Linux安装docker及其他镜像
- python中的sort排序加换行_python中sort()排序的方法
- Arduino基础入门篇14—跳动的数码管
- 【智能优化算法】基于蜉蝣算法求解多目标优化问题附matlab代码
- acer台式电脑怎么重装系统_acer电脑U盘重装操作系统图文教程
- 来看看Jmeter官网给我们的提示之如何减少资源使用
- Hive 面试系列:时间交叉问题
热门文章
- 地图比例尺与空间分辨率之间的关系_航高、分辨率与比例尺的关系
- 2021年连云港高考成绩查询,2021年连云港高考状元是谁分数多少分,历年连云港高考状元名单...
- 风变编程python24_如何看待风变编程的 Python 网课?
- 有才的人全败给“傲”,平庸的人皆输在“懒”!
- Dubbo之手写RPC框架
- tplink怎么进去_想设置路由器,如何进入tplink
- 4种JavaScript中获取HTML元素的方式
- css多棱柱立体旋转
- js代码实现点击按钮出现60秒倒计时
- 5道String面试题,能全答对的人不到10%!(附答案)