基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx

上传人:b****8 文档编号:9013777 上传时间:2023-05-16 格式:DOCX 页数:24 大小:374.08KB
下载 相关 举报
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第1页
第1页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第2页
第2页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第3页
第3页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第4页
第4页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第5页
第5页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第6页
第6页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第7页
第7页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第8页
第8页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第9页
第9页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第10页
第10页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第11页
第11页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第12页
第12页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第13页
第13页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第14页
第14页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第15页
第15页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第16页
第16页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第17页
第17页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第18页
第18页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第19页
第19页 / 共24页
基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx

《基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx》由会员分享,可在线阅读,更多相关《基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx(24页珍藏版)》请在冰点文库上搜索。

基于51单片机的多功能迷你跑马音乐盒参赛作品文档.docx

基于51单片机的多功能迷你跑马音乐盒参赛作品文档

广东机电职业技术学院

电子产品设计

论文题目:

多功能迷你跑马音乐盒

专业:

计算机控制技术

班级:

控制0910

学生姓名:

梁荣林洪伟柠

指导教师:

李建波

 

二零一零年五月

目录

摘要3

1设计的作用、目的………………………………………………………………3

2设计的具体实现………………………………………………………………….3

2.1系统概述…………………………………………………………………….3

2.2 单元电路设计与分析………………………………………………………4

2.3电路的安装与调试…………………………………………………………7

3心得体会及建议…………………………………………………………………8

3.1心得体会……………………………………………………………………8

3.2建议…………………………………………………………………………8

4附录………………………………………………………………………………9

5参考文献…………………………………………………………………………18

摘要

跑马灯,顾名思义,就是“会像马儿一样跑动”的小灯,故取名“跑马灯”。

跑马灯在单片机系统中一般是用来指示和显示单片机的运行状态,一般情况下,单片机的跑马灯由多个LED发光二极管组成。

在单片机运行时,可以在不同状态下让跑马灯显示不同的组合,作为单片机系统正常的指示。

当单片机系统出现故障时,可以利用跑马灯显示当前的故障码,对故障做出诊断。

此外,跑马灯在单片机的调试过程中也非常有用,可以在不同时候将需要的寄存器或关键变量的值显示在跑马灯上,提供需要的调试信息。

1设计的作用、目的

(1).使用32个彩色LED灯,用这32个发光二极管以不同的模式循环点亮;

(2)、三个功能键,K1模式键,通过按键调整显示结果,总共有十种模式;K2加速键;K3减速键;

(3)当撤换最后一个功能模式时,蜂鸣器将会播放音乐,此时LED将当作音频灯使用;

(4)十种模式通过一个共阳数码管显示出来,十个模式分别显示为0~9。

通过发光二极管的动态闪亮,显示非常炫目的效果,应用于各种建筑物,大楼,酒吧,KTV,夜总会等娱乐场所,拖尾灯,以及各种休闲娱乐场所用的动态灯光显示,通过此次设计,可以加深对51单片机的应用、C51编程和protues软件操作的能力。

了解51单片机的外围引脚,以及各个端口的功能,还可以通过对走马灯的程序编写让我们对程序的执行方式和特点有一个初步的认识,同时掌握C51软件与protues联机调试程序,对进一步学习单片机打下坚实基础。

2设计的具体实现

2.1系统概述

本设计的要求是设计一个有多种功能的走马灯,有多种不同的显示方式,加速功能和减速功能,这里的加速减速还有显示方式都是由单片机内部的程序控制,在这里我将32个光二极管分别接在P0和P1,通过程序控制这两个端口的电平高低,将32个光二极管的正极接电源,负极接P0和P1口,即发P0和P1口的相应端口为高电平时,发光二极管的两端都为高电平,所以发光二极管不亮,当发光二极管的相应端口为低电平时就能被点亮。

再通过程序循环的让各个端口以不同的方式点亮来达到走马的效果,并且当中要有一定的延时,延时时间小于人眼视觉暂留时间,否则人眼看上去每个灯都是亮的也就没有跑马效果。

系统框图如图一:

图一系统框图

2.2 单元电路设计与分析

1.主控芯片AT89S52

AT89S52是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。

2.AT89S52性能简介

AT89S52具有如下特点:

40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。

空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。

AT89S52PDIPPinConfigurations如图二:

图二AT89S52PinConfigurations

3.显示部分:

显示部分用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文件并进行仿真调试,在调试过程当中通过调试的结果完善程序。

一切OK之后,下面就进行最后阶段,即在面包板上搭电路,然后用烧写器将.HEX文件下载到AT89S52单片机中。

调试电路,带着笑容欣赏胜利的成果。

 

仿真图如图:

3心得体会及建议

3.1心得体会

通过此次课程设计,不仅初步掌握了51单片机的一些基本功能应用,还学会了使用keil和protues两个软件。

知道了怎么用keil新建工程文件、编写调试程序、生成.HEX文件;怎么用protues软件画图,特别是总线的画法,怎么仿真等。

我会以此为起点,进一步学习和使用单片机,为将来工作打基础。

感谢我的51单片机启蒙老师李建波老师的教诲。

3.2建议

希望老师多我们讲一些单片机的研究方向,平时也多给我们出一些小设计课题,我觉得像这样自己做一个设计对理论学习是一个很好的总结,当我们有不懂的东西的时候也可以得到老师的指点,这样才能够更全面的认识和学好单片机。

 

4附录

实物图如图六:

C程序如下:

#include

#include"SoundPlay.h"

unsignedcharRunMode;

//**********************************SystemFuction*************************************************

voidDelay1ms(unsignedintcount)

{

unsignedinti,j;

for(i=0;i

for(j=0;j<120;j++);

}

unsignedcharcodeLEDDisplayCode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,//0~7

                             0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};

voidDisplay(unsignedcharValue)

{

P3=LEDDisplayCode[Value];

}

voidLEDFlash(unsignedcharCount)

{

unsignedchari;

bitFlag;

for(i=0;i

{

  Flag=!

Flag;

  if(Flag)

   Display(RunMode);

  else

   Display(0x10);

  Delay1ms(100);

}

Display(RunMode);

}

unsignedcharGetKey(void)

{

unsignedcharKeyTemp,CheckValue,Key=0x00;

CheckValue=P2&0x32;

if(CheckValue==0x32)

  return0x00;

Delay1ms(10);

KeyTemp=P2&0x32;

if(KeyTemp==CheckValue)

  return0x00;

if(!

(CheckValue&0x02))

  Key|=0x01;

if(!

(CheckValue&0x10))

  Key|=0x02;

if(!

(CheckValue&0x20))

  Key|=0x04;

returnKey;

}

unsignedintTimer0Count,SystemSpeed,SystemSpeedIndex;

voidInitialTimer2(void)

{

T2CON=0x00;   //16BitAuto-ReloadMode

  TH2=RCAP2H=0xFC;//重装值,初始值TL2=RCAP2L=0x18;

ET2=1;     //定时器2中断允许

TR2=1;    //定时器2启动

EA=1;

}

unsignedintcodeSpeedCode[]={  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};//30

voidSetSpeed(unsignedcharSpeed)

{

SystemSpeed=SpeedCode[Speed];

}

voidLEDShow(unsignedintLEDStatus)

{

P1=~(LEDStatus&0x00FF);

P0=~((LEDStatus>>8)&0x00FF);

}

voidInitialCPU(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);

}

//Mode0

unsignedintLEDIndex=0;

bitLEDDirection=1,LEDFlag=1;

voidMode_0(void)

{

LEDShow(0x0001<

LEDIndex=(LEDIndex+1)%16;

}

//Mode1

voidMode_1(void)

{

LEDShow(0x8000>>LEDIndex);

LEDIndex=(LEDIndex+1)%16;

}

//Mode2

voidMode_2(void)

{

if(LEDDirection)

  LEDShow(0x0001<

else

  LEDShow(0x8000>>LEDIndex);

if(LEDIndex==15)

  LEDDirection=!

LEDDirection;

  LEDIndex=(LEDIndex+1)%16;

}

//Mode3

voidMode_3(void)

{

if(LEDDirection)

  LEDShow(~(0x0001<

else

  LEDShow(~(0x8000>>LEDIndex));

if(LEDIndex==15)

  LEDDirection=!

LEDDirection;

  LEDIndex=(LEDIndex+1)%16;

}

//Mode4

voidMode_4(void)

{

if(LEDDirection)

{

  if(LEDFlag)

   LEDShow(0xFFFE<

   else

   LEDShow(~(0x7FFF>>LEDIndex));

}

else

{

  if(LEDFlag)

   LEDShow(0x7FFF>>LEDIndex);

  else

   LEDShow(~(0xFFFE<

}

if(LEDIndex==15)

{

  LEDDirection=!

LEDDirection;

  if(LEDDirection)LEDFlag=!

LEDFlag;

}

  LEDIndex=(LEDIndex+1)%16;

}

//Mode5

voidMode_5(void)

{

if(LEDDirection)

  LEDShow(0x000F<

else

  LEDShow(0xF000>>LEDIndex);

if(LEDIndex==15)

  LEDDirection=!

LEDDirection;

   LEDIndex=(LEDIndex+1)%16;

}

//Mode6

voidMode_6(void)

{

if(LEDDirection)

  LEDShow(~(0x000F<

else

  LEDShow(~(0xF000>>LEDIndex));

if(LEDIndex==15)

  LEDDirection=!

LEDDirection;

  LEDIndex=(LEDIndex+1)%16;

}

//Mode7

voidMode_7(void)

{

if(LEDDirection)

  LEDShow(0x003F<

else

  LEDShow(0xFC00>>LEDIndex);

if(LEDIndex==9)

  LEDDirection=!

LEDDirection;

   LEDIndex=(LEDIndex+1)%10;

}

//Mode8

voidMode_8(void)

{

LEDShow(++LEDIndex);

}

voidTimer0EventRun(void)

{

if(RunMode==0x00)

{

  Mode_0();

}

elseif(RunMode==0x01)

{

  Mode_1();

}

elseif(RunMode==0x02)

{

  Mode_2();

}

elseif(RunMode==0x03)

{

  Mode_3();

}

elseif(RunMode==0x04)

{

  Mode_4();

}

elseif(RunMode==0x05)

{

  Mode_5();

}

elseif(RunMode==0x06)

{

  Mode_6();

}

elseif(RunMode==0x07)

{

  Mode_7();

}

elseif(RunMode==0x08)

{

  Mode_8();

}

}

voidTimer2(void)interrupt5using3

{

TF2=0;//中断标志清除(Timer2必须软件清标志!

if(++Timer0Count>=SystemSpeed)

{

  Timer0Count=0;

  Timer0EventRun();

  }

}

unsignedcharMusicIndex=0;

voidKeyDispose(unsignedcharKey)

{

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******************************************************

//挥着翅膀的女孩

unsignedcharcodeMusic_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,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2