《数字音乐盒的设计.doc》由会员分享,可在线阅读,更多相关《数字音乐盒的设计.doc(24页珍藏版)》请在三一文库上搜索。
1、 电子技术课程设计 数字音乐盒课程设计报告院(系)名称 信 息 工 程 学 院 专 业 班 级 10级 测控技术与仪器 学 号 100119066 学 生 姓 名 刘祖林 指 导 教 师 杨全玖 目录 第一章 摘要2第二章 概述3第一节 单片机总体功能简介4第二节AT89C51芯片功能和硬件5第三节 功能键介绍7第三章 系统总体方案及硬件设计8第一节 系统设计要求8第二节 总体设计方案8第三节 系统硬件设计8第四节 软件设计9第四章 程序设计流程图11第五章 Proteus功能仿真13总结15致谢16附 1 原程序代码17附 2 系统原理图22第一章 摘要本设计是基于51系列单片机,蜂鸣器,数
2、码管LED的数字音乐盒设计,通过利用I/o一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏各种乐曲(本设计为四首,若有必要,可以增加),可以通过功能键来选择乐曲,暂停,播放,前进,后退等功能。音乐盒的电路设计过程在硬件与软件方面进行同步。其中,硬件方面选择内部存储资源丰富的AT89C51单片机,时钟采用12MHZ晶体振荡电路。软件方面,从分析电路各个功能子模块的功能、流程图设计,在到程序的编写设计均进行了综合的考虑。编成语言从程序总体设计以及高效性的硬件方面考虑,采用汇编语言进行编写。 在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面复习与准备。在硬件与软件设计时,没有良好的基础
3、知识和实践经验会受到很大的限制,每项功能实现时需要那种硬件,程序该如何编写,如何调试等,没有一定的基础就不可能很好的实现。具体实现功能: 1、利用I/O一定频率的方波,驱动蜂鸣器,发出不同的音调, 从而演奏各种乐曲 2、采用LED显示信息 3、播放时显示歌曲序号 4、可通过功能键选择乐曲,暂停,播放。第二章 概述 目前,各种传感器、变送器、控制仪表已经普遍采用单片机应用系统。它测量、处理、控制功能于一单片机是单片微型机的简称,故又称为微控制器MCU。通常由单块集成电路芯片组成,内部含有计算机的基本功能部件:中央处理器CPU,存储器和I/O接口电路等。因此,单片机只要和适当的软件及外部设备相结合
4、,便可成为一个单片机控制系统。第一节 单片机总体功能简介单片机是在工业测控需要背景下而产生的,在一个应用系统中。按照测控系统的特点和要求,单片机的应用可分为单机应用和多机应用两大类。我们这次要完成的单片机课程设计就是它的单机应用,下面介绍一下单片机应用领域内的主要内容。(1) 智能产品单片机与传统机械产品相结合,使传统机械产品结构简化,控制智能化,购成新一代机电一体化产品。目前,利用单片机构成的智能产品已广泛应用于家用电器、办公设备、数控机床、纺织机械、 工业设备等行业。(2) 智能仪表 目前,各种传感器、变送器、控制仪表已经普遍采用单片机应用系统。它测量、处理、控制功能于 一体,具有各种智能
5、化功能,如存储、数据处理、查找、判断、联网和语音等功能。单片机构成的智能仪表,能使仪表具有数字化、智能化、多功能化、综合化等优点。(3) 测控技术用于单片机结构的各种工业控制系统中的数据采集系统具有工作稳定可靠、抗干扰能力强的优点。(4) 智能接口在计算机系统,特别是较大型的工业测控系统中,除通用外部设备外,还由许多外部通信、采集、多路分配管理、驱动控制等接口。这些外部设备与接口如果完全由主机进行管理,势必会造成主机负担过重,运行速度降低,接 口的管理水平也不可能提高。如果用单片机进行接口的控制与管理,单片机与主机可并行加工处理,可以大量降 低接口的通信密度,极大的提高了接口控制广利水平。在一
6、些通用计算机外部设备上,以实现了单片机的键盘管理、 打印机控制、硬盘驱动控制等。第二节AT89C51芯片功能和硬件本系统采用的是51系列的AT89C51单片机进行的计算器设计。 下图为AT89C51单片机的管脚图。 (图 1 AT89C51引脚图)VCC:正电源端GND:单片机的接地端XTAL1/XTAL2:片内振荡电路输入/输出端,两端跨接晶体或陶瓷谐振器,与单片机内部反相器构成稳定的自激振荡器。发出的脉冲直接送入片内定的控制部件RESET:复位端EA/VPP:寻址外部ROM控制端/编程电源输入端。ALE/PROG:地址锁存允许/编程脉冲输入端。PSEN:寻址外部程序存储器,选通外部EPRO
7、M的端口(OE)。P0.0P0.7 P1.0P1.7 P2.0P2.7:准双向I/O口。P3.0P3.7:具有特定的第二功能(准双向I/O口)。第三节 功能键介绍 (图 2 音乐盒功能键)START: 播放键判断SELECT: 选择键判断PUASE: 停止播放STOP: 停止键判断ORDER: 顺序键判断RAND: 随机键判断第三章 系统总体方案及硬件设计第一节 系统设计要求音乐盒的可实现功能:1 利用I/O口产生一定的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲;2 采用LED 显示信息;3 可通过功能键选择乐曲,暂停,播放。第二节 总体设计方案由于计算器需要比较多的输入输出口,所以选择使
8、用内部存储资源比较的多AT89C51单片机,8位LED动态显示。扬声器可以用一个准I/O口,采用AT89C51作为运算和控制单元完全满足系统的需要。第三节 系统硬件设计方波电路:51核片内由一个反相放大器构成振荡器,本系统采用内部方式,在XTAL1和XTAL2端外接石英晶体作为定时元件,内部反相放大器自激振荡,产生时钟。时钟发生器对振荡脉冲二分频。如下图所示:(图3 时钟发生器)第四节 软件设计本设计的流程如下: 主程序开始初始化变量及LED接口初始化方波发生器 晶振管(图4 系统流程图)先从主程序开始,接着初始化变量及LED接口,然后初始化方波发生器、晶振管,使LED显示信息,就进入了开机状
9、态,等待动作选择按键,包括播放键、暂停键、停止键,当然也可以选择返回:加入选择的是播放键,LED上就会显示歌曲编号,与此同时演奏相应的乐曲,此时,你就可以用按键控制乐曲的播放了。第四章 程序设计流程图电路图的设计及程序设计是否合理,通过proteus软件进行仿真;若不合理就需要修改,直至符合要求。 (1)软件的使用 使用WAVE6000软件的目的是取得源程序的编译文件(2) Proteus软件介绍protues是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析各种模拟器件和集成电路。Proteus ISIS的工作界面是一种标准的Windo
10、ws界面,如下图所示包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮预览窗口、对象选择器窗口、图形编辑窗口。运行Proteus程序后,进入软件的界面。通过左侧工具栏的P命令,在Pick Devices左侧窗口中选择所需元件的关键字,然后放置元件并调整方向和位置以及参数设置,最后进行连线。 (图5 Proteus界面)第5章 Proteus功能仿真下面是几张仿真图,由于本次设计是数字音乐盒,而声音没有仿真图,所以仿真图主要是LCD显示歌曲编号和LED灯的显示。 (图6 LED显示仿真)如图6:LED等全灭:播放没有开始D1亮:选择歌曲D2
11、亮:顺序模式D3亮:随机模式全亮:播放暂停(图7LCD显示仿真) 如图7: LCD显示的数字是歌曲的编号。(图8音乐盒总体仿真图) 总结本学期在做课程设计时,对单片机的硬件设计,软件设计掌握的深度不够,但通过次次课程设计,却改变了很多,首先对于硬件电路的工作原理有了进一步的学习,同样就有了进一步的认识;其次软件方面,在程序的设计,程序的调试方面都学到了很多东西,这是第一次自己独立完成课程设计,很有成就感。在设计过程中我遇到了很多问题,有知识方面的,但也有个人不良习惯方面的,例如在WAVE上编译程序时,出现好几处错误,经仔细检查才知道并不是程序错误,而是自己输入不规范和输错造成的,这就提醒我在设
12、计过程中一定要细心认真的完成每一步骤每一个环节,才能避免不必要的失误。另外,我觉得只有在一个好的氛围里才能踏下心来做东西,在设计出现问题时,一定要戒躁,脚踏实地,认真看书,仔细分析,仔细调试,就一定会发现错误,克服困难,这是非常重要。 参考文献【1】单片机原理及应用技术【2】MC-51单片机应用技术【3】电子制作【4】51 系列单片机设计实例【5】单片机C51程序设计教程与实验致谢历时将近两个星期的时间终于将这篇论文写完,在论文的写作过程中遇到了无数的困难和障碍,都在同学和老师的帮助下度过了。尤其要强烈感谢我的论文指导老师老师,对我进行了无私的指导和帮助,不厌其烦的帮助进行论文的修改和改进。另
13、外,在校图书馆查找资料的时候,图书馆的老师也给我提供了很多方面的支持与帮助。在此向帮助和指导过我的各位老师表示最中心的感谢!感谢这篇论文所涉及到的各位学者。本文引用了数位学者的研究文献,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作。感谢我的同学和朋友,在我写论文的过程中给予我了很多你问素材,还在论文的撰写和排版灯过程中提供热情的帮助。由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和学友批评和指正! 附 1 原程序代码 #include#include#define K_Order P3_6#define K_Rand P3_7#define K_Start P
14、3_0#define K_Select P3_1#define K_Puase P3_2#define K_Stop P3_3extern void Play_Music(unsigned char music_num);extern void Delay10us(unsigned char tmep);extern void Delay10ms(unsigned char tmep);extern void Delay1s(unsigned char tmep);extern void Press_Start(void);extern void Press_Select(void);exte
15、rn void Press_Order(void);extern void Press_Rand(void);extern void Press_Puase(void);extern void Press_Stop(void);void music(unsigned int code *Song);static unsigned int count;static unsigned char startflag,selectflag,orderflag,randflag,stopflag,flag,Ledflag;static unsigned char i,k,temp,step,freq,m
16、usic_num,randnum;unsigned char code *ptr;/LED显示代码,共阳极unsigned char code Seg4= 0xF9,0xA4,0xB0,0x99;/song1八月桂花香unsigned char code Song1=0x18,0x30,0x1c,0x20,0x10,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,0x2
17、0,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,0x
18、20,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, 0
19、x15,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; /song2波斯猫部分unsigned char code Song2=0x40,0x19,0x40,0x19,0x40,0x19,0x4c,0x19,0x4c,0x19,0x48,
20、0x19,0x4c,0x19, 0x40,0x19,0x40,0x19,0x40,0x19,0x4c,0x19,0x4c,0x19,0x48,0x19,0x4c,0x19, 0x40,0x19,0x40,0x19,0x40,0x19,0x4c,0x19,0x40,0x19,0x39,0x19,0x33,0x19,0x30,0x19,0x30,0x19,0x33,0x19,0x33,0x19, 0x30,0x32,0x30,0x32,0x30,0x32,0x39,0x19,0x40,0x19, 0x39,0x19,0x40,0x19,0x4c,0x32,0x4c,0x32, 0x39,0x32,
21、0x39,0x32,0x39,0x32,0x40,0x19,0x4c,0x19, 0x40,0x19,0x4c,0x19,0x55,0x32,0x55,0x32, 0x30,0x32,0x30,0x32,0x30,0x32,0x39,0x19,0x40,0x19, 0x39,0x19,0x40,0x19,0x4c,0x32,0x4c,0x32, 0x55,0x32,0x39,0x19,0x4c,0x19,0x4c,0x32,0x4c,0x19,0x40,0x19,0x39,0x32,0x39,0x19,0x39,0x32,0x24,0x00,0x00;/song3两只老虎unsigned ch
22、ar code Song3=0x60,0x32,0x55,0x32,0x4c,0x32,0x60,0x32, 0x60,0x32,0x55,0x32,0x4c,0x32,0x60,0x32, 0x4c,0x32,0x48,0x32,0x40,0x32,0x40,0x32, 0x4c,0x32,0x48,0x32,0x40,0x32,0x40,0x32, 0x40,0x19,0x40,0x0d,0x39,0x0d,0x40,0x19, 0x40,0x0d,0x48,0x0d,0x4c,0x32,0x60,0x32, 0x40,0x19,0x40,0x0d,0x39,0x0d,0x40,0x19,
23、 0x40,0x0d,0x48,0x0d,0x4c,0x32,0x60,0x32, 0x60,0x32,0x40,0x32,0x60,0x32,0x60,0x32, 0x60,0x32,0x40,0x32,0x60,0x32,0x60,0x32,0x00; /song4兰花草 unsigned char code Song4=0x72,0x19,0x4c,0x19,0x4c,0x19,0x4c, 0x19,0x4c,0x19,0x4c,0x32,0x55,0x19, 0x60,0x19,0x55,0x19,0x60,0x19,0x65, 0x19,0x72,0x32,0x72,0x32, 0x
24、39,0x19,0x39,0x19,0x39,0x19,0x39, 0x19,0x39,0x32,0x39,0x32,0x40,0x19, 0x97,0x19,0x40,0x19,0x40,0x19,0x48, 0x19,0x4c,0x32,0x4c,0x32, 0x4c,0x19,0x39,0x19,0x39,0x19,0x40, 0x19,0x4c,0x32,0x4c,0x32,0x55,0x19, 0x60,0x19,0x55,0x19,0x60,0x19,0x65, 0x19,0x72,0x32,0x97,0x19, 0x97,0x19,0x60,0x19,0x60,0x19,0x65
25、, 0x19,0x72,0x32,0x72,0x32,0x4c,0x19, 0x55,0x19,0x60,0x19,0x65,0x19,0x7f, 0x19,0x39,0x32,0x39,0x32,0x00;/-MAIN-/void main(void)P1=0xff; /初始化设置? SP=0x60; TH0=0xD8; TL0=0xF0; TMOD=0x01; IE=0x83; IP=0x02; music_num=0; startflag=0; flag=0; while(1) Press_Start();if(startflag=1) Play_Music(music_num); De
26、lay1s(200); Delay1s(200); Press_Select();if(selectflag=1) Delay1s(100); P2=0x0E; if(music_num=0&music_num=0&music_num4)&(flag=1|K_Start=0) flag=1; if(music_num!=0)P1=Segmusic_num-1; else P1=Segmusic_num; Play_Music(music_num); Delay1s(200); if(K_Stop=0) break; Press_Stop();if(stopflag=1) P1=0xFF; P2
27、=0xFF; music_num=0; while(1) ;/*-子程序区段-/包括:按键判断程序、延时程序、中断处理程序、/ 音乐播放程序、音乐选择程序/-*/按键判断程序,如果有按键,则相应标志位置1,否则置0void Press_Start(void)/播放键判断 if(K_Start=0) Delay10ms(100);if(K_Start=0) startflag=1; else startflag=0;void Press_Select(void) /选择键判断 if(K_Select=0) Delay10ms(100); if(K_Select=0) selectflag=1;
28、else selectflag=0;void Press_Order(void) /顺序键判断 if(K_Order=0) Delay10ms(100); if(K_Order=0) orderflag=1; else orderflag=0;void Press_Rand(void) /随机键判断 if(K_Rand=0) Delay10ms(100); if(K_Rand=0) randflag=1; else randflag=0; void Press_Stop(void) /停止键判断 if(K_Stop=0) Delay10ms(100); if(K_Stop=0) stopfla
29、g=1; else stopflag=0;/-音乐播放子程序-void music(unsigned int code *Song) ptr=Song; while(*ptr!=0x00) if(K_Stop=0) Delay10ms(100); if(K_Stop=0)break; freq=*ptr+; if(freq=0xFF) /如果频率常数为0xFF,则休止100ms? Delay1s(10); else step=*(ptr+); TR0=1; for(i=0;i+) P2_4=0; Delay10us(freq); P2_4=1; Delay10us(freq); if(coun
30、t=step) break; TR0=0; count=0; /-/音乐选择程序void Play_Music(unsigned char music_num) switch(music_num) case 1: music(&Song1); break; case 2: music(&Song2);break; case 3: music(&Song3); break; case 4: music(&Song4); break; /-/-中断子程序- /定时器0中断 void Intt0(void) interrupt 1 using 3 count+; TH0=0xD8; TL0=0xF0
31、; /外部中断 void Int0(void) interrupt 0 using 2 if(K_Puase=0) Delay10ms(100); if(K_Puase=0) Ledflag=P2; while(1) P2=0x00;Delay1s(100);P2=0x0f; if(K_Stop=0|K_Start=0) break; P2=Ledflag; /-/-延时子程序- void Delay10us(unsigned char temp) unsigned char i,j; for(i=0;itemp;i+) for(j=0;j1;j+) ; void Delay10ms(unsigned char temp) unsigned char i,j; for(i=0;itemp;i+) for(j=0;j12;j+) ; void Delay1s(unsigned char temp) unsigned char i,j; for(i=0;itemp;i+) for(j=0;j10;j+) for(k=0;k120;k+);附 2 系统原理图(图9系统原理图)