基于单片机的带彩灯外观的音乐盒软件设计.docx

上传人:b****6 文档编号:13350775 上传时间:2023-06-13 格式:DOCX 页数:35 大小:383.45KB
下载 相关 举报
基于单片机的带彩灯外观的音乐盒软件设计.docx_第1页
第1页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第2页
第2页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第3页
第3页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第4页
第4页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第5页
第5页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第6页
第6页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第7页
第7页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第8页
第8页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第9页
第9页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第10页
第10页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第11页
第11页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第12页
第12页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第13页
第13页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第14页
第14页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第15页
第15页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第16页
第16页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第17页
第17页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第18页
第18页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第19页
第19页 / 共35页
基于单片机的带彩灯外观的音乐盒软件设计.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的带彩灯外观的音乐盒软件设计.docx

《基于单片机的带彩灯外观的音乐盒软件设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的带彩灯外观的音乐盒软件设计.docx(35页珍藏版)》请在冰点文库上搜索。

基于单片机的带彩灯外观的音乐盒软件设计.docx

基于单片机的带彩灯外观的音乐盒软件设计

 

CHANGZHOUINSTITUTEOFTECHNOLOGY

科研实践

题目:

音乐盒的设计

二级学院(直属学部):

延陵学院

专业:

电气工程及其自动化

班级:

10电Y3

学生姓名

学号:

指导教师姓名:

范力旻

职称:

副教授

2013年12月30日—2014年1月10日

 

目录

第一章引言…………………………………………………………………………1

1.1设计目的……………………………………………………………………1

1.2设计要求……………………………………………………………………1

第二章设计方案及原理……………………………………………………………1

2.1设计原理…………………………………………………………………1

2.2总体设计思想………………………………………………………………2

第三章系统软件设计………………………………………………………………3

3.1音调的确定方法……………………………………………………………3

3.2节拍的确定…………………………………………………………………5

3.3软件程序设计………………………………………………………………5

3.3.1程序流程图…………………………………………………………6

3.3.2主程序的设计………………………………………………………7

3.3.3子程序的设计………………………………………………………8

3.4延时程序的设计…………………………………………………………10

3.5流水灯样式…………………………………………………………………10

3.6按键去抖…………………………………………………………………11

第四章仿真及调试………………………………………………………………11第五章 总结………………………………………………………………………12附录…………………………………………………………………………………12

第一章引言

1.1设计目的

随着电子技术及计算机技术的发展,单片机在日常生活中的应用越来越广泛,同时也显现出了它的重要性,尤其在一些特殊的场合更是不可代替。

为熟悉单片机的应用。

要求设计一个基于AT89C51单片机的带彩灯外观的音乐盒。

1.2设计要求

音乐盒有三个按键key1,key2,key3,其中key1控制彩灯的样式,本设计有六种彩灯花样,每按一次变换一种样式。

Key2控制音乐播放,本设计有五首音乐,每按一次变换到下一首,同时八路LED灯随音调不同而闪烁。

Key3为总开关用于关闭音乐跟彩灯。

第二章设计方案及原理

2.1设计原理

音调之所以不同是因为频率的不同。

根据每个音调的频率单片机内部的定时计数器来产生相应的音乐脉冲。

只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O口反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。

利用AT89C51的内部定时计数器工作在方式1下,改变初值TH0及TL0以产生不同频率。

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

例如频率为523Hz,其周期T=1/523=1912us,定时时间为1912/2=956us因此只要令计数器计时956us/1us=956次(若晶振频率为6MHZ),在每次计数956次时将I/O反相,就可得到中音DO(523Hz)。

根据计数次数就可算出计数初值。

要产生音乐光有音调是不行的,每个音调还有持续一定的时间。

这可以用延时程序delay()来实现。

因此每个音乐代码有八位数字组成,高四位控制音调,低四位通过延时程序对该音调进行延时。

通过子函数连续不断的调用音乐代码就产生了动听的音乐。

音调的频率与时间都不同,让DO、RE、MI、FA、SO、LA、SI分别对应八路LED灯中的一个,这样播放音乐的同时就有LED灯对应闪烁。

2.2总体设计思想

图1总体框图

音乐盒的功能结构如下图所示,按键2负责播放暂停歌曲,按键3负责切换播放歌曲,播放歌曲5首,按键1负责切换花样

开始

按键2按键3按键1

播放暂停上一曲下一曲切换6中花样

总电路图如下

第三章系统软件设计

3.1音调确定方法

不同音高的的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字的“哆来咪发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”。

1)要产生音频脉冲,只要算出某一个音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相。

就可以在I/O脚上得到此频率的脉冲。

2)例如频率为523Hz,其周期=1/523=1912us,半周期的时间t=1912/2=956us,(12/12M)*n=956us,求出n的值为956,T=65536—956=64580。

所以在每次技术956次时将I/O反相,就可得到中音DO(523Hz)。

C调各音频频率与计数值T的对照表如下图所示。

低音

频率

初值T

中音

频率

初值T

高音

频率

T

Do

262

63628

Do

523

64580

Do

1046

65058

Re

294

63836

Re

578

64694

Re

1175

65110

Mi

330

64020

Mi

659

64777

Mi

1318

65157

Fa

349

64103

Fa

698

64820

Fa

139

65178

So

392

64260

So

784

64898

So

1568

65217

La

440

64400

La

880

64968

La

1760

65252

Si

494

64524

Si

988

65030

Si

1976

65283

3.2节拍的确定

若要构成音乐,光有音调时不够的,还需要节拍,让音乐具有旋律(固定的旋律),而且可以调节各个音的快慢度。

简单说就是打拍子,就像我们听音乐不由自主的随之拍手或跺脚。

若1拍实0.5s,则1/4拍为0.125s。

至于1拍多少秒,并没有严格的规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要悦耳就好。

音持续的时间的长短即时值,一般用拍数表示。

休止符表示暂停发音。

一首音乐是由许多的音符组成的,而每个音符对应着不同频率,这就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。

了解音乐的一些基础知识,我们可知产生不同的频率的音频脉冲即能产生音乐。

对于单片机来说,产生不同的频率的脉冲是非常方便的,利用单片机/计时器来产生这样的方波频率信号。

因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。

节拍码

节拍数

1

1/8拍

2

1/4拍

3

3/8拍

4

1/2拍

5

5/8拍

6

3/4拍

8

1拍

每个音符使用一个字节,字节的高4位代表音符的节拍,低四位代表音符的高低。

3.3软件程序设计

3.3.1程序流程图

开始先定义三个按键的功能,key1为切换6中花样,key2为控制歌曲的开始,暂停,key3为切换歌曲,程序为

sbitkey1=P3^2;//按key1可切换花样

sbitkey2=P3^3;//按key2可切换歌曲

sbitkey3=P3^1;//总开关,用于总体控制花样灯跟歌曲。

先判断是否按下key2,如果按下,在判断是否按下key3和key1,如果key1按下,则调用一下花样的程序

ucharcodehuayang1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,

0xfd,0xfb,0xf7,0xef,0xdf,0xbf};//花样灯1

ucharcodehuayang2[]={0x7f,0xfe,0xbf,0xfd,0xdf,0xfb,0xef,0xf7,

0xef,0xfb,0xdf,0xfd,0xbf,0xfe};//花样灯2

ucharcodehuayang3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x0,

0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//花样灯3

ucharcodehuayang4[]={0x3f,0x9f,0xcf,0xe7,0xf3,0xf9,0xfc,

0xf9,0xf3,0xe7,0xcf,0x9f,0x3f};//花样灯4

ucharcodehuayang5[]={0x3f,0xfc,0x9f,0xf9,0xcf,0xf3,0xe7,

0xcf,0xf3,0x9f,0xf9,0x3f,0xfc};//花样灯5

ucharcodehuayang6[]={0x55,0xaa,0xcc,0x33,0x99,0x66,0x0f,0xf0};//花样灯6

如果key3按下,则调用音乐代码程序,见附录

 

开始

定义key1,key2,key3

N

If(key2)=0

Y

If(key1)=0If(key3)=0

花样1

花样2

花样6

花样4

第五首

第四首

第三首

第二首

第一首

花样5

花样3

YY

结束

3.3.2主程序的设计

开始程序先把暂存地址寄存地址以及T0初始化,然后判断是否按下开始键,如果按下,判断音乐标号,是哪首歌曲,把送至相应的首地址,紧接着调用这首音乐的子程序,播放这个歌曲;如果没按下再返回继续判断。

下一步判断是否按下下一首键,如果按下,则把刚刚的音乐标号加一,再返回到把送至相应的首地址,紧接着调用这首音乐的子程序,播放这个歌曲,如果没有则继续判断,这样可以实现自由的切换。

3.3.3子程序的设计

开始

NN

R0为0吗R1为0吗

YY

送这一首歌表送这一首歌表给送第三首歌的表给

首地址首地址首地址

retretret

 

3.4延时程序的设计

延时程序流程图如下

延时165ms

voiddelay(uintz)/

{uintx,y;

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

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

}

延时1ms

voiddelay1(uintz)

{uintx,y;

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

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

}

3.5流水灯样式

样式

花样1

[P1.0→P1.1→P1.2→P1.3→P1.4→P1.5→P1.6→P1.7→P1.6→P1.5→P1.4→P1.3→P1.2→P1.1→P1.0依次点亮]循环

花样2

[P1.0→P1.1→P1.1→P1.6→P1.2→P1.5→P1.3→P1.4→P1.3→P1.5→P1.2→P1.6→P1.1→P1.1→P1.0依次点亮]循环

花样3

[P1.0→P1.1→P1.2→P1.3→P1.4→P1.5→P1.6→P1.7依次点亮

→P1.0→P1.1→P1.2→P1.3→P1.4→P1.5→P1.6→P1.7依次熄灭]循环

花样4

[(P1.0,P1.1)→(P1.1,P1.2)→(P1.2,P1.3)→(P1.3,P1.4)→(P1.4,P1.5)→(P1.5,P1.6)→(P1.6,P1.7)→(P1.6,P1.5)→(P1.5,P1.4)→(P1.4,P1.3)(P1.3,P1.2)→(P1.2,P1.1)→(P1.1,P1.0)依次点亮]循环

花样5

[(P1.0,P1.1)→(P1.6,P1.7)→(P1.1,P1.2)→(P1.5,P1.6)→(P1.2,P1.3)→(P1.4,P1.5)→(P1.3,P1.4)→(P1.2,P1.3)→(P1.4,P1.5)→(P1.1,P1.2)(P1.5,P1.6)→(P1.0,P1.1)→(P1.6,P1.7)依次点亮]循环

花样6

[(P1.0,P1.2,P1.4,P1.6)→(P1.1,P1.3,P1.5,P1.7)→(P1.2,P1.3,P1.5,P1.6→(P1.0,P1.1,P1.3,P1.4)→(P1.1,P1.2,P1.5,P1.6)→(P1.0,P1.3,P1.4,P1.7)→(P1.0,P1.1,P1.2,P1.3)→(P1.4,P1.5,P1.6,P1.7)依次点亮]循环

3.6按键去抖

按键去抖产生:

机械开关的触点,在闭合向断开的闭合进行切换时,在我们感觉不出来的极短时间内,其节点都会产生接通,断开的跳动。

我们将这种开关切换过程中发生的触点跳动称为抖动。

按键所用开关为机械弹性开关,利用了机械触点的合段作用。

由于机械触点的弹性作用,一个按键开关在闭合和断开的瞬间均有一连串的抖动。

抖动时间长短有按键的机械特性决定,一般为5—10ms,这是一个很重要的参数。

通常采用软件延时的方法,在第一次检测到有按键下时,执行一段延时10ms的子程序

delay1

(1);

if(key1==0)

{

}

第四章仿真及调试

按照实验电路图在proteus中找到相应的元器件,并搭建电路,将相应元器件的规格调到合适值。

在keil中生成HEX文件,装入单片机中运行,按key1可看到花样灯闪烁,每按一次变化一种样式。

按key2可听到动听的音乐,每按一次变化为下一首歌。

按key3可以同时关闭灯跟歌曲。

按键均可实现要求的功能。

第五章总结

通过这次的科研实践,使我对单片机的硬件结构,指令系统,以及系统设计有了一定的认识,在这基础之上进行单片机设计,可以说是轻松了不少,然而在实际设计的过程中依然暴露出许多问题。

例如我对单片机的中断系统就了解不够深,这使得我在设计按键控制的时候,面临很大的问题,最终我通过重新翻阅课本及相关资料,克服了这一困难。

在程序设计的过程中,也出现了不少问题,例如在总开关程序的编写中,我就无从下手。

最终我通过向老师答疑得以解决。

此次课程设计也使我对C编程的有关知识得以温习和重新学习。

总之可以说是收益匪浅。

附录

1参考文献

[1]王思明,张金敏,苟军年等.单片机原理及应用系统设计[M].北京:

科学出版社,2012.

[2]李云钢,周逢兴,龙志强.单片机原理与系统设计[M].北京:

中国水利水电出版社,2008.

[3]谭浩强.C语言程序设计(第四版)[M].北京:

清华大学出版社,2010.

[4]风波亲,吴宁.微型计算机原理与接口技术[M].北京:

清华大学出版社,2008.3.

[5]吴秀清,周荷琴.微型计算机与接口技术[M].合肥:

中国科学技术大学出版社,2002.

[6]宋戈等.单片机应用开发范例大全[M].北京:

人民邮电出版社,2010.5.

2仿真图

3源程序

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitkey1=P3^2;//按key1可切换花样

sbitkey2=P3^3;//按key2可切换歌曲

sbitkey3=P3^1;//总开关,用于总体控制花样灯跟歌曲。

sbitfm=P3^7;//蜂鸣器连续到I/O口P3^7上

//---------------------六种花样灯闪烁代码----------------------------------

ucharcodehuayang1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,

0xfd,0xfb,0xf7,0xef,0xdf,0xbf};//花样灯1

ucharcodehuayang2[]={0x7f,0xfe,0xbf,0xfd,0xdf,0xfb,0xef,0xf7,

0xef,0xfb,0xdf,0xfd,0xbf,0xfe};//花样灯2

ucharcodehuayang3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x0,

0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//花样灯3

ucharcodehuayang4[]={0x3f,0x9f,0xcf,0xe7,0xf3,0xf9,0xfc,

0xf9,0xf3,0xe7,0xcf,0x9f,0x3f};//花样灯4

ucharcodehuayang5[]={0x3f,0xfc,0x9f,0xf9,0xcf,0xf3,0xe7,

0xcf,0xf3,0x9f,0xf9,0x3f,0xfc};//花样灯5

ucharcodehuayang6[]={0x55,0xaa,0xcc,0x33,0x99,0x66,0x0f,0xf0};//花样灯6

ucharcount1;//花样标志

ucharcount2;//歌曲标志

uchartimeh,timel,i;

//---------------------------音乐代码---------------------------------------

//音乐代码中,字节高位控制频率,即为音调。

字节低位控制该音调持续的时间,

//代表多少个十六分音符。

//1-7代表中央C调,8-E代表高八度,0代表停顿

//最后的0是结束标志即0xff。

ucharcodeyldbwdx[]={//月亮代表我的心

0x02,0x82,//前奏

0x16,0x32,0x54,0x02,0x52,//你问我爱你有多深

0xA6,0x32,0x54,0x02,0x52,//我爱你有几分

0x64,0x74,0xB6,0x64,//我的情也真

0x52,0x5C,0x32,0x22,//我的爱也真

0x16,0x12,0x14,0x32,0x22,//月亮代表我的心

0x16,0x12,0x14,0x22,0x32,//你问我爱你有多深

0x26,0x12,0x94,0x22,0x32,//我爱你有几分

0x2C,

0x32,0x52,//我的情也真

0x36,0x22,0x14,0x54,//我的爱也真

0xAC,0x92,0xA2,//月亮代表我的心

0x96,0xA2,0x96,0x82,//轻轻地一个吻

0x3C,0x54,//教我如何到思念

0x36,0x22,0x14,0x54,//你问我爱你有多深

0xAC,0x92,0xA2,//我爱你有多深

0x16,0x12,0x14,0x22,0x32,//我爱你有多深

0x2C,0x02,0x82,//你去想一想

0x16,0x32,0x56,0x12,//你去看一看

0xA6,0x32,0x56,0x52,//月亮代表我的心

0x66,0x72,0xB6,0x62,//伴奏

0x1C,

0xff//结束标志

};

ucharcodekdqg[]={//康定情歌

0x64,0x84,0x92,0x91,0x81,0x93,0x61,0x54,0x62,//跑马溜溜的山上

0x82,0x92,0x91,0x81,0x92,0x64,0x62,0x82,0x92,0x91,0x81,0x93,0x61,//一多溜溜的云哟

0x54,0x82,0x62,0x51,0x61,0x51,0x41,0x52,0x24,0x92,0x54,0x82,0x64,0x52,//端端溜溜的照在

0x42,0x94,0x82,0x62,0x51,0x61,0x51,0x41,0x52,0x24,康定溜溜的城哟

0xff

};

ucharcodelzh[]={//国歌

0x03,//起来

0x04,0x04,0xc2,0x14,0x12,0x12,0x12,0x11,0x11,0xc2,0xd1,//不远做奴隶的人们

0xe1,0x14,0x02,0x32,0x12,0x21,0x31,0x52,0x51,0x51,0x54,//把我们的血肉

0x32,0x31,0x31,0x12,0x11,0x31,0x52,0x51,0x31,0x24,0x24,//筑成我们新的长城

0x24,0x64,0x54,0x24,0x34,0x52,0x32,0x21,0x31,0x12,0x11,0x21,0x34,0x04,//中华民族到了最危险的时候

0x52,0x51,0xd1,0x12,0x12,0x32,0x31,0x31,0x52,0x51,0x51,0x22,0x22,0x22,//每个人被迫着

0xd2,0xd1,0x24,0x22,0xc2,0x14,0x12,0x34,0x32,0x32,0x54,0x54,0x54,0x54,//发出最后的吼声

0x12,0x11,0x31,0x52,0x51,0x51,0x64,0x54,0x32,0x31,0x11,0x52,0x52,0x52,//起来起来起来

0x32,0x02,0x12,0x02,0xc4,0x14,//我们万众一心

0xa2,0xa1,0x11,0x52,0x52,0x52,0x32,0x02,0x12,0x02,冒着敌人的炮火

0xc4,0x14,0xc4,0x14,0xc4,0x14,0x14,0x04,//前进冒着敌人的炮火

0x04,0x04,0x04,0x04,前进前进前进进

0xff

};

ucharcodejmszl[]={//寂寞沙洲冷

0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,//子你走后心憔悴

0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,//白色油棕中纷飞

0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,//落花似有情这个季节

0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,//河畔的风放肆拼命地吹

0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,//不断拨弄离人的眼泪

0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2