简易音乐流水灯课程设计.docx
《简易音乐流水灯课程设计.docx》由会员分享,可在线阅读,更多相关《简易音乐流水灯课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
简易音乐流水灯课程设计
课程设计任务书
学院
理学院
专业
光电信息科学与工程
学生姓名
何涌
班级学号
课程设计题目
简易音乐流水灯设计
实践教学要求与任务:
一、设计要求
1.掌握时序逻辑电路的设计方法,灵活运用理论知识。
2.进一步了解如何将数字电路设计应用到自动控制系统中,从而提高解决实
际问题的能力。
3.写出详细的设计报告。
4.画出仿真电路。
二.设计任务
1.掌握PROTEUS软件和KEIL,并使用它能进行简单地电路设计。
2.熟悉使用软件,设计过程
三.工作进度与计划安排
第一周:
熟悉使用软件,找到简单的电路在软件中连接,并在网上查找课题。
第二周:
在软件中进行电路连接并熟悉课题的设计原理,并在电脑上操作、测试。
完成课程设计论文。
指导教师:
201年月日
专业负责人:
201年月日
学院教学副院长:
201年月日
成绩评定表
学生姓名
何涌
班级学号
专业
光电信息科学与工程
课程设计题目
简易音乐流水灯
评
语
组长签字:
成绩
日期
20年月日
前言
到了21世纪,电子技术获得了飞速的发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣。
在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
如今,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
单片机应用的重要意义还在于它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
单片机控制的音乐流水灯,体积小,重量轻,能演奏和旋音乐,功能多,外观效果多彩,使用方便,并具有一定的商业价值。
本设计是以AT89C51芯片的电路为基础,外部加上放音设备,以此来实现音乐演奏控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其演奏出优美动听的音乐。
用户可以按照自己的喜好选择音乐并将其转化成机器码存入单片机的存储器中。
对于不同型号的单片机只需要相应的改变一下地址即可。
该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大的单片机和音乐爱好者提供了很好的借鉴。
摘要
本设计是一种基于AT89C51单片机音乐控制彩灯的方案,实现单片机演奏音乐,并且对LED灯随音符频率的不同而闪烁发光。
本方案以AT89C51单片机作为主控核心,利用单片机和蜂鸣器,通过蜂鸣器播放音乐,利用编程实现亮灯循环模式,在有16个LED灯,根据用户需求可以编写若干种亮灯模式.例如左右闪烁,隔几个亮灭,蜂鸣器可以根据用户需求改写编程播放各种音乐。
本方案具有设计简单、体积小、元器件少、电路结构简单等优点。
该设计方案设计及其简单,典型的89c51单片机,亮灯模式多,播放各种类型的音乐,具有体积小、价格低、低能耗等优点。
在美丽的都市夜晚,彩灯的循环亮灭,播放动人的音乐,衬托出美丽的氛围,音乐彩灯具有更广阔的发展天地。
关键字:
AT89C51 LED灯 音乐PROTEUS
目录
前言1
摘要2
1.单片机概述5
1.1设计目标5
1.2设计内容5
2.设计方案及原理6
3.核心器件AT89C51介绍6
3.1.主要特性:
7
3.2.管脚说明:
7
3.3.振荡器特性:
9
3.4.芯片擦除:
9
4.硬件设计10
4.1硬件框图:
10
4.2 中断服务说明:
10
4.3总体电路设计11
5.软件设计11
5.1.核心源代码:
11
6.调试与仿真12
6.1.KeilC51单片机软件开发系统12
6.1.1系统的整体结构12
6.1.2采用KEIL开发的89c51单片机应用程序步骤13
6.2proteus的操作13
6.2.1硬件电路图的接法操作13
6.2.2单片机系统PROTEUS设计与仿真过程13
7.结论14
8.体会心得14
9.参考文献15
10.附录16
1.单片机概述
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲,一块芯片就成了一台计算机。
MCS-51单片机是美国INTEL公司于1980年推出的产品,与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MSC-51单片机作为代表进行理论基础学习。
MCS-51系列单片机主要包括8031、8051和8751等通用产品。
DP-51S单片机仿真实验仪是由广州致远电子有限公司设计的DP系列单片机仿真实验仪之一,是一种功能强大的单片机应用技术学习、调试。
1.1设计目标
由于本设计主要用于人们娱乐方面,因此在设计上尽量使其安全以及简单易操作。
其次,在这次设计可行性上进行分析如下:
1、经济可行性:
所谓经济可行性,即在这次设计上需要投入资金的多少,由于毕业设计是没有项目资金,没有开发经费,因此在经济上必须能够承受,比较理想化的项目对于我们毕业设计来说是不可行的。
通过分析后,无论是在器件价格或是常见度上均是可行的。
2、技术可行性:
技术可行性主要是分析技术条件上是否能够顺利开展并完成开发工作,硬件、软件能否满足设计者的需要等。
通过分析各种软件环境,硬件仿真环境等均已经具备。
综上所述,本系统设计目标已经明确,在经济与技术上均可行,因此本系统的开发是完全可行的
1.2设计内容
设计一个基于AT89C51系列单片机的音乐流水灯,切换演奏出不同的乐曲。
蜂鸣器发出某个音调,与之相对应的LED亮起。
此电路的程序只占用了2K左右,可以方便的添加更多的音乐和LED花样,使系统的功能更加强大。
2.设计方案及原理
通过控制单片机的内部定时器的定时时间来产生不同的脉冲频率,以驱动蜂鸣器发出不同音节的声音,利用延时子程序来控制音调的节拍。
为了编程方便,通常是将简单的音符和相应的节拍转换成为定时常数和延时常数,利用查表法得到定时常数,分别控制定时器产生相应的脉冲频率和脉冲频率的持续时间,当持续时间到时,程序自动查找下一个音符的定时常数和延时常数,这样就可以听到悦耳动听的歌声。
音调是由不同的频率产生的,而每一个音调都是有一个音符和一个节拍组成,音符决定该音调的高低,节拍决定了该音调是多少拍。
因此一个音调是由两个字节组成的。
根据音符字节产生该大小次数的延时,声音输出口取反,就可以得到该音调的高低音。
根据设置单位的延时长短,可以控制音乐演唱速度。
因此算法很简单,定义单片机的一个I/O端脚为声音输出口,在规定的节拍内,根据音符字节的大小产生延时,将声音输出口不断的置高置低(即取反),就可以得到该音调。
只要选取合适的单位节拍延时,就可以输出动听的音乐。
3.核心器件AT89C51介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
外形及引脚排列如图所示
图5-1AT89C51外形图及引脚序列
3.1.主要特性:
·与MCS-51兼容
·4K字节可编程闪烁存储器
·寿命:
1000写/擦循环
·数据保留时间:
10年
全静态工作:
0Hz-24MHz
·三级程序存储器锁定
·128×8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
3.2.管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示
表2.1P3口被选功能
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.3.振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
3.4.芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
4.硬件设计
4.1硬件框图:
4.2 中断服务说明:
与每类I/O设备相关的进程都有一个靠近内存底部的地址,称作中断向量。
它包括中断服务程序的入口地址。
中断服务程序:
处理器处理“急件”,可理解为是一种服务,是通过执行事先编好的某个特定的程序来完成的,这种处理“急件”的程序被称为——中断服务程序。
当中央处理器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。
处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断。
实现这一功能的部件称为中断系统,申请CPU中断的请求源称为中断源,单片机的中断系统一般允许多个中断源,当多个中断源同时向CPU请求中断时,就存在一个中断优先权的问题。
通常根据中断源的优先级别,优先处理最紧急事件的中断请求源,即最先响应级别最高的中断请求
4.3总体电路设计
电路主要由AT89C51芯片,喇叭,晶振电路组成,由引脚输出定时器产生的各种固定频率的方波信号,然后由喇叭产生各种频率的声音。
由于该方案中使用内部振荡电路,XTAL1、XTAL2引脚外界石英晶体和微调电容构成的晶振电路。
图6-1一种简单的单片机音乐流水灯播放电路
5.软件设计
5.1.核心源代码:
voidPlayMusic()
{
uinti=0,j,k;
unsignedcharLED;
unsignedcharLED1;
LED=0xff;
LED1=0xff;
P0=LED;
P1=LED1;
while(SONG_LONG[i]!
=0||SONG_TONE[i]!
=0)
{
for(j=0;j{
BEEP=~BEEP;
for(k=0;kLED=LED<<1;
LED1=LED1<<1;
if(LED==0x00)
{
LED=0xff;
}
P0=LED;
if(LED1==0x00)
{
LED1=0xff;
}
P1=LED1;
}
i++;
}
DelayMS(500);
}
6.调试与仿真
下面用KEILuVision与porteus仿真软件介绍音乐流水灯的仿真与调试。
6.1.KeilC51单片机软件开发系统
6.1.1系统的整体结构
C51工具包的整体结构中,其中uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及A51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
6.1.2采用KEIL开发的89c51单片机应用程序步骤
(1)在uVision集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL公司下的AT89C51)
(2)用uVision的文本编辑器编写源文件,可以是汇编文件(.ASM),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去。
一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。
(3)通过uVision2的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。
(4)对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。
(5)对没有语法错误的程序进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的ROM中。
6.2proteus的操作
6.2.1硬件电路图的接法操作
(1).放置选择(删除)元器件
(2).移动元器件
(3).缩放视图
(4).连接导线
(5).仿真,调试
6.2.2单片机系统PROTEUS设计与仿真过程
Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开发和改进手段之一。
全部过程都是在计算机上通过Proteus来完成的。
其过程一般也可分为三步:
(1)在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等。
简称Proteus电路设计。
(2)在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(*.hex)。
简称Proteus源程序设计和生成目标代码文件。
(3)在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。
它在相当程度上反映了实际单片机系统的运行情况。
简称Proteus仿真。
7.结论
AT89C51芯片有多组引脚,可实现多种拓展功能,由于知识,能力,时间,条件所限,我只实现了播放自编歌曲的功能,其实,还可以同时拓展LED点阵屏幕,按键选歌,以及多组灯光闪亮等功能,换用更高档的芯片后,甚至可以实现MP3的丰富功能,在补充了相应知识后我将尝试实现更多的功能。
8.体会心得
在这次单片机课程设计中遇到了很到困难,尤其是程序调试。
为了达到自己与预期的制作效果着实下了一番工夫,但最终还是圆满实现了设计任务。
从想到到设计课题到仿真出电路,再到基本程序框架的建立其实并没有花费太多时间,因为之前有过设计流水灯的经验,所以感觉还是比较轻松的。
但是要想让流水灯闪的漂亮却并非易事,这要考虑循环方式,循环周期,更要考虑到LED灯的排列图案。
采用边看仿真效果边对症修改程序的方式,经过几十次的修改,精雕细琢力求完美,最终设计出数种非常好看的闪烁方式,个人非常满意。
。
经过这次课程设计,我可以更加熟练的运用单片机的知识,更为灵活的选择硬件设备,还使自己对单片机编程开发环境Keil软件和电路仿真软件Proteus有了更深的了解,今后可以较为熟练的完成类似的电路仿真设计。
9.参考文献
[1] 王思明.单片机原理及应用系统设计.科学出版社,2012
[2] 冯博琴.微型计算机原理与接口技术.清华大学出版社,2007
[3] 谭浩强编著.C程序设计(第三版)[M].北京:
清华大学出版社,2005
10.附录
整体程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
#include
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};
voidDelayMS(uintx)
{
uchart;
while(x--)for(t=0;t<120;t++);
}
voidPlayMusic()
{
uinti=0,j,k;
unsignedcharLED;
unsignedcharLED1;
LED=0xff;
LED1=0xff;
P0=LED;
P1=LED1;
while(SONG_LONG[i]!
=0||SONG_TONE[i]!
=0)
{
for(j=0;j{
BEEP=~BEEP;
for(k=0;kLED=LED<<1;
LED1=LED1<<1;
if(LED==0x00)
{
LED=0xff;
}
P0=LED;
if(LED1==0x00)
{
LED1=0xff;
}
P1=LED1;
}
i++;
}
DelayMS(500);
}
main()
{
BEEP=0;
while
(1)
{
PlayMusic();
DelayMS(500);
}
}
部分截图:
主程序截图:
仿真截图: