基于单片机的音乐流水灯设计

合集下载

毕业设计---基于单片机的流水灯设计

毕业设计---基于单片机的流水灯设计
8
总结
通过这次单片机课程设计,我不仅加深了 对单片机理论的理解,将理论很好地应用 到实际当中去,而且我还学会了如何去培 养我们的创新精神,从而不断地战胜自己 ,超越自己。创新可以是在原有的根底上 进行改进,使之功能不断完善,成为真己 的东西。
9
致谢
系老师三年以来的帮助和教导 同学在生活上的帮助 辩论委员会
11111110〕
MOV P1,ACC
;将ACC的数据送P1口
MOV R0,#7
;将数据再移动7次就完成一个8位流水过程
LOOP: RL
A
;将ACC中的数据左移一位
MOV P1,A
;把ACC移动过的数据送p1口显示
ACALL DELAY
;调用延时子程序
DJNZ R0,LOOP ;没有移动够7次继续移动
5
软件编程
单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成
上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要编写
程序控制单片机管脚电平的上下变化,来实现发光二极管的一亮一灭
。软件编程是单片机应用系统中的一个重要的组成局部。以最简单的
流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现流水灯控
4
流水灯硬件原理图
从原理图中可以看出,如果要 让接在P1.0口的LED1亮起来,那 么只要把P1.0口的电平变为低电平 就可以了;相反,如果要接在P1.0 口的LED1熄灭,就要把P1.0口的 电平变为高电平;同理,接在P1.1 ~P1.7口的其他7个LED的点亮和 熄灭的方法同LED1。因此,要实 现流水灯功能,我们只要将发光二 极管LED1~LED8依次点亮、熄灭 ,8只LED灯便会一亮一暗的做流 水灯了。在此我们还应注意一点, 由于人眼的视觉暂留效应以及单片 机执行每条指令的时间很短,我们 在控制二极管亮灭的时候应该延时 一段时间,否那么我们就看不到“ 流水〞效果了。

单片机音乐控制流水灯

单片机音乐控制流水灯

摘要本设计是一种基于AT89C51单片机音乐控制彩灯的方案,实现单片机演奏音乐,并且对LED彩灯随音符频率的不同而闪烁发光。

本方案以AT89C51单片机作为主控核心,利用三极管和蜂鸣器,通过三极管放大电流使用蜂鸣器播放音乐,利用编程实现亮灯循环模式,在有8个LED彩灯,根据用户需求可以编写若干种亮灯模式.例如左右闪烁,隔几个亮灭,蜂鸣器可以根据用户需求改写编程播放各种音乐。

本方案具有设计简单、体积小、元器件少、电路结构简单等优点。

该设计方案设计及其简单,典型的89c51单片机,亮灯模式多,播放各种类型的音乐,具有体积小、价格低、低能耗等优点。

在美丽的都市夜晚,彩灯的循环亮灭,播放动人的音乐,衬托出美丽的氛围,音乐彩灯具有更广阔的发展天地。

关键字:AT89C51 LED彩灯音乐AbstractThis design is a musical based on AT89C51 microcontroller control program Lantern,realize MCU playing music,And the LED lights on the frequency of different notes with the light flashing。

The program for AT89C51 microcontroller as the control center, use of transistor and buzzer, the current through the transistor amplification using the buzzer to play music,Using programming lighting cycle mode, with 8 LED Lantern, according to user needs to write some kind of switch-mode. For example, flashing around, every few light off, the buzzer can be adapted according to user requirements play a variety of music programming . The program is simple in design, small size, less components, and simple circuit structure. The design and simple design, the typical 89c51 microcontroller, a switch-mode and more, playing all types of music, has a small size, low price and low power consumption and so on. In the beautiful city at night, lanterns light off cycle, play beautiful music, brings out the beautiful atmosphere,music Carnival with the development of a broader world.Keywords: AT89C51 LED Lantern music目录绪论------------------------------------------------------------- 41音乐流水灯方案设计与选择--------------------------------------- 41、1 设计要求-------------------------------------------------51、2 基本原理------------------------------------------------- 51、3 设计电源------------------------------------------------- 5-61、4 频率音符------------------------------------------------- 62 音乐流水灯设计过程---------------------------------------------- 7 2、1 元件选择------------------------------------------------- 7 2、2 电路设计------------------------------------------------- 7 2、2、1 元器件介绍------------------------------------------7-9 2、2、2 音乐流水灯构思---------------------------------------9-11 2、3 软件设计-------------------------------------------------11 2、3、1 编程介绍--------------------------------------------11-13 2、3、2 设计程序-------------------------------------------14-15 参考文献---------------------------------------------------------- 16绪论目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

基于51单片机的流水灯设计

基于51单片机的流水灯设计

基于51单片机的流水灯设计51单片机是一种常用的微控制器,它具有高性价比、易于编程和广泛的应用范围。

流水灯是一种常见的电子灯光装置,它通过类似于瀑布般的效果,逐个点亮一系列的灯。

本文将介绍基于51单片机的流水灯的设计。

流水灯的设计过程可以分为硬件设计和软件设计两个步骤。

硬件设计:在硬件设计方面,我们需要准备以下器件和材料:1.51单片机开发板2.杜邦线3.LED灯4.电阻接下来,根据流水灯的设计思路,将多个LED灯连接在一起,形成一个线性的灯带。

为了控制LED灯的亮灭,我们需要使用51单片机的GPIO 口来提供高低电平信号。

通过改变GPIO口的输出信号,我们可以实现各个LED灯的顺序点亮和熄灭。

软件设计:在软件设计方面,我们需要使用到汇编或C语言来编写控制程序。

以下是一个简单的流水灯程序的伪代码:```1.初始化51单片机的GPIO口方向,设置为输出模式2. 定义一个存储灯光模式的数组,比如`light_pattern[] = {0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01}`3.定义一个循环计数器`i`4.进入无限循环5. 通过将`light_pattern[i]`的值写入GPIO口,控制LED灯的亮灭6.延时一定时间(比如几百毫秒)7.更新循环计数器`i`8.如果`i`超过了数组的长度,将其重置为09.结束循环```在程序中,我们可以通过循环计数器`i`来依次点亮和熄灭LED灯。

通过不断更新`i`的值,我们可以实现灯光模式的循环播放。

总结:。

基于51单片机流水灯毕业设计

基于51单片机流水灯毕业设计

基于51单片机的流水灯毕业设计方案:一、引言流水灯是一种常见的电子设计项目,适合初学者练习和毕业设计。

通过使用51单片机和少量外围元件,可以实现一个简单而有趣的流水灯效果。

本文将介绍基于51单片机的流水灯设计方案,包括硬件连接、软件程序设计和效果展示等内容。

二、硬件设计1. 材料准备:51单片机(如STC89C52)、LED灯若干(建议4-8个)、电阻、面包板、连线等。

2. 连接方式:将LED灯按顺序连接到51单片机的IO口,每个LED 灯通过一个电阻连接到IO口,确保电流限制。

3. 电源供应:连接电源至电路板,保证正常工作电压和电流。

三、软件设计1. 编程环境:使用Keil C51等集成开发环境进行程序编写。

2. 程序设计:设计一个循环移位的程序,控制51单片机的IO口依次点亮LED灯,形成流水灯效果。

3. 定时控制:通过定时器中断或延时函数控制LED灯的亮灭时间,实现流水灯的效果。

四、效果展示1. 烧录程序:将编写好的程序烧录到51单片机中。

2. 调试测试:连接电路并通电,观察LED灯按顺序点亮并流动的效果。

3. 优化改进:根据实际效果调整程序和硬件设计,优化流水灯的效果和稳定性。

五、注意事项1. 电路连接:确保电路连接正确,避免短路或接反现象。

2. 程序设计:合理设计程序逻辑,确保LED灯的流水效果符合预期。

3. 调试测试:在调试过程中注意观察LED灯的亮暗情况,及时发现问题并进行调整。

六、总结基于51单片机的流水灯设计是一个适合初学者和毕业设计的简单而有趣的项目,通过设计和实现可以提升对单片机编程和电路连接的理解和技能。

希望通过本文的介绍,读者能够顺利完成基于51单片机的流水灯毕业设计,并在实践中不断提升自己的电子设计能力。

《单片机原理及应用》基于51单片机实验箱的流水灯设计

《单片机原理及应用》基于51单片机实验箱的流水灯设计

《单片机原理及应用》基于51单片机实验箱的流水灯设计一、实验目的和要求1.掌握单片机基本资源使用。

2.掌握单片机电路原理图。

3.掌握单片机C语言软件开发以及试验箱使用。

二、实验内容和原理实验内容:1.绘制程序流程图并编写C语言程序2.在实验箱中进行测试,最后提交实验报告三、主要仪器设备Keil4软件、C51单片机实验箱。

四、操作方法与实验步骤4.1 题目要求使用单片机实验箱实现流水灯功能。

4.2 系统设计思路主程序中实现流水灯功能,时间单位采用500ms信号,作为实现流水灯的发光二极管和单片机的P1相连。

4.2 C程序编制(包含详细的文字和程序流程图)#include<intrins.h>#include<reg52.h>#define uchar unsiged char#define uint unsigned intvoid mDelay(uint Delay){int i;for(;Delay>0;Delay--)for(i=0;i<110;i++);}void main(){unsigned char a,i;While(1){a=0x01;for(i=0;i<8;i++){a=-crol-(a,1)P2=amDelay(500);}}4.3 测试分析(包含文字和图像叙述)在KeilC51软件软件中编写好程序并调试好后,连接单片机实验箱,实验结果如下:实验箱上连接的八个灯,每个灯间隔500ms的时间一个接一个的循环闪烁。

五、讨论和心得(不少于100字)通过此次实验,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,试验过程还是比较繁琐,但是还是完成了这次试验,使我对于理解单片机的基本原理更加深刻,将所学知识运用到实践中,在实践中发现问题,强化理论知识。

课程名称:单片机原理及应用实验项目名称(二):定时计数器的应用—按钮控制LED灯四、实验目的和要求1.掌握单片机基本资源使用。

基于单片机的音乐流水灯设计

基于单片机的音乐流水灯设计

基于单片机的音乐流水灯设计音乐流水灯在现代生活中越来越受到人们的喜爱,它将音乐与灯光相结合,创造出一种独特的视听效果。

而更是将这一创意发挥到了极致。

本文将围绕这一主题展开深入研究,探讨单片机技术在音乐流水灯设计中的应用。

首先,我们需要了解什么是单片机。

单片机是一种集成在一块芯片上的微处理器,具有中心处理器、存储器、输入输出端口等功能。

在嵌入式系统设计中,单片机被广泛应用于各种领域,包括家电、汽车电子、医疗设备等。

在音乐流水灯设计中,单片机可以控制灯光的亮度、颜色、闪烁效果,并实现与音乐的同步播放。

音乐流水灯设计的关键是如何实现音乐与灯光的同步效果。

传统的音乐流水灯主要通过模拟电路来实现,但是这种设计存在灵活性低、难以控制等问题。

而基于单片机的音乐流水灯设计则可以通过编程控制灯光效果,实现更加精确的同步效果。

单片机可以根据音乐的节奏和节拍,控制灯光的亮度和闪烁频率,达到视听效果的最佳匹配。

在实际的音乐流水灯设计中,我们可以选择不同的单片机芯片和周边器件,根据需求设计相应的硬件电路。

同时,我们还需要编写相应的控制程序,实现音乐与灯光的同步效果。

在程序设计中,我们可以利用单片机的定时器、中断、串口通信等功能,实现复杂的灯光效果。

除了硬件设计和程序编写,我们还需要考虑音乐流水灯的外观设计。

灯光的颜色、形状、布局等都会影响整体效果。

在外观设计中,我们可以采用不同的灯珠、灯管、灯带等灯具,搭配适当的灯罩或反光板,创造出独特的视觉效果。

此外,我们还可以设计出不同的灯光变换模式,如呼吸灯、闪烁灯、渐变灯等,增加灯光效果的多样性。

在音乐流水灯设计中,音乐的选择也是至关重要的。

不同类型的音乐会带来不同的视听感受。

我们可以选择流行歌曲、古典乐曲、电子音乐等不同类型的音乐,根据音乐的节奏和情感色彩,设计出相应的灯光效果。

此外,我们还可以考虑加入声控功能,让灯光根据声音的大小和频率进行变化,增加互动性和趣味性。

在实际应用中,基于单片机的音乐流水灯设计可以广泛应用于家庭装饰、商业展示、演艺舞台等场合。

基于51单片机的流水灯设计

基于51单片机的流水灯设计

基于51单片机的流水灯设计一.基本功能利用AT89c51作为主控器组成一个LED流水灯系统,实现8个LED 灯的左、右循环显示。

二.硬件设计图1.总设计图1.单片机最小系统1.1选用AT89C51的引脚功能图2. AT89C51XTAL1:单芯片系统时钟的反向放大器输入端。

XTAL2:系统时钟的反向放大器输出端,一般在设计上只要在XTAL1和XTAL2上接上一只石英震荡晶体系统就可以工作了,此外可以在两引脚与地之间加入20PF的小电容,可以使系统更稳定,避免噪音干扰而死机。

RESET:重置引脚,高电平动作,当要对晶体重置时,只要对此引脚电平提升至高电平并保持两个及其周期以上的时间便能完成系统重置的各项动作,使得内部特殊功能寄存器内容均被设成已知状态。

P3:端口3是具有内部提升电路的双向I/O端口,通过控制各个端口的高低电平了实现LED流水灯的控制。

1.2复位电路如图所示,当按下按键时,就能完成整个系统的复位,使得程序从新运行。

图3.复位电路1.3时钟电路时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。

在AT89C51芯片内部有一个高增益反相放大器,其输入端为芯片引脚X1,输出端为引脚X2,在芯片的外部跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。

此电路采用12MHz的石英晶体。

图4.时钟电路2.流水灯部分图5.流水灯电路三.软件设计3.1编程语言及编程软件的选择本设计选择C语言作为编程语言。

C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。

而汇编语言使用起来并没有这么方便。

本设计选用了Keil作为编程软件,.Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

单片机音乐流水灯程序

单片机音乐流水灯程序

#include <reg52.h>sbit speaker = P1^6;sbit key1=P1^5;sbit key2=P1^7;unsigned char kk=0;unsigned long t3;unsigned char timer0h, timer0l, time,n;code char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00,0x55,0xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0 xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00,0x55,0 xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00,0x55,0 xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00,0x55,0 xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00,0x55,0 xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00}; //灯亮数组//--------------------------------------//单片机晶振采用11.0592MHz// 频率-半周期数据表高八位本软件共保存了四个八度地28个频率数据code unsigned char FREQH[] = {0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音12345670xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音2345670xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音1234567// 频率-半周期数据表低八位code unsigned char FREQL[] = {0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音12345670x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音2345670x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音1234567//--------------------------------------//世上只有妈妈好数据表要想演奏不同地乐曲, 只需要修改这个数据表code int shengrikuaile[] = {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,0,0,0};code int tonghua[]={5,1,2, 5,2,2, 4,2,2,3,2,4, 3,2,2, 4,2,1, 3,2,1, 3,2,4, 3,2,2, 4,2,2,3,2,2, 4,2,2, 3,2,2, 2,2,1, 1,2,1, 1,2,2, 1,2,2, 3,2,2, 5,2,2,6,2,4, 6,2,2, 6,2,1, 5,2,1, 5,2,2, 2,2,2, 2,2,2, 4,2,2,3,2,8, 1,2,2, 3,2,2, 5,2,2,6,2,4, 6,2,2, 6,2,1, 5,2,1, 2,2,2, 2,2,2, 4,2,2,3,2,2, 4,2,2, 3,2,2, 2,2,1, 1,2,1, 1,2,4, 2,2,2, 3,2,2,6,1,4, 6,1,2, 1,2,2, 1,2,2, 7,1,2, 7,1,2, 1,2,1, 1,2,16, 0,0,0};//童话//一个音符有三个数字.前为第几个音、中为第几个八度、后为时长(以半拍为单位).//6, 2, 3 分别代表:6, 中音, 3个半拍;//5, 2, 1 分别代表:5, 中音, 1个半拍;//3, 2, 2 分别代表:3, 中音, 2个半拍;//5, 2, 2 分别代表:5, 中音, 2个半拍;//1, 3, 2 分别代表:1, 高音, 2个半拍;code unsigned int nuannuan []={5,2,2, 6,2,2, 7,2,2, 1,3,2, 7,2,1, 1,3,1, 1,3,1, 5,2,1, 6,2,2, 6,2,4, 5,2,2, 4,2,1, 3,2,1,3,2,2, 3,2,2, 3,2,2, 3,2,1, 2,2,1, 2,2,2, 5,2,2, 6,2,2, 7,2,2, 1,3,2, 7,2,1, 1,3,1, 1,3,1, 5,2,1, 6,2,2, 6,2,4, 6,2,2, 1,3,1, 1,3,1,1,3,2, 1,3,2, 1,3,2, 1,3,1, 2,3,1, 2,2,2, 5,2,1, 6,2,2, 7,2,2, 1,3,2, 7,2,1, 1,3,1, 1,3,1, 3,3,2, 6,3,2, 5,3,1, 5,3,2, 4,3,2,3,3,4, 3,3,2, 2,3,2, 2,3,2, 6,2,2, 7,2,2, 1,3,4, 1,3,2, 2,3,1, 1,3,1, 1,3,2, 1,3,1, 7,2,1, 1,3,2, 2,2,1,2,3,4, 1,3,2, 7,2,2, 1,3,8,//平凡之路0,0,0};code unsigned int zanmenjiehunba[]={2,2,4, 1,2,4, 6,2,8, 6,2,2, 5,2,2, 3,2,2, 3,2,2, 3,2,2, 2,2,2, 2,2,4, 1,2,2, 2,2,2, 5,2,2,5,2,2, 5,2,2, 5,2,2, 5,2,2, 5,2,4, 2,2,2, 3,2,2,2,2,4, 1,2,4, 6,2,8, 6,2,2, 5,2,2, 3,2,2, 3,2,2, 3,2,2, 2,2,2, 2,2,4, 6,1,2, 1,2,2,2,2,2, 1,2,2, 2,2,2, 1,2,2, 2,2,4, 5,2,2, 3,2,2,2,2,4, 3,2,4, 6,2,8, 6,2,2, 5,2,2, 3,2,2, 5,2,2, 5,2,2, 5,2,2, 5,2,4, 2,2,2, 2,2,2, 5,2,2,5,2,2, 5,2,2, 5,2,2, 5,2,2, 5,2,4, 2,2,2, 3,2,2, 3,2,8, 6,1,2, 1,2,2, 3,2,4, 2,2,4, 1,2,4, 2,2,2, 3,2,2, 3,2,2, 2,2,2, 2,2,8, 3,2,2, 2,2,4, 1,2,4, 2,2,4, 3,2,2, 6,1,2, 6,1,8,0,0,0}; //咱们结婚吧code unsigned int haojiubujian[]={6,2,2, 5,2,2, 5,2,2, 3,2,2, 5,2,8, 6,2,2, 5,2,2, 3,2,2, 2,2,1, 1,2,1, 1,2,8,6,1,2, 1,2,2, 2,2,2, 3,2,2, 5,2,8, 3,2,2, 2,2,2, 1,2,2, 3,2,1, 2,2,1, 2,2,8,6,2,2, 5,2,2, 5,2,2, 3,2,2, 5,2,8, 6,2,2, 5,2,2, 3,2,2, 2,2,1, 1,2,1, 1,2,8,6,1,2, 1,2,2, 2,2,2, 3,2,2, 5,2,8, 3,2,2, 2,2,2, 1,2,2, 6,1,2, 1,2,2, 2,2,2, 1,2,2, 1,2,2,0,0,0};//你若成风code unsigned int tianshidechibang[]={3,2,2, 5,2,2, 6,2,2, 5,2,1, 6,2,1, 6,2,2, 3,2,1, 2,2,1, 2,2,8,5,2,2, 3,2,1, 5,2,1, 5,2,2, 1,2,1, 2,2,1, 1,2,8,3,2,2, 2,2,1, 3,2,1, 3,2,2, 6,1,2, 2,2,2, 1,2,1, 2,2,1, 2,2,1, 5,2,2, 3,2,1,3,2,2, 3,2,2, 3,2,8, 3,2,2, 5,2,2,6,2,2, 5,2,1, 6,2,1, 6,2,2, 3,2,1, 2,2,1, 2,2,8,5,2,2, 3,2,1, 5,2,1, 5,2,2, 2,2,1, 1,2,1, 1,2,4, 6,1,2, 1,2,2,3,2,2, 2,2,1, 3,2,1, 3,2,2, 6,1,2, 2,2,2, 1,2,1, 2,2,1, 2,2,2, 7,1,1, 6,1,1,6,1,2, 6,1,2, 6,1,8,0,0,0}; //天使地翅膀code unsigned int zuijinhaoma[]={5,1,2, 6,1,2, 1,2,2, 2,2,2, 3,2,2, 1,2,2, 3,2,2, 2,2,12,2,2,2, 2,2,2, 2,2,2, 2,2,2, 1,2,2, 1,2,2, 6,1,2, 6,1,2, 6,1,4,5,1,2, 6,1,2, 1,2,2, 2,2,2, 3,2,2, 5,2,2, 3,2,2, 2,2,12,2,2,2, 2,2,2, 2,2,2, 2,2,2, 1,2,2, 1,2,2, 6,1,2, 3,2,2, 3,2,2, 3,2,8,6,2,2, 6,2,2, 6,2,2, 6,2,2, 5,2,2, 5,2,2, 3,2,2, 2,2,12,2,2,2, 2,2,2, 2,2,2, 2,2,2, 1,2,2, 1,2,2, 5,2,2, 3,2,12,6,2,2, 6,2,2, 6,2,2, 1,3,2, 3,2,2, 2,2,2, 3,2,2, 2,2,12,2,2,2, 2,2,2, 2,2,2, 2,2,2, 1,2,2, 6,1,2, 1,2,2, 1,2,2, 1,2,2, 1,2,8, //滴答0,0,0};code unsigned int shinian []={1,2,1, 2,2,1, 5,2,1, 3,2,1,3,2,2, 3,2,1, 3,2,1, 4,2,1, 5,2,1, 6,2,1, 2,2,2, 2,2,2, 2,2,1, 4,2,1, 3,2,1, 2,2,1,1,2,2, 3,1,1, 3,1,1, 2,2,1, 1,2,1, 7,1,1,1,2,1, 6,1,1, 6,1,2, 1,2,1, 7,1,1, 6,1,1, 7,1,2, 4,2,1, 3,2,1, 2,2,2, 7,1,1, 1,2,1,1,2,4, 1,2,1, 2,2,1, 3,2,1,6,2,2, 3,2,1, 4,2,2, 5,2,1, 3,2,1, 3,2,2, 2,2,2, 1,2,1, 2,2,1, 5,2,1, 3,2,1,3,2,2, 3,2,1, 3,2,1, 4,2,1, 5,2,1, 6,2,1,2,2,2, 2,2,1, 2,2,1, 4,2,1, 3,2,1, 2,2,1,1,2,2, 3,1,1, 3,1,1, 2,2,1, 1,2,1, 7,1,1, 1,2,1, 6,1,1, 6,1,1, 1,2,1, 7,1,1, 6,1,1,7,1,2, 4,2,1, 3,2,1, 2,2,2, 3,2,1, 2,2,1,0,0,0 //十年};//-------------------------------------- ,void t0int() interrupt 1 //T0中断程序,控制发音地音调{TR0 = 0; //先关闭T0speaker = !speaker; //输出方波, 发音TH0 = timer0h; //下次地中断时间, 这个时间, 控制音调高低TL0 = timer0l;TR0 = 1; //启动T0}//--------------------------------------void delay(unsigned char t) //延时程序,控制发音地时间长度{unsigned char t1;unsigned long t2;if(kk==1){t3=6000;}if(kk==2){t3=6000;}if(kk==3){t3=5000;}if(kk==4){t3=3000;}if(kk==5){t3=6000;}if(kk==6){t3=4000;}if(kk==7){t3=6000;}if(kk==8){t3=5000;}for(t1 = 0; t1 < t; t1++) //双重循环, 共延时t个半拍for(t2 = 0; t2 < t3; t2++); //延时期间, 可进入T0中断去发音TR0 = 0; //关闭T0, 停止发音}//--------------------------------------void song() //演奏一个音符{TH0 = timer0h; //控制音调TL0 = timer0l;TR0 = 1; //启动T0, 由T0输出方波去发音delay(time); //控制时间长度}void delaytime (){unsigned char e,f;for(e=0;e<100;e++)for(f=0;f<30;f++);}//--------------------------------------void main(void){unsigned char k, i;TMOD = 1; //置T0定时工作方式1ET0 = 1; //开T0中断EA = 1; //开CPU中断while(1) {i = 0;time = 1;P0=P2=P3=0x0;while(time){if (key1==0){delaytime();while(!key1);kk=kk+1;}if (key2==0){delaytime();while(!key2);kk=kk-1;}if(kk==1){k = shengrikuaile[i] + 7 * shengrikuaile[i + 1] - 1; //第i个是音符, 第i+1个是第几个八度if(n==8){n=0;}{P0=P3=P2=led[n]; } //控制灯亮timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k];n=n+1; //实际上, 是定时地时间长度time = shengrikuaile[i + 2]; //读出时间长度数值i += 3;song();}if(kk==2){k = tonghua[i] + 7 * tonghua[i + 1] - 1; //第i个是音符, 第i+1个是第几个八度if(n==8){n=0;}{P0=P3=P2=led[n]; } //控制灯亮timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k];n=n+1; //实际上, 是定时地时间长度time = tonghua[i + 2]; //读出时间长度数值i += 3;song();}if(kk==3){k = nuannuan[i] + 7 * nuannuan[i + 1] - 1; //第i个是音符, 第i+1个是第几个八度if(n==8){n=0;}{P0=P3=P2=led[n]; } //控制灯亮timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k];n=n+1; //实际上, 是定时地时间长度time = nuannuan[i + 2]; //读出时间长度数值i += 3;song();}if(kk==4){k = zanmenjiehunba[i] + 7 * zanmenjiehunba[i + 1] - 1; //第i个是音符, 第i+1个是第几个八度if(n==8){n=0;}{P0=P3=P2=led[n]; } //控制灯亮timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k];n=n+1; //实际上, 是定时地时间长度time = zanmenjiehunba[i + 2]; //读出时间长度数值i += 3;song();}if(kk==5){k = haojiubujian[i] + 7 * haojiubujian[i + 1] - 1; //第i个是音符, 第i+1个是第几个八度if(n==8){n=0;}{P0=P3=P2=led[n]; } //控制灯亮timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k];n=n+1; //实际上, 是定时地时间长度time = haojiubujian[i + 2]; //读出时间长度数值i += 3;song();}if(kk==6){k = tianshidechibang[i] + 7 * tianshidechibang[i + 1] - 1; //第i个是音符, 第i+1个是第几个八度if(n==8){n=0;}{P0=P3=P2=led[n]; } //控制灯亮timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k];n=n+1; //实际上, 是定时地时间长度time = tianshidechibang[i + 2]; //读出时间长度数值i += 3;song();}if(kk==7){k = zuijinhaoma[i] + 7 * zuijinhaoma[i + 1] - 1; //第i个是音符, 第i+1个是第几个八度if(n==8){n=0;}{P0=P3=P2=led[n]; } //控制灯亮timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k];n=n+1; //实际上, 是定时地时间长度time = zuijinhaoma[i + 2]; //读出时间长度数值i += 3;song();}if(kk==8){k = shinian[i] + 7 * shinian[i + 1] - 1; //第i个是音符, 第i+1个是第几个八度if(n==8){n=0;}{P0=P3=P2=led[n]; } //控制灯亮timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k];n=n+1; //实际上, 是定时地时间长度time = shinian[i + 2]; //读出时间长度数值i += 3;song();}if(kk>8){unsigned int c;unsigned int d=40000;for(c=0;c<50;c++)while(d--)P0=P2=P3=led [n]; delaytime();delaytime();}} //发出一个音符} }版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律地规定,不得侵犯本网站及相关权利人地合法权利.除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面许可,并支付报酬.Users may use the contents or services of this article for personal study, research or appreciation, and othernon-commercial or non-profit purposes, but at the same time, they shall abide by the provisions of copyright law and other relevant laws, and shall not infringe upon the legitimate rights of this website and its relevant obligees. In addition, when any content or service of this article is used for other purposes, written permission and remuneration shall be obtained from the person concerned and the relevant obligee.转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目地地合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任.Reproduction or quotation of the content of this article must be reasonable and good-faith citation for the use of news or informative public free information. It shall not misinterpret or modify the original intention of the content of this article, and shall bear legal liability such as copyright.。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要随着科技和经济的快速发展,人们对生活质量和生活环境的要求不断的提高,多彩多样的彩灯成了现今装饰和美化的时尚和潮流。

千姿万态的流水灯能给人一种视觉冲击。

拟采用单片机AT89C51去实现这种千变万化的流水灯。

单片机技术是一种传统和典型的技术,具有智能化、体积小、集成度高和价格低廉等许多独特的优点。

而且单片机明显优越于其他电子电路,其硬件电路和软件方面都不是特别复杂。

本设计将所学的单片机的理论和动手实践结合起来,主要利用AT89C51单片机设计并制作一个音乐流水灯。

首先设计一个稳定的直流电源电路,然后设计一个复位电路,为单片机的正常工作提供条件,然后再设计时钟电路和声音驱动电路,可以使单片机能够更好的控制与编译音乐部分,另外还设计一个通信电路以方便单片机和PC机的连接与通信,最后还需要设计按键电路用来控制音乐流水灯。

为了使蜂鸣器能够正常的发生还需设计一个音频电路。

硬件电路设计后要将各模块连接起来进行仿真和调试。

软件设计部分则需要将各电路模块进行编译,并设计音乐频率程序、流水灯程序和按键程序,同时将其进行仿真调试和组合调试。

以实现在播放音乐时LED 灯有千变万化的效果,以满足对视觉上的享受。

关键词:单片机;音乐;流水灯;仿真;ABSTRACTWith the science and technology and the economy the rapid development, people pairs quality of life and living environment the requirements of continuously improve, colorful and diverse of the lantern became a nowadays decorative and beautify's fashion and trend. Zi million-state of flowing water lamp can give a person one kinds visual impact. Intends to adopt AT89C51 microcontroller to go achieve such kaleidoscopic of flowing water lights. MCU technology is a kind of tradition and typical technical, with intelligent, the volume is small, high integration and price inexpensive and so on many unique advantages. Moreover single-chip obviously superior to other electronic circuit, its hardware circuits and software aspects of are not particularly complicated.The single-chip design will combine theory and practice, the main use AT89C51 single-chip design of a musical water lights. First, design a stable DC power supply circuit, and then design a reset circuit for the microcontroller to provide normal working conditions, and then design a clock circuit and sound driver circuit, will enable MCU to better control and compile music part, in addition to design a to facilitate communication circuit chip and PC connectivity and communication, and finally also need to design the circuit to control the music keys light water. In order to make the buzzer to normal design an audio circuit needs to happen. After the hardware circuit design to connect the modules for simulation and debugging. Software design will need to be compiled each circuit module, and the design frequency of the music program, water lights and key procedures, and its combination of simulation debugging and debugging. When playing music in order to achieve a kaleidoscopic effect LED lights to meet the visual enjoyment.Key words:MCU; Music; Light water;Simulation目录摘要 (I)ABSTRACT (II)目录 (1)1. 绪论 (1)1.1 单片机的概念 (1)1.2 单片的历史、发展和应用 (4)2. 总体设计 (6)2.1 设计要求 (6)2.2 设计方案选择 (6)2.3 整体设计思路 (6)3. 系统硬件设计与部分电路说明 (8)3.1 硬件设计框图 (8)3.2 部分电路说明 (8)3.2.1 电源及启动电路 (8)3.2.2 复位电路 (9)3.2.3 时钟电路 (10)3.2.4 通信电路 (10)3.2.5 键盘电路 (11)3.2.6 流水灯电路 (11)3.2.7 音频电路 (12)3.3 电路原理图及说明 (12)4. 系统软件电路设计与分析 (13)4.1 音乐程序设计 (13)4.1.1 音乐程序流程图 (14)4.2 流水灯设计 (16)4.2.1 流水灯程序流程图 (16)4.2.2 流水灯程序 (16)4.3 音乐流水灯程序 (16)4.3.1 音乐流水灯程序流程图 (16)4.3.2 音乐流水灯程序 (17)5. 系统调试与仿真 (19)5.1 硬件调试 (19)5.2 软件调试 (19)5.3 软件仿真 (19)总结 (22)致谢 (23)参考文献 (24)附录一 (25)附录二 (26)附录三 (31)附录四 (32)1. 绪论1.1 单片机的概念单片机是在一块芯片上超大规模集成技术集中了中央处理单元(CPU)、随机存储器(RAM)、只读存储器(ROM)、特殊功能寄存器(SFR)和各种输入/输出(I/O)接口(定时/计数器、中断系统接口、并行和串行I/O接口以及A/D转换接口等)的微型计算机,又称微控制器。

目前最强大的单片机系统可以将声音和图像等复杂的输入输出系统集成在一块芯片上,所以单片机亦被称为微控制器和嵌入式控制器。

AT89C51单片机是由美国Atmel公司生产的具有低电压和低功耗、高性能、多功能的通用型8位单片机,其具有庞大而丰富的内部资源:1个8位中央处理机CPU、12MHz的片内时钟电路、128+21B的片内数据存储器、4KB的片内程序只读存储器、4KB闪存、4个8位并行I/O接口、1个串行I/O接口、2个16位定时/计数器、5个中断源、具有4.25~5.50V的电压工作范围和0~24MHz的工作频率,另外使用AT89C51单片机时无需外扩存储器。

AT89C51芯片的引脚功能如图1-1所示:VCC:电源电压GND:接地端RST:即RESET,复位输入端。

单片机振荡器工作时,若RST引脚上出现高电平并保持2个时钟周期,则实现复位操作,所有的I/O引脚都将复位为“1”,单片机恢复为初始状态。

XTAL1:即反向震荡放大器的输入和内部时钟工作电路的输入。

XTAL2:即反向震荡放大器的输出和内部时钟工作电路的输出。

对于CHMOS图1-1 8051芯片的引脚图芯片,该引脚悬空不接。

ALU:算数逻辑单元。

可进行加、减、乘、除运算和与、或、非、异或等逻辑运算,另外还可执行增量、减量、左移位、右移位、半字节更换以及位处理等操作。

ACC:8位累加器。

PSW:8位程序状态字。

其中存放着当前ALU的一些操作状态特征,详见表1-1,其字节地址是D0H。

表1-1 程序状态字内部定义PSW位PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0 位地址D7H D6H D5H D4H D3H D2H D1H D0H位符号CY AC F0 RS1 RS0 OV F1 PPSEN:片外程序存储器读选通信号输出端。

当从外部程序存储器读取数据或者指令时,PSEN的每个机器周期2次有效,以通过数据总线口读回数据或指令。

DPTR:16位数据指针。

主要用来存放外部RAM的数据地址和ROM数据表的基地址。

内存中包含DPL和DPH两个8位寄存器,其中DPH存放地址的高8位,DPL 存放地址的低8位。

SP:8位堆栈指针。

用于指出当前堆栈的顶部地址。

当单片机内有入栈操作时,SP自动加1,出栈时SP=SP-1。

PC:16位程序计数器。

只有中断、跳转和调用指令才能使其作其他变化。

其中单片机开机或者复位时,PC的起始值为0000H。

P0口:P0.0~P0.7统称为P0口。

当不接外部存储器或不扩展I/O接口时,可作为准双向8位输入/输出接口。

当接有外部存储器或扩展I/O接口时,P0口为地址/数据分时复用口。

分时可提供低8位地址总线和8位双向数据总线。

图1-2 P0口内部结构图P1口:8位准双向I/O接口,包括P1.0~P1.7。

P1.0和P1.1有第二功能,P0.1可用作定时/计数器2的计数脉冲输入端T2;P1.1则可用作定时/计数器2的外部控制端T2EX。

图1-3 P1口内部结构图P2口:引脚P2.0~P2.7的统称,一般可作为准双向I/O接口。

当接有外部存储器或扩展I/O接口且寻址范围超过256B时,P2口还可当作是高8位地址总线送出高8位地址。

相关文档
最新文档