历史上的今天
返回首页

历史上的今天

今天是: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拍/分。网友也可以自行找出一首歌,将乐曲翻译成码表输入机器,而程序不变。本实验方法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。


推荐阅读

史海拾趣

Amphenol Nexus公司的发展小趣事

1998年,Amphenol Nexus Technologies经历了一次重要的领导层更迭。拜尔斯先生退休,弗雷德·法拉哈尼(Fred Farahani)收购了Nexus, Inc.的股份,并与弗拉纳根先生成为合伙人。在Fred的领导下,公司开始关注销售和开发方面的新机遇,产品基础也扩展到包括微型连接器系列。这一变革为公司带来了新的增长点,使其在激烈的市场竞争中保持了领先地位。

ETL [E-Tech Electronics LTD]公司的发展小趣事

E-Tech Electronics LTD(简称ETL)在创立之初就确立了其目标——为电子市场提供高质量、高性能的电子产品。公司凭借其创始人的远见卓识和团队的专业技术,成功开发了一系列电子产品,逐渐在市场上建立了良好的声誉。初期,ETL主要关注于特定领域的电子产品研发,通过不断优化产品设计,提升产品质量,逐渐赢得了客户的信任。

HANBIT Electronics公司的发展小趣事

在国内市场取得一定成功后,ETL开始积极拓展国际市场。公司参加了多个国际电子展会,与全球各地的客户和合作伙伴建立了广泛的联系。同时,ETL还通过与国际知名企业的合作,不断提升自身的技术水平和产品质量。这些努力使得ETL的产品逐渐走向国际市场,为公司的发展注入了新的动力。

CMOSIS公司的发展小趣事

随着CMOS图像传感器在智能手机、安防监控、汽车等领域的广泛应用,CMOSIS公司看到了巨大的市场潜力。公司加大了市场拓展力度,不仅在国内市场取得了显著成绩,还积极开拓海外市场。同时,公司注重品牌建设,通过提升产品质量、加强售后服务等方式,树立了良好的企业形象和口碑。

BEI Sensors公司的发展小趣事

Beckhoff Automation GmbH公司成立于1953年,总部设立在德国Verl市。公司自创立之初,便致力于工业自动化产品的研发与生产。在创始人的领导下,公司逐步建立起一套完整的工业自动化产品体系,包括工业PC、现场总线模块、驱动产品等。凭借卓越的产品质量和创新的技术理念,Beckhoff在行业内逐渐崭露头角,赢得了客户的广泛认可。

EDO Corp公司的发展小趣事

随着电子行业的快速发展,Eclipse Magnetics逐渐将目光投向了更为高端的市场领域。在航空航天领域,Eclipse Magnetics凭借其先进的磁性技术,成功开发了一系列用于航空航天设备的磁性产品。这些产品不仅提高了航空航天设备的性能,还为公司带来了丰厚的利润。

问答坊 | AI 解惑

新手对linux嵌入流程的请教

我刚接触这方面东西。 我的理解是这样: 先编写设备驱动。 调用驱动编译内核。 调用内核提供的库文件编译其它应用程序。 不知道对不对,高手赐教…

查看全部问答>

ARM 汇编出错 Bad or unknown attribute ,请教该怎改,代码如下

COUNT EQU 0x40003100        AREA EXAMPLE2,CODE,ERADONLY   ENTRY              NOD        END 错误出现在  代码段声明那一行 ...…

查看全部问答>

EVC画图,图片从上往下刷的问题

void CUserLoginDlg::DrawBitmap(int Name,int x,int y,int nWidth,int nHeight) {         CWindowDC        dc(this);         CBitmap          &nbs ...…

查看全部问答>

关于USB移动硬盘的编程问题,如何知道一个移动硬盘的盘符

我想问一个关于USB移动硬盘的编程问题,如何知道一个移动硬盘的盘符 场景: 已知一个VendorID和ProductID的移动硬盘盒,插到USB接口上. 移动硬盘已经分好区, 电脑的\"我的电脑\"里面可以看到移动硬盘的逻辑盘符. 问题: 请问,如果我想根据VendorID和P ...…

查看全部问答>

我想把 iPod 的声音通过 Dock 接口输出到我们自己的设备上,谁有相关的资料啊?

我想把 iPod 的声音通过 Dock 接口输出到我们自己的设备上,谁有相关的资料啊?…

查看全部问答>

zigbee问题??(懂的来)

  最近公司要用用ATmel的芯片做zigbee的项目。   但是为什么在ATmel官方提供的ZigBee程序里找不到主函数呢?有朋友说主函数被封装起来了,如果那样的话我怎么启动任务呢?…

查看全部问答>

冬天到了,给大家推荐个好东东

  买家常见问题: 1、这个产品安全性如何? USB口的电压是5V,不足以电S一只苍蝇。人体是没有一点感觉的: 2、这个产品对电脑会产生影响吗?. 不会。我们在设计过程中已经把产品功率设计到相当安全的程度,所以绝对不会对电脑产品影响 ...…

查看全部问答>

rtc实现的完整的万年历.

rtc.c包含rtc初始化函数和ISR函数time.c万年历相关函数,实现了万年历的绝大部分功能 相关链接:https://bbs.eeworld.com.cn/upfiles/img/200811/2008112042514415.rar…

查看全部问答>

有谁做过51单片机读写u盘的实验

谁做过单片机读写U盘的实验 我想把存入u盘的txt格式的文件用单片机读出然后进行数据处理 不知道该怎么做 网上有用ch375做的可是市场上很难买到 还有没有其他的方法…

查看全部问答>

单片机C语言延时(10S~30S)并且要可调

我现在用单片机控制气缸的上下移动来控制探针的移动以接触测试物!但是测试物要测试10S~30S应该想怎么写程序呢,还有图呢,我是通过控制电磁阀的开通时间长短来控制气缸的!谢谢各位师傅帮下小弟了哈…

查看全部问答>