单片机课程设计基于单片机音乐彩灯电子控制器设计论文本科论文.docx
《单片机课程设计基于单片机音乐彩灯电子控制器设计论文本科论文.docx》由会员分享,可在线阅读,更多相关《单片机课程设计基于单片机音乐彩灯电子控制器设计论文本科论文.docx(34页珍藏版)》请在冰豆网上搜索。
单片机课程设计基于单片机音乐彩灯电子控制器设计论文本科论文
提供全套毕业论文,各专业都有
物理与电子工程学院
《单片机》
课程设计报告书
设计题目:
基于单片机音乐彩灯电子控制器设计
专业:
自动化
班级:
14接本
学生姓名:
学号:
20140343112
指导教师:
2014年11月16日
物理与电子工程学院课程设计任务书
专业:
自动化班级:
2014接本
学生姓名
李智瑶
学号
20140343112
课程名称
单片机原理及接口技术
设计题目
基于单片机音乐彩灯电子控制器设计
设计目的、主要内容(参数、方法)及要求
设计任务与要求
要求将音乐分成四个不同的频段,将彩灯分为四组,各组彩灯颜色不同,每组彩灯包含两个颜色相同的彩灯。
(1)实现音乐彩灯同步控制;
(2)当音乐处于高频段2000~4000Hz时第一组彩灯根据音乐节拍长短不同决定灯亮的个数;
(3)当音乐处于中频段500~1200Hz时第二组彩灯根据音乐节拍长短不同决定灯亮的个数;
(4)当音乐处于低频段50~250Hz时第三组彩灯根据音乐节拍长短不同决定灯亮的个数;
(5)当音乐在这些频段之外,要求所有彩灯按照1Hz频率节奏性的闪烁;
工作量
2周时间,每天3学时,共计42学时
进度安排
●第1天:
查阅资料,整理资料
●第2-3天:
整理报告,确定初稿
●第4-14天:
完成程序,整理交稿
主要参考资料
[1]杨国志,王立峰,杨东光,王辉林编著.实用电子制作实例[M].福建科学技术出版社,2000.10.
[2]张仁.单片机音乐彩灯同步控制器的设计[J].成都气象学院院报,1995.5.(165~168).
[3]王连涛主编.音乐喷泉的单片机控制[J].电子世界,2005.(21~22).
[4]康华光,陈大钦编著.电子技术基础(模拟部分第四版)[M].高等教育出版社,2002.3.
[5]潘永雄,沙河编著,电子线路CAD实用教程(第三版)[M].西安电子科技大学出版社,2010.2.
指导教师签字
教研室主任签字
摘要
随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。
LED彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用。
本篇设计为基于单片机的音乐彩灯控制器,它是指彩灯能随着音乐信号地变化而变化的一种控制电路。
本文详细论述了音乐彩灯控制器的硬件原理电路,包括振荡、时钟、复位等模块电路。
以及如何在硬件电路的基础上通过单片机进行软件编程最终实现音乐彩灯的同步控制。
关键词:
音乐;彩灯;同步控制
1引言
目前,基于彩灯控制器的设计的方法很多,有利用单片机控制的、有利用传感器控制的,还有利用EDA控制的等等。
在简化设计步骤和节约实验器材的情况下,为了简化硬件电路,也可采用PLCS7-20CN控制的,虽然硬件电路比较简便,但是实验程序更复杂,实验步奏更繁琐;对于编写程序是个比较困难的问题。
通常采用单片机控制的方法,即利用单片机的端口来控制彩灯以及音乐播放,在程序编写上更容易编写,程序的可编译性更强。
本设计利用AT89S52单片机来实现基于单片机的音乐彩灯控制的设计。
用一恒流源供电,当按下“开始”按键时单片机开始输出,彩灯开始闪烁和音乐播放开始同步播放;当按下“停止”按钮时音乐播放停止,彩灯停止闪烁,LCD显示停止。
当再次按下“开始”按钮时彩灯开始闪烁和音乐播放开始同步播放。
单片机系统通过对采用数据进行扫描,控制D/A转换器转换,并根据按键控制端口输出。
此方案思路清楚,电路简单,便于操作[1]。
2设计方案的比较与选择
2.1设计任务与要求
要求将音乐分成四个不同的频段,将彩灯分为四组,各组彩灯颜色不同,每组彩灯包含两个颜色相同的彩灯。
(1)实现音乐彩灯同步控制;
(2)当音乐处于高频段2000~4000Hz时第一组彩灯根据音乐节拍长短不同决定灯亮的个数;
(3)当音乐处于中频段500~1200Hz时第二组彩灯根据音乐节拍长短不同决定灯亮的个数;
(4)当音乐处于低频段50~250Hz时第三组彩灯根据音乐节拍长短不同决定灯亮的个数;
(5)当音乐在这些频段之外,要求所有彩灯按照1Hz频率节奏性的闪烁;
2.2方案的论证和选取
方案一:
基于单片机的音乐彩灯控制器的设计,是利用单片机编程产生频率分为1.2MHz~12MHz的方波,根据实际情况,本设计采用12MHz作为系统的外部晶振,电容值取30pF。
经过发射驱动电路放大,使LED灯闪烁,同时音乐同步播放并通过12864液晶屏显示频率[2]。
其系统框图如图1所示。
图1基于单片机的音乐彩灯控制器的设计的系统框图
这种以单片机为核心的基于单片机的音乐彩灯控制器的设计;利用振荡电路产生12MHz的时钟信号,在通过单片机输出,单片机系统通过对采用数据进行扫描,控制D/A转换器转换,并根据按键控制端口输出,此方案思路清楚。
利用单片机、按键控制音乐彩灯,控制灵敏度高,而且单片机控制方便,操作简单。
许多音乐彩灯控制器的设计都采用这种设计方法。
方案二:
这种测距系统采用CPLD(ComplexProgrammableLogicDevice)器件,运用VHDL编写程序,使用MAX+plusII软件进行软硬件设计的仿真和调试,最终实现测距功能。
CPLD器件内部的宏单元是其最基本的模块,能独立地编程为D触发器、T触发器、RS触发器或JK触发器工作方式或组合逻辑工作方式。
它的这种特性非常适用于本系统。
可将本系统所需要的分频功能、计数功能、振荡器、七段码显示全部由MAX来实现,而只需在外部配上适当的超声波传感器、接收和发送电路,即可组成一个性能稳定、响应速度快且具有显示功能的彩灯控制器。
本设计首先进行系统模块的划分,规定每一个模块的功能以及各模块之间的借口,最终将设计分为三大模块:
四分频器,四选一控制器,8样彩灯控制器。
本设计充分利用VHDL“自顶向下”的设计优点以及层次化的设计概念,从简单的单元入手,逐渐构成复杂的系统。
配合使用MAX+plusII开发软件,可集设计输入、设计处理、设计校验和器件编程于一体,集成度高,开发周期短。
其系统框图如图2所示。
图2基于CPLD的音乐彩灯控制器系统框图
综合考虑前两种方案,方案一操作方便,控制性更好,功耗低,模块简单,稳定性高,成本低的特点,方案二具有灵敏度高,但结构复杂、功耗比较和高控制不简便的缺点。
综合各自的优劣点我们选择方案一。
3硬件电路的设计
3.1单片机系统设计框图
本文所设计的基于单片机的音乐彩灯控制器的设计主要由AT89S52单片机、时钟电路、复位电路、按键控制电路、下载口电路、喇叭声音电路、显示电路、直流稳压电源等硬件电路部分以及相应的软件部分构成。
首先由单片机驱动产生12MHz晶振,在单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。
由单片机驱动后把结果输出到LED彩灯、小喇叭和12864液晶屏上。
由编程可以实现音符频率表、音名以及半音频率表的确定和分配。
可以将声音分为高音(2KHz~4KHz)、中音(500Hz~1.2KHz)以及低音(50Hz~250Hz)三等,故可以分配彩灯在不同的频率段实现闪烁;同时当在划定频率外时实现彩灯以1Hz的频率节奏闪烁;从而可以满足设计的要求,达到设计的标准[3]。
根据要求并综合以上各方面因素,采用AT89S52单片机作为主控制器,采用按键来控制音乐以及彩灯的开始、暂停和停止。
基于单片机的音乐彩灯控制器的单片机最小系统如下图3所示:
图3基于单片机的彩灯控制器的设计的设计框图
3.2单片机外围电路
当使用单片机的内部时钟电路时,单片机的XATL1和XATL2用来接石英晶体和微调电容,晶体一般可以选择1.2MHz~12MHz,电容选择30pF左右。
我们选择晶振为12MHz,电容30pF。
在系统上电的瞬间,RST与电源电压同电位,随着电容的电压逐渐上升,RST电位下降,于是在RST形成一个正脉冲。
只要该脉冲足够宽就可以实现复位,即て=RC≥20ms。
一般取R≥1KΩ,C≥22uF。
当人按下按钮S1时,使电容C5通过R1迅速放电,待S1弹起后,C再次充电,实现手动复位。
R1一般取10KΩ。
我们通过P2.0来启动控制,程序中通过查询P2.0的电平来检测是否按键被按下,当按下按键时P2.0为低电平,单片机通过查询到低电平开始音乐输出和彩灯,当松开按键,P2.0即为高电平,在软件中通过软件延时来消除按键的机械抖动。
图4单片机外围电路
3.3时钟电路
(1)在单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。
根据硬件电路的不同,单片机的时钟连接方式可分为内部时钟方式和外部时钟方式。
我们采用内部时钟方式,如图4所示:
图5晶振电路
(2)在内部方式时钟电路中,必须在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,C6和C7取31pF左右,晶振的频率取值1.2MHz~12MHz。
根据实际情况,本设计采用12MHz作为系统的外部晶振,电容值取30pF[4]。
3.4复位电路
我们在用按键控制时,为了避免单片机程序错误而导致的错误输出,从而加入复位电路,对任意的情况都能够通过复位按键使电路复位。
单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。
无论是单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。
所以,必须弄清楚单片机复位的条件、复位电路和复位后的状态。
单片机复位的条件是,必须使RST引脚(9脚)加上持续两个机器周期(即24个振荡周期)的高电平。
例如,若时钟频率为12MHz,每机器周期为1us,则只需2us以上时间的高电平。
在RST引脚出现高电平后的第二个周期执行复位。
单片机常见的复位电路有上电复位电路和按键复位电路。
为了方便系统的硬件初始化,我们采用按键复位电路。
如图6所示:
图6复位电路
3.5按键电路
由于要达到设计要求,同时也为了提高设计的课操作性;选用按键来控制输入从而可以手动的对音乐彩灯进行控制。
按键S2与单片机P2.0端口连接是“开始”按键;按键S3与单片机P2.1端口连接是“暂停”按键;按键S3与单片机P2.2端口连接是“停止”按键。
如图7所示。
图7按键电路
3.6ISP下载口电路
下载口电路采用了ISP下载口,能快速下载和更换单片机中的程序,从而满足和达到实验的要求下载口的1脚与单片机的P1.5相连接,下载口的2脚与VCC相连接,下载口的3脚与单片机的相连接,下载口的5脚与单片机的相连接,下载口的7脚与单片机的P1.7相连接,下载口的9脚与单片机的P1.6相连接,下载口的4、6和8脚与GND相连接。
下载电路采用DIP10插座;其插座的管脚如图8示,DIP10管脚功能如表1所示[5]。
图8按键下载口电路
表1DIP10管脚使用说明
AT89ISP引脚
CPU端
说明
AT89ISP引脚
CPU端
说明
1
SCK
时钟信号
5
RST
复位端
2
VCC
电源
9
MOSI
输出信号
3
MISO
输入信号
10
GND
地线
4
GND
地线
3.7LED彩灯显示电路
LED数码显示管有两种,一种是共阳极数码管,另一种是共阴极数码管,其内部是由八个阳极或阴极相连接的发光二极管组成,二者原理不同但功能相同。
共阴极LED数码显示块的发光二极管阴极连接在一起,形成该模块的公共端(通常称为位选端),因此称为共阴极LED数码显示器,8个数码管的另一端通常称为段选端,当显示器的公共端接低电平,某个发光二极管的阳极接高电平时,该发光二极管被点亮;而共阳极LED数码显示管则形成共阳极LED数码显示块的公共端,该公共端必须接高电平,同理在共阳极LED数码显示块中如某个发光二极管的阴极为低电平时,该发光二极管被点亮[7]。
AT89S52是采用12MHZ晶振获得稳定的时钟频率。
采用12MHz高精度的晶振,以获得较稳定的时钟频率,从而使输出的频率更为稳定。
显示电路采用简单实用的8位共阳LED数码管。
单片机系统显示电路如图9所示。
图9LED显示电路
3.812864液晶电路
3.8.112864液晶简介
12864是128*64点阵液晶模块的点阵数简称。
该点阵的屏显成本相对较低,适用于各类仪器。
液晶模组的驱动应遵照规定的额定指标,避免故障及永久损坏。
液晶显示屏焊接温度:
280°C+10°C焊接时间3-4秒[6]。
液晶的电气特性如表2所示。
表212864液晶的电气特性
项目
符号
最小
典型
最大
单位
电源电压
VDD-VSS
4.75
5.0
5.25
V
液晶驱动电压
VDD-VADJ
Ta=0
-11.0
-11.5
-12.0
Ta=25
-10.5
-11.0
-11.5
Ta=50
-10.0
-10.5
-11.0
液晶的背光驱动电流
ILED
-
60
80
液晶驱动电流
IEE
-
1.0
-
3.8.212864液晶显示屏管脚号及作用
液晶的1脚VSS接电源,为液晶提供电流;17脚为复位端,与单片机的27脚连接,通过单片机程序来控制液晶显示的复位;液晶20脚接地线;7~14脚与排阻的2~9脚连接。
如表3所示。
表312864液晶显示屏的管脚号及作用
管脚号
管脚名称
电平
管脚功能描述
1
VSS
+5V
电源地
2
VCC
3.0~+5V
电源正
3
V0
-
对比度(亮度)调整
4
RS(CS)
H/L
RS=“H”,表示DB7——DB0为显示数据
RS=“L”,表示DB7——DB0为显示指令数据
5
R/W(SID)
H/L
R/W=“H”,E=“H”,R/W=“L”,E=“H→L”,
6
E(SCLK)
H/L
使能信号
7
DB0
H/L
三态数据线
8
DB1
H/L
三态数据线
9
DB2
H/L
三态数据线
10
DB3
H/L
三态数据线
11
DB4
H/L
三态数据线
12
DB5
H/L
三态数据线
13
DB6
H/L
三态数据线
14
DB7
H/L
三态数据线
15
PSB
H/L
H:
8位或4位并口方式,L:
串口方式
16
NC
-
空脚
17
/RESET
H/L
复位端,低电平有效
续表12864液晶显示屏的管脚号及作用
管脚号
管脚名称
电平
管脚功能描述
18
VOUT
-
LCD驱动电压输出端
19
A
VDD
背光源正端(+5V)
20
K
VSS
背光源负端
在这个设计中由于采用的是并行,故直接将PSB连接高电平;VSS与LED_K端接地。
液晶的数据位DB0~DB7分别接在排阻U2的A0~A7上;复位端17脚和单片机的复位端连接。
12864液晶屏显示部分电图如图10所示。
图1012864液晶屏显示电路
3.9音乐播放电路
为了提高声音电路的功率并保持稳定在喇叭电路中增加了一个8550三极管,并增加了一个阻值比较大的电阻来增加电路的电流。
音乐播放电路如图11所示。
图11喇叭电路
3.10直流稳压电源电路
电源电路采用普通可调电源供电,电源由外接端口连接5V电压参考源,可满足本系统单片机、彩灯和小喇叭的供电要求。
其中采用两个电容并联,达到滤波的作用,以便得到稳定的电流。
如下图12。
图12稳压电源电路
4系统软件设计
硬件电路一旦确定,大体的功能框架也形成了。
这时我们需要在硬件平台上编写软件程序,完成各部分硬件的控制和协调。
系统功能是由软硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。
因此,软件是本系统的灵魂。
音乐彩灯控制器的软件设计主要是为了实现彩灯与音乐同步控制。
基于单片机的音乐彩灯控制器的设计的软件设计主要由主程序、复位程序、音频及半音程序、按键中断程序及显示子程序组成。
下面分别对主程序、音频及半音程序、按键中断程序和显示程序逐一作介绍[7]。
4.1单片机系统设计主程序流程图
本设计选用AT89S52的单片机来控制歌曲播放和歌词显示。
采用直流电源为其提供基准电压+5V,采用12864LCD显示,小喇叭播放音乐[8]。
通过软件程序与按键输入来控制输入与输出。
当电源接通时,程序开始初始化。
当开始键按下时单片机的21脚输入低电平,程序启动;音乐开始播放彩灯交替移动点亮;随即进入通过频率变化范围中断若在整体频率范围内则继续程序;若不在整体频率范围内则所有彩灯1Hz闪烁。
当程序进入高频判定时,若在高频段内则使高频段灯亮,液晶显示当前频率的大概值;若不在高频段范围内则进入中频判定,判定结果同高频;当程序进入低频判定时,若满足频率判定要求则低频段灯亮,液晶显示当前频率的大概值;若不满足判定要求则程序结束。
图13为主要程序流程图。
图13主程序流程图
音乐彩灯控制器的主程序如下。
#include
#include
#pragmaot(0)
#defineuintunsignedint
#defineucharunsignedchar
#defineio_LCD12864_DATAPORTP0;
#defineSET_DATAio_LCD12864_RS=1;
#defineSET_INCio_LCD12864_RS=0;
#defineSET_READio_LCD12864_RW=1;
#defineSET_WRITEio_LCD12864_RW=0;
#defineSET_ENio_LCD12864_EN=1;
#defineCLR_ENio_LCD12864_EN=0;
#defineOSFREQ11059200//所使用的晶振频率
sbitio_LCD12864_RS=P2^3;
sbitio_LCD12864_RW=P2^4;
sbitio_LCD12864_EN=P2^5;
sbitBEEP_PWR=P2^7;
sbitP3.0=P3^0;
sbitP3.1=P3^1;
sbitP3.2=P3^2;
sbitP3.3=P3^3;
sbitP3.4=P3^4;
sbitP3.5=P3^5;
sbitP3.6=P3^6;
sbitP3.7=P3^7;
sbitP2.0=P2^0;
ucharFreqSandH,FreqSandL;/*产生方波的定时器的初值*/
uchartimer1cnt;/*定时器延时计数*/
uchartimer1cntflg;/*定时器定时完成标志*/
ucharg_PL=0,g_Pai=0;
uchargp_Freq[16]="当前频率值:
";
uintg_Freq=0;
/**************音符频率表****************/
uintcodenotefreq[]={523,587,659,698,784,880,988,
1047,1175,1319,1396,1568,1760,1976,
2093,2349,2637,2793,3136,3520,3961};
/*************音名***************/
ucharcodenotename[]={'c','d','e','f','g','a','b',
'1','2','3','4','5','6','7',
'C','D','E','F','G','A','B',0};
/*************半音频率表*****************/
uintcodehalfnotefreq[]={554,622,740,831,933,
1109,1245,1480,1161,1865,
2218,2489,2960,3322,3729};
/*************音名***************/
ucharcodehalfnotename[]={'c','d','f','g','a',
'1','2','4','5','6',
'C','D','F','G','A',0};
/*声明*/
voidDis_PL(uchar*p,uniti);
voidv_Lcd12864CheckBusy_f(void);
voidv_Lcd12864SendCmd_f(unsignedcharbyCmd);
voidv_Lcd12864SendData_f(unsignedcharbyData);
voidv_DelayMs_f(unsignedintnDelay);
voidv_Lcd12864Init_f(void);
voidv_Lcd12864PutString_f(unsignedcharx,unsignedchary,unsignedchar*pData);
4.2音乐程序
主要利用单片机的频率发生器产生方波,来产生不同频率的音乐。
[10],具体程序如下。
voidmain(void)
{
uinti;
TMOD=0x11;ET1=1;ET0=1;EA=1;
v_Lcd12864Init_f();
while
(1)
{
if(P1.0==0)
{
if(i==1)i=0;//启动关闭按键
if(i==0)i=1;
}
if(i==1)
{
//Play("1_1_5_5_6_6_54_4_3_3_2_2_15_5_4_4_3_3_25_5_4_4_3_3_21_1_5_5_6_6_54_4_3_3_2_2_1");//满天都是小星星
v_Lcd12864PutString_f(0,0,"曲目:
两只老虎");
Play("1_2_3_1_1_2_3_1_3_4_53_4_55=6=5=4=3_1_5=6=5=4=3_1_2_g_12_g_1");//两只老虎
//Play("a-a1-a2--a-b1b13-2a--a--a-33-12--a-b1b13-21--1--5-55432--a-b1-12123--3--1-1_1_1235--4-32-b3-2a--a--a-66565--4-34-56543--3--1-1_1_1235--4-32-b3-2a--a--");//山楂树
v_Lcd12864PutString_f(0,0,"学习雷锋好榜样");
Play("5._3=2_1_5