欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    毕业设计基于51单片机的多功能迷你跑马音乐盒设计.doc

    • 资源ID:4149534       资源大小:448.50KB        全文页数:20页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    毕业设计基于51单片机的多功能迷你跑马音乐盒设计.doc

    广东机电职业技术学院电子产品设计 论文题目: 多功能迷你跑马音乐盒 专 业: 计算机控制技术 班 级: 学生姓名: 指导教师: 二零一零年五月目 录摘要31设计的作用、目的32设计的具体实现.32.1系统概述.32.2 单元电路设计与分析42.3电路的安装与调试73 心得体会及建议83.1 心得体会83.2 建议84 附录95参考文献18摘 要跑马灯,顾名思义,就是“会像马儿一样跑动”的小灯,故取名“跑马灯”。跑马灯在单片机系统中一般是用来指示和显示单片机的运行状态,一般情况下,单片机的跑马灯由多个LED发光二极管组成。在单片机运行时,可以在不同状态下让跑马灯显示不同的组合,作为单片机系统正常的指示。当单片机系统出现故障时,可以利用跑马灯显示当前的故障码,对故障做出诊断。此外,跑马灯在单片机的调试过程中也非常有用,可以在不同时候将需要的寄存器或关键变量的值显示在跑马灯上,提供需要的调试信息。1设计的作用、目的(1)使用32个彩色LED灯,用这32个发光二极管以不同的模式循环点亮;(2)、三个功能键,K1模式键,通过按键调整显示结果,总共有十种模式;K2加速键;K3减速键;(3)当撤换最后一个功能模式时,蜂鸣器将会播放音乐,此时LED将当作音频灯使用;(4)十种模式通过一个共阳数码管显示出来,十个模式分别显示为09。通过发光二极管的动态闪亮,显示非常炫目的效果,应用于各种建筑物,大楼,酒吧,KTV,夜总会等娱乐场所,拖尾灯,以及各种休闲娱乐场所用的动态灯光显示,通过此次设计,可以加深对51单片机的应用、C51编程和protues软件操作的能力。了解51单片机的外围引脚,以及各个端口的功能,还可以通过对走马灯的程序编写让我们对程序的执行方式和特点有一个初步的认识,同时掌握C51软件与protues联机调试程序,对进一步学习单片机打下坚实基础。2设计的具体实现2.1系统概述本设计的要求是设计一个有多种功能的走马灯,有多种不同的显示方式,加速功能和减速功能,这里的加速减速还有显示方式都是由单片机内部的程序控制,在这里我将32个光二极管分别接在P0和P1,通过程序控制这两个端口的电平高低,将32个光二极管的正极接电源,负极接P0和P1口,即发P0和P1口的相应端口为高电平时,发光二极管的两端都为高电平,所以发光二极管不亮,当发光二极管的相应端口为低电平时就能被点亮。再通过程序循环的让各个端口以不同的方式点亮来达到走马的效果,并且当中要有一定的延时,延时时间小于人眼视觉暂留时间,否则人眼看上去每个灯都是亮的也就没有跑马效果。系统框图如图一:MCU(AT89S51)LED显示阵列12M晶振复位电路7段共阴数码管键盘图一 系统框图2.2 单元电路设计与分析1. 主控芯片AT89S52AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。2. AT89S52性能简介AT89S52具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。AT89S52 PDIP Pin Configurations如图二:图二 AT89S52 Pin Configurations3.显示部分:显示部分用32个发光二极管分别接在P0和P1,通过程序控制P0和P2的16个端口按照一定的方式依次为低电平以点亮相应端口的LED。LED阵列如图三:图三 LED显示阵列4. 模式显示部分:模式即跑马的方式,共十种。相应方式由数码管显示出来,每当模式按钮按下时,相应的模式加一 ,数码管显示相应模式。共阴数码管结构如图四:a 各段代码 b 实物外观图四 共阳数码管结构5.单片机部分:该部分主要涉及功能的实现方式,即程序编写。程序要实现的功能包括读键盘,通过对读入键盘的值控制LED点亮方式和数码管显示。键盘有三个按键K1、K2、K3,K1控制LED点亮模式,K2、K3键控制跑马灯速度,K2加速,K3减速。不论K1被按下多少次,LED九种点亮模式是循环的,K2、K3键控制速度分别有上限和下限,多按无效。6音乐播放部分:撤换最后一个功能模式时,蜂鸣器将会播放音乐,此时LED将当作音频灯使用。当中共有三首音乐,分别是我的骄傲 同一首歌和两只蝴蝶此时K2加速充当下一曲的作用,K3减速充当上一曲的作用,歌曲是循环播放的,此时LED彩色灯将从当随音频变化的指示灯。程序设计思路:主程序中默认执行左右流水灯,在中断服务程序中,首先读取按键状态,然后延时10ms,再次读取按键状态。把两次获得的按键状态比较,如果不同,就表示是抖动,退出中断;否则,就去判断是哪个按键按下。如果是K1,就执行下一个跑马;如果是K2,就执行跑马加速;如果是K3,就执行跑马减速。采用置标志位的方法。即在主程序中设定两个标志位,一个跑马模式标志位,一个跑马速度标志位。不断的对这三个标志进行查询:如果是跑马模式标志为状态0,就执行右向跑马;如果是状态1,就执行左向跑马灯,依次类推。跑马速度标志默认值为10,对应延时值为200ms。而在中断服务程序中,只需要进行如下工作:去抖动,键盘识别,改变标志位。程序流程图如图五:图五程序流程图2.3电路的安装与调试用keil将程序编写好之后,检查程序有无错误。有错误就改正,直到没有错误,最后生成HEX文件,再用peoteus画好硬件电路图,将单片机指向刚生成的HEX文件并进行仿真调试,在调试过程当中通过调试的结果完善程序。一切之后,下面就进行最后阶段,即在面包板上搭电路,然后用烧写器将HEX文件下载到AT89S52单片机中。调试电路,带着笑容欣赏胜利的成果。仿真图如图:3心得体会及建议3.1 心得体会通过此次课程设计,不仅初步掌握了51单片机的一些基本功能应用,还学会了使用keil和protues两个软件。知道了怎么用keil新建工程文件、编写调试程序、生成HEX文件;怎么用protues软件画图,特别是总线的画法,怎么仿真等。我会以此为起点,进一步学习和使用单片机,为将来工作打基础。感谢我的51单片机启蒙老师李建波老师的教诲。3.2 建议希望老师多我们讲一些单片机的研究方向,平时也多给我们出一些小设计课题,我觉得像这样自己做一个设计对理论学习是一个很好的总结,当我们有不懂的东西的时候也可以得到老师的指点,这样才能够更全面的认识和学好单片机。4 附录实物图如图六:C程序如下:#include <REG52.H>#include "SoundPlay.h"unsigned char RunMode;/*System Fuction*void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;i<count;i+)for(j=0;j<120;j+);unsigned char code LEDDisplayCode = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, /07                               0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF;void Display(unsigned char Value)P3 = LEDDisplayCodeValue;void LEDFlash(unsigned char Count)unsigned char i;bit Flag;for(i = 0; i<Count;i+)   Flag = !Flag;   if(Flag)    Display(RunMode);   else    Display(0x10);   Delay1ms(100);Display(RunMode);unsigned char GetKey(void)unsigned char KeyTemp,CheckValue,Key = 0x00;CheckValue = P2&0x32;if(CheckValue=0x32)   return 0x00;Delay1ms(10);KeyTemp = P2&0x32;if(KeyTemp=CheckValue)   return 0x00;if(!(CheckValue&0x02)   Key|=0x01;if(!(CheckValue&0x10)   Key|=0x02;if(!(CheckValue&0x20)   Key|=0x04;return Key;unsigned int Timer0Count,SystemSpeed,SystemSpeedIndex;void InitialTimer2(void)T2CON = 0x00;    /16 Bit Auto-Reload Mode   TH2 = RCAP2H = 0xFC; /重装值,初始值 TL2 = RCAP2L = 0x18;ET2=1;      /定时器 2 中断允许TR2 = 1;     /定时器 2 启动EA=1;unsigned int code 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;/30void SetSpeed(unsigned char Speed)SystemSpeed =SpeedCodeSpeed;void LEDShow(unsigned int LEDStatus)P1 = (LEDStatus&0x00FF);P0 = (LEDStatus>>8)&0x00FF);void InitialCPU(void)RunMode = 0x00;Timer0Count = 0;SystemSpeedIndex = 9;P1 = 0x00;P0 = 0x00;P2 = 0xFF;P3 = 0x00;Delay1ms(500);P1 = 0xFF;P0 = 0xFF;P2 = 0xFF;P3 = 0xFF;SetSpeed(SystemSpeedIndex);Display(RunMode);/Mode 0unsigned int LEDIndex = 0;bit LEDDirection = 1,LEDFlag = 1;void Mode_0(void)LEDShow(0x0001<<LEDIndex);LEDIndex = (LEDIndex+1)%16;/Mode 1void Mode_1(void)LEDShow(0x8000>>LEDIndex);LEDIndex = (LEDIndex+1)%16;/Mode 2void Mode_2(void)if(LEDDirection)   LEDShow(0x0001<<LEDIndex);else   LEDShow(0x8000>>LEDIndex);if(LEDIndex=15)   LEDDirection = !LEDDirection;   LEDIndex = (LEDIndex+1)%16;/Mode 3void Mode_3(void)if(LEDDirection)   LEDShow(0x0001<<LEDIndex);else   LEDShow(0x8000>>LEDIndex);if(LEDIndex=15)   LEDDirection = !LEDDirection;   LEDIndex = (LEDIndex+1)%16;/Mode 4void Mode_4(void)if(LEDDirection)   if(LEDFlag)    LEDShow(0xFFFE<<LEDIndex);    else    LEDShow(0x7FFF>>LEDIndex);else   if(LEDFlag)    LEDShow(0x7FFF>>LEDIndex);   else    LEDShow(0xFFFE<<LEDIndex);if(LEDIndex=15)   LEDDirection = !LEDDirection;   if(LEDDirection) LEDFlag = !LEDFlag;   LEDIndex = (LEDIndex+1)%16;/Mode 5void Mode_5(void)if(LEDDirection)   LEDShow(0x000F<<LEDIndex);else   LEDShow(0xF000>>LEDIndex);if(LEDIndex=15)   LEDDirection = !LEDDirection;    LEDIndex = (LEDIndex+1)%16;/Mode 6void Mode_6(void)if(LEDDirection)   LEDShow(0x000F<<LEDIndex);else   LEDShow(0xF000>>LEDIndex);if(LEDIndex=15)   LEDDirection = !LEDDirection;   LEDIndex = (LEDIndex+1)%16;/Mode 7void Mode_7(void)if(LEDDirection)   LEDShow(0x003F<<LEDIndex);else   LEDShow(0xFC00>>LEDIndex);if(LEDIndex=9)   LEDDirection = !LEDDirection;    LEDIndex = (LEDIndex+1)%10;/Mode 8void Mode_8(void)LEDShow(+LEDIndex);void Timer0EventRun(void)if(RunMode=0x00)   Mode_0(); else if(RunMode =0x01)   Mode_1();else if(RunMode =0x02)   Mode_2();else if(RunMode =0x03)   Mode_3();else if(RunMode =0x04)   Mode_4();else if(RunMode =0x05)   Mode_5();else if(RunMode =0x06)   Mode_6();else if(RunMode =0x07)   Mode_7();else if(RunMode =0x08)   Mode_8();void Timer2(void) interrupt 5 using 3TF2 = 0; /中断标志清除( Timer2 必须软件清标志!)if(+Timer0Count>=SystemSpeed)   Timer0Count = 0;   Timer0EventRun();   unsigned char MusicIndex = 0;void KeyDispose(unsigned char Key)if(Key&0x01)   LEDDirection = 1;   LEDIndex = 0;   LEDFlag = 1;   RunMode = (RunMode+1)%10;   Display(RunMode);   if(RunMode=0x09)    TR2 = 0;   else    TR2 = 1;if(Key&0x02)   if(RunMode=0x09)       MusicIndex =(MusicIndex+MUSICNUMBER-1)%MUSICNUMBER;      else       if(SystemSpeedIndex>0)         -SystemSpeedIndex;     SetSpeed(SystemSpeedIndex);        else         LEDFlash(6);    if(Key&0x04)   if(RunMode=0x09)       MusicIndex =(MusicIndex+1)%MUSICNUMBER;      else       if(SystemSpeedIndex<28)         +SystemSpeedIndex;     SetSpeed(SystemSpeedIndex);        else         LEDFlash(6);        /*Music*/挥着翅膀的女孩unsigned char code Music_Girl= 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03,                                  0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03,                                  0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03,                                  0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,                                  0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03,                                  0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03,                                  0x1B,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03,                                  0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03,                                  0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03,                                  0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02,                                  0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,                                  0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,                                  0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,                                  0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03,                                  0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03,                                  0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,                                  0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,                                  0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,                                  0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,                                  0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03, 0x1B,0x03,                                  0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03,                                  0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03,                                  0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E,                                  0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03,                                  0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66,                                  0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03,                                  0x1F,0x66, 0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03,                                  0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,                                  0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04,                                  0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,                                  0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03,                                  0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03,                                  0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,                                  0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x18,0x02,                                  0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02,                                  0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00;/同一首歌unsigned char code Music_Same= 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03,                                  0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02,                                  0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02,                                  0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66,                                  0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00,                                  0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70, 0x1A,0x03,                                  0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02,                                  0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03,                                  0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D, 0x17,0x03,                                  0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C,                                  0x10,0x02, 0x15,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66,                                  0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03,                                  0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01,                                  0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02,                                  0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03,                                  0x16,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70,                                  0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66,                                  0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02,                                  0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C,                                  0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66,                                  0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00,                                  0x00,0x00 ;/两只蝴蝶                                  unsigned char code Music_Two = 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,                                  0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,                                  0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,                                  0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03,                                  0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01,                                  0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,                                  0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01,                                  0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,                                  0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,                                  0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,                                  0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x19,0x03,                                  0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01,                                  0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,                                  0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D, 0x15,0x00,                           

    注意事项

    本文(毕业设计基于51单片机的多功能迷你跑马音乐盒设计.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开