基于at89c5音乐播放器.docx

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

基于at89c5音乐播放器.docx

《基于at89c5音乐播放器.docx》由会员分享,可在线阅读,更多相关《基于at89c5音乐播放器.docx(15页珍藏版)》请在冰点文库上搜索。

基于at89c5音乐播放器.docx

基于at89c5音乐播放器

单片机原理及系统课程设计

评语:

 

考勤(10)

守纪(10)

过程(40)

设计报告(30)

答辩(10)

总成绩(100)

 

专业:

自动控制

班级:

1103班

姓名:

徐越

学号:

201108902

指导教师:

李亚宁

兰州交通大学自动化与电气工程学院

2013年9月1日

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

摘要

随着我国现代化技术建设的发展,电子产品多种多样,但同类电子产品工作原理基本相同,只不过在硬件电路的是实现上有所不同。

例如我们我们平时所用的MP3音乐播放器,就可以用单片机和一些电子元件来实现它的基本功能。

我的设计是以89C51单片机作为核心工作元件的音乐播放器,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能音乐盒。

该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。

本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。

它在实现音乐播放功能上简单易行,在制作硬件电路上也不困难。

因此,此次课程设计,我除了完成了系统的软件设计和实物电路仿真外,利用空余时间制作出了实物。

关键字音乐播放器,AT89C51单片机,KEIL,PROTEUS。

1引言

1.1设计目的

此次制作的音乐播放器,只需将音乐编码导入C语言程序,经过KEIL软件运行生成HEX文件,经BDM下载器导入单片机中即可。

可以同时生成多首歌曲的音乐编码,再次我选择了两首歌的音乐编码。

学生自己动手就可以制作属于自己的个性化的音乐播放器,通过自己动手将所学的单片机知识应用到实践中。

1.2设计要求

设计一个基于AT89C51的音乐播放器,利用软件编程和相应的硬件电路实现不同歌曲的播放,先利用KEIL软件编程,再用PROTEUS仿真实现,生成可执行的HEX文件,最后焊接实物电路。

1.3设计方法

采用AT89C51单片机、蜂鸣器,晶体振荡器,晶体管2N2905,复位开关为主要硬件。

PROTEUS仿真软件设计和C语言编程方法实现播放器的模拟,用AT89C51实现音乐编码的处理,用晶体管2N2905对电路中电流放大,进而驱动蜂鸣器播放音乐。

2设计方案及原理

按照系统设计要求,将系统分为主控模块,电源电路复位电路、晶振电路、功率放大电路,蜂鸣器发声电路等模块。

系统框图如图1所示。

 

图1系统组成框图

AT89C51简介

AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C51单片机外形及引脚排列如图2所示。

图2AT89C51单片机引脚图

3硬件设计

3.1晶振电路

晶振电路,对于单片机系统而言是必须的,因为单片机内部是由各种各样的数字逻辑器件构成,而这些器件又必须按时间顺序完成。

所以在管脚的XTAL1和XTAL2引脚外接石英晶体和俩个谐振电容,电容采用2个30pf电容,采用12M的石英晶体。

这样就可以构成单片机的基本时钟电路,时钟频率为12M。

如图2所示

图2晶振电路

3.2复位电路

复位电路是对单片机进行初始化操作,使单片机处于一个确定的初始状态。

而要AT89S51复位得在RESET引脚上加5V的高电平信号就可以了。

复位电路参数为30U的电解电容和1kΩ的电阻。

如图3为单片机的复位电路。

图3复位电路

3.3功率放大电路

功率放大电路对工作电流进行放大,因为单片机电路本身的电流不足以带动蜂鸣器发生,加一个三极管放大器2N2905可以带动蜂鸣器发生。

图4功率放大电路

3.4晶振、复位、功放之间连线电路

图5复位电路、晶振电路与单片机之间的连线图

3.4系统连接图

整体硬件连接图如图6所示。

图6系统连接图

4软件设计

4.1主程序设计

主程序流程图如图6所示。

图7主程序流程图

5系统仿真及调试

软件调试,先编写显示程序并进行硬件的正确性检验,然后分别进行主程序,音乐播放程序和定时程序的编译和调试;硬件调试,仔细检查电路有没有漏接或是错接的地方,再接一个电压表检查供给蜂鸣器的电压是否合适,调节电阻的阻值以调节工作电路的阻值。

并且外接了一个数字滤波器检测P1.7引脚的电平高低。

如果不理想,继续调整程序和硬件电路,直到得到正确结果。

仿真图详见第4图6。

6总结

通过此次基于单片机的音乐播放器的设计,使我进一步加深了对课堂上知识的理解,对单片机的寻址方式及定时中断的理解更加深刻,熟悉了单片机应用系统设计的各主要环节的设计,了解了三极管2N2905的参数,及使用方法,蜂鸣器的正常工作条件,示波器在PROTEUS中的使用方法,使用外部晶体振荡器如何选取电容,及晶体振频率。

但是动手制作实物的过程的,动手焊接能力还是不行,容易把引脚焊接在一起,因此,在以后的学习要加强自己实践能力的锻炼。

软件调试,先编写显示程序并进行硬件的正确性检验,然后分别进行主程序,A/D转换程序和LED显示器程序编译和调试;硬件调试,仔细检查电路有没有漏接或是错接的地方,再接一个电压表检查LED显示器显示的数值是否和电压表的示数一致,如果不理想,继续调整程序,直到得到正确结果。

 

附录1音乐播放器源程序

//音乐播放器代码

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharCount;

sbitSpeak=P1^7;//蜂鸣器器控制脚 

/*以下数组是音符编码*/

unsignedcharcodeSONG[]={//祝你平安

0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,

0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,

0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,

0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,

0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,

0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,

0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,

0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,

0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,

0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,

0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,

0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,

0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,

0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,

//路边的野华不要采

0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,

0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20,

0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,

0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,

0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,

0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,

0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,

0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,

0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,

0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,

0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,

0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,

};

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

*名称:

Time0_Init()

*功能:

定时器的初始化,定时时间可用光碟中软件计算,11.0592MZ晶振,10ms

*输入:

*输出:

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

voidTime0_Init()

{

TMOD=0x01;

IE=0x82;

TH0=0xDC;

TL0=0x00;

}

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

*名称:

Time0_Int()

*功能:

定时器中断,中断中实现Count加一

*输入:

*输出:

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

voidTime0_Int()interrupt1

{

TH0=0xDC;

TL0=0x00;

Count++;//长度加1

}

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

*名称:

Delay_xMs()

*功能:

延时子程序,经过软件调试,测得延时程序大概为55us.

*输入:

x

*输出:

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

voidDelay_xMs(uintx)

{

uinti,j;

for(i=0;i

{

for(j=0;j<3;j++);

}

}

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

*名称:

Play_Song()

*功能:

播放蜂鸣器控制程序

*输入:

i(选择播放哪首歌曲,0为“祝你平安”,1为“路边的野花你不要采”

*输出:

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

voidPlay_Song(uchari)

{

ucharTemp1,Temp2;

uintAddr;

Count=0;//中断计数器清0

Addr=i*217;

while

(1)

{

Temp1=SONG[Addr++];

if(Temp1==0xFF)//休止符

{

TR0=0;

Delay_xMs(100);

}

elseif(Temp1==0x00)//歌曲结束符

{

return;

}

else

{

Temp2=SONG[Addr++];

TR0=1;

while

(1)

{

Speak=~Speak;

Delay_xMs(Temp1);

if(Temp2==Count)

{

Count=0;

break;

}

}

}

}

}

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

*名称:

Main()

*功能:

主函数

*输入:

*输出:

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

voidMain()

{

Time0_Init();//定时器0中断初始化

while

(1)

{

Play_Song(0);//Play_Song(0)为祝你平安Play_Song

(1)为路边的野花你不要采

}

}

附录2完整仿真图和实物图

音乐播放器的仿真图及实物图,分别如图8、图9所示。

图7音乐播放器仿真图

图8音乐播放器实物图

参考文献

[1]李建忠.单片机原理及应用[M],西安电子科技大学出版社,2008.2.

[2]黄智伟.全国大学生电子设计竞赛系统设计[M],北京:

北京航空航天大学出版社,2006.6.

[3]黄智伟.凌阳单片机课程设计指导[M],北京:

北京航空航天大学出版社,2006.11.

[4]李广弟,朱月秀,王秀山.单片机基础[M],北京:

北京航空航天大学出版社,2001.7.

[5]康华光.模拟电子技术基础(第四版)[M],武汉:

华中理工大学出版社,1999.

 

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

当前位置:首页 > 自然科学 > 物理

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

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