可控音乐走马灯Word格式文档下载.docx
- 文档编号:18916203
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:21
- 大小:769.02KB
可控音乐走马灯Word格式文档下载.docx
《可控音乐走马灯Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《可控音乐走马灯Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
附录Ⅱ-13-
附录Ⅲ:
-21-
附录IV-21-
1引言
生活中我们经常遇到同学过生日,酒店装饰门面,节日装饰彩灯等各种需要彩灯和音乐控制的场合,因此基于以上的原因,我们组经过共同的讨论和深入考虑决定做带音乐的走马灯控制。
我们的作品采用了STC89C52单片机进行了简单的设计,并通过蜂鸣器放大电路放大信号播放音乐,中间还设有控制不同模式走马灯和音乐播放的加速和减速的开关控制电路。
总的来说我们的作品还算成功吧,只是在采购器件时没有把握好灯的颜色,软件设计时对于音乐知识的欠缺,所以导致我们作品的可视性和听觉上没有一个特别好的效果。
但是我们还会继续努力争取取得更大的进步。
2硬件系统的设计与功能实现
2.1单片机控制系统原理
为了简化电路、降低成本、提高可靠性,本系统采用AT89C52作为主控制核心部件,它是一款与MCS51完全兼容且内部自带有8KB的Flash存储器及512KBRAM单元的芯片,因此可以不需另外扩展EEPROM及静态RAM就可以实现所需功能。
可控走马灯的设计总体结构框图如图1-1所示:
图2-1系统总体框图
2.2单片机选择及主机系统电路
单片机作为整个硬件系统的核心,它既是协调整机工作的控制器,又是数据处理器。
它由单片机、时钟电路、复位电路等组成。
为了简化电路、降低成本、提高可靠性,本系统采用STC89C52作为主控制器,它是一款与MCS51完全兼容且内部自带有8KB的Flash存储器及512KBRAM单元的芯片,因此可以不需另外扩展EEPROM及静态RAM就可以实现所需功能。
图2-2单片机主机系统图
2.2.1时钟电路
单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:
内部振荡和外部振荡。
STC89S52单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,如图2-2所示在其外接晶体振荡器(简称晶振)或陶瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。
图2-2中外接晶振以及电容C1和C2构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值均为30P左右,晶振频率选12MHz。
2.2.2复位电路
为了初始化单片机内部的某些特殊功能寄存器,必须采用复位的方式,复位后可使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。
单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果RST引脚上持续为高电平,单片机就处于循环复位状态。
复位后系统将输入/输出(1/0)端口寄存器置为FFH,堆栈指针SP置为07H,SBUF内置为不定值,其余的寄存器全部清0,内部RAM的状态不受复位的影响,在系统上电时RAM的内容是不定的。
复位操作有两种情况,即上电复位和手动(开关)复位。
本系统采用上电复位方式。
图2-2中R1和C3组成上电复位电路,其值R取为10K,C取为10μF。
2.2.3程序载入部件
程序的载入我们采用通用的MAX232连接RS232串口,连接计算机来实现。
MAX232是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。
由于电脑串口rs232电平是-10v+10v,而一般的单片机应用系统的信号电压是ttl电平0+5v,max232就是用来进行电平转换的,该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平。
该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5-VTTL/CMOS电平。
每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平。
主要特点
1、单5V电源工作
2、LinBiCMOSTM工艺技术
3、两个驱动器及两个接收器
4、±
30V输入电平
5、低电源电流:
典型值是8mA
6、符合甚至优于ANSI标准EIA/TIA-232-E及ITU推荐标准V.28
7、ESD保护大于MIL-STD-883(方法3015)标准的2000V
MAX232的相关连接电路图如下所示:
MAX232的外围电路
RS232的引脚连接
MAX232与STC89C52的连接图
2.3蜂鸣器驱动
考虑到本产品所需要的知识简单的发生,所以蜂鸣器作为一种最简单而且常用的发生设备,使用简单、方便,是我们的首选。
器驱动我们选的是9012放大三极管。
9012是一种最常用的普通三极管。
它是一种低电压,大电流,小信号的PNP型硅三极管
∙集电极电流Ic:
Max-500mA
∙集电极-基极电压Vcbo:
-40V
∙工作温度:
-55℃to+150℃
∙和9013(NPN)相对
∙主要用途:
o开关应用
o射频放大
具体电路如图2—3所示
图2-3蜂鸣器驱动电路
2.4LED流水灯
走马灯的实际设计采用16只LED数码管来显示,由P0和P1口来驱动,如下图
图2-4
2.5模式显示
模式显示采用数码管来显示,由于系统显示的内容比较简单,显示量不多,所以显示选用数码管既方便又经济。
LED有共阴极和共阳极两种。
。
符号和引脚共阴极共阳极
图2-5LED数码管结构原理图
二极管的阴极连接在一起,通常此共阴极接地,而共阳极则将二极管的阳极连接在一起,接入+5V的电压。
一位显示器由8个发光二极管组成,其中7个发光二极管。
当在某段发光二极管施加一定的正向电压时,该段笔画即亮;
不加电压即暗。
为了保护各段LED不被损坏,需外加限流电阻。
具体电路如图2-5所示。
3软件设计的实现与说明
硬件平台结构一旦确定,大的功能框架即形成。
软件在硬件平台上构筑,完成各部分硬件的控制和协调。
系统功能是由软硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。
因此,软件是本系统的灵魂。
软件采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和提高软件的可靠性。
同时,对软件进行全面测试也是检验错误排除故障的重要手段。
由于编程多涉及到数值运算,用我们平时常用的汇编语言编程是比较复杂,的,这里我们选用了移值性好、结构清晰、能进行复杂运算的C语言来实现编程。
3.1系统主程序设计
为了保证系统的可靠运行,必须要有良好的软件相配合,而且要有友好的人机对话功能,鉴于以上要求,该系统软件部分主要由主程序、中断子程序、延时子程序、提示音产生子程序等几大模块组成。
主程序流程图如图3-1所示。
图3-1程序流程图
4结束语
测试表明,可控音乐走马灯基本上能够较好的完成题目要求的要求。
同时作为我们的特色音乐播放效果也较为良好。
经过两个多月的努力,我们终于成功的完成了题目的基本要求,制作过程中,我们遇到了很多困难,比如放大器的选择和精确的放大电路,走马灯音乐代码的编写,单片机中断的控制等等,这些我们都耐心的一一克服。
经过这次比赛我们深刻体会到了团队的力量,培养了自己解决问题的能力,为我们以后在电子方面的发展奠定了基础。
在此,衷心的感谢老师们对我们的栽培和学校给我们创造的学习环境。
5致谢
在作品完成之际,我们要特别感谢指导老师的热情关怀和悉心指导。
在我们作品制作的过程中,老师们给了我们很多耐心的指导和启发,不仅让我学到了专业知识,还让我学到了很多做人的道理。
特别是他们广博的学识、深厚的学术素养、严谨的治学精神和一丝不苟的工作作风使我们终生受益,在此表示真诚地感谢。
在作品的制作过程中,也得到了许多同学的宝贵建议,在此一并致以诚挚的谢意。
感谢所有关心、支持、帮助过我们的朋友。
最后,向在百忙中抽出时间对本文进行评审并提出宝贵意见的各位领导老师表示衷心地感谢!
6参考文献
[1]兰吉昌等主编,51单片机应用设计百例[M].化学工业出版社.2009年出版
[2]傅丰林主编.低频电子线路(第二版)[M].高等教育出版社.2008
[3]傅丰林、原志强主编,低频电子线路电子教案[M].高等教育出版社.2005年出版
[4]刘雨棣主编,单片机原理及接口技术[M].西安电子科技大学出版社.2008年出版
附录Ⅰ:
系统实物图
正面实物图
背面实物图
附录Ⅱ:
所有软件的源程序
2010年6月12日制作
//────────────────────────────────
//硬件设计:
田宏涛
//系统分析员:
陈璞
//程序员:
袁帅
//测试:
袁帅陈璞田宏涛
//微控制器:
STC89C52
//晶振:
0-12MHz(5V,使用12MHZ晶振)
//──────────────────────────────────
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharsong_index=0,tone_index=0;
ucharModeNo;
uintSpeed;
uchar*song_tone_pointer,*song_time_pointer;
uchartCount=0;
ucharIdx;
ucharmb_Count=0;
uchari=0;
bitDirtect=1;
sbitbeep=P2^3;
ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uintcodesTable[]={0,1,3,5,7,9,15,30,50,100,200,230,280,300,350};
uintcodetone_delay[]={64021,64103,64260,64400,64524,64580,64684,64777,
64820,64898,64968,65030,65058,65110,65157,65178};
ucharcodesong1_tone[]={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};
ucharcodesong1_time[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xFF};
ucharcodesong2_tone[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xFF};
ucharcodesong2_time[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xFF};
ucharcodesong3_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};
ucharcodesong3_time[]={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};
voidDelay(uintx)
{
uchari;
while(x--)
for(i=0;
i<
120;
i++);
}
voidBeep()
unsignedinti;
for(i=0;
100;
i++)
{
Delay
(1);
beep=~beep;
}
beep=1;
ucharGetKey()
ucharK;
if(P2==0xff)
return0;
Delay(10);
switch(P2)
case0xfe:
K=1;
song_tone_pointer=song1_tone;
song_time_pointer=song1_time;
break;
case0xfd:
K=2;
song_tone_pointer=song2_tone;
song_time_pointer=song2_time;
case0xfb:
K=3;
song_tone_pointer=song3_tone;
song_time_pointer=song3_time;
default:
K=0;
while(P2!
=0xff);
returnK;
voidplaymusic()
uinti=0,j,k;
while(song3_time[i]!
=0||song3_tone[i]!
=0)
for(j=0;
j<
song3_time[i]*20;
j++)
for(k=0;
k<
song3_tone[i]/3;
k++);
i++;
}
voidLed_Demo(uintLed16)
P1=(uchar)(Led16&
0x00FF);
P0=(uchar)(Led16>
>
8);
voidT0_INT()interrupt1
if(++tCount<
Speed)
return;
tCount=0;
switch(ModeNo)
case0:
Led_Demo(0x0001<
<
mb_Count);
case1:
Led_Demo(0x8000>
case2:
if(Dirtect)
{Led_Demo(0x000f<
else
{Led_Demo(0xf000>
if(mb_Count==15)
Dirtect=!
Dirtect;
break;
case3:
{Led_Demo(~(0x000f<
mb_Count));
Led_Demo(~(0xf000>
case4:
{Led_Demo(0x003f<
Led_Demo(0xfc00>
case5:
{Led_Demo(0x0001<
Led_Demo(0x8000>
case6:
case7:
{Led_Demo(0xfffe<
Led_Demo(0x7fff>
mb_Count=(mb_Count+1)%16;
voidKeyProcess(ucharKey)
switch(Key)
Dirtect=1;
mb_Count=0;
ModeNo=(ModeNo+1)%8;
P3=DSY_CODE[ModeNo];
if(Idx>
1)Speed=sTable[--Idx];
if(Idx<
15)Speed=sTable[++Idx];
voidmain()
ucharKey;
P0=P1=P2=P3=0xFF;
ModeNo=0;
Idx=4;
Speed=sTable[Idx];
P3=DSY_CODE[ModeNo];
IE=0x82;
TMOD=0x00;
TR0=1;
while
(1)
Key=GetKey();
if(Key!
{Beep();
playmusic();
KeyProcess(Key);
}
原理图
附录IV:
元器件清单
元件名称:
数量(个)
电阻(220,330,1K,10K)
共19个
电容(30p,10u)0.2W
共3个
三极管(9012)
1个
发光二极管
16个
晶振(12MHz)
LED八段数码管
按键开关
3个
排阻(220,1k)
共2个
蜂鸣器
电路板、排线、排针
若干
MAX232
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可控 音乐 走马灯