基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc

上传人:wj 文档编号:234697 上传时间:2023-04-28 格式:DOC 页数:26 大小:4.49MB
下载 相关 举报
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第1页
第1页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第2页
第2页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第3页
第3页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第4页
第4页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第5页
第5页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第6页
第6页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第7页
第7页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第8页
第8页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第9页
第9页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第10页
第10页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第11页
第11页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第12页
第12页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第13页
第13页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第14页
第14页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第15页
第15页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第16页
第16页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第17页
第17页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第18页
第18页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第19页
第19页 / 共26页
基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc

《基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc(26页珍藏版)》请在冰点文库上搜索。

基于单片机多模式带音乐跑马灯设计(附完整程序代码)Word文档下载推荐.doc

20分;

(2)完成设计过程:

30分;

(3)完成调试:

(4)回答问题:

20分。

5)参考文献:

(1)张毅刚彭喜元彭宇.《单片机原理及应用》[M].北京:

高等教育出版社

(2)谭浩强.《C程序设计教程》[M].北京:

清华大学出版社

(3)

6)课程设计进度安排

内容天数     地点

构思及收集资料2      图书馆

组装与调试5      实验室

撰写论文3      图书馆、实验室

学生签名:

2012年6月24日

课程设计(论文)评审意见

(1)完成原理分析(20分):

优( )、良( )、中( )、一般( )、差( );

(2)设计分析  (30分):

(3)完成调试  (30分):

(4)回答问题  (20分):

(5)格式规范性及考勤是否降等级:

是( )、否( )

评阅人:

 职称:

副教授

2012年6月27

26

目录

一、设计概述 5

1.1设计目的:

5

1.3设计作用:

1.4设计要求:

二、设计的具体实现 6

2.1系统概述 6

2.2各模块分析 7

2.2.1主控芯片STC90C51 7

2.2.2STC90C51性能简介 7

2.2.3LED显示部分 7

2.2.4模式显示部分 8

2.2.5单片机部分 9

三、硬件电路设计及描述 9

3.1LED 9

3.2数码管 9

3.3复位电路及晶振电路 10

3.4蜂鸣器及按键 10

四、程序设计思想及流程 11

4.1程序设计思路 11

4.2音乐部分设计 13

五、电路的安装与调试 14

六、总结 16

七、参考文献 17

附录 18

实物图 18

程序清单 18

摘要

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

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

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

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

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

本设计使用STC90C51芯片,利用P0的8个端口连接8个发光二极管,通过P0.0到P0.7的值控制“跑马灯”的亮灭,以达到显示效果。

设计的中断程序要对多个按键动作进行响应,灯光变换的花样有8种,用按键k1切换。

按下k1键,程序将按八种模式循环切换,每按一次K1键,切换一次跑马灯模式,同时切换音乐。

关键词跑马灯;

单片机;

LED发光二极管

一、设计概述

利用所学单片机的理论知识进行软硬件整体设计,培养学生分析、解决问题的能力,锻炼学生理论联系实际、综合应用的能力。

通过实践动手制作硬件和软件,综合应用本学期所学的单片机知识,达到加深学习该专业知识的目的。

1.2设计内容:

基于单片机的多模式带音乐跑马灯设计.

通过发光二极管的动态闪亮,显示非常炫目的效果,应用于各种建筑物,大楼,酒吧,KTV,夜总会等娱乐场所,拖尾灯,以及各种休闲娱乐场所用的动态灯光显示,同时加上音乐的效果,可以制作出各种各样的炫目多彩的霓虹灯,为夜晚带来不一样的光彩。

1、有8个发光二极管做跑马灯,其中跑马灯有8种灯亮模式。

2、有专门的键盘用以切换跑马灯的模式,并且对于任何一种跑马灯模式都可以对亮灯速度进行控制。

3、每一种跑马灯模式用LED数码管进行显示。

4、当跑马灯处于一种模式时,伴随的音乐响起,音乐至少有3首,并可以对其进行切换.

二、设计的具体实现

2.1系统概述

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

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

单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。

这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。

半个周期的时间是多长呢?

众所周知,周期为频率的倒数,可以通过音符的频率计算出半周期。

演奏时,要根据音符频率的不同,把对应的、半个周期的定时时间初始值,送入定时器,再由定时器按时输出高低电平。

系统框图如图一:

蜂鸣器

LED显示阵列

MCU(STC90C51)

12M

晶振

复位

电路

8段共阴数码管

键盘

图一系统框图

2.2各模块分析

2.2.1主控芯片STC90C51

STC90C516RD+系列单片机是宏晶科技推出的新一代超性能、高速、低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,内部集成MAX810专用复位电路,时钟频率在12MHz以下时,复位脚可直接接地。

且兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的STC90C51可为许多嵌入式控制应用系统提供高性价比的解决方案。

2.2.2STC90C51性能简介

STC90C51具有如下特点:

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

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

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

STC90C51芯片引脚图如图二:

图二STC90C51芯片引脚图

2.2.3LED显示部分

显示部分用8个发光二极管接在P0,这里需要注意的是P0口出I/O口输入输出的时候需要加上拉电阻,通过程序控制P0的8个端口按照一定的方式依次为低电平以点亮相应端口的LED。

此时通过按按键K1来切换跑马灯的模式,同时切换音乐。

按按键K2来控制跑马灯的速度。

LED阵列如图三:

图三LED显示阵列

2.2.4模式显示部分

模式即跑马的方式,共8种。

相应方式由数码管显示出来,每当模式按钮按下时,相应的模式加一,数码管显示相应模式。

本次实验数码管采用的是共阴极八段数码管,只对其abcdefg段编程。

共阴数码管结构如图四:

a各段代码b实物外观

图四共阳数码管结构

2.2.5单片机部分

该部分主要涉及功能的实现方式,即程序编写。

程序要实现的功能包括读键盘,通过对读入键盘的值控制LED点亮方式和数码管显示。

键盘有两个按键K1、K2,K1控制LED点亮模式,K2键控制跑马灯速度。

不论K1被按下多少次,LED八种点亮模式是循环的,K2键控制速度分别有上限和下限的,每当按下K2键,跑马灯的速度相应的减慢一个级别,当达到下限时,再次按K2键,跑马灯的速度变成最快的,和K1键类是,速度也是用了一个循环。

三、硬件电路设计及描述

3.1LED

本设计使用STC90C51芯片,利用P0的8个端口连接8个发光二极管,通过P0.0到P0.7的值控制“跑马灯”的亮灭,以达到显示效果,这里需要注意的是P0口内部没有上拉电阻,是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,作普通I/O输入输出,需要外接上拉电阻。

连接图如图五所示。

图五硬件电路LED二极管连接图

3.2数码管

本次实验采用的数码管是一位八段数码管,所以不需要位选,在硬件设计中我将数码管各个引脚接在芯片的P2口,同时加上上拉电阻,连接图如图六所示

图六数码管硬件电路连接图

3.3复位电路及晶振电路

对单片机来说,最小系统一般应该包括复位电路、晶振电路

复位电路:

有电容串联电阻构成,当系统一上电,RST脚将会出现高电平,典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位。

晶振电路:

典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作)

复位电路和晶振电路连接图如图七所示

图七晶振电路和复位电路硬件连接图

3.4蜂鸣器及按键

蜂鸣器只是作为简单的输出口,用P1.5口控制输出即可。

本次实验采用了两个按键作为控制部分,按键K1控制跑马灯的模式和音乐的模式,按键K2控制跑马灯的速度。

按键K1和K2连接在单片机的两个外部中断引脚上,在程序设计部分,编写了两个外部中断函数用来切换模式和控制速度。

硬件连接图如图八

图八蜂鸣器及按键硬件连接图

在硬件电路设计的时候,考虑到有些布线空间不足,以及美观问题,有些地方采用了网络布线,使电路图看起来更见清晰合理。

综上所述,总体的硬件电路连接图如图九所示

图九总体硬件电路连接图

四、程序设计思想及流程

4.1程序设计思路

程序设计思路:

主程序中默认执行左循环跑马灯,在中断服务程序中,首先读取按键状态,判断是哪个外部中断产生中断。

如果是K1,就执行下一个跑马;

如果是K2,就执行跑马减速。

采用置标志位的方法。

即在主程序中设定两个标志位,一个跑马模式标志位,一个跑马速度标志位。

不断的对这两个个标志进行查询:

如果是跑马模式标志为状态0,就执行左循环一个LED跑马;

如果是状态1,就执行左循环两个LED跑马灯,依次类推。

跑马速度标志默认值为10,对应延时值为200ms。

跑马灯的模式一共有八种,循环切换。

与此同时,对应的音乐模式,我采用的是二维数组法存储的音乐数据表,乐曲的数据,程序中以codeunsignedcharsszymmh[4][400]命名。

一共有四首曲子,每当外部中断1产生中断时,即K1键按下,跑马模式标志加1,此时在音乐播放函数中,k=sszymmh[RunMode%4][i1]+7*sszymmh[RunMode%4][i1+1]-1;

k值表示的是音阶,从数据表中读出频率数值;

time=sszymmh[RunMode%4][i1+2];

读出时间长度数值,即拍数。

外部中断函数程序流程图如图十

主程序

初始化

开中断

读键盘保存

判断哪个外部中断

K1K2

K2键按下

K1键按下

控制速度循环减

置跑马模式标志

图十外部中断函数程序流程图

外部中断1产生中断后,采用置标志位的方法。

即在主程序中设定一个标志位RunMode,跑马模式标志位。

没产生一次外部中断RunMode则加1,不断的对这这个标志进行查询:

RunMode=RunMode%8

图十一外部中断1模式切换程序流程图

4.2音乐部分设计

在这个程序中,有两个数据表,其中存放了事先算好的、各种音符频率所对应的、半周期的定时时间初始值。

有了这些数据,单片机就可以演奏从低音、中音、高音和超高音,四个八度共28个音符。

演奏乐曲时,就根据音符的不同数值,从半周期数据表中找到定时时间初始值,送入定时器即可控制发音的音调。

比如把表中的0xF2和0x42送到定时器,定时器按照这个初始值来产生中断,输出的方波,人们听起来,这就是低音1。

乐曲的数据,也要写个数据表,程序中以codeunsignedcharsszymmh[]命名。

这个表中每三个数字,说明了一个音符,它们分别代表:

第一个数字是音符的数值1234567之一,代表多来咪发...;

第二个数字是0123之一,代表低音、中音、高音、超高音;

第三个数字是时间长度,以半拍为单位。

乐曲数据表的结尾是三个0。

//频率-半周期数据表高八位本软件共保存了四个八度的28个频率数据

codeunsignedcharFREQH[]={

0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,//低音1234567

0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,i

0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,//高音234567

0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF};

//超高音1234567

//频率-半周期数据表低八位

codeunsignedcharFREQL[]={

0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,//低音1234567

0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,i

0xEE,0x44,0x6B,0xB4,0xF4,0x2D,//高音234567

0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16};

五、电路的安装与调试

用keil将程序编写好之后,检查程序有无错误。

有错误就改正,直到没有错误,最后生成.HEX文件,再用peoteus画好硬件电路仿真图,将单片机指向刚生成的.HEX文件并进行仿真调试,在调试过程当中通过调试的结果完善程序。

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

电路仿真图如图十二

图十二电路仿真图

六、总结

通过为期两周的时间,我和我的小组成员两人共同完成了基于单片机多模式带音乐跑马灯的课程设计,在设计到完成作品过程中,我们遇到很多问题。

我们都知道让蜂鸣器发出声音很简单,但是让蜂鸣器发出美妙的音乐却没有一点头绪,通过参考别人的单片机音乐盒的设计,我学会了如何用C语言编写程序去实现通过蜂鸣器发出有节奏的音乐,在课程设计过程中我们遇到了很多问题,例如:

我们之前的想法是通过三个按键来控制,K1切换模式、K2加速跑马灯、K3减速(只是接在普通的引脚上)。

在通过仿真电路图仿真时,音乐响起来了,跑马灯也跑起来了,但是切换模式或者控制跑马灯速度的时候,并不会响应按键。

通过我们的讨论,认为音乐程序占用了整个资源,而按键的响应时间太短,不能实时的进入响应函数,按键扫描函数不起作用了。

后来我们将之简化成两个按键,接在两个外部中断引脚上,通过中断函数响应按键。

课程设计的时间比较短,我们的作品还是有许多的瑕疵,功能也比较简单,比如在程序运行过程中,并没有按键按下,数码管的显示也会变化,这便是没有按键消抖。

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

知道了怎么用keil新建工程文件、编写调试程序、生成.HEX文件;

怎么用protues软件画图,特别是总线的画法,怎么仿真等。

七、参考文献

(1)张毅刚彭喜元彭宇.《单片机原理及应用》[M].北京:

(2)谭浩强《C程序设计教程》[M].北京:

清华大学出版社

(3)

附录

实物图

程序清单

#include<

REG52.H>

unsignedcharRunMode;

//定义跑马模式标志

unsignedchari1;

unsignedKey=0x00;

unsignedintTimer0Count,SystemSpeed,SystemSpeedIndex;

sbitspeaker=P1^5;

unsignedchartimer0h,timer0l,time;

codeunsignedcharsszymmh[4][200]={//世上只有妈妈好

{6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,

6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,

6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,

5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,

2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0},

//生日快乐

{5,1,1,5,1,1,6,1,2,5,1,2,1,2,2,7,1,4,

5,1,1,5,1,1,6,1,2,5,1,2,2,2,2,1,2,4,

5,1,1,5,1,1,5,2,2,3,2,2,1,2,2,7,1,2,

6,1,2,4,2,1,4,2,1,3,2,2,1,2,2,2,2,2,

1,2,4},

//送别

{5,2,2,3,2,1,5,2,1,1,3,4,6,2,2,1,3,1,6,2,1,5,2,4,

5,2,2,1,2,1,2,

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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