DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 118|回复: 0
打印 上一主题 下一主题

单片机演奏音乐原理与模拟实验

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 16:43:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
利用单片机演奏音乐大概是单片机爱好者感兴趣的问题之一。这里我们用网站提供的实验板来做这个实验,并且了解单片机演奏音乐的基本原理,和相关的源程序。
首先来完成必要的硬件部分,硬件部分比较简单,如下图:






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



下面给出程序序请单,可直接在51实验板上进行演奏。本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。网友也可以自行找出一首歌,将乐曲翻译成码表输入机器,而程序不变。本实验方法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。
                          
                       
                          
                               
MCS51单片机汇编程序
??;标题 '八月桂花香'发声程序?ORG 0000HLJMP STARTORG 000BHINC 20H ;中断服务,中断计数器加1?MOV TH0,#0D8HMOV TL0,#0EFH ;12M晶振,形成10毫秒中断?RETISTART:MOV SP,#50HMOV TH0,#0D8HMOV TL0,#0EFHMOV TMOD,#01HMOV IE,#82HMUSIC0:NOPMOV DPTR,#DAT ;表头地址送DPTR?MOV 20H,#00H ;中断计数器清0?MUSIC1:NOPCLR A ;A清零?MOVC A,@A+DPTR;查表取代码?JZ END0 ;是00H,则结束?CJNE A,#0FFH,MUSIC5 ;如果是休止符,往下执行?LJMP MUSIC3MUSIC5:NOPMOV R6,A ;R6=18H音符的频率?INC DPTR ;DPTR加一?MOV A,#0MOVC A,@A+DPTR;取节拍代码送R7?MOV R7,A ;R7=30H音符发音的时间?SETB TR0 ;启动计数?MUSIC2:NOPCPL P2.5 2.5是音乐输出引脚?MOV A,R6MOV R3,A ;R3=R6=18H?LCALL DELMOV A,R7CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否??;不等,则继续循环?MOV 20H,#00H ;等于,则取下一代码?INC DPTRLJMP MUSIC1MUSIC3:NOP ;休止100毫秒?CLR TR0MOV R2,#0DH ;R2=13?MUSIC4:NOPMOV R3,#0FFH ;R3=255?LCALL DELDJNZ R2,MUSIC4INC DPTRLJMP MUSIC1END0:NOPMOV R2,#0FFH ;歌曲结束,延时1秒后继续?MUSIC6:MOV R3,#00HLCALL DELDJNZ R2,MUSIC6LJMP MUSIC0DEL:NOPDEL3:MOV R4,#02HDEL4:NOPDJNZ R4,DEL4NOPDJNZ R3,DEL3RETNOPDATB 18H, 30H, 1CH, 10HDB 20H, 40H, 1CH, 10HDB 18H, 10H, 20H, 10HDB 1CH, 10H, 18H, 40HDB 1CH, 20H, 20H, 20HDB 1CH, 20H, 18H, 20HDB 20H, 80H, 0FFH, 20HDB 30H, 1CH, 10H , 18HDB 20H, 15H, 20H , 1CHDB 20H, 20H, 20H , 26HDB 40H, 20H , 20H , 2BHDB 20H, 26H, 20H , 20HDB 20H, 30H , 80H , 0FFHDB 20H, 20H, 1CH , 10HDB 18H, 10H, 20H , 20HDB 26H, 20H , 2BH , 20HDB 30H, 20H , 2BH , 40HDB 20H, 20H , 1CH , 10HDB 18H, 10H, 20H, 20HDB 26H, 20H , 2BH, 20HDB 30H, 20H, 2BH , 40HDB 20H, 30H, 1CH , 10HDB 18H, 20H , 15H , 20HDB 1CH, 20H , 20H , 20HDB 26H, 40H, 20H , 20HDB 2BH, 20H, 26H , 20HDB 20H, 20H, 30H , 80HDB 20H, 30H, 1CH , 10HDB 20H, 10H, 1CH , 10HDB 20H, 20H, 26H , 20HDB 2BH, 20H, 30H , 20HDB 2BH, 40H, 20H , 15HDB 1FH, 05H, 20H , 10HDB 1CH, 10H, 20H , 20HDB 26H, 20H, 2BH , 20HDB 30H, 20H, 2BH , 40HDB 20H, 30H, 1CH , 10HDB 18H, 20H , 15H , 20HDB 1CH, 20H , 20H , 20HDB 26H, 40H, 20H , 20HDB 2BH, 20H, 26H , 20HDB 20H, 20H, 30H, 30HDB 20H, 30H, 1CH, 10HDB 18H, 40H, 1CH, 20HDB 20H, 20H, 26H, 40HDB 13H, 60H, 18H , 20HDB 15H, 40H, 13H , 40HDB 18H, 80H, 00HEND
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-7-22 18:20 , 耗时 0.095629 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表