历史上的今天
今天是:2025年01月12日(星期日)
2018年01月12日 | 单片机演奏音乐实验
2018-01-12 来源:eefocus
利用 单片机 演奏音乐大概是单片机爱好者感兴趣的问题之一。这里我们用网站提供的实验板来做这个实验,并且了解单片机演奏音乐的基本原理,和相关的源程序。
首先来完成必要的硬件部分,硬件部分比较简单,如下图:


AT89C51 单片机 的P2.5口控制一个8550的三极管,三极管控制电磁蜂鸣器的电源通断。
我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的高电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。
例如,要产生200Hz的音频信号,200HZ音频的变化周期为1/200秒,即5ms。这样,当P2.5的高电平或低电平的持续时间为2.5ms时就能发出200HZ的音调。
乐曲中,每一音符对应着确定的频率,我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。
此外,结束符和体止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。
为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不同的音符。
程序框图如图2所示。

下面给出程序序请单,可直接在51实验板上进行演奏。本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。网友也可以自行找出一首歌,将乐曲翻译成码表输入机器,而程序不变。本实验方法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。
下一篇:单片机脉搏测量仪的制作
史海拾趣
|
ARM 汇编出错 Bad or unknown attribute ,请教该怎改,代码如下 COUNT EQU 0x40003100 AREA EXAMPLE2,CODE,ERADONLY ENTRY NOD END 错误出现在 代码段声明那一行 ...… 查看全部问答> |
|
void CUserLoginDlg::DrawBitmap(int Name,int x,int y,int nWidth,int nHeight) { CWindowDC dc(this); CBitmap &nbs ...… 查看全部问答> |
|
我想问一个关于USB移动硬盘的编程问题,如何知道一个移动硬盘的盘符 场景: 已知一个VendorID和ProductID的移动硬盘盒,插到USB接口上. 移动硬盘已经分好区, 电脑的\"我的电脑\"里面可以看到移动硬盘的逻辑盘符. 问题: 请问,如果我想根据VendorID和P ...… 查看全部问答> |
|
最近公司要用用ATmel的芯片做zigbee的项目。 但是为什么在ATmel官方提供的ZigBee程序里找不到主函数呢?有朋友说主函数被封装起来了,如果那样的话我怎么启动任务呢?… 查看全部问答> |
|
买家常见问题: 1、这个产品安全性如何? USB口的电压是5V,不足以电S一只苍蝇。人体是没有一点感觉的: 2、这个产品对电脑会产生影响吗?. 不会。我们在设计过程中已经把产品功率设计到相当安全的程度,所以绝对不会对电脑产品影响 ...… 查看全部问答> |
|
rtc.c包含rtc初始化函数和ISR函数time.c万年历相关函数,实现了万年历的绝大部分功能 相关链接:https://bbs.eeworld.com.cn/upfiles/img/200811/2008112042514415.rar… 查看全部问答> |
|
谁做过单片机读写U盘的实验 我想把存入u盘的txt格式的文件用单片机读出然后进行数据处理 不知道该怎么做 网上有用ch375做的可是市场上很难买到 还有没有其他的方法… 查看全部问答> |
|
我现在用单片机控制气缸的上下移动来控制探针的移动以接触测试物!但是测试物要测试10S~30S应该想怎么写程序呢,还有图呢,我是通过控制电磁阀的开通时间长短来控制气缸的!谢谢各位师傅帮下小弟了哈… 查看全部问答> |




