单片机音乐盒电赛电子大赛报告书.docx

上传人:b****7 文档编号:10486871 上传时间:2023-02-13 格式:DOCX 页数:20 大小:57.93KB
下载 相关 举报
单片机音乐盒电赛电子大赛报告书.docx_第1页
第1页 / 共20页
单片机音乐盒电赛电子大赛报告书.docx_第2页
第2页 / 共20页
单片机音乐盒电赛电子大赛报告书.docx_第3页
第3页 / 共20页
单片机音乐盒电赛电子大赛报告书.docx_第4页
第4页 / 共20页
单片机音乐盒电赛电子大赛报告书.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

单片机音乐盒电赛电子大赛报告书.docx

《单片机音乐盒电赛电子大赛报告书.docx》由会员分享,可在线阅读,更多相关《单片机音乐盒电赛电子大赛报告书.docx(20页珍藏版)》请在冰豆网上搜索。

单片机音乐盒电赛电子大赛报告书.docx

单片机音乐盒电赛电子大赛报告书

单片机音乐盒

 

作品类别:

1

 

1、作品简介

 

1、1设计内容

设计一个具有特定功能的音乐盒。

该音乐盒上电后能自动显示系统提示符“P”,进入准备工作状态。

该音乐盒可以播放多首音乐,可以由按键来选择不同曲目。

1、2功能要求说明

设有三个按键,其中两个能实现多首音乐的选择,另一个能实现待机准备的功能。

设有一位数码管,每选择一首曲子能在数码管上显示当前的曲目(只是数字)。

设有八位二极管,能随歌曲的频率闪烁。

1、2、1方案介绍及其工作原理

1、2、2方案介绍

作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括“Do“、“Re“、“Me“--等音阶在内的各种频率声音。

在此设计中我们采用12MHz的晶振,产生的频率信号即音乐信号由P3.7口输出,信号经过PNP管放大后由蜂鸣器发出声音。

乐曲中,每一音符对应着特定的频率,可以参照给出的各音符频率及其相应的时间常数来编写程序。

根据表中所提供的常数,将其16进制代码送入芯片里,即可以奏出音符。

此外,音符的节拍我们可以用定时器T0来控制,送入不同的初值,就可以产生不同的定时时间。

定时器T0工作在定时方式1,改变TH0及TL0,产生不同的音频频率。

要编写的乐谱按要求以音符字节数据表的形式存放在程序中,改变乐曲就是通过改变该数据表的内容来实现的。

主程序的任务是按顺序读取数据表中的字节,根据情况调用音级子程序和音长子程序,启动定时器T0进行工作。

1、3工作原理

(1)要生产音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间.利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。

(2)利用89c52的内部定时器使其工作在计数器模式MODE1下,改变计数值THO及TLO以产生不同频率的方法.

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

计数脉冲值与频率的关系公式如下:

N=Fi÷2÷Fr……………………………………………1.1

N:

计算值;Fi:

内部计时一次为1us,故其1M频率为Hz;

(4)其计数值的求法如下:

T=65536-N=65536-Fi÷2÷Fr……………………………1.2

例如:

设K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz).中音DO(523Hz).高音的DO(1046Hz)的计算值.T=65536-N=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr=65536-500000/Fr。

低音DO的T=65536-500000/262=63627,中音DO的T=65536-500000/523=64580,高音DO的T=65536-500000/1047=65059

(5)C调各音符频率与计数值T的对照表如下表所示.

表1.1C调各音符频率与计数值T的对照表

音符

频率(HZ)

简谱码(T值)

音符

频率(HZ)

简谱码(T值)

低1 DO

262

63628

#4FA#

740

64860

#1 DO#

277

63731

中5SO

784

64898

低2 RE

294

63835

#5SO#

831

64934

#2RE#

311

63928

中6LA

880

64968

低3M

330

64021

#6

932

64994

低4FA

349

64103

中7SI

988

65030

#4FA#

370

64185

高1DO

1046

65058

低5SO

392

64260

#1DO#

1109

65085

#5SO#

415

64331

高2RE

1175

65110

低6LA

440

64400

#2RE#

1245

65134

#6

466

64463

高3M

1318

65157

低7SI

494

64524

高4FA

1397

65178

中1DO

523

64580

#4FA#

1480

65198

#1DO#

554

64633

高5SO

1568

65217

中2RE

587

64684

#5SO#

1661

65235

#2RE#

622

64732

高6LA

1760

65252

中3M

659

64777

#6

1865

65268

中4FA

698

64820

高7SI

1967

65283

 

(6)每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍.如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间.假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推.所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数.

2、硬件的设计

2、1硬件系统各模块功能介绍

2、1、1单片机最小系统

 

图2.1时钟源电路

单片机内部具有一个高增益反相放大器,用于构成振荡器。

通常在引脚XTALl和XTAL2跨接石英晶体和两个补偿电容构成自激振荡器,结构如图2.1。

可以根据情况选择6MHz、12MHz或24MHz等频率的石英晶体,补偿电容通常选择22pF左右的瓷片电容。

 

2.1.2发光二极管

 

 

图2.2发光二极管

当接通电源,单片机运行时,八个二极管随着不同的调子闪烁,增加美感。

2.1.3一位数码管

 

图2.3一位数码管

当有键按下时,数码管会显示当前播放的曲目。

2.1.4蜂鸣器发声

 

图2.3蜂鸣器发声

利用单片机的P3.7口产生不同音调所对应的方波来使蜂鸣器发声,用PNP三级管来驱动。

2.1.5按键

 

图2.4按键

按下AGAIN键可播放重复的曲子,按下FORM键可播放上一曲,按下NEXT键可播放下一曲。

2.2电路原理图

2.2.1电路原理图

 

图2.5总电路图

2.3元器件清单

BillofMaterialfor音乐盒.Bom

UsedPartTypeDesignatorFootprintDescription

=========================================================

8330R1R2R3AXIAL-0.4Resistor

R4R5R6

R7R8

11KR9AXIAL-0.4Resistor

112MHZX1XTAL-1CrystalOscillator

230pFC1C2RAD-0.1Capacitor

1DIODED9LEDIN4007

8LEDD1D2D3LED

D4D5D6

D7D8

1SPEAKERLS1SIP-2

1PNPQ1S8550

3软件系统的设计

 

3.1软件系统各模块功能简要介绍

初始化程序:

初始化定时器

唱歌程序:

从表格中取出数据,利用中断程序产生不同频率的方波,同时调延时程序产生不同的节拍

中断程序:

定时时间到,产生方波

判键程序:

判断哪个键按下,转向相应的子程序执行相应的动作

音符表:

用于产生曲调

按键程序:

分别执行选歌,开启,重复的功能

3.2软件系统程序流程框图

 

 

 

Y

N

 

3.4软件系统程序

ORG0000H

AJMPLOOOOP

ORG000BH

AJMPTIM0

ORG001BH

RETI

ORG0023H

LOOOOP:

MOVA,#01H

LOOOP:

MOVP2,#0CH

MOVP1,A

RLA

MOVR2,#0FFH

DELAY0:

MOVR3,#0FFH

DJNZR3,$

MOVR4,#0FFH

DJNZR4,$

DJNZR2,DELAY0

JNBP3.3,START

LJMPLOOOP

START:

MOVP2,#0CH

MOVR5,#00H;初始化

MOVTMOD,#00010001B

MOVIE,#10101010B

MOVDPTR,#TAB2;装第一首歌

MOV30H,DPL;DPTR低8位送30H暂存

MOV31H,DPH;DPTR高8位送31H暂存

START1:

INCR4;产生8位随机数

MOVA,#01010101B

MOVB,R4

MULAB;8位随机数由P1口输出

MOVP1,A

MOVDPL,30H

MOVDPH,31H

MOVA,#00H

MOVCA,@A+DPTR;查表

MOVR0,A;音符数据送R0崭存

MOVA,#00H

INCDPTR

MOVCA,@A+DPTR;查表

MOVR1,A;节拍数据送R1崭存

INCDPTR

MOV30H,DPL

MOV31H,DPH

CJNEA,#01H,ELECT;一首歌没结束转ELECT

INCR5;结束歌曲计数器加1

ELECT:

JZSTART;所有歌曲结束转START循环

MOVA,R0

JNZSING

CLRTR0

SETBP3.7

LOOP1:

ACALLDELAY;调用延时子程序

DJNZR1,LOOP1

SJMPSTART1

SING:

MOVDPTR,#TAB1;音符表首址送DPTR

DECR0;计算音符

MOVA,R0

MOVB,#02H

MULAB

MOVR0,A

MOVCA,@A+DPTR;查表

MOV21H,A

INCDPTR

MOVA,R0

MOVCA,@A+DPTR

MOV20H,A

MOVTL0,20H

MOVTH0,21H

SETBTR0;开T0定时器

LOOP2:

ACALLDELAY

DJNZR1,LOOP2

AJMPSTART1

TIM0:

MOVTL0,20H

MOVTH0,21H

CPLP3.7

RETI;中断返回

DELAY:

MOVR2,#60

DELAY1:

MOVR3,#252

DJNZR3,$

JNBP3.3,AGAIN;重复正播放的曲子

JNBP3.4,FORM;上一曲开关按下转FORM

JNBP3.5,NEXT;下一曲开关按下转NEXT

DJNZR2,DELAY1

RET

AGAIN:

JNBP3.3,$;等待键释放

LJMPKEYWORK

FORM:

CLREA;关中断

JNBP3.4,$;等待键释放

CJNER5,#00H,ZERO;不是第一首歌曲转ZER0

MOVR5,#04H;是第一首将最后一首歌曲装入歌曲计数器

SJMPKEYWORK

ZERO:

DECR5;歌曲向上进一首

SJMPKEYWORK

NEXT:

CLREA

JNBP3.5,$

CJNER5,#04H,LAST

MOVR5,#00H

LJMPKEYWORK

LAST:

INCR5;歌曲下翻一首

LJMPKEYWORK

KEYWORK:

MOVDPTR,#TAB;将歌曲排列表装入DPTR

MOVA,R5;将R5的内容送A

RLA

SETBEA;开中断

JMP@A+DPTR;根据A的内容转向不同歌曲

TAB:

AJMPMUSIC2

AJMPMUSIC3

AJMPMUSIC4

AJMPMUSIC5

AJMPMUSIC6

MUSIC2:

MOVDPTR,#TAB2;第2首歌曲首址送DPTR

MOVP2,#79H

GONG:

MOV30H,DPL

MOV31H,DPH

AJMPSTART1

MUSIC3:

MOVDPTR,#TAB3

MOVP2,#24H

SJMPGONG

MUSIC4:

MOVDPTR,#TAB4

MOVP2,#30H

SJMPGONG

MUSIC5:

MOVDPTR,#TAB5

MOVP2,#19H

SJMPGONG

MUSIC6:

MOVDPTR,#TAB6

MOVP2,#12H

SJMPGONG

;********************(音符表)**********************;

TAB1:

DW64021,64185,64331,64400,64524,64632,64732

DW64777,64860,64934,64968,65030,65085,65134

DW65157,65198,65235,65252,65283,65310,65335

DW64777,64820,64898,64968,65030,65058,65110

DW65157,65178,65217,63628,63731,63835,63928

DW64103,64260,64463,64580,64633,64684,64934

DW64994,65134,65198,65268

;*********************(兰花草)***********************;

TAB4:

DW0608H,0A08H,0A08H,0A08H,0A10H,0908H,080AH,0906H

DW0808H,0708H,0620H,0D08H,0D08H,0D08H,0D08H,0D04H

DW0C08H,0A08H,0C08H,0C08H,0B08H,0A20H,0A08H,0D08H

DW0D08H,0C08H,0A10H,0908H,0808H,0908H,0808H,0708H

DW060CH,030CH,0308H,0808H,0808H,0708H,0610H,0A08H

DW090AH,0806H,0708H,0508H,0620H,0908H,0808H,0708H

DW0508H,0640H

DW0030H

;**********************(梁祝)*************************;

TAB3:

DW0A10H,0C08H,0D04H,0F08H,1004H,0D04H,0F04H,0C08H

DW1308H,1504H,1404H,1304H,1104H,1304H,1018H,1008H

DW1004H,1104H,0E08H,0D04H,0C08H,0D04H,0F08H,1008H

DW0A08H,0F08H,0D04H,0C04H,0D04H,0F04H,0C18H,1108H

DW1304H,0E08H,1008H,0D04H,0F04H,0C08H,0C10H,0A08H

DW0C02H,0A08H,0C08H,0D02H,0E04H,1004H,0D18H,0C04H

DW0D04H,0F08H,1004H,1308H,1108H,1008H,1104H,1004H

DW0F08H,0D04H,0C04H,0A10H,0F10H,0D08H,0F02H,0D04H

DW0C04H,0A04H,0C04H,0D04H,0F04H,0C38H

DW0030H

;*****************(让我们荡起双桨)*********************;

TAB2:

DW0608H,0808H,0908H,0A18H,0C08H,0A08H,0808H,0910H

DW0620H,0008H,0808H,0908H,0A08H,0C18H,0001H,0C08H

DW0D10H,0910H,0A30H,0001H,0A08H,0C08H,0D20H,0C18H

DW0D08H,0F08H,0E04H,0D04H,0C08H,0D08H,0A10H,0004H

DW0808H,0908H,0A18H,0C08H,0810H,0610H,0808H,0908H

DW0A08H,0D08H,0C30H,0010H,0A20H,0D18H,0001H,0D08H

DW0C08H,0B08H,0A10H,0001H,0920H,0A18H,0C08H,0608H

DW0808H,0910H,0010H,0808H,0908H,0A10H,0C0BH,0001H

DW0C04H,0D10H,0F10H,0E08H,0D08H,0C08H,0A08H,0D40H

DW0030H

;*********************(宁夏)****************************;

TAB5:

DW0A10H,0510H,0608H,0808H,080CH,0A08H,0A08H,0A08H

DW0A08H,0908H,0808H,080CH,0506H,050CH,0308H,0508H

DW0608H,0808H,080CH,0606H,0608H,0806H,0608H,0508H

DW0C10H,0A08H,0A08H,0908H,0808H,0908H,0A08H,0606H

DW0506H,050CH,0506H,0506H,0506H,0506H,0608H,0810H

DW0808H,0608H,0920H,0508H,0608H,0808H,0908H,0A08H

DW0C08H,0C08H,0D08H,0A08H,0910H,090CH,0808H,0608H

DW0908H,0810H,0820H,0910H,0908H,0A10H,0A0CH,0F08H

DW0A0CH,0508H,0508H,090CH,050CH,080CH,0808H,0908H

DW0A08H,0508H,050CH,0408H,0508H,0608H,0708H,0820H

DW0608H,0708H,0808H,0908H,0920H,0A0CH,0508H,0508H

DW090CH,050CH,080CH,0808H,0908H

DW0A08H,0508H,050CH,0408H,0508H,0608H,0708H,0820H

DW060CH,070CH,080CH,0908H,0808H,0730H

DW0030H

;*********************(吉大校歌)*************************;

TAB6:

DW0F10H,1310H,0A06H,0B06H,0C10H,0B06H,0904H,0A04H

DW0B06H,0D06H,0C18H,0F08H,1004H,1106H,0F04H,0F04H

DW0C06H,0C05H,0B03H,0A06H,0C06H,0906H,0904H,0A04H

DW0B06H,0D06H,0D18H,0C06H,0F05H,1003H,1110H,0A06H

DW1004H,0804H,0D10H,0D06H,1206H,1206H,1104H,1004H

DW1118H,0D06H,0D06H,1006H,1005H,1003H,1106H,1206H

DW1306H,0F06H,0F06H,1006H,0F06H,0E04H,0D04H,0C18H

DW1306H,1105H,1203H,1304H,1308H,1206H,1005H,1103H

DW1204H,1208H,1106H,0F05H,1003H,1104H,1104H,1104H

DW0D04H,0D06H,0E04H,0F04H,1106H,1005H,1003H,1004H

DW1104H,1014H,1306H,1105H,1203H,1304H,1308H,1206H

DW1005H,1103H,1204H,1208H,1106H,0F05H,1003H,1104H

DW1104H,1104H,0D04H,0D06H,0E04H,0F04H,1106H,1005H

DW1003H,1006H,1006H,1314H,1304H,1204H,1110H,1306H

DW1004H,1108H,1110H,0F18H

DW0030H

END

 

4、误差分析、教学建议

4.1误差分析

1.有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后发现是因为程序中有的指令书写得不规范导致的。

2.程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。

当用JNZ指令时,跳转范围比较少,这时要用一个标号中转。

3.编程时要注意,在程序开始时,要写入各定时器中断的入口地址。

4.编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。

5.程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加清晰化。

4.42设计体会

本学期学习单片机的时间只有十几周时间,对单片机的硬件设计,软件设计掌握的深度不够,但通过此次课程设计,却改变了很多,首先对于硬件电路的工作原理有了进一步的学习,同样就有了进一步的认识;其次软件方面,在程序的设计,程序的调试方面都学到了很多东西,这是第一次编写单片机的大程序,很有成就感。

在一个好的氛围里才能踏下心来做东西,在这几天课设的时间里,大家一起努力,这也是我们能完成课设的动力。

另外在编程中出现问题时,一定要戒骄戒躁,脚踏实地,认真看书,仔细分析,仔细调试,就一定会发现错误,克服困难,我们也是这么做的,这在课设中十分重要。

此次课程设计可以说是让我获益匪浅。

通过查阅了很多资料,了解了许多汇编程序的思想,扩展了自己的视野,不再仅仅局限于书本中几条简短的程序,而且更重要的是明白写程序的态度:

仔细谨慎,精益求精。

在系统加电调试中,针对一些问题,熟练掌握了根据原理分步测试,将错误之处缩小的最小范围内。

 

参考文献

 

[1]何桥,段清明,邱春玲单片机原理及应用[M]

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

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1