当前位置:文档之家› 单片机演奏简单的音乐

单片机演奏简单的音乐

单片机演奏简单的音乐
单片机演奏简单的音乐

为了让单片机演奏音乐,看了不少的资料,现在整理了相关的资料,让你一次看懂音调、节拍的确定方法,看懂简谱,懂得编写用来演奏音乐的程序。

单片机不能像其他的专业的乐器一样能奏出多种音色的声音,即不包含相应幅度的谐波频率。单片机演奏的音乐基本都是点单音频率。因此单片机演奏音乐比较简单,只需弄清楚“音调”和“节拍”两个概念即可。

音调表示一个音符唱的多高的频率。

节拍表示一个音符唱多长的时间。

那么音调、节拍该怎样确定呢?

首先来看音调的确定:

不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。在音乐中常把五线谱中央C 上方的A 音定为标准音高,其频率f=440Hz。当两个声音信号的频率相差一倍时,也即f2=2*f1时,则称f2比f1 高一个倍频程, 例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266 Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294 Hz)的一倍。在音乐学中称它相差一个八度音。在一个八度音内,有12个半音。以1—i 八音区为例,12 个半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5 一#5、#5—6、6—#6、#6—7、7—i。那些在它们的左上角加上﹟号或者b号的叫变化音。﹟叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。这12 个音阶的分度基本上是以对数关系来划分的。如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。基本频率看下表:

低音频率中音频率高音频率

Do 262 Do 523 Do 1046

Do﹟277 Do﹟554 Do﹟1109

Re 294 Re 587 Re 1175

Re﹟311 Re﹟622 Re﹟1245

Mi 330 Mi 659 Mi 1318

Fa 349 Fa 698 Fa 1397

Fa﹟370 Fa﹟740 Fa﹟1480

So 392 So 784 So 1568

So﹟415 So﹟831 So﹟1661

La 440 La 880 La 1760

La﹟464 La﹟932 La﹟1865

Si 494 Si 988 Si 1976 知道了一个音符的频率后,采用的方法就是通过一个延时程序,延时对应频率周期的二分之一周期(即t=1/2T)后,将单片机上连接蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将不同的延时时间值t赋给延时程序即可实现。一般说来,常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器予置不同的定时值就可实现。

那么怎样确定一个频率所对应的定时器的定时值呢?以标准音高A为例:

A的频率f = 440 Hz,其对应的周期为:

T = 1/ f = 1/440 =2272μs

由上图可知,单片机上对应蜂鸣器的I/O口来回取反的时间应为:

t = T/2 = 2272/2 = 1136μs

这个时间t也就是单片机上定时器应有的中断触发时间。一般情况下,单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。设振荡器频率为f0,则定时器的予置初值由下式来确定:

t = 12 *(TALL – THL)/ f0

式中TALL = 2^16 = 65536,THL为定时器待确定的计数初值。

因此定时器的高低计数器的初值为:

TH = THL / 256 = ( TALL – t* f0/12) / 256

TL = THL % 256 = ( TALL – t* f0/12) %256

将t=1136μs代入上面两式(注意:计算时应将时间和频率的单位换算一致),即可求出标准音高A在单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的予置初值为:

TH 440Hz = (65536 – 1136 * 12/12) /256 = FBH

TL 440Hz = (65536 – 1136 * 12/12)%256 = 90H

根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。如下表:

(12MHz的单片机晶振)音调对应的计数器预置值:

低音频率TH TL 中音频率TH TL 高音频率TH TL

1 26

2 F88B 1 52

3 FC43 1 1046 FB21

1﹟277 F8F2 1﹟554 FC78 1﹟1109 FE3C

2 294 F95B 2 587 FCAB 2 1175 FE55

2﹟311 F9B7 2﹟622 FCDB 2﹟1245 FE6D

3 330 FA1

4 3 659 FD08 3 1318 FE84

4 349 FA66 4 698 FD33 4 1397 FE99

4﹟370 FAB9 4﹟740 FD5B 4﹟1480 FEAD

5 392 FB03 5 784 FD81 5 1568 FEC0

5﹟415 FB4A 5﹟831 FDA5 5﹟1661 FE02

6 440 FB8F 6 880 FDC

7 6 1760 FEE3

6﹟464 FBCF 6﹟932 FDE7 6﹟1865 FEF3

7 494 FC0B 7 988 FE05 7 1976 FF02

知道了音调的确定方法,那就再来看看节拍的确定吧:

若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。确定节拍的方法如下

1.在一张乐谱中,我们经常会看到这样的表达式,等

等,这里1=C,1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联(呵呵,其

关联就是升或降音调),就是用来表示节拍的。以为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。比如:

其中1 、2 为一拍,3、4、5 为一拍,6为一拍共三拍。1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5 的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。

那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms 。如果我们以一拍的时长为400ms 为例,则当以四分音符为一节拍时,四分音符的时长就为400ms,八分音符(即1/2拍)的时长就为200ms,十六分音符(1/4拍)的时长就为100ms。只要设定延迟时间就可求得节拍的时间。假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数。

2.若知道了一首歌曲的每分钟的节拍数,也可求出每一节拍的时间。以每分钟94拍为例:

关于音符长短的知识:

在简谱中,1、2、3、4、5、6、7这七个基本音符,不仅表示音的高低,而且还是表示时值长短的基本单位,称为四分音符,其他音符均是在四分音符的基础上,用加记短横线"-"和附点"·"表示。

1.单纯音符

在简谱中,如果音符时值的长短用短横线" -"表示,就称为单纯音符。单纯音符除四分音符外,有以下两种形式:

⑴ 在基本音符右侧加记一条短横线,表示增长一个四分音符的时值。这类加记在音符右侧、使音符时值增长的短横线,称为增时线。增时线越多,音符的时值越长。

⑵ 在基本音符下方加记一条短横线,表示缩短原音符时值的一半。这类加记在音符下方、使音符时值缩短的短横线,称为减时线。减时线越多,音符的时值越短。

单纯音符的名称以全音符为标准而定。如:全音符的二分之一称为二分音符,全音符的四分之一称为四分音符,其余类推。

常见的单纯音符的名称、写法及时值长短列表如下:

2.附点音符

在简谱中,加记在单纯音符的右侧的.使音符时值增长的小圆点·,称为附点.加记附点的音符称为附点音符。

附点本身并无一定的长短,其长短由前面的单纯音符来决定。附点的意义在于增长原音符时值的一半,常用于四分音符和小于四分音符的各种音符之后。例如:

附点四分音符:

附点八分音符:

附点十六分音符:

在简谱中,大于四分音符的单纯音符通常不加记附点,而用增时线来表示。例如;

附点二分音符:不用表示。

带有两个附点的单纯音符称为复附点音符,第二个附点表示增长第一个附点时值的一半,即音符时值的四分之-。例如:

复附点常用于器乐曲中,在歌曲中很少使用。

通过上面关于一个音符音调和节拍的确定方法,我们就可以在单片机上实现演奏音乐了。具体的实现方法为:将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,将他们做成数据表格,存放在存储器中,通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数……,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。另外,对于乐曲中的休止符,一般用00H表示,乐曲结束音符用FFH来表示。

说到这里看看你能不能够看懂简谱了呢,来对照着简谱看看

为了方便编程下面再来看看编码吧

do re mi fa so la si分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。以0xff作为曲谱的结束标志。

举例1:音调do,发音长度为两拍,即二分音符,将其编码为0x18。

举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22

歌曲播放的设计。先将歌曲的简谱进行编码,储存在一个数据类型为unsigned char的数组中。程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。

简谱对应的音调简码、节拍简码

发音音调音调简码节拍数音符长度节拍简码停顿0 0 中音DO 1 1 1/4拍十六分音符 1 中音RE 2 2 1/2拍八分音符 2 中音MI 3 3 3/4拍 3 中音FA 4 4 1拍四分音符 4 中音SO 5 5 5/4拍1又1/4拍全分音符 5 中音LA 6 6 6/4拍1又1/2拍 6 中音SI 7 7 8/4拍2拍二分音符8 高音DO 1 8 10/4拍2又1/2拍 A 高音RE 2 9 12/4拍3拍 C 高音MI 3 A 15/4拍3又3/4拍 E 高音FA 4 B 4拍全分音符 F 高音SO 5 C

高音LA 6 D

高音SI 7 E

结束 F

例子:

#include

#define uchar unsigned char

#define uint unsigned int

sbit buzzer=P3^7;//蜂鸣器连续的IO口

uchar timeH,timeL,i;

//---------------------------简谱---------------------------------------

//编程规则:

//字节高四位是音调(1-7代表中央C调,8-E代表高八度,0代表停顿),

//低四位是节拍

//最后的FF是结束标志

uchar code xiaoPingGuo[] = { //小苹果简谱

0x62, 0x62, 0x62, 0x31, 0x81, 0x82, 0x72, 0x62, 0x32, 0x01, 0xa2, 0x92, 0x82, 0x62, 0x52, 0x64, 0x01,

0xc2, 0xa2, 0x92, 0x81, 0x91, 0x92, 0xa2, 0x92, 0x52,

0x62, 0xa2, 0x92, 0x82, 0x82, 0x52, 0x62,

0x62, 0x61, 0x71, 0x82, 0x92, 0xc2, 0xb2, 0xa2, 0x82,

0x82, 0x32, 0x52, 0x62, 0x02, 0x52, 0x64,

0xa2, 0x92, 0x82, 0x61, 0x91, 0x92, 0x82, 0x62, 0x32,

0x52, 0xa2, 0x92, 0x82, 0x82, 0xc2, 0x64, 0x08,//前奏

0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x64,

//我种下一颗种子

0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x54,

//终于长出了果实

0x52, 0x52, 0x52, 0x52, 0x52, 0x62, 0x52, 0x62, 0x6f, //今天是个伟大日子

0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x64,

//摘下星星送给你

0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x54,

//拽下月亮送给你

0x52, 0x52, 0x52, 0x52, 0x52, 0x62, 0x52, 0x62, 0x6f, //让太阳每天为你升起

0x62, 0x62, 0x62, 0x72, 0x82, 0xa2, 0x92, 0x82,

//变成蜡烛燃烧自己

0x72, 0x62, 0x72, 0x62, 0x78,

//只为照亮你

0x52, 0x52, 0x52, 0x62, 0x72, 0x92, 0x82, 0x72,

//把我一切都献给你

0x62, 0x52, 0x62, 0x52, 0x68,

//只要你欢喜

0x62, 0x62, 0x62, 0x72, 0x82, 0xa2, 0x92, 0x82,

//你让我每个明天都

0x72, 0x62, 0x72, 0x62, 0x78,

//变得有意义

0x52, 0x52, 0x52, 0x62, 0x72, 0x92, 0x82, 0x72,

//生命虽短爱你永远

0x14, 0x14, 0x14, 0x14,

//不离不弃

0xa4, 0x84, 0x94, 0x64,

//你是我的

0xa2, 0x92, 0x82, 0x92, 0x68,

//小呀小苹果儿

0xa4, 0x84, 0x94, 0x94,

//怎么爱你

0xc2, 0xa2, 0x74, 0x84, 0x82, 0x72,

//都不嫌多,红红

0x64, 0x72, 0x82, 0x94, 0x54,

//的小脸儿温暖

0xd2, 0xc2, 0xa4, 0xa4, 0xa2, 0x92,

//我的心窝

0x84, 0x92, 0xa2, 0x92, 0xa2, 0x92, 0xc2, 0xcf,

//点亮我生命的火火火火火

0xa4, 0x84, 0x94, 0x64,

//你是我的

0xa2, 0x92, 0x82, 0x92, 0x68,

//小呀小苹果儿

0xa4, 0x84, 0x94, 0x92, 0x92,

//就像天边

0xc2, 0xa2, 0x74, 0x84, 0x82, 0x72,

//最美的云朵

0x64, 0x72, 0x82, 0x94, 0x54,

//春天又来到了

0xd2, 0xc2, 0xa4, 0xa4, 0xa2, 0x92,

//花开满山坡

0x84, 0x92, 0xa2, 0x94, 0x52,

//种下希望

0x64, 0x62, 0x82, 0x68,

//就会收获

0xa2, 0xd1, 0xd1, 0xc2, 0xd2, 0xc2, 0xd2, 0x82, 0xd2, 0xa2, 0xd1, 0xd1, 0xc2, 0xd2, 0x82, 0xe2, 0x82, 0xd2, 0xa2, 0xd1, 0xd1, 0xc2, 0xd2, 0xc2, 0xd2, 0xc2, 0xd2, 0xa2, 0xd1, 0xd1, 0xc2, 0xd2, 0x82, 0xe2, 0x82, 0xd2, 0xc2, 0xa2, 0x74, 0x84, 0x82, 0x72,

0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x64,

//从不觉得你讨厌

0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x54,

//你的一切都喜欢

0x52, 0x52, 0x52, 0x52, 0x52, 0x62, 0x52, 0x62, 0x6f,

//有你的每天都新鲜

0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x64,

//有你阳光更灿烂

0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x54,

//有你黑夜不黑暗

0x52, 0x52, 0x52, 0x52, 0x52, 0x62, 0x52, 0x62, 0x6f,

//你是白云我是蓝天

0x62, 0x62, 0x62, 0x72, 0x82, 0xa2, 0x92, 0x82,

//春天和你漫步在

0x72, 0x62, 0x72, 0x62, 0x78,

//盛开的花丛间

0x52, 0x52, 0x52, 0x62, 0x72, 0x92, 0x82, 0x72,

//夏天夜晚陪你一起

0x62, 0x52, 0x62, 0x52, 0x68,

//看星星眨眼

0x62, 0x62, 0x62, 0x72, 0x82, 0xa2, 0x92, 0x82,

//秋天黄昏与你徜徉

0x72, 0x62, 0x72, 0x62, 0x78,

//在金色麦田

0x52, 0x52, 0x52, 0x62, 0x72, 0x92, 0x82, 0x72,

//冬天雪花飞舞有你

0x14, 0x14, 0x14, 0x14,

//更加温暖

0xa2, 0xd1, 0xd1, 0xc2, 0xd2, 0xc2, 0xd2, 0x82, 0xd2, 0xa2, 0xd1, 0xd1, 0xc2, 0xd2, 0x82, 0xe2, 0x82, 0xd2, 0xa2, 0xd1, 0xd1, 0xc2, 0xd2, 0xc2, 0xd2, 0xc2, 0xd2, 0xa2, 0xd1, 0xd1, 0xc2, 0xd2, 0x82, 0xe2, 0x82, 0xd2, 0xc2, 0xa2, 0x74, 0x84, 0x82, 0x72,

0xa4, 0x84, 0x94, 0x64,

//你是我的

0xa2, 0x92, 0x82, 0x92, 0x68,

//小呀小苹果儿

0xa4, 0x84, 0x94, 0x94,

//怎么爱你

0xc2, 0xa2, 0x74, 0x84, 0x82, 0x72,

//都不嫌多,红红

0x64, 0x72, 0x82, 0x94, 0x54,

//的小脸儿温暖

0xd2, 0xc2, 0xa4, 0xa4, 0xa2, 0x92,

//我的心窝

0x84, 0x92, 0xa2, 0x92, 0xa2, 0x92, 0xc2, 0xcf,

//点亮我生命的火火火火火

0xa4, 0x84, 0x94, 0x64,

//你是我的

0xa2, 0x92, 0x82, 0x92, 0x68,

//小呀小苹果儿

0xa4, 0x84, 0x94, 0x92, 0x92,

//就像天边

0xc2, 0xa2, 0x74, 0x84, 0x82, 0x72,

//最美的云朵

0x64, 0x72, 0x82, 0x94, 0x54,

//春天又来到了

0xd2, 0xc2, 0xa4, 0xa4, 0xa2, 0x92,

//花开满山坡

0x84, 0x92, 0xa2, 0x94, 0x52,

//种下希望

0x64, 0x62, 0x82, 0x68,

//就会收获

0x64, 0x72, 0x82, 0x94, 0x54,

0xd2, 0xc2, 0xa4, 0xa4, 0xa2, 0x92,

0x84, 0x92, 0xa2, 0x94, 0x52,

0x64, 0x62, 0x82, 0x68,

0xff

};

//----------------------------简谱音调对应的定时器初值--------------------------- //适合11.0592M的晶振

uchar code pinLvChuZi[]={

0xff,0xff,//占位

0xFC,0x8E,//中央C调1-7

0xFC,0xED,

0xFD,0x43,

0xFD,0x6A,

0xFD,0xB3,

0xFD,0xF3,

0xFE,0x2D,

0xFE,0x47, //高八度1-7

0xFE,0x76,

0xFE,0xA1,

0xFE,0xC7,

0xFE,0xD9,

0xFE,0xF9,

0xFF,0x16

};

void delayms(uint z); //延时1MS

void delay(uint z); //延时,十六分音符

void song(void);

void timer0Init(void);

void main(void)

{

timer0Init();

while(1)

{

song();

delayms(1000);

}

}

void timer0Init(void)

{

TMOD=0x01;//定时器0工作在方式1

TH0=0;

TL0=0;

ET0=1;

EA=1;//开总中断

}

void song(void)

{

uint temp;

uchar yinDiao;//yinDiao是简谱

i=0;

while(1)

{

temp=xiaoPingGuo[i];

if(temp==0xff)

{ break;}

yinDiao=temp/16; //取数的高4位

if(yinDiao!=0)

{

timeH=pinLvChuZi[yinDiao*2]; //取频率初值

timeL=pinLvChuZi[yinDiao*2+1];

}

else

{

TR0=0;

buzzer=1;//关蜂鸣器

}

delay(temp%16); //取数的低4位

TR0=0; //唱完一个音停10MS

buzzer=1;

delayms(10);

TR0=1;

i++;

}

TR0=0;

buzzer=1;

void delay(uint z) //延时,十六分音符

{ uint x,y;

for(x=z;x>0;x--)

for(y=11000;y>0;y--);

}

void delayms(uint z) //延时1MS

{ uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void timer0() interrupt 1 //产生各种音调

{

TH0=timeH;

TL0=timeL;

buzzer=~buzzer;

}

再附上一个可以变音调的演奏音乐的程序

实验程序

/* =========================================================== */ /* ----------------------------------------------------------- */

/* 曲谱存贮格式uchar code 数组名{音高,音长,音高,音长....} */

/* 音高由三位数字组成:*/

/* 个位是表示1~7 这七个音符. */

/* 十位是表示音符所在的音区,1-低音,2-中音,3-高音;*/

/* 百位表示这个音符是否要升半音0(不写)-不升,1-升半音。*/

/* 音长最多由三位数字组成:*/

/* 个位表示音符的时值,其对应关系是:*/

/* 数值(n) 0 1 2 3 4 5 6 */

/* --------------------------------------------- */

/* 几分音符1 2 4 8 16 32 64 */

/* 即:音符=2^n ,这样做的目的是为了节省曲谱的存贮空间。*/

/* 十位表示音符的演奏效果(0-2),0-普通,1-连音,2-顿音。*/

/* 百位是符点位,0(不写)-无符点,1-有符点。*/

/* ----------------------------------------------------------- */

/* 调用演奏子程序的方法为:*/

/* play(乐曲数组名,调号,升降八度,演奏速度,开始指针,结束指针) */

/* 调号(0-11)是指乐曲升多少个半音演奏;升降八度(1-3)是指在演奏*/ /* 在哪个八度演奏: 1-降八度,2-不升不降,3-升八度.开始指针(0- ) */

/* 是从哪个音符开始演奏,结束指针是演奏到哪个音符为止. */

/* ----------------------------------------------------------- */

//本程序用T0 来产生音调,用T1 产生音长

#include

#define uchar unsigned char

#define yx 4/5 /* 定义普通音符演奏的长度分率*/

#define plen 2 /* 定义晶振的时钟周期(us) */

#define uchar unsigned char

#define uint unsigned int

sbit speaker=P3^5;

/* ------------------下面是曲谱------------------------------ */

uchar code sound[100]=

{25,2,23,3,25,3,31,1,26,2,31,3,26,3,25,1,25,2,21,3,22,3,23,2,22,3,21,3,22,0, 25,2,23,3,25,3,31,102,27,3,26,2,31,2,25,1,25,2,22,3,23,3,24,102,17,3, 21,0};

uchar tc0,tc1,sc0,sc1; /* 音长和音符两个计数器初值暂存*/

void play(sound,dh,sj,speed,point1,point2)

uchar code sound[]; /* 接受乐曲数组的地址*/

uchar speed,sj,dh; /* 速度、八度、调号*/

uint point1,point2; /* 乐曲开始、结束指针*/

{

uint code fftab[12]={262,277,294,311,330,349,369,392,415,440,466,494}; /* 频率表*/ uchar code stab[7]={0,2,4,5,7,9,11}; /* 1~7 在频率表中的位置*/

uchar code ltab[7]={1,2,4,8,16,32,64};

uchar tl,ts,sl,sm,sh,slen,xg,ii,fd;

uint point,hz,tc,sc,len,len0,len1,len2,len4,i,ftab[12];

speaker=1;

for(i=0;i<12;i++) /* 根据调号及升降八度来计算音符频率*/

{

ii=i+dh;

if(ii>11)

{

ii=ii-12;

ftab[i]=fftab[ii]*2;

}

else

ftab[i]=fftab[ii];

if(sj==1) ftab[i]>>=2;

if(sj==3) ftab[i]<<=2;

}

point=point1;

ts=sound[point];

tl=sound[point+1]; /* 读出第一个音符和它时时值*/

tc=65535-10000/plen; /* 算出10ms 的初装值*/

tc0=tc%256; /* 计算TL1 应装入的初值*/

tc1=tc/256; /* 计算TH1 应装入的初值*/

len0=12000/speed; /* 算出1 分音符的长度(几个10ms) */ len4=len0/4; /* 算出4 分音符的长度*/

len4=len4-len4*yx; /* 普通音最长间隔标准*/

TMOD=0x11;

TH1=tc1; TL1=tc0;

ET0=1; EA=1;

TR0=0; TR1=1;

while(point<=point2)

{

sl=ts%10; /* 计算出音符*/

sh=ts/100; /* 计算出是否升半*/

sm=ts/10%10; /* 计算出高低音*/

hz=ftab[stab[sl-1]+sh]; /* 查出对应音符的频率*/

if(sl!=0)

{

if (sm==1) hz>>=2; /* 若是低音*/

if (sm==3) hz<<=2; /* 若是高音*/

sc=(50000/hz)*10/plen; /* 计算脉冲个数*/

sc=65536-sc; /* 计算计数器初值*/

sc0=sc%256; /* 算出TL0 应装初值*/

sc1=sc/256; /* 算出TH0 应装初值*/

TH0=sc1; /* 装入初值*/

TL0=sc0+12; /* 加12 是对中断延时的补偿*/

}

slen=ltab[tl%10]; /* 算出是几分音符*/

xg=tl/10%10; /* 算出音符类型(0 普通1 连音2 顿音) */ fd=tl/100;

len=len0/slen; /* 算出连音音符演奏的长度(多少个10ms)*/ if (fd==1) len=len+len/2;

if(xg!=1)

if(xg==0) /* 算出普通音符的演奏长度*/

if (slen<=4)

len1=len-len4;

else

len1=len*yx;

else

len1=len/2; /* 算出顿音的演奏长度*/

else

len1=len;

if(sl==0) len1=0;

len2=len-len1; /* 算出不发音的长度*/ if (sl!=0)

{

TR0=1;

for(i=len1;i>0;i--) /* 发规定长度的音*/ {

while(TF1==0);

TH1=tc1; TL1=tc0;

TF1=0;

}

}

if(len2!=0)

{

TR0=0; speaker=1;

for(i=len2;i>0;i--) /* 音符间的间隔*/ {

while(TF1==0);

TH1=tc1; TL1=tc0;

TF1=0;

}

}

point+=2; /* 音符指针下移*/

ts=sound[point]; tl=sound[point+1]; /* 读出下一个音符和它时时值*/ }

}

void yin() interrupt 1 /* 音符发生程序(中断服务程序)*/

{

speaker=~speaker;

TH0=sc1; TL0=sc0;

}

//==============================================

main()

{

while(1)

{

play(sound,0,2,60,0,57);

play(sound,0,1,60,0,57);

play(sound,0,3,60,0,57);

play(sound,0,2,40,0,57);

play(sound,5,2,60,0,57);

play(sound,0,2,80,0,57);

}

}

基于单片机的音乐播放器

基于单片机的音乐播放器 摘要 单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。 基于单片机的音乐播放器可应用于MP3、MP4,扩音器等很多方面,并可作为很多系统的辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括"Do"、"Re"、"Me"--等音阶在内的各种频率声音。将各个音阶连接在一起,便可组成一支曲子或是演奏一段旋律。基于这个思想,采用AT89C52单片机设计了一款特殊的"音乐播放器",本播放器可实现播放、暂停、复位等功能。 关键字:单片机;集成电路:89C52芯片;音乐播放器

Abstract Single Chip Microcomputer is an integrated circuit chip, VLSI technology is the use of having the data processing capabilities of the CPU random access memory RAM, read-only memory ROM, a variety of I / O port and interrupt system, the timer / counter functions (may also include a display driving circuit, the pulse width modulation circuit, an analog multiplexer, A / D converter circuit, etc.) are integrated into a small sound system on a microcomputer composed of silicon. Microcontroller-based music player can be used in many ways mp3, MP4, loudspeakers, etc., and as a secondary function of many systems, as one of the important microcontroller hardware resources, using the timer can generate a variety of fixed frequency square wave signal can be generated include the "Do", "Re", "Me" - like various frequencies including the sound scale. The various scales together, may form a song or play a melody. Based on this idea, using AT89C52 designed a special "Music Player", the player can be realized play, pause, reset and other functions. Keyword:Single Chip Microcomputer;integrated circuit;89C52 chip;Music Player

简单音乐发生器

潍坊学院 单片机原理与应用课程 设计说明书 题目: 系部:信息与控制工程学院 专业: 班级: 学生姓名: 学号: 指导教师:王文成 2009年12月15日

目录 1 设计任务与要求 (1) 2设计方案 (1) 2.1 音乐相关知识 (1) 2.2如何用单片机产生音频脉冲 (2) 2.3如何用单片机实现音乐的节拍 (3) 2.4音频功放 (4) 3 硬件设计 (4) 3.1结构框图 (4) 3.2主要器件 (5) 3.3 电路原理图及说明 (6) 4 软件设计 (6) 5 小结 (15) 主要参考文献 (16)

单片机实现简单音乐发生器 1 设计任务与要求 本例将实现一种由单片机控制的简单音乐发生器,它具有16个音的键盘,我们可以根据乐谱在键盘上进行演奏,通过扬声器将音乐播放出来。 本次课程设计的任务是,设计一种由单片机控制的简单音乐发生器,要求键盘有16个键,能过用51单片机C语言编写程序来实现音乐发生器的发音。 要求:1.设计思路切明确; 2.对各个芯片的功能要有所了解; 3.对设计中的各个电路图能够要有所说明;。 4.对设计的、中的源程序要有所注释。 5.在按音乐发生器的16个键的同时能够听到不同的音乐。 2设计方案 进行本例的设计之前,首先需要了解音乐的一些相关知识。 2.1 音乐相关知识 在人类还没有产生语言时,就已经知道利用声音的高低、强弱来表达自己的思想和感情。声带、琴眩等物体震动时会发出声波,声波通过空气传播进入人耳,人们就听到了声音。声音有噪音和乐音之分,振动由规律的声音是乐音,如人声带发出的歌声、由琴眩发出的琴音等。音乐中所有的声音主要是乐音。 乐音听起来有的高,有的低,这就叫音高。音高是由发音物体震动频率的高低决定的,频率高声音就高,频率低声音就低。比如,女人唱歌时声带频率振动高,男人唱歌时声带振动频率低,所以男生比女生低。 音乐中所有音乐的范围从每秒中振动16次的最低到每秒中振动4186次的最高音,大约97个。现在最大的钢琴可以奏出其中的88音,是音乐范围最大的乐器,人唱歌时因受生理限制,所能唱出的乐音仅是乐音范围的一小部分。 不同音高的乐音是用C,D,E,F,G,A,G来表示的,这7个字母就是乐音的音名,

(完整版)基于51单片机的电子八音盒详细设计步骤

一、设计目的 利用8052单片机结合内部定时器设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。 二、设计要求 其基本功能为:1,使用LED显示器来显示目前演奏的歌曲编号;2,具有8个按键操作来选择演奏哪一首歌曲;3,内建8首歌曲旋律,按下单键可以演奏歌曲。 三、设计器材 T89C52单片机、晶振、八个按键、二位一体共阳极数码管、电阻电容若干、导线。 四、设计方案及分析 设计思路: (1)选择8052单片机,通过T0定时中断,并配合P2.0引脚输出音频频率。 (2)P2.0引脚输出接蜂鸣器。 (3)通过P0口接LED。 (4)P1口接键盘,输入歌曲号。 音符产生方法: 不同的音调有不同的频率。频率不同,音调也就不同。 利用定时器,使其工作在模式1,定时中断,然后控制P2.0引脚的输出每次取反,就可以在P2.0的引脚输出相应的方波频率。改变计数初值,就改变了频率。定时器的定时时间等于半个周期,定时时间到就输出脉冲取反,重复此过程,就可在P2.0引脚得到一音频的脉冲。 如:中音1的频率=523HZ,周期T=1/523=1912us; 定时器的定时时间为:T/2=1912/2us=956us; 计算得TH0,TL0的计数初值THTL=64580 下面是个音符计数初值

节拍产生方法: 音乐中的节拍用延时时间产生。假设1/4拍执行一次延时程序,这1/2拍就执行两次延时程序,所以只要求出1/4延时时间,其余的节拍就是他的倍数。为方便记谱,将节拍数也进行编码,如下: 建立曲谱编码表: 编谱用8位编码,高4位代表音符,低4位代表节拍。如5 6中音5,中音6,都是1/2拍,则编码为:82H 92H 程序清单: #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long sbit SPEAK = P2^0;//接蜂鸣器管脚 uchar th0_f; uchar tl0_f;

基于89c51单片机控制的LED音乐彩灯控制器的设计说明

基于89c51单片机控制的LED音乐彩灯控制器的设计 随着人们对房屋的装饰需要彩灯,在许多城市可以看到彩色霓虹灯。LED彩灯由于其丰富的灯光色彩,便宜的造价以及简单等特点而得到了广泛的应用,用彩灯来装饰街道和城市建础物已经成为一种时尚。但目前市场上各种各样的LED彩灯控制器大多数用全硬件电路实现,电路结构复杂、电路复杂、功率损耗大等缺点。此外从功能效果上看,亮灯模式少而且样式单调,缺乏用户可操作性…… 本方案提出一种基于8951单片机的彩灯控制方案,实现对LED 彩灯的控制。本方案以8951单片机作为主控核心,在主控模块上设有3个按键和8个LED显示灯,根据需要可以编写若干种亮灯模式,利用其部定时器T0实现一个基本单位时间为1ms的定时中断,根据各种亮灯时间的不同需要,在不同时刻输出灯亮或灯灭的控制信号,然后驱动各种颜色的灯亮或灭。与普通LED彩灯相比,具有体积小、价格低、功耗低等优点。 2系统功能 LED彩灯用软件控制硬件的方式来控制彩灯闪烁,即彩灯控制器和管LED模块。彩灯采用8951提供+5V电压工作,经过电源变换,输出直流工作电压,一方面为管LED模块提供+5V工作电源,另一方面为主控模块单片机系统彩灯控制器提供5V工作电源。整个系统工作由软件程序控制运行,根据需要用户可以在LED彩灯工作时通过主控模块上的按键来设定亮灯时间和灯光闪动频率。 上电后系统经过初始化,查询是否有功能切换键按下:有,则进入设定模式状态;无,则进入默认工作状态。在设定模式状态下,可以根据个人爱好及不同场合的需要来指定调用哪种模式,并且可以改变每种模式的时间T1、频率F1参数,在工作状态下,LED彩灯控制器按照程序设定好的若干亮灯花样模式程序顺序调用往下走,开始工作,依次8个等亮完为一个亮灯周期,然后再回主循环继续工作,同样如果想进入其它设定模式状态,只需按下功能切换键即可。整个3种亮灯模式时间可以看作一个大周期T,对于每一个模式编写一个独立工作子程序,其中设定了从左到右点亮LED,从右到左点亮LED,还有自己定义的LED点亮方式。 因此在LED彩灯上电工作后,可以方便地通过主控模块上的显示器指定LED彩灯当前工作模块,工作时间Ti,频率Fi等实时参数。若实际应用需要根据不同场合和时间来改变彩灯闪亮效果,可以通过主控模块上的按键来设定LED不同的闪烁频率Fi和亮灯时间Ti,以便符合实际需要。此外如果对某一种模式感兴趣需要仔细观看该种亮灯模式,可以让程序循环。 硬件设计 LED彩灯系统包括,即LED彩灯控制器(8951主控模块),LED彩灯在8951外部接一个震荡时钟频率。用8951的控制器,具有按键、显示等功能,并利用8951的P0口的8个输出端上面焊有8个LED彩灯,使用彩灯在软件的控制下工作。 主控模块电路设计 主控模块电路如图1所示。主控模块主要设计器件有89C51,8个LED显示器,3个开关按键,1个稳压器(5V电压),1个外部晶振振荡器信号输出驱动,4个电阻。通过软件设计,使单片机P0口作为三色LED驱动信号输出口及移位时钟CLOCK信号,8951的P0为LED 的输出口。 软件设计 LED彩灯控制器最大特点在于所有亮灯模式均由软件控制完成。系统中软件可以分为主程序和中断服务子程序。上电后在按键控制灯的闪烁方式,通过软件来控制循环,以一个单位实际1ms的T0定时为中断服务子程序。在这个1ms的T0定时基础上,可以根据需要来确定各种模式工作时间Ti,以及确定在各种亮灯点亮和熄灭各种状态LED灯等。整个系统软

单片机音频发生器程序设计

实验三单片机音频发生器程序设计 实验目的 1、进一步掌握单片机定时器的用法。 2、了解用单片机的IO口输出方波的方法。 3、理解用单片机产生简单音频的方法。 实验仪器 单片机开发板、万利仿真机、稳压电源、计算机 实验原理 1、单片机IO口产生音频脉冲的原理 我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或“低”电平,则在该口线上就能产生一定频率的方波,接上喇叭就能发出一定频率的声音,若通过程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。喇叭驱动电路如图4-13所示。 图4-13 喇叭驱动电路 例如,要产生中音1。从下表可知,中音1的频率为523Hz,周期T=1/523=1912μs,其半周期为1912/2=956μs,因此只要在SPEAKER接口上产生半周期为956μs的方波,即可听到持续的1音。C调部分音符频率与计数初值的对应表如下: 表4-1 C调部分音符频率、计数初值与设置简谱码的对应关系 注:上表定时器工作于模式1 2、音乐节拍的生成 要唱出一首歌,只产生出音频脉冲还不够,还要考虑发出音频时间的长短(即节拍)。

如果一拍为0.4秒,则1/4拍是0.1秒,只要设定延迟时间就可获得节拍的时间。我们也可以设1/8拍为1个延迟单位时间,则1拍应该是8个延迟单位时间,以此类推,所以,只要求得1/8拍的DELAY时间,其余的节拍就是它的倍数。详见下表 表4-2 节拍与节拍码对照表 3、简谱发生器程序设计 由前面的分析可知,音符频率有14种,节拍有10种,我们定义每个音节占用一个字节,字节的低4位代表音符的频率,高4位表示该音符的节拍。定义一个音符频率表、一个音符节拍表。程序首先读取一个音节,并从音符频率表和节拍表中读取音符频率所对应的定时器初始和节拍对应的延时参数。利用单片机内部定时器0、1分别产生频率和节拍。定时器0的初始值由音符的频率决定,定时器1的初始值是50ms对应的值。每当一个音符输出完成就取出下一个音符,直到取出的是0FFH。代表所有音符全部输出完成。程序停止或重新开始。程序流程图如图4-14所示。 图4-14 实验内容 1、在单片机P1.2口产生下列频率方波 1KHz,2KHz,5KHz,10KHz,学号后两位*100 2、在P1.2口产生简谱对应频率方波(简谱频率如上文) 3、在P1.2口播放简谱音乐。

基于51单片机数字音乐盒的设计

单片机实物设计 题目: 单片机音乐盒设计 班级: K0312416-17 姓名:湛俊朱斌杨裕庆 学号:K031241705 K031241632 K031241737

摘要 本设计是一个基于STC89C51RC系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。本音乐盒共有四首歌曲,用4个按键控制。播放歌曲时,蜂鸣器发出某个音调。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS 仿真软件对硬件进行仿真调试,节约了设计时间。 【关键词】STC89C51RC 按键蜂鸣器 LCD1602液晶

目录 前言 ................................................................................................................................. 第一章工作原理 .............................................................................................................. 1.1设计目标 ............................................................................................................... 第二章软件设计与分析................................................................................................... 2.1 软件设计的组成................................................................................................... 2.2 各部分软件分析 ................................................................................................. 2.2.1 延时165MS,即十六分音符子函数 .......................................................... 2.2.2 延时1MS子函数...................................................................................... 2.2.3 定时器0中断子函数 .............................................................................. 2.2.4 播放音乐子函数...................................................................................... 2.5 定时器1中断子函数.................................................................................. 2.6 按键扫描子函数 ......................................................................................... 2.2.7 主函数..................................................................................................... 2.3 总源程序 ............................................................................................................ 第三章软件仿真 .............................................................................................................. 3.仿真图...................................................................................................................... 3.1 元件清单 ............................................................................................................... 总结 ..................................................................................................................................... 参考文献..............................................................................................................................

基于单片机的简单电子琴毕业设计

基于单片机的简单电 子琴毕业设计 目录 1引言 (1) 2 总体设计 (2) 2.1 设计目的与要求 (2) 2.2 电子琴系统的组成 (2) 2.3 系统设计框图 (3) 3 详细设计 (4) 3.1 硬件设计 (4) 3.2 硬件简介 (5) 3.2.1 AT89C51简介 (5) 3.2.2 LED数码管 (10) 3.3整体程序处理流程图设计 (11) 3.4矩阵式键盘的识别和显示与设计 (12) 3.4.1矩阵式键盘的结构与工作原理 (12) 3.4.2矩阵式键盘的按键识别方法 (13) 3.4.3键盘接口必须具有的4个基本功能 (15) 3.5音乐播放设计 (16) 3.5.1音乐发声原理 (16) 3.5.2音乐播放流程图 (18) 3.5.3放歌子程序流程图 (18) 4实现联调 (20) 4.1 Proteus 简介 (20) 4.2 keil 简介 (20) 4.3利用keil与Proteus进行的调试 (21) 5 总结与展望 (23)

参考文献 (25) Abstract: (26) 致谢 (27) 附录A:程序设计 (28) 附录B 印制电路板(PCB)设计 (34)

基于单片机的简单电子琴设计 摘要:电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文主要对使用单片机设计简易电子琴进行了分析与设计,并介绍了基于单片机电子琴的系统硬件组成。该文设计是一种基于AT89C51的简单音乐发生器,利用单片机技术、键盘和一组发光二极、SPEARK等实现原理图设计,并用C51语言进行键盘识别程序设计和音频脉冲输出程序的设计。经过软件和硬件的联调,并仿真出来。该音乐发生器不仅能通过键盘弹奏出来简单的乐曲,而且不弹奏时按播放键可以播放置音乐,音调和节拍都由单片机控制实现。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。 关键词:单片机;键盘;扬声器;电子琴

基于单片机的自动音乐播放器的方案设计书

The design of automatic music player based on monolithic integrated circuit Abstract In order to facilitate people's daily life, optimizes schools', institutions' timing system, used has designed one kind of automatic music player which based on monolithic integrated circuit. This design fixed time and counts the function using monolithic integrated circuit 89C58RD+, completes the time the demonstration and fixed time the function. And, Through hypothesis starting value of timer, product the different frequency sound. Severs using the timer completesthe control of music metre length.Through LM386N1 audio power amplifier, enlarges signal which the monolithic integrated circuit outputs,then broadcast music from loudspeaker. Through MAX232 chip,can transform PC machine on the voltage and the monolithic integrated circuit supply voltage.And then,turns on the computer though String mouth,then it can download procedure which compiles with the C language to monolithic integrated circuit from computer.At last,it can demonstrates the time on the digital tube.When time to after fixed time, the loudspeaker automatically broadcasts section of continual musics. This design get rid of the traditional alarm clock's grating sound, displaces is the wonderful music,can provides the accurate time for people's daily life.The design cost very inexpensive,it is worth promoting. Audio 。 Automatic music broadcast。Monolithic integrated circuit: Key word frequency transformation。 Time demonstration。 LM386N1 audio power amplifier 目录 论文总页数:页 引言 (1) 1 设计任务 (2) 2 软件设计 2.1 音乐编程原理及流程图 ............................................... 2.1.1 声音的产生 ...................................................... 2.1.2 音频转换原理 .................................................... 2.1.3 音频转换流程图 .............................................. 2.2 时间显示程序设计.............................................. 2.2.1 时间显示模块.............................................. 2.2.2 时钟流程图 .............................................. 3 硬件电路的设计 (2) 3.1 硬件流程模块(此节作为第1节---后面几节就围绕它来写,并且要写“连贯”) 3.2 主要模块电路的设计.......................... 3.2.1 89C58RD+型单片机介绍.........................................

基于51单片机两种音乐编码的比较及用法

基于51单片机的两种音乐编码方法的比较及用法 (建议对这方面有兴趣的朋友们要先看懂了解音乐简谱,包括高音、中音、低音,节拍、延时,及各个音调的频率,网上有很多资料) 1方法:用51单片机音乐编码器软件(Music encode) 输出十六进制数表示: 曲谱存贮格式unsigned char code MusicName{音高,音长,音高,音长...., 0,0}; 末尾:0,0 表示结束(Important) (其实软件“关于”里的源代码有使用方法的介绍) 音高由三位数字组成: 个位是表示1~7 这七个音符 十位是表示音符所在的音区:1-低音,2-中音,3-高音; 百位表示这个音符是否要升半音: 0-不升,1-升半音。 音长最多由三位数字组成: 个位表示音符的时值,其对应关系是: |数值(n): |0 |1 |2 |3 | 4 | 5 | 6 |几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n 十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音 百位是符点位: 0-无符点,1-有符点 2方法:编码为十六进制(高四位表示音调编码,低四位表示节拍编码)(各音调频率及初值计算定时器初值网上有,在此不叙说) do re mi fa so la si分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。 如0x24,表示低音LA、1拍。以此类推 表4.4简谱对应的简谱码、T值、节拍数 简谱发音简谱码T值节拍码节拍数 5 低音SO 1 64260 1 1/4拍 6 低音LA 2 64400 2 2/4拍 7 低音TI 3 64524 3 3/4拍 1 中音DO 4 64580 4 1拍 2 中音RE 5 64684 5 1又1/4拍 3 中音MI 6 64777 6 1又1/2拍 4 中音FA 7 64820 8 2拍 5 中音SO 8 64898 A 2又1/2拍 6 中音LA 9 64968 C 3拍 7 中音TI A 65030 F 3又3/4拍 1 高音DO B 65058 2 高音RE C 65110 3 高音MI D 65157 4 高音FA E 65178 5 高音SO F 65217

基于51单片机的音乐播放器设计

题目:音乐播放器 课程设计(论文)任务书

摘要 随着电子技术的发展和计算机越来越普遍的使用,单片机作为这两项技术的有机结合也得到了广泛的应用,在某些领域具有不可替代的作用。音乐播放功能随处都会用到,如,在开发儿童智力的玩具中,等等。目前,基于单片机实现音乐播放,其体积小、价格低、编程灵活等特点在这一领域独领风骚。 单片机的英文名称为single chip microcomputer,最早出现在20世纪70年代,国际上现在已逐渐被微控制器(Microcontroller Unit 或MCU)一词所取代。它体积小,集成度高,运算速度快,运行可靠,功耗低,价格廉,因此在数据采集、智能化仪表、通讯设备等方面得到了广泛应用。而8051单片机在小到中型应用场合很常见,已成为单片机领域的实际标准。随着硬件的发展,8051单片机系列的软件工具也有了C级编译器和实时多任务操作系统RTOS,为单片机编程使用C语言提供了便利的条件;并针对单片机常用的接口芯片编制通用的驱动函数,可针对常用的功能模块,算法等编制相应的函数;C语言模块化程序结构特点,可以使程序模块大家共享,不断丰富,这样就使得单片机的的程序设计更简单可靠,实时性强,效率高。作为测控技术与仪器的学生,掌握8051单片机硬件基础及其相关软件操作,将其应用于现代电子产品中是必要而且重要的,这次课程设计我们的题目是用单片机实验箱系统制作音乐播放器。 本次课程设计主要内容是通过单片机C51语言进行编程,以产生乐曲音符和节拍,把乐谱翻译成计算机语言(音符转换诚成相对应的方波频率即定时器装载初值,节拍转换成相对应的延长时间),并将其预先存储到单片机里,然后根据按键调用再由单片机进行信息处理,在经过信号放大,由喇叭放出乐曲声,实现音乐播放的功能。其主要表现在可以播放十首歌曲,可以用十个数字键控制播放的歌曲,并且能在LCD液晶屏显

STC89C51单片机的数字音乐盒设计(含代码)

HEFEI UNIVERSITY FPGA综述报告 系别电子信息与电气工程系任课教师汪济洲 班级 姓名 成绩 日期

数字音乐盒设计 摘要:本设计是一个基于STC89C51系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。使用两个按键控制音乐盒,一个用来切换歌曲,另一个用来切换8路LED的变化花样,本音乐盒共有两首歌曲,花样灯花样共计4种。播放歌曲时,蜂鸣器发出某个音调,与之对应的LED亮起。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。 关键字:音乐盒 STC89C51单片机 KEIL PROTEUS 音调

目录 1概述 (3) 1.1设计方案 (3) 1.2研究内容 (3) 1.3音乐盒的功能结构图 (3) 2硬件设计 (4) 2.1总体设计框图 (4) 2.2各部分硬件设计及其原理 (4) 2.2.1 STC89C51简介 (4) 2.2.2 LED显示电路设计与原理 (5) 2.2.3 时钟振荡电路 (5) 2.3硬件电路图及功能 (6) 3软件设计 (7) 3.1音调、节拍以及编码的确定方法 (7) 4.1.1 音调的确定 (7) 4.1.2 节拍的确定 (8) 4.1.3 编码 (9) 4.2软件程序设计 (10) 4.2.1 程序流程图及相应代码块 (10) 4.2.2 程序源代码(见附录A) (14) 5调试 (14) 5.1检查硬件连接 (14) 5.2检查软件系统 (14) 5.3测试结果 (14) 5.3.1.总体运行图 (14) 5.3.2.花样灯4种花样图 (15) 参考文献 (16) 附录A 程序源代码及注释 (16)

基于单片机的音乐盒设计-毕业设计

基于单片机的音乐盒设计 学生:XXX指导老师:XXX 内容摘要:本设计是一个基于AT89C51系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能数字音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。使用两个按键控制音乐盒,一个用来切换歌曲,另一个用来切换8路LED的变化花样,本音乐盒共有两首歌曲,花样灯花样共计3种。播放歌曲时,蜂鸣器发出某个音调,与之对应的LED亮起。本设计利用KEIL 编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。 关键词:音乐盒 AT89C51 KEIL PROTEUS 音调

Design for AT89C51 digit music box Abstract:The digest this text has introduced the basic AT89C51 digit music box,According to AT89C51 principle,take it by hardware circuit and software compile to made a multifunction digit music box.this box main form button circuit rest circuit clock circuit and https://www.doczj.com/doc/7b8925815.html,e two button to control it,the one use to change music ,and the other one made the LED change the kind of light.this box had two songs,and LED had three kind of light.then the music has playing,the buzzer will take among of tone,meanwhile LED will give out light.the design on the basic of KEIL to compile and debugging this music box,at the same times match up PROTEUS to hardware going to simulation debugging,So save a lot of times. Keywords:music box AT89C51 KEIL PROTEUS Tone

51单片机实现的音乐闹钟程序代码

功能描述:产品可以显示时间和日期,时间格式为 hh mm ss 日期格式为 yy.mm.dd 时间和日期轮流显示。时间显示5S 日期显示3S。 可以设置5个闹铃,闹铃音乐可以设置两种:毛驴和童年。 三个按键对时间和闹铃进行设置,六个LED进行显示。 计时采用DS1307。继电时间不丢失,设置过的闹铃也不丢失。 闹铃音乐由单片机的两个定时器去产生频率实现。 部分程序如下: //************************************************* //************************************************ //*********************************************** //程序名:DS1307 时钟程序 //功能描述:用六个八段LED 轮流显示时间 // 和日期。有6个闹钟。上电时从DS1307中读出 // 当前时间、日期、闹钟。 // // // // // #include #include #define uchar unsigned char #define uint unsigned int #define LED P2 #define LEDBit P0 #define nop _nop_(>

#define LightCount 40 #define LightMax 80 sbit SCL=P3^1。 sbit SDA=P3^0。 sbit ModeKey=P1^0。 sbit UpKey=P1^1。 sbit DownKey=P1^2。 sbit Speak=P3^6。 code uchar LCD_NUM[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}。 //0x25, //uchar Clock[]={0x88,0x88,0x88}。 code uint Music_Sound_Long1[]={4,8,4,8,8,4,8,4,4,4, /*童年*/ 8,4,8,4,4,4,4,4,16,4, 4,8,4,4,4,4,4,8,4,4, 4,8,4,4,4,4,4,4,16,4, 4,8,4,4,4,4,4,8,4,4, 4,8,4,4,4,4,4,4,16,4, 8,4,8,4,4,4,8,8,4,4, 4,4,4,4,4,4,4,4,4,16, 4,8,4,8,8,4,8,4,4,4, 8,4,8,4,4,4,4,4,16,4, 8,4,8,8,4,8,4,4,4,8, 4,8,4,4,4,4,4,16,0}, Music_Sound_Long2[]={4,4,4,4,4,4,4,4,4,4, /*小毛驴*/ 4,4,16,4,4,4,4,4,4 ,4, 4,4,4,4,4,8,4,4,4,4, 4,4,4,4,4,4,4,4,4,16, 4,4,4,4,2,2,2,2,4,4, 4,4,4,4,16,0}, Music_Sound_Tone1[]={379,379,379,379,425,477,477,477,425,477, 568,637,637,637,568,637, 425,379,477,719, 637,63 7,719,637,568,568,506,568,568,568, 637,477,477,477,477,568,477,568,637,719, 637,637,719,637,568,568,506,568,568,568, 637,477,477,477,477,568,568,477,851,318,

51单片机蜂鸣器播放音乐代码(生日快乐 两只蝴蝶 祝你平安)

/*生日快乐歌曲*/ #include #define uint unsigned int #define uchar unsigned char sbit beep = P1^5; uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159, 212,212,106,126,159,169,190,119,119,126,159,142,159,0}; uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24, 9,3,12,12,12,12,12,9,3,12,12,12,24,0}; //延时 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } void PlayMusic() { uint i=0,j,k; while(SONG_LONG[i]!=0||SONG_TONE[i]!=0) { //播放各个音符,SONG_LONG 为拍子长度 for(j=0;j

单片机控制音乐播放-外文翻译

毕业设计(论文)外文翻译 题目: __ 单片机控制音乐播放_ __ 英文题目: Single chip microcomputer to control the music player 系 : _ 信息工程系_ __ 专业: _ _ __ 电子信息工程___ ___ 班级: ___ _ __ 09电信本________ _ 学号: ___ _____8110109053___ ______ 姓名: ________ 张亚峰 ______ _____ 指导老师: _________王乐平_________ ____ 填表日期 _ __ ___2012.11.16_____ ____

基于51单片机的音乐播放器设计 作者:Bob brown 来源:《SCM》 摘要:本音乐播放器是利用STC89C51单片机结合内部定时系统及数码管显示设计一个简易的微电脑音乐盒。本文分析了基于51单片机的音乐播放器的硬件电路和软件的设计的具体过程包括数据处理子程序的设计、显示子程序的设计最后针对仿真过程遇到的现象进行了具体的分析与说明。 关键词:播放;单片机; STC89C51 随着人们物质生活水平的提高,人们越来越注重精神生活的满足,热衷于在消费中寻求快乐和娱乐体验。音乐作为人类娱乐生活的重要组成元素,一直以来都备受关注。而人类进入工业社会以来,将音乐播放与工业产品结合发展出了一系列的音乐播放产品,并随着技术的革新和消费者需求的变化而不断更新,为人类的娱乐生活提供了时尚便利的道具。前两年造型时尚、小巧便携、可免费下载歌曲的MP3播放器的流行更是使音乐播放产品空前繁荣。但是在繁荣过后,主流音乐播放产品MP3播放器在造型和系统的设计上似乎走进了一个瓶颈,新产品和旧产品比起来只是固件上的更新和硬件的更迭,而没有内容和实质的跳跃,因此在同样具有便携性特点和音乐播放功能的音乐手机出现的时候,MP3原有的功能优势不再,市场继而被迅速挤压,地位收到空前的威胁。纵观音乐播放产品的发展史,每一次音乐播放产品的革新都是概念的突破或理念的创新的结果。如从收音机到唱片机实现了收听方式从“被动收听”到“自主选择”的变革,从唱片机到Walkman实现了固定到便携的飞跃。因此,如何在理念上、概念上进行创新和突破,找到音乐播放产品的新发展方向,适应消费者的新需求,是目前产品设计师急需解决的问题。本文首先简单回顾了音乐播放产品发展史,并分析了目前音乐播放产品现状,提出寻找新概念突破点的重要性;其次,通过对当前经济环境和社会群体环境的分析,以及目前音乐产业的发展现状和趋势的分析,从中总结出当前消费者的消费需求趋势;最后,根据总结的消费需求和市场现有的一些音乐播放产品的引导,提出未来音乐播放产品的发展方向以及相应的一些概念设想。 STC89C51单片机设计的一个音乐播放器通过单片机音乐播放器系统设计和研究,对于切实掌握单片机相关知识具有重要的理论和实际意义。这次课程设计的音乐播放器是软件和硬件的结合,不同音符表现形式就是不同频率地声音。通STC89C51过单片机产生不同的频率的脉冲信号,通过放大电路,由蜂鸣器放出,就产生了美妙和谐优美动听的乐曲。根据节拍给出该音阶持续的时间,最终实现播放简单歌曲的功能。为人们生活的改善提供了可靠,方面,廉价的方法。 单片机STC89C51作为硬件核心控制部件,结合三极管作为放大器,数码管构成典型的显示电路,按键作为输入部分以及其他外围设备组成的音乐播放系统。根据音乐演奏控制器所要实现的显示与选曲及音乐产生功能原理,系统包括演奏扬声器、选曲、播放和显示几部

相关主题
文本预览
相关文档 最新文档