0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机 | 音乐程序设计原理解析

2oON_changxuemc 来源:YXQ 2019-06-05 17:18 次阅读

我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。

例如,要产生200Hz的音频信号,接入喇叭(若属临时实验,也可将喇叭直接接在P1口线上),实验程序为:

其中子程序DEL为延时子程序,当R3为1时,延时时间约为20us,R3中存放延时常数,对200HZ音频,其周期为1/200秒,即5ms。这样,当P1.4的高电平或低电平的持续时间为2.5ms,即R3的时间常数取2500/20=125(7DH)时,就能发出200HZ的音调。将上述程序键入学习机,并不断修改R3的常数可以感到音调的变化。

乐曲中,每一音符对应着确定的频率,表1给出C调时各音符频率及其相应的时间常数。

读者可以根据表1所提供的常数,将其16进制代码送入R3,反复练习体会。根据表1可以奏出音符。仅这还不够,要准确奏出一首曲子,必须准确地控制乐曲节奏,即一音符的持续时间。

音符的节拍我们可以用定时器T0来控制,送入不同的初值,就可以产生不同的定时时间。便如某歌曲的节奏为每分钟94拍,即一拍为0.64秒。其它节拍与时间的对应关系见表2。

但时,由于T0的最大定时时间只能为131毫秒,因此不可能直接用改变T0的时间初值来实现不同节拍。我们可以用T0来产生10毫秒的时间基准,然后设置一个中断计数器,通过判别中断计数器的值来控制节拍时间的长短。表2中也给出了各种节拍所对应的时间常数。例如对1/4拍音符,定时时间为0.16秒,相应的时间常数为16(即10H);对3拍音符,定时时间为1.92秒,相应时间长数为192(即C0H)。

我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。

此外,结束符和体止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。

为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不同的音符。

程序框图如图2所示。

下面给出程序序请单,可直接在TD-III型学习机上演奏,对其它不同型号的学习机,只需相应地改变一下地址即可。本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。读者也可以自行找出一首歌,按表1和表2给定的常数,将乐曲翻译成码表输入机器,而程序不变。本实验方法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。

硬件连接说明:

随便找一个仿真机或者什么单片机实验板,只要能工作的就行,将程序输入,运行,然后找个音箱(你计算机旁边应当就有一对吧)拨出插头,插头的前端接在P1。0上,后面部分找根线接单片机的地,就应当有声了,然后怎么改进硬件连接就是你的事了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5999

    文章

    43964

    浏览量

    620711
  • 程序
    +关注

    关注

    114

    文章

    3630

    浏览量

    79519

原文标题:单片机音乐程序的设计原理解析

文章出处:【微信号:changxuemcu,微信公众号:畅学单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机解析g代码的方法

    的运动。 解析G代码是将其转化为单片机能够理解和执行的指令集。单片机解析G代码的方法主要包括以下几个方面:G代码的格式
    的头像 发表于 12-22 14:15 503次阅读

    基于VB的PC机与单片机间串口通讯及程序设计

    电子发烧友网站提供《基于VB的PC机与单片机间串口通讯及程序设计.pdf》资料免费下载
    发表于 10-23 14:10 2次下载
    基于VB的PC机与<b class='flag-5'>单片机</b>间串口通讯及<b class='flag-5'>程序设计</b>

    用51单片机DIY音乐频谱显示

    该资源是手把手教你用51单片机DIY音乐频谱显示
    发表于 09-27 07:42

    单片机C语言程序设计实训100例

    单片机C语言程序设计实训100例51 Proteus仿真本书基于Keil μVision程序设计平台和Proteus硬件仿真平台,精心编写了100余个8051单片机C语言
    发表于 09-27 06:16

    基于51单片机音乐喷泉设计频谱彩灯音乐盒播放器源代码分享

    基于51单片机音乐喷泉设计频谱彩灯音乐盒播放器源代码
    发表于 09-26 07:16

    单片机原理及应用详解

    详细地介绍了MCS-51单片机的硬件结构、指令系统,从应用的角度介绍了汇编语言程序设计与各种硬件接口设计、各种常用的数据运算和处理程序、接口程序以及MCS-51
    发表于 09-25 07:02

    解析PLC梯形图程序设计

    解析PLC梯形图程序设计
    的头像 发表于 06-30 11:14 1018次阅读
    <b class='flag-5'>解析</b>PLC梯形图<b class='flag-5'>程序设计</b>

    单片机控制蜂鸣器音乐资料分享

    单片机控制蜂鸣器音乐
    发表于 06-05 09:31 40次下载

    基于单片机电子音乐Proteus仿真程序

    基于单片机电子音乐Proteus仿真设计资料
    发表于 05-22 15:35 0次下载

    浅谈 malloc 函数在单片机上的应用

    聊聊 malloc函数 在单片机程序设计中怎么使用
    的头像 发表于 05-18 09:35 1488次阅读
    浅谈 malloc 函数在<b class='flag-5'>单片机</b>上的应用

    有大佬做过基于单片机的104规约解析吗?

    有大佬做过基于单片机的104规约解析吗?单片机作为从站,通过104规约与主机通讯。
    发表于 05-12 15:54

    基于AT89C51单片机按键选播电子音乐Proteus仿真及程序

    基于AT89C51单片机按键选播电子音乐Proteus仿真及程序
    发表于 05-04 15:59 4次下载

    基于51单片机的播放音乐实验设计资料源程序文件

    基于51单片机的播放音乐实验设计资料源程序文件 经常看到一些刚学单片机的朋友对单片机演奏音乐
    发表于 04-27 15:06 1次下载

    基于51单片机的串口测试程序设计资料源程序文件

    基于51单片机的串口测试程序设计资料源程序文件
    发表于 04-27 15:05 0次下载

    基于51单片机单片机播放音乐实验设计资料源程序

    经常看到一些刚学单片机的朋友对单片机演奏音乐比较有兴趣,本人也曾是这 样。在此,本人将就这方面的知识做一些简介,但愿能对单片机演奏音乐比较
    发表于 04-26 15:38 0次下载