您当前的位置:五五电子网电子知识单片机-工控设备51单片机单片机音乐演奏实验 正文
单片机音乐演奏实验

单片机音乐演奏实验

点击数:7597 次   录入时间:03-04 11:45:41   整理:http://www.55dianzi.com   51单片机

利用 单片机 演奏音乐大概是单片机爱好者感兴趣的问题之一。这里我们用网站提供的实验板来做这个实验,并且了解单片机演奏音乐的基本原理,和相关的源程序。

首先来完成必要的硬件部分,硬件部分比较简单,如下图:

720){this.width=720;this.height=720/tempx*tempy}"> 720){this.width=720;this.height=720/tempx*tempy}">

AT89C51 单片机 的P2.5口控制一个8550的三极管,三极管控制电磁蜂鸣器的电源通断。

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

例如,要产生200Hz的音频信号,200HZ音频的变化周期为1/200秒,即5ms。这样,当P2.5的高电平或低电平的持续时间为2.5ms时就能发出200HZ的音调。

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

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

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

程序框图如图2所示。

720){this.width=720;this.height=720/tempx*tempy}">

下面给出程序序请单,可直接在51实验板上进行演奏。本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。网友也可以自行找出一首歌,将乐曲翻译成码表输入机器,而程序不变。本实验方法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。

        ;标题 '八月桂花香'发声程序

       

        ORG 0000H

        LJMP START

        ORG 000BH

        INC 20H             ;中断服务,中断计数器加1

        MOV TH0,#0D8H

        MOV TL0,#0EFH       ;12M晶振,形成10毫秒中断

        RETI

START: 

        MOV SP,#50H

        MOV TH0,#0D8H

        MOV TL0,#0EFH

        MOV TMOD,#01H

        MOV IE,#82H

MUSIC0:

        NOP

        MOV DPTR,#DAT       ;表头地址送DPTR

        MOV 20H,#00H        ;中断计数器清0

MUSIC1:

        NOP

        CLR A               ;A清零

        MOVC A,@A+DPTR      ;查表取代码

        JZ END0             ;是00H,则结束

        CJNE A,#0FFH,MUSIC5 ;如果是休止符,往下执行

        LJMP MUSIC3

MUSIC5:

        NOP

        MOV R6,A            ;R6=18H音符的频率

        INC DPTR            ;DPTR加一

        MOV A,#0

        MOVC A,@A+DPTR      ;取节拍代码送R7

        MOV R7,A            ;R7=30H音符发音的时间

        SETB TR0            ;启动计数

MUSIC2:

        NOP

        CPL P2.5            ;P2.5是音乐输出引脚

        MOV A,R6

        MOV R3,A            ;R3=R6=18H

        LCALL DEL

        MOV A,R7

        CJNE A,20H,MUSIC2   ;中断计数器(20H)=R7否?

        ;不等,则继续循环

        MOV 20H,#00H        ;等于,则取下一代码

        INC DPTR

        LJMP MUSIC1

MUSIC3:

        NOP                 ;休止100毫秒

        CLR TR0

        MOV R2,#0DH         ;R2=13

MUSIC4:

        NOP

        MOV R3,#0FFH        ;R3=255

        LCALL DEL

        DJNZ R2,MUSIC4

        INC DPTR

        LJMP MUSIC1

END0:  

        NOP

        MOV R2,#0FFH        ;歌曲结束,延时1秒后继续

MUSIC6:

        MOV R3,#00H

        LCALL DEL

        DJNZ R2,MUSIC6

        LJMP MUSIC0

DEL:   

        NOP

DEL3:  

        MOV R4,#02H

DEL4:  

        NOP

        DJNZ R4,DEL4

        NOP

        DJNZ R3,DEL3

        RET

        NOP

[1] [2]  下一页


本文关键字:单片机  音乐  51单片机单片机-工控设备 - 51单片机

上一篇:MCS-51指令解析