C51蜂鸣器演奏两只老虎
/*两只老虎**/
#include<reg52.h> sbit Buzz = P1^6; //声明绑定蜂鸣器
unsigned int code NoteFrequ[]={ 523,587,659,698,784,880,988, //中音对应的1-7
1047,1175,1319,1397,1568,1760,1976 //高音对应的1-7
};
unsigned int code NoteReload[]={ //中音1-7和高音1-7对应的定时器重载值
65536 - (11059200/12) /(523*2),//中音1-7
65536 - (11059200/12) /(587*2),
65536 - (11059200/12) /(659*2),
65536 - (11059200/12) /(698*2),
65536 - (11059200/12) /(784*2),
65536 - (11059200/12) /(880*2),
65536 - (11059200/12) /(988*2),
65536 - (11059200/12) /(1047*2),//高音1-7
65536 - (11059200/12) /(1175*2),
65536 - (11059200/12) /(1319*2),
65536 - (11059200/12) /(1397*2),
65536 - (11059200/12) /(1568*2),
65536 - (11059200/12) /(1760*2),
65536 - (11059200/12) /(1970*2)};
bit enable = 1; //发声使能标志
bit tmrflay = 0; //定时器 中断完成标志
unsigned char T0RH = 0xff; //T0重载值高字节
unsigned char T0RL = 0x00; //T0重载值低字节
void PlayTwoTiger(); void main(){
unsigned int i;
EA = 1;
TMOD =0x01; //模式1
TH0 = T0RH;
TL0 = T0RL;
ET0 = 1; //使能T0中断
TR0 = 1; //启动
while(1){
PlayTwoTiger();
for(i=0;i<40000;i++);
}
}
/**音乐函数**/
void PlayTwoTiger(){
unsigned char beat; //节拍索引
unsigned char note; //节拍对应音符
unsigned int time=0; //节拍计时
unsigned int beattime=0; //总时间计时
unsigned int soundtime=0; //没拍发声时间
unsigned char code PlayTwoTigerNote[]={ //音符表
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
};
unsigned char code PlayTwoBeat[]={ //节拍表,4表示一拍,1表示1/4拍,8表示两拍
4,4,4,4, 4,4,4,4, 4,4,8, 4,4,8,
3,1,3,1,4,4, 3,1,3,1,4,4, 4,4,8, 4,4,8,
};
for(beat=0; beat<sizeof(PlayTwoTigerNote);){ //节拍索引循环变量
while(!tmrflay); //每次定时器中断完成 节拍处理
tmrflay = 0;
if(time == 0){ //节拍播放完成重启
note = PlayTwoTigerNote[beat]-1;
T0RH = NoteReload[note]>>8;
T0RL = NoteReload[note]; //计算总时间,右移2位等于除4,移位代替除法加快速度
beattime = (PlayTwoBeat[beat]*NoteFrequ[note])>>2; //计算发声时间,为总时间的0.75s
soundtime =beattime - (beattime>>2);
enable = 1; //开始发声
time++;
}else{ //节拍播放未结束则继续处理
if(time >= beattime){ //当前时间清零
time = 0; //准备重新启动
beat++;
}else{ //累加时间
time++;
if(time == soundtime){ //发声时间到达,关闭蜂鸣器
enable =0; //用以区分连续两个节拍
}
}
}
}
}
void InterRupt() interrupt 1{//中断服务
TH0 =T0RH;
TL0 =T0RL;
tmrflay = 1;
if(enable){
Buzz=~Buzz;
}else{
Buzz=1;
}
}
转载于:https://www.cnblogs.com/robotes/p/7795860.html
C51蜂鸣器演奏两只老虎相关推荐
- 89C51单片机蜂鸣器演奏两只老虎-源码
/* ********************************************************************** * 头文件包含 ****************** ...
- 蜂鸣器播放《两只老虎》
文章目录 前言 一.回顾蜂鸣器 二.乐谱知识 2.1 音符音频 2.2 两只老虎乐谱 三.系统框图 四.模块调用 五.模块原理图 六.工程源码 6.1 音符选择模块代码 6.2 pwm产生模块代码 6 ...
- FPGA蜂鸣器实现歌曲《两只老虎》
1.简谱中的符号含义 2.两只老虎简谱 3.音符与频率的对照表 4.首先在这里解释一个名词→音乐频率--众所周知,声音是由物体的振动产生的,本质是传播媒介的振动,另外声音有两大特性--音量和音色,我们 ...
- 计算机打音乐两只老虎,两只老虎(音乐、汇编程序)
/* 程序效果:蜂鸣器发出两只老虎的音律 */ ORG 0000H AJMP START ORG 000BH AJMP TIM0 ORG 0030H START: MOV TMOD,#01H ...
- 用鸿蒙OS在蜂鸣器上播放一曲《两只老虎》
本文介绍如何在HiSpark Wi-Fi IoT套件上,使用Harmony OS IoT硬件子系统的PWM接口 驱动蜂鸣器 播放音乐. 用PWM输出方波的API 鸿蒙系统IoT硬件子系统提供了PWM相 ...
- FPGA实现蜂鸣器播放音乐实验,以儿歌《两只老虎》为例
** FPGA实现蜂鸣器播放音乐 ** 实现功能: 开发板上电后,通过蜂鸣器播放<两只老虎>. 设计思路 原理:想要让蜂鸣器播放音乐,就需要知道每个音符的频率,再通过换算将频率转换为周期, ...
- 计算机弹奏两只老虎爱跳舞,原神风物之诗琴乐谱大全
原神风物之诗琴乐谱大全带给大家,这是很多小伙伴都非常期待的内容,最近原神风物之诗琴玩法引起了大家的注意,但是大家不知道弹什么,手心游戏小编就带给大家最全的乐谱介绍. 原神风物之诗琴乐谱大全 弹奏键位 ...
- python 常量_大疆机甲大师Python开发: 两只老虎
大疆机甲大师演奏<两只老虎>https://www.zhihu.com/video/1168271599123320832 之前大疆机甲大师Python开发: 中文命名变量初尝试说到跳过了 ...
- 宝贝宝贝用计算机弹奏,原神宝贝宝贝琴谱 原神琴谱两只老虎爱跳舞怎么弹
原神宝贝宝贝琴谱,原神游戏内,我们通过风物琴,可以演奏不同的音乐出来,今天小辰给大家带来原神宝贝宝贝琴谱,一起来看看吧! 如上图,原神的风物琴分为上高音,中音.下低音3个部分:我们把它分为三行,琴谱空 ...
最新文章
- bat+sqlcmd 批量执行脚本
- linux配置4g网络命令_Linux网络基本配置命令
- 算法提高 身份证排序
- java axis webservice_Axis Webservice框架使用案例
- P5048-[Ynoi2019 模拟赛]Yuno loves sqrt technology III【分块】
- AUTOSAR专业知识篇(七)-比亚迪汉ECU接口
- CPU8085 8086名字的由来
- MyBatis : Example 条件查询 in 用法
- 粉丝回馈,8000元大礼包免费相送
- 【java】java 如何不使用第三个变量来交换两个数的值
- 算法-codeup1928-日期差值
- 【华为OJ】【算法总篇章】
- eclipse汉化方法取消汉化退回英文版
- 基于Java医院网上预约挂号系统设计与实现(含源代码)
- order by case when 使用方法
- oracle查看登录失败次数,Oracle取消用户连续登录失败次数限制
- c语言中指数函数fabs,高一指数函数公式,高一指数函数
- Java 读取文件 MD5 sha1 sha256 sha224 sha384 sha512
- 微信怎么群发视频和文件?
- java中宏定义,宏定义的使用
热门文章
- Response对象-响应字符数据
- PTA L1-030 一帮一(详解)
- 怎样使用JS代码代码跳转的方法
- 深度残差收缩网络(Deep Residual Shrinkage Networks for Fault Diagnosis )
- AI创业时代!这9个方向有钱途;AIGC再添霸榜应用Lensa;美团SemEval2022冠军方法分享;医学图像处理工具箱… | ShowMeAI资讯日报
- 基于大数据分析的葡萄酒品质鉴别系统设计与实现
- 电子科技大学硕士毕业论文和博士毕业论文Latex模板及问题集锦
- AutoDesk CAD激活后闪退解决方法
- Android6.0以上应用在长时间在后台,因为内存不足导致系统回收内存,当再次启动应用出现Fragment重叠或者空白、异常解决方案(提供模拟内存不足导致系统回收内存的方案)。
- log4cplus的各种坑