单片机音乐彩灯课程设计.docx
《单片机音乐彩灯课程设计.docx》由会员分享,可在线阅读,更多相关《单片机音乐彩灯课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
单片机音乐彩灯课程设计
摘要
主要介绍了一种利用单片机AT89C51和8个LED及一个蜂鸣器构成的音乐彩灯控制系统。
可以根据需要实现对彩灯循环显示效果的控制,并配以音乐。
该系统具有实用,功能灵活多样,实现简单等特点。
文章详细阐述了其基本组成,探讨了系统的工作原理,并给出了系统的硬件和软件的设计方法。
关键字:
单片机,循环彩灯,音乐
Abstract
Thisarticlemainlyintroducedonekindcontrolsystemofmusicandcolorlamp.Itismadeupofsinglechip(AT89C51),eightLEDandaspeaker.Itcancometrueacontrolofcolorlamps’cycledisplay,andmixmusic.Thissystemispractical,itsfunctionisnimbleanddiverse,andtherealizationisnothard.Thisarticleexpatiateditsbasicconfiguration,discussedthesystem'sworkprinciple,andgiventhesystem'sdesignmethodabouthardwareandsoftware.
Keywords:
Singlechip,cyclecolorlamp,music
前言
随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。
LED彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰街道和城市建筑物已经成为一种时尚。
但目前市场上各式样的LED彩灯控制器大多数用全硬件电路实现,电路结构复杂、功能单一,这样一旦制作成品只能按照固定的模式闪亮,不能根据不同场合、不同时间段的需要来调节亮灯时间、模式、闪烁频率等动态参数。
这种彩灯控制器结构往往有芯片过多、电路复杂、功率损耗大等缺点。
此外从功能效果上看,亮灯模式少而且样式单调,缺乏用户可操作性,影响亮灯效果。
因此有必要对现有的彩灯控制器进行改进。
单片机技术作为一种技术手段,它的发展以微处理器(MPU)技术及超大规模集成电路技术的发展为先导,以广泛的应用领域拉动,表现出较微处理器更具个性的发展趋势。
在考虑到制作成本的前提下,根据单片微型计算机具有集成度高、体积小、运行可靠、价格低廉等许多独特的优点,可以利用单片机来实现对各色彩灯的自动控制,它可以随着编辑软件的不同再加上输出设备(彩灯)的排列变化,实现千变万化的效果。
并配以背景音乐,从而达到彩灯与音乐相辅相成的效果,实现视觉和听觉上的美感享受。
本文提出了一种基于AT89C51单片机的音乐彩灯控制方案,实现对LED彩灯的控制。
该系统原理简单,实际应用效果较好,主要利用单片机的可编程控制原理,由硬件和软件两部分组成。
硬件部分以AT89C51单片机作为主控核心,与音乐、LED显示、串入并出等模块组成。
软件系统由主程序及不同的延时子程序构成。
第一章设计思路与原理方框图
1.1系统问题的提出
随着经济的迅速发展,人们需要进一步地提高生活质量、美化生活环境,利用各种彩灯来装饰美化已成为一种时尚。
单片机彩灯(广告灯)控制电路大体上可分两大类:
一类是单片机固化程序控制器,这类控制器也称专用彩灯控制器,是把彩灯闪烁变化的程序在制作集成芯片时,就已设计好,并固化在芯片内,用户只需配接适当的电源及外电路,就按块内程序闪烁发光。
另一类就是单片机编程控制器,这类控制器的闪光程序,并没有事先设计好,用户要制作这类彩灯控制器,就要根据闪光变化的需要来设计程序,然后,依靠计算机或仿真器的帮助把编好程序烧录到单片机内,用户只要连接好电源与外电路,彩灯便可按照设计的程序闪烁。
单片机彩灯控制器根据电路结构的不同又可分为并行输出与矩阵输出两种形式,并行输出的控制器电路中,把所有路(个)的彩灯的正极都经过一个限流电阻接到电源的正极端,所有负极连在一起接地,再从彩灯的正极处引线接到单片机相应I/O端口上。
这种形式的控制器适宜作流水、跳跃、反向、固定广告语、音乐喷泉、模拟礼花等花样变化的控制,对于单片机来说,具备多少I/O输出端口均可,少则3个端口就可设计出流水状的控制花样。
而在矩阵输出形式的彩灯控制器电路中,是把所有路(个)彩灯的正极分别经一限流降压电阻接到电源正极处,而所有负极不是接在一起,而是分别接至单片机的一组I/O端口上,然后,再把所有路(个)彩灯的正极又分别接至单片机另一组I/O端口上,形式像矩阵。
这种形式的控制器,适宜作多花样控制,也可作字符显示屏闪烁花样的控制,不过这种形式的控制器要求单片机需有多组I/O输出端口,或需用多个单片并联扩展使用。
对于彩灯的控制只是达到很好的视觉效果,如果再伴随背景音乐,将能同时满足视觉和听觉上的完美享受。
使用单片机可以驱动蜂鸣器发出声音,还可以控制其发出不同的声调,从而连接起来构成一个曲子。
当然,市场上很多中音乐模块或是音乐芯片,可以直接产生各种曲子。
但是,这种模块价格比较贵,电路结构比较复杂。
如果系统中仅需要产生简单的音符或简单的曲子,可以使用单片机配合简单的蜂鸣器而产生需要的音乐效果。
1.2几种方案的比较
(1)基于AT89C51单片机的彩灯控制方案
本方案以AT89C51单片机作为主控核心,将其串行端口连接一个串入并出的寄存器。
通过该外接寄存器可以对输出的信号进行串行与并行的转换,从而实现对由多个彩灯组成的循环彩灯的控制。
本方案原理简单,主要是利用单片机的可编程控制原理,由硬件和软件两部分组成。
具有体积小、运行可靠、价格低廉等特点,而且随着编程的不同再加上彩灯排列的变化,可以组合成许多种花样变化,实现千变万化的效果。
另外通过串行端口输出可以节省输出端口,并能连接更多的彩灯,使显示的图案花样更加的丰富。
(2)基于74LS195的控制方案
将74LS195作为彩灯控制器的核心,其功能是实现彩灯图案的多种变换。
74LS195本身是一右移移位寄存器,引脚功能是:
CR-清零端、LD-置数端、CP-时钟输入端。
在CR为高电平(以后记为H)、LD为低电平(以后记为L)、CP为上升沿(十)到来时置数,QOQ1Q2Q3=DOD1D2D3同步置数,预置之后状态翻转在CR为H、LD为H、CP上升沿到来时;74LS195串行输入端J、K为不同取值组合时,QO值不同。
将J、K接在一起,J=K,因此J、K只有两种取值—00和11:
当取值为00时,74LS195在移位的基础上QO置“0”,Ql=Q0、Q2=Ql、Q3=Q2;当取值为11时,QO置“1”,Ql=Q0、Q2=Ql、Q3=Q2。
由74LS195输出端Q0、Ql、Q2、Q3驱动四支发光二极管(彩灯),由输出电平的高低决定彩灯的亮和暗。
(3)VHDL编程彩灯控制电路
由于CPLD(复杂可编程逻辑器件)/FPGA(现场可编程门阵列)可以重复无数次编程,在电路不做改动的情况下,只需改变程序就可以灵活地调整彩灯图案和变化方式,给灯光的变化带来很大的方便。
在电路中,如果以1代表亮灯,以0代表灭灯,由0,1按不同的规律组合代表不同的灯光图案,同时使其选择不同的频率,从而实现多种图案多种频率的花样功能显示。
(4)电脑彩灯的控制
电脑主机的并行口LPT原为接打印机而设,共二十五个插孔,其中第二脚至九脚为数据端,十八脚至二十五脚为接地端。
我们可以用到二脚至九脚八个数据端子,至于一个接地端,十八脚至二十五脚任意一个。
我们通过C语言对电脑接口LPT编程,来实现不同的控制。
首先我们得确定LPT的基地址,一般主板上集成的接口LPT基地址为378H,也可以通过BIOS来查看确定。
基本原理是:
确定基地址后,可用C语言中的Output函数发送一个八位二进制到基地址378H,在接口D0-D7(即二脚至九脚)就有相应的输出,Output是接口输出函数,如发送1l000O000(其十进制为192),表示为Output(0x378,192),则在8脚、9脚(D6、D7)输出高电平,而其它数据端则输出低电平。
C程序须在TC2.0环境中编译通过,程序在Windows下运行时,按菜单键,可同时运行其他程序。
相比之下,基于AT89C51单片机的彩灯控制方案更具有实用性,它体积小,性能好,价格低廉,亮灯模式多,可以随时修改设置。
基于74LS195的控制方案最简单,但是花样单一,VHDL编程彩灯控制电路和电脑彩灯的控制方案成本高,在充分考虑到制作成本,易于实现及功能多等方面的前提下,我确定使用第一个方案。
1.3系统整体设计模块
该系统主要由单片机、LED彩灯显示模块、音乐发声模块三部分组成,总体结构设计如下图1-1所示。
该硬件电路主要解决单片机AT89C51对LED彩灯的控制,使其按一定规律亮灭,从而实现一定的彩灯花样。
另外单片机AT89C51还通过三极管的放大电路来驱动蜂鸣器产生需要的音乐效果。
这样在彩灯变换的同时能伴随背景音乐,达到音乐彩灯的目的。
单片机对LED彩灯和音乐的控制,都要通过软件编程来实现。
下面就硬件以及软件实现的单元电路分别进行具体分析。
第二章系统硬件设计
本章节主要是硬件部分的设计,根据电路不同的功能模块设计相应的硬件电路来完成,该系统的总体电路见附录一。
下面就每个模块的电路结构和原理进行具体的说明和分析。
2.1单片机控制模块
本系统采用AT89C51单片机,它对整个系统起总体控制作用,它采用的是CMOS工艺,功耗低。
其外围电路图如下图2-1所示
图2-1单片机控制模块外围电路图
原理图说明:
单片机AT89C51作为主控模块,彩灯的变换花样通过软件编程来实现。
单片机AT89C51的P2.7口连接发音模块,它是通过一个音频放大电路接到蜂鸣器上,通过单片机软件编程来驱动蜂鸣器产生需要的音乐效果。
X1、X2(18、19引脚)连接晶振,用来产生中断,为单片机提供时钟(12MHZ)控制信号。
RESET(9引脚)连接一个复位电路,用来产生上电自动复位。
2.2音乐发声模块
2.2.1单片机发声概述
一般来说,单片机不像其他专业乐器那样能奏出多种音乐的声音,即不包含相应幅度的谐波频率。
单片机演奏的音乐基本都是单音频率。
因此单片机演奏音乐比较简单,只需要弄清楚“音调”和“节拍”两个概念即可。
◆音调表示一个音符唱多高的频率。
◆节拍表示一个音符唱多长的时间。
2.2.2音调
所谓“音调”是音乐学中的名词,与平时所说的“音高”十分类似。
在音乐中常把中音C上方的A音定为标准音高,其频率f=440Hz,其余音均与其进行比较。
f1和f2为两个音符,如果这两个音符的频率相差一倍时,也即f2=2×f1时,则成f2比f1高一个倍频程。
在音乐音符1(Do)与音符
,音符2(Re)与音符
,……之间正好相差一个倍频程,在音乐学中称它相差一个八度音。
在一个八度音内,有12个半音。
以1─
八音区为例,12个半音是:
1─#1、#1─2、2─#2、#2─3、3─4、4─#4、#4─5、5─#5、#5─6、6─#6、#6─7、7─
。
由于人耳的听觉效果,这12个音阶的分度基本上是以对数关系来划分的。
只要知道了这12个音符的音高,也就是其基本音调的频率,就可根据音符之间的倍频程关系得到其他音符基本音调的频率。
知道了一个音符的频率后,便可以让单片机发出相应频率的振荡信号,从而产生相应的音符声音。
一般来说,常采用的方法就是通过单片机的定时器进行定时中断,在中断服务程序中将单片机上外接扬声器的I/O口来回置高电平或低电平,从而让蜂鸣器发出声音。
为了让单片机发出不同频率音符的声音,只需将定时器预置不同的定时值就可实现。
例如,中音DO频率为523Hz,其周期T=1/523=1912μs,因此,只要令计数器计时956μs/1μs=956,在每计数956次时将I/O反相,就可以得到中音DO(523Hz)。
计数脉冲值与频率的关系如下:
式中N——计数值Fi——内部计时一次为1μs,故其频率为1MHz;
Fr——要产生的频率
其计数值的求法如下:
因此,低音DO(262HZ)的T=65536-500000/261=63628;
中音DO(523Hz)的T=65536-500000/523=64580;
高音DO(1046Hz)的T=65536-500000/1046=64058;
根据上面的求解方法,就可以求出其他音调相应的计数器的预置初值。
下表2-1给出了C调各音符频率与计数值T。
表2-1C调各音符频率与计数值T的对照表
音符
频率/Hz
简谱码(T值)
音符
频率/Hz
简谱码(T值)
低1DO
262
63628
#4FA#
740
64860
#1DO#
277
63731
中5SO
748
64898
低2RE
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
2.2.3节拍
在一张完整乐谱的开头,都有如1=C
、1=G
……的标识。
这里1=C,1=G表示乐谱的曲调,也就是跟音调有关系;这里的
、
用来表示节拍。
对于一拍的发音时间,如果乐曲没有特殊说明,一般大约为400~450ms。
如果这里规定一拍的时长为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间。
假设1/4拍为1DELAY,则一拍应为4DELAY,依次类推。
所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数。
表2-2为节拍与节拍码的对照,表2-3为1/4和1/8节拍的时间设定。
表2-2节拍与节拍码对照表
节拍码
节拍数
节拍码
节拍数
1
1/4拍
1
1/8拍
2
2/4拍
2
1/4拍
3
3/4拍
3
3/8拍
4
1拍
4
1/2拍
5
5/4拍
5
5/8拍
6
3/2拍
6
3/4拍
8
2拍
8
1拍
A
5/2拍
A
5/4拍
C
3拍
C
3/2拍
F
15/4拍
表2-3各调1/4节拍和1/8节拍的时间设定
各调1/4节拍的时间设定
各调1/8节拍的时间设定
曲调值
DELAY
曲调值
DELAY
调4/4
125ms
调4/4
62ms
调3/4
187ms
调3/4
94ms
调2/4
250ms
调2/4
125ms
曲谱存贮格式unsignedcharcodeMusicName{音高,音长,音高,音长....,0,0};末尾:
0,0表示结束(Important)
音高由三位数字组成:
个位是表示1~7这七个音符
十位是表示音符所在的音区:
1-低音,2-中音,3-高音;
百位表示这个音符是否要升半音:
0-不升,1-升半音。
音长最多由三位数字组成:
个位表示音符的时值,其对应关系是:
|数值(n):
|0|1|2|3|4|5|6
|几分音符:
|1|2|4|8|16|32|64音符=2^n
十位表示音符的演奏效果(0-2):
0-普通,1-连音,2-顿音
百位是符点位:
0-无符点,1-有符点
调用演奏子程序的格式
Play(乐曲名,调号,升降八度,演奏速度);
|乐曲名:
要播放的乐曲指针,结尾以(0,0)结束;
|调号(0-11):
是指乐曲升多少个半音演奏;
|升降八度(1-3):
1:
降八度,2:
不升不降,3:
升八度;
|演奏速度(1-12000):
值越大速度越快;
第三章系统的软件设计
本系统的软件设计主要分为单片机演奏音乐程序和单片机控制彩灯亮灭两大部分。
每个功能模块对于整体设计都是非常重要的,单片机AT89C51通过软件程序才能很好的控制LED按一定规律亮灭从而得到所需要的彩灯花样,另外它也需要通过软件程序来控制蜂鸣器演奏音乐,系统的源程序见附录二。
3.1音乐发声部分
图3-1音乐演奏流程图
单片机演奏音乐的方法是:
将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数;
将这些参数做成数据表格,存放在存储器中;
通过程序取出一个音符的相关参数,播放该音符;
该音符唱完后,接着取出下一个音符的相关参数……,如此直到播放完毕最后一个音符;根据需要也可循环不停的播放整个乐曲。
对于乐曲中的休止符,一般将其音调参数设为FFH,其节拍参数为00H来表示即可。
程序代码见附录三。
3.2彩灯显示部分
单片机控制彩灯亮灭的原理是:
要想使LED灯亮,只需将对应引脚电平信号变为低电平即可,相反要使LED灯灭,只需将对应引脚电平信号变为高电平即可。
因此要使8只LED呈现一定规律的亮灭,就要控制对应引脚电平的高低。
其软件编程有几种控制方法:
位控法:
采用顺序程序结构,用位指令控制引脚的每一个位输出高低电平,从而来控制相应LED灯的亮灭。
循环移位法:
在程序一开始就给串口先后送一个数,这两个数本身就是让连接D8、D9的位先低,其他位为高,然后延时一段时间,再让这两个数据向两边的位移动,然后再输出至串口,全亮后同样方法控制慢慢全灭,这样就实现所需的彩灯效果。
本方法程序结构简单,本文即使用该方法。
图3-2彩灯显示流程图
第四章系统的安装与调试
4.1系统设计的安装与调试
本装置的调试主要分为硬件调试、软件调试两大部分。
经过初步的一系列分析设计后,在制作硬件电路的同时,调试也一直在穿插进行着。
这样有利于问题的分析和解决,不会造成问题的积累,而且不会因为一个小问题而进行整体电路的检查,这样做可以节约大量的调试时间。
在软件的编程中,首先完成单元功能模块的调试,然后进行系统调试,整体上与硬件调试的方法差不多。
有许多新问题都不是很容易解决的。
出现的很多问题通过查资料,询问指导老师和与同学互相交流来解决。