基于Proteus的音乐播放器仿真实现精编版doc.docx

上传人:b****4 文档编号:4081151 上传时间:2023-05-06 格式:DOCX 页数:17 大小:19.78KB
下载 相关 举报
基于Proteus的音乐播放器仿真实现精编版doc.docx_第1页
第1页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第2页
第2页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第3页
第3页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第4页
第4页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第5页
第5页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第6页
第6页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第7页
第7页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第8页
第8页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第9页
第9页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第10页
第10页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第11页
第11页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第12页
第12页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第13页
第13页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第14页
第14页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第15页
第15页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第16页
第16页 / 共17页
基于Proteus的音乐播放器仿真实现精编版doc.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于Proteus的音乐播放器仿真实现精编版doc.docx

《基于Proteus的音乐播放器仿真实现精编版doc.docx》由会员分享,可在线阅读,更多相关《基于Proteus的音乐播放器仿真实现精编版doc.docx(17页珍藏版)》请在冰点文库上搜索。

基于Proteus的音乐播放器仿真实现精编版doc.docx

基于Proteus的音乐播放器仿真实现精编版doc

 

HEFEIUNIVERSITY

 

proteus仿真设计报告

 

作品名称:

音乐播放器

 

申报者信息:

队员1:

队员2:

 

1

 

一.引言

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪

迹。

导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,

工业自动化过程的实时控制和数据处理,全自动洗衣机的控制,以及程控玩具、

电子宠物等等,这些都离不开单片机。

在音乐播放方面,利用单片机储存音乐,

控制播放也越来越广泛。

为了更好的掌握单片机的应用,用单片机设计一个音乐

播放器。

这样可以有效的将理论知识与实践相结合。

二.设计要求

以单片机为核心,设计一个数字音乐盒:

利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏

乐曲(不少于30s)。

采用LCD显示信息。

歌曲的存储选用外部存储器EEPROM

 

三.硬件电路设计

 

3.1总体设计方案

本系统以89C51单片机为控制核心,以按键开关作为控制元件,以扬声器作

为执行器件,再结合6MHZ的晶振电路,共同构成音乐播放器系统。

 

电源电路

 

AT8951

单片机

 

12MHZ

晶振电路

 

显示电路

 

复位电路

 

发声电路

 

图1系统硬件组成

 

3.2单元电路设计

3.2.1单片机简介

89C51单片机拥有4KB的片内ROM和128B的片内RAM。

ROM和RAM的片外寻

 

2

 

址范围都为64KB。

单片机拥有32个并行口和1个串行口。

在89C51单片机中存在5个中断源,其中有两个外部中断源、两个内部中断源和一个串行中断源。

U1

19

XTAL1

P0.0/AD0

39

38

P0.1/AD1

37

P0.2/AD2

18

36

XTAL2

P0.3/AD3

35

P0.4/AD4

34

P0.5/AD5

33

P0.6/AD6

9

32

RST

P0.7/AD7

P2.0/A8

21

22

P2.1/A9

23

P2.2/A10

29

24

PSEN

P2.3/A11

30

25

ALE

P2.4/A12

31

26

EA

P2.5/A13

27

P2.6/A14

28

P2.7/A15

1

P1.0

P3.0/RXD

10

2

11

P1.1

P3.1/TXD

3

12

P1.2

P3.2/INT0

4

13

P1.3

P3.3/INT1

5

14

P1.4

P3.4/T0

6

15

P1.5

P3.5/T1

7

16

P1.6

P3.6/WR

8

17

P1.7

P3.7/RD

AT89C51

图289C51单片机

3.2.2显示电路

显示电路是一个1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、

符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都

可以显示一个字符。

每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距

的作用,正因为如此所以他不能显示图形(用自定义CGRAM,显示效果也不好)

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和

数字)。

目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,

因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。

 

图31602字符液晶

 

3

 

3.2.3晶振电路

 

晶振电路由两个10pF的电容和一个12MHZ的晶体振荡器组成。

节点1与单片机的XTAL2相连接。

节点2与单片机的XTAL1相连接。

 

图4晶振电路

 

3.2.4复位电路

复位电路由复位键、22uF的电容C3、1KΩ的电阻R9、200Ω的电阻R10组

成。

节点1与单片机的RST相连接。

 

图5复位电路

 

3.2.5发声电路

发声电路由数字扬声器组成。

扬声器一端接地另一端接单片机的P3.7。

 

4

 

图6发声电路

 

3.3总体电路图

 

图7总体电路图

 

四.系统软件设计

 

4.1数码音乐产生原理

音调的高低用音阶表示,不同的音阶对应不同的频率。

因此,不同频率的方波就可以产生音阶,音阶与频率的关系见表1。

由于频率的倒数是周期,因此可由单片机中的定时控制方波周期,当定时器计数溢出时产生中断。

将与扬声器连接的P1.7取反后就可得到方波的周期,从而达到了控制频率,即音阶的目的。

 

表1音阶与频率的关系及方式1下定时器的初值

 

5

 

音阶

频率(Hz)

定时器初值

音阶

频率(Hz)

定时器初值

音阶

频率(Hz)

定时器初值

1

131

0F85EH

1

262

0FC2FH

1

523

0FE17H

2

147

0F933H

2

294

0FC99H

2

587

0FE4CH

3

165

0F9F0H

3

330

0FCF8H

3

659

0FE7CH

4

175

0FA49H

4

349

0FD22H

4

698

0FE91H

5

196

0FAE6H

5

392

0FD73H

5

784

0FEB9H

6

220

0FB74H,

6

440

0FDBAH

6

880

0FEDDH

7

247

0FBF4H

7

494

0FDFAH

7

988

0FEFDH

0

0

0100H

0

0

0100H

0

0

0100H

低八度音

中音

高八度音

 

注:

0表示简谱中的空拍

 

当晶体振荡频率为6.144MHz,定时器工作在方式1下时,若各音阶相对应的

定时器计数初值为X,则可根据下式计算X:

1/(f2)(216X)12/(6106)

音调的长短用节拍数表示(例如1/4拍、2/4拍、),不同节拍数的不同音符的组合形成乐谱。

程序中,音的节拍可由延时子程序实现。

延时子程序设定为四分之一拍,节拍值只能是它的整数倍。

4.2总体流程图

主程序实现对单片机进行初始化后,进入曲目识别子程序,进行歌曲曲目判断。

确定歌曲曲目后,LCD再进行显示。

执行播放后,LCD显示并播放音乐。

播放音乐。

 

6

 

开始

 

LCD初始化

 

播放音乐

 

LCD显示

 

图8总体流程图

 

4.3仿真测试

 

图11LCD结果显示图

 

4.4测试总结

音乐播放器很好的实现了播放,但是在实现播放长度方面还有不足,因为对

外接存储器的使用还不是很熟悉,扩充四片EEPROM,可实现更长时间的播放,本次试验使用的是较为简单的循环播放模式。

 

7

 

附录一

 

仿真结果

 

附录二

 

代码

/********************************************************************

*文件名:

液晶1602显示.c

***********************************************************************/

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

 

//这三个引脚参考资料

sbitE=P2^7;

//1602

使能引脚

sbitRW=P2^6;

//1602

读写引脚

sbitRS=P2^5;

//1602

数据/命令选择引脚

sbitBEEP=P3^7;

ucharcodeSONG_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};ucharcodeSONG_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};

 

/********************************************************************

*名称:

delay()

 

8

 

*功能:

延时,延时时间大概为5US。

***********************************************************************/

 

voiddelay()

{

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}

/********************************************************************

*名称:

bitBusy(void)

*功能:

这个是一个读状态函数,读出函数是否处在忙状态

*输入:

输入的命令值

***********************************************************************/

bitBusy(void)

{

bitbusy_flag=0;

RS=0;

RW=1;

E=1;

delay();

busy_flag=(bit)(P0&0x80);

E=0;

returnbusy_flag;

}

/********************************************************************

*名称:

wcmd(uchardel)

*功能:

1602命令函数

*输入:

输入的命令值

***********************************************************************/

voidwcmd(uchardel)

{

while(Busy());

RS=0;

RW=0;

E=0;

delay();

P0=del;

delay();

 

9

 

E=1;

delay();

E=0;

}

 

/********************************************************************

*名称:

wdata(uchardel)

*功能:

1602写数据函数

*输入:

需要写入1602的数据

***********************************************************************/

 

voidwdata(uchardel)

{

while(Busy());

RS=1;

RW=0;

E=0;

delay();

P0=del;

delay();

E=1;

delay();

E=0;

}

voidDelayMS(uintms)

{

uchart;

while(ms--)for(t=0;t<120;t++);

}

 

voidPlayMusic()

{

uinti=0,j,k;

while(SONG_LONG[i]!

=SONG_TONE[i]!

=0)

{

//播放各个音符,SONG_LONG为拍子长度

for(j=0;j

{

BEEP=~BEEP;

 

10

 

//SONG_TONE延时表决定了每个音符的频率

for(k=0;k

}

DelayMS(10);

//下一个音符索引

i++;

}

}

 

/********************************************************************

*名称:

L1602_init()

*功能:

1602初始化

***********************************************************************/

voidL1602_init(void)

{

wcmd(0x38);

wcmd(0x0c);

wcmd(0x06);

wcmd(0x01);

}

 

/********************************************************************

*名称:

L1602_char(ucharhang,ucharlie,charsign)

***********************************************************************/

voidL1602_char(ucharhang,ucharlie,charsign)

{

uchara;

if(hang==1)a=0x80;if(hang==2)a=0xc0;

a=a+lie-1;

wcmd(a);

wdata(sign);

}

 

/********************************************************************

*名称:

L1602_string(ucharhang,ucharlie,uchar*p)

***********************************************************************/

voidL1602_string(ucharhang,ucharlie,uchar*p)

{

uchara,b=0;

if(hang==1)a=0x80;

 

11

 

if(hang==2)a=0xc0;

a=a+lie-1;

while

(1)

 

{

wcmd(a++);

b++;

if((*p=='\0')||(b==16))break;

wdata(*p);

p++;

}

}

 

/********************************************************************

*名称:

Main()

***********************************************************************/

voidmain()

{

L1602_init();

L1602_string(1,1,"HAPPYBIRTHDAY");

L1602_string(2,1,"TOYOU");

while

(1)

{

//播放生日快乐

PlayMusic();

DelayMS(500);

//播完循环

}

}

参考文献:

[1]郭文川.单片机原理与接口技术[M].中国农业出版社.2007.8

[2]阎石.数字电子技术基础(第五版)[M].北京:

高等教育出版社.2005

[3]李泉溪.单片机原理与实例仿真[M].北京:

北京航空航天大学出版社,2009

 

12

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

当前位置:首页 > 解决方案 > 学习计划

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

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