基于AT89S52单片机的多模式带音乐跑马灯设计实训报告.docx
- 文档编号:7447621
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:22
- 大小:119.73KB
基于AT89S52单片机的多模式带音乐跑马灯设计实训报告.docx
《基于AT89S52单片机的多模式带音乐跑马灯设计实训报告.docx》由会员分享,可在线阅读,更多相关《基于AT89S52单片机的多模式带音乐跑马灯设计实训报告.docx(22页珍藏版)》请在冰豆网上搜索。
基于AT89S52单片机的多模式带音乐跑马灯设计实训报告
实训课题基于AT89S52单片机的多模式
带音乐跑马灯设计
一、实训目的及要求
(1)通过实训,理解与掌握单片机系统的开发流程及常见系统的开发设计、仿真调试等,培养一定的单片机设计与开发能力。
(2)掌握按键电路的设计。
(3)掌握单片机复位电路和晶振电路的工作原理及设计。
(4)掌握和了解+5V电源原理设计。
(5)了解单片机C语言及程序设计。
(6)对KeilC51和Proteus7软件进展熟练的掌握和操作。
二、实训设备和元器件
装有Proteus、KeilC软件的PC机一台,AT89S52单片机一块,12MHZ晶振,电容,电解电容,电阻,16个发光二级管,按键,三极管,74LS245集成块,LED数码管,+5V电源,印制板。
三、实训任务及功能要求
(1)有16个发光二极管做跑马灯,其中跑马灯有10种亮灯模式。
(2)有专门的按键用以切换跑马灯的模式,并且对于任何一种跑马灯模式都可以对亮灯速度进展控制。
(3)每一种跑马灯模式用LED数码管进展显示。
(4)当跑马灯处于一种模式时,伴随的音乐响起,音乐至少有3首,并可以对其进展切换。
四、系统硬件电路
1、系统硬件框图
基于AT89S52单片机的多模式带音乐跑马灯控制系统由电源电路、单片机主控电路、模式切换以及调速按键控制电路、LED数码管显示电路和16个发光二级管的跑马灯电路几局部组成,系统框图如图1-1所示:
图1-1基于AT89S52单片机的多模式带音乐跑马灯控制系统框图
2、系统电路原理图
本工程用AT89S52单片机的P1,P2口分别控制8个跑马灯,而P3口与LED数码管相连,音乐采用蜂鸣器接P2.6输出,P2.1接模式键切换按键,P2.4和P2.5分别接跑马灯加速和减速按键,在音乐播放时加速与减速按键可以控制音乐的切换。
综上所述,可设计出基于AT89S52单片机的多模式带音乐跑马灯,电路原理图如图1-2所示:
图1-2基于AT89S52单片机的多模式带音乐跑马灯原理图
五、系统控制软件
1、控制流程图
该程序采用两个程序编写:
第一个为单片机主程序,作用是使单片机完成相应上电功能;第二个为音乐产生程序,在第一个程序中包含第二个程序的头文件。
程序流程图如图1-3所示:
(a)主程序(b)音乐产生程序
图1-3程序流程图
2、系统源程序〔C或汇编〕
*include
*include
unsignedcharRunMode;
voidDelay1ms(unsignedintcount)
{
unsignedinti,j;
for(i=0;j for(j=0;j<1200;j++); } unsignedcharcodeLEDDisplayCode[]={ 0*C0,0*F9,0*A4,0*B0,0*99,0*92,0*82,0*F8, 0*80,0*90,0*88,0*83,0*C6,0*A1,0*86,0*8E,0*FF}; voidDisplay(unsignedcharValue) {P3=LEDDisplayCode[Value];} voidLEDflash(unsignedcharcount) { unsignedchari; bitFlag; for(i=0;i { Flag=! Flag; if(Flag) Display(RunMode); else Display(0*10); Delay1ms(100); } Display(RunMode); } unsignedcharGetKey(void) { unsignedcharKeyTemp,CheckValue,Key=0*00; CheckValue=P2&0*32; if(CheckValue==0*32) return0*00; Delay1ms(10); KeyTemp=P2&0*32; if(KeyTemp==CheckValue)return0*00; if(! (CheckValue&0*02))Key|=0*01; if(! (CheckValue&0*10))Key|=0*02; if(! (CheckValue&0*20))Key|=0*04; returnKey; } unsignedintTimer0Count,SystemSpeed,SystemSpeedInde*; voidInitialTimer2(void) { T2CON=0*00; TH2=RCAP2H=0*FC; ET2=1; TR2=1; EA=1; } Unsignedintcode SpeedCode[]={1,2,3,5,8,10,14,17,20,30,40,50,60,70,80,90,100,120,140,160,180,200,300,400,500,600,700,800,900,1000}; voidSetSpeed(unsignedcharSpeed) {SystemSpeed=SpeedCode[Speed];} voidLEDShow(unsignedintLEDStatus) { P1=~(LEDStatus&0*00FF); P0=~((LEDStatus>>8)&0*00FF); } voidInitialCPU(void) { RunMode=0*00; Timer0Count=0; SystemSpeedInde*=22; P1=0*00; P0=0*00; P2=0*FF; P3=0*00; Delay1ms(500); P1=0*FF; P0=0*FF; P2=0*FF; P3=0*FF; SetSpeed(SystemSpeedInde*); Display(RunMode); } unsignedintLEDinde*=0; bitLEDDirection=1,LEDflag=1; voidmode_0(void) { LEDShow(0*0001< LEDinde*=(LEDinde*+1)%16; } voidmode_1(void) { LEDShow(0*8000>>LEDinde*); LEDinde*=(LEDinde*+1)%16; } voidmode_2(void) { if(LEDDirection) LEDShow(0*0001< else LEDShow(0*8000>>LEDinde*); if(LEDinde*==15) LEDDirection=! LEDDirection; LEDinde*=(LEDinde*+1)%16; } voidmode_3(void) { if(LEDDirection)LEDShow(~(0*0001< elseLEDShow(~(0*8000>>LEDinde*)); if(LEDinde*==15)LEDDirection=! LEDDirection; LEDinde*=(LEDinde*+1)%16; } voidmode_4(void) { if(LEDDirection) { if(LEDflag)LEDShow(0*FFFE< elseLEDShow(~(0*7FFF>>LEDinde*)); } else { if(LEDflag)LEDShow(0*7FFF>>LEDinde*); elseLEDShow(~(0*FFFE< } if(LEDinde*==15) { LEDDirection=! LEDDirection; if(LEDDirection)LEDflag=! LEDflag; } LEDinde*=(LEDinde*+1)%16; } voidmode_5(void) { if(LEDDirection)LEDShow(0*000F< elseLEDShow(0*F000>>LEDinde*); if(LEDinde*==15)LEDDirection=! LEDDirection; LEDinde*=(LEDinde*+1)%16; } voidmode_6(void) { if(LEDDirection)LEDShow(~(0*000F< elseLEDShow(~(0*F000>>LEDinde*)); if(LEDinde*==15)LEDDirection=! LEDDirection; LEDinde*=(LEDinde*+1)%16; } voidmode_7(void) { if(LEDDirection)LEDShow(~(0*003F< elseLEDShow(~(0*FC00>>LEDinde*)); if(LEDinde*==9)LEDDirection=! LEDDirection; LEDinde*=(LEDinde*+1)%10; } voidmode_8(void) { LEDShow(++LEDinde*); } voidTimer0EventRun(void) { if(RunMode==0*00){mode_0();} elseif(RunMode==0*01) {mode_1();} elseif(RunMode==0*02) {mode_2();} elseif(RunMode==0*03) {mode_3();} elseif(RunMode==0*04) {mode_4();} elseif(RunMode==0*05) {mode_5();} elseif(RunMode==0*06) {mode_6();} elseif(RunMode==0*07) {mode_7();} elseif(RunMode==0*08) {mode_8();}} voidtimer2(void)interrupt5using3 { TF2=0; if(++Timer0Count>=SystemSpeed) { Timer0Count=0; Timer0EventRun(); } } unsignedcharMusicInde*=0; voidkeydispose(unsignedcharkey) { if(key&0*01) { LEDDirection=1; LEDinde*=0; LEDflag=1; RunMode=(RunMode+1)%10; Display(RunMode); if(RunMode==0*09)TR2=0; elseTR2=1; } if(key&0*02) { if(RunMode==0*09){MusicInde*=(MusicInde*+MUSIUMBER-1)%MUSIUMBER;} else { if(SystemSpeedInde*>0) { --SystemSpeedInde*; SetSpeed(SystemSpeedInde*); } else{LEDflash(6);} } } if(key&0*04) { if(RunMode==0*09||0*08||0*07||0*06||0*05||0*04||0*03||0*02||0*01||0*00) {MusicInde*=(MusicInde*+1)%MUSIUMBER;} else { if(SystemSpeedInde*<28) { ++SystemSpeedInde*; SetSpeed(SystemSpeedInde*); } else{LEDflash(6);} } } } unsignedcharcodeMusic_Girl[]={ 0*17,0*02,0*17,0*03,0*18,0*03,0*19,0*02,0*15,0*03, 0*16,0*03,0*17,0*03,0*17,0*03,0*17,0*03,0*18,0*03, 0*19,0*02,0*16,0*03,0*17,0*03,0*18,0*02,0*18,0*03, 0*17,0*03,0*15,0*02,0*18,0*03,0*17,0*03,0*18,0*02, 0*10,0*03,0*15,0*03,0*16,0*02,0*15,0*03,0*16,0*03, 0*17,0*02,0*17,0*03,0*18,0*03,0*19,0*02,0*1A,0*03, 0*1B,0*03,0*1F,0*03,0*1F,0*03,0*17,0*03,0*18,0*03, 0*19,0*02,0*16,0*03,0*17,0*03,0*18,0*03,0*17,0*03, 0*18,0*03,0*1F,0*03,0*1F,0*02,0*16,0*03,0*17,0*03, 0*18,0*03,0*17,0*03,0*18,0*03,0*20,0*03,0*20,0*02, 0*1F,0*03,0*1B,0*03,0*1F,0*66,0*20,0*03,0*21,0*03, 0*20,0*03,0*1F,0*03,0*1B,0*03,0*1F,0*66,0*1F,0*03, 0*1B,0*03,0*19,0*03,0*19,0*03,0*15,0*03,0*1A,0*66, 0*1A,0*03,0*19,0*03,0*15,0*03,0*15,0*03,0*17,0*03, 0*16,0*66,0*17,0*04,0*18,0*04,0*18,0*03,0*19,0*03, 0*1F,0*03,0*1B,0*03,0*1F,0*66,0*20,0*03,0*21,0*03, 0*20,0*03,0*1F,0*03,0*1B,0*03,0*1F,0*66,0*1F,0*03, 0*1B,0*03,0*19,0*03,0*19,0*03,0*15,0*03,0*1A,0*66, 0*1A,0*03,0*19,0*03,0*19,0*03,0*1F,0*03,0*1B,0*03, 0*1F,0*00,0*1A,0*03,0*1A,0*03,0*1A,0*03,0*1B,0*03, 0*1B,0*03,0*1A,0*03,0*19,0*03,0*19,0*02,0*17,0*03, 0*15,0*17,0*15,0*03,0*16,0*03,0*17,0*03,0*18,0*03, 0*17,0*04,0*18,0*0E,0*18,0*03,0*17,0*04,0*18,0*0E, 0*18,0*66,0*17,0*03,0*18,0*03,0*17,0*03,0*18,0*03, 0*20,0*03,0*20,0*02,0*1F,0*03,0*1B,0*03,0*1F,0*66, 0*20,0*03,0*21,0*03,0*20,0*03,0*1F,0*03,0*1B,0*03, 0*1F,0*66,0*1F,0*04,0*1B,0*0E,0*1B,0*03,0*19,0*03, 0*19,0*03,0*15,0*03,0*1A,0*66,0*1A,0*03,0*19,0*03, 0*15,0*03,0*15,0*03,0*17,0*03,0*16,0*66,0*17,0*04, 0*18,0*04,0*18,0*03,0*19,0*03,0*1F,0*03,0*1B,0*03, 0*1F,0*66,0*20,0*03,0*21,0*03,0*20,0*03,0*1F,0*03, 0*1B,0*03,0*1F,0*66,0*1F,0*03,0*1B,0*03,0*19,0*03, 0*19,0*03,0*15,0*03,0*1A,0*66,0*1A,0*03,0*19,0*03, 0*19,0*03,0*1F,0*03,0*1B,0*03,0*1F,0*00,0*18,0*02, 0*18,0*03,0*1A,0*03,0*19,0*0D,0*15,0*03,0*15,0*02, 0*18,0*66,0*16,0*02,0*17,0*02,0*15,0*00,0*00,0*00}; unsignedcharcodeMusic_Same[]={ 0*0F,0*01,0*15,0*02,0*16,0*02,0*17,0*66,0*18,0*03, 0*17,0*02,0*15,0*02,0*16,0*01,0*15,0*02,0*10,0*02, 0*15,0*00,0*0F,0*01,0*15,0*02,0*16,0*02,0*17,0*02, 0*17,0*03,0*18,0*03,0*19,0*02,0*15,0*02,0*18,0*66, 0*17,0*03,0*19,0*02,0*16,0*03,0*17,0*03,0*16,0*00, 0*17,0*01,0*19,0*02,0*1B,0*02,0*1B,0*70,0*1A,0*03, 0*1A,0*01,0*19,0*02,0*19,0*03,0*1A,0*03,0*1B,0*02, 0*1A,0*0D,0*19,0*03,0*17,0*00,0*18,0*66,0*18,0*03, 0*19,0*02,0*1A,0*02,0*19,0*0C,0*18,0*0D,0*17,0*03, 0*16,0*01,0*11,0*02,0*11,0*03,0*10,0*03,0*0F,0*0C, 0*10,0*02,0*15,0*00,0*1F,0*01,0*1A,0*01,0*18,0*66, 0*19,0*03,0*1A,0*01,0*1B,0*02,0*1B,0*03,0*1B,0*03, 0*1B,0*0C,0*1A,0*0D,0*19,0*03,0*17,0*00,0*1F,0*01, 0*1A,0*01,0*18,0*66,0*19,0*03,0*1A,0*01,0*10,0*02, 0*10,0*03,0*10,0*03,0*1A,0*0C,0*18,0*0D,0*17,0*03, 0*16,0*00,0*0F,0*01,0*15,0*02,0*16,0*02,0*17,0*70, 0*18,0*03,0*17,0*02,0*15,0*03,0*15,0*03,0*16,0*66, 0*16,0*03,0*16,0*02,0*16,0*03,0*15,0*03,0*10,0*02, 0*10,0*01,0*11,0*01,0*11,0*66,0*10,0*03,0*1F,0*0C, 0*1A,0*02,0*19,0*02,0*16,0*03,0*16,0*03,0*18,0*66, 0*18,0*03,0*18,0*02,0*17,0*03,0*16,0*03,0*19,0*00, 0*00,0*00}; unsignedcharcodeMusic_Two[]={ 0*17,0*03,0*16,0*03,0*17,0*01,0*16,0*03,0*17,0*03, 0*16,0*03,0*15,0*01,0*10,0*03,0*15,0*03,0*16,0*02, 0*16,0*0D,0*17,0*03,0*16,0*03,0*15,0*03,0*10,0*03, 0*10,0*0E,0*15,0*04,0*1F,0*01,0*17,0*03,0*16,0*03, 0*17,0*01,0*16,0*03,0*17,0*03,0*16,0*03,0*15,0*01, 0*10,0*03,0*15,0*03,0*16,0*02,0*16,0*0D,0*17,0*03, 0*16,0*03,0*15,0*03,0*10,0*03,0*15,0*03,0*16,0*01, 0*17,0*03,0*16,0*03,0*17,0*01,0*16,0*03,0*17,0*03, 0*16,0*03,0*15,0*01,0*10,0*03,0*15,0*03,0*16,0*02, 0*16,0*0D,0*17,0*03,0*16,0*03,0*15,0*03,0*10,0*03, 0*10,0*0E,0*15,0*04,0*0F,0*01,0*17,0*03,0*19,0*03, 0*19,0*01,0*19,0*03,0*1A,0*03,0*19,0*03,0*17,0*01, 0*16,0*03,0*16,0*03,0*16,0*02,0*16,0*0D,0*17,0*03, 0*16,0*03,0*15,0*03,0*10,0*03,0*10,0*0d,0*15,0*00, 0*19,0*03,0*19,0*03,0*1A,0*03,0*1F,0*03,0*1B,0*03, 0*1B,0*03,0*1A,0*03,0*17,0*0D,0*16,0*03,0*16,0*03, 0*16,0*0D,0*17,0*01,0*17,0*03,0*17,0*03,0*19,0*03, 0*1A,0*02,0*1A,0*02,0*10,0*03,0*17,0*0D,0*16,0*03, 0*16,0*01,0*17,0*03,0*19,0*03,0*19,0*03,0*17,0*03, 0*19,0*02,0*1F,0*02,0*1B,0*03,0*1A,0*03,0*1A,0*0E, 0*1B,0*04,0*17,0*02,0*1A,0*03,0*1A,0*03,0*1A,0*0E, 0*1B,0*04,0*1A,0*03,0*19,0*03,0*17,0*03,0*16,0*03, 0*17,0*0D,0*16,0*03,0*17,0*03,0*19,0*01,0*19,0*03, 0*19,0*03,0*1A,0*03,0*1F,0*03,0*1B,0*03,0*1B,0*03, 0*1A,0*0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AT89S52 单片机 模式 音乐 跑马 设计 报告