当前位置:文档之家› 音乐流水灯报告

音乐流水灯报告

音乐流水灯报告
音乐流水灯报告

1.绪论

1.1 EDA简介

EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。

利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物等各个领域,都有EDA的应用。

1.2 硬件描述语VHDL

硬件描述语言(HDL)是一种用于设计硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式,与传统的门级描述方式相比,它更适合大规模系统的设计。例如一个32位的加法器,利用图形输入软件需要输人500至1000个门,而利用VHDL语言只需要书写一行“A=B+C” 即可。而且VHDL语言可读性强,易于修改和发现错误。早期的硬件描述语言,如ABEL、HDL、AHDL,由不同的EDA厂商开发,互不兼容,而且不支持多层次设计,层次间翻译工作要由人工完成。为了克服以上不足,1985年美国国防部正式推出了高速集成电路硬件描述语言VHDL,1987年IEEE采纳VHDL 为硬件描述语言标准(IEEE-STD-1076)。

VHDL是一种全方位的硬件描述语言,包括系统行为级。寄存器传输级和逻

辑门多个设计层次,支持结构、数据流和行为三种描述形式的混合描述,因此VHDL 几乎覆盖了以往各种硬件俄语言的功能,整个自顶向下或由下向上的电路设计过程都可以用VHDL 来完成。VHDL 还具有以下优点:

(1)VHDL 的宽范围描述能力使它成为高层进设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试,而花较少的精力于物理实现。

(2)VHDL 可以用简洁明确的代码描述来进行复杂控制逻辑设计,灵活且方便,而且也便于设计结果的交流、保存和重用。

(3)VHDL 的设计不依赖于特定的器件,方便了工艺的转换。

(4)VHDL 是一个标准语言,为众多的EDA 厂商支持,因此移植性好。

美国于1981年提出了一种新的、标准化的HDL ,称之为VHSIC(Very High Speed Integrated Circuit) Hardware Description Language ,简称VHDL 。这是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言。设计者可以利用这种语言来描述自己的设计思想,然后利用电子设计自动化工具进行仿真,再自动综合到门电路,最后用PLD 实现其功能。

FPGA/CPLD 电路设计的一般流程:

通常可将设计流程归纳为以下7个步骤。

第1步:设计输入。在传统设计中,设计人员是应用传统的原理图输入方法来开始设计的。自90年代初,Verilog 、VHDL 、 AHDL 等硬件描述语言的输入方法得到了广大工程设计人员的认可。

第2步:前仿真。所设计的电路必须在布局布线前验证,目的主要是在仿真时,验证电路功能是否有效。在ASIC 设计中,这一步骤称为第一次Sign —off.

第3步:设计输入编译。设计输入之后就有一个从高层次系统行为设计向低层次门级逻辑电路的转化翻译过程,即把设计输入的某种或某几种数据格式(网表)转化为底层软件能够识别的某种数据格式(网表),以求达到与其工艺无关。

第4步:设计输入的优化。对于上述综合生成的网表,根据布尔方程功能等效的原则,用更小更快的综合结果替代一些复杂的单元,并与指定的库映射生成新的网表,这是硬件描述语言输入方式中减小电路规模的一条必由之路。

第5步:布局布线。当初步的仿真被验证后,就开始布局布线。这一步可相对规划出ASIC 和FPGA/CPLD 设计。

第6步:后仿真。设计人员需要利用在布局线中获得的更精确的RC 参数再次验证电路的功能和时序。在ASIC 设计中,这一步骤称为第二次Sign —off 。

第7步:流片。在布局布线和后仿真完成之后,当需要大批量生产该芯片时,就可以开始ASIC 芯片的投产。

1.3 软件介绍

Quartus II 是Altera 公司的综合性PLD 开发软件,支持原理图、VHDL 、VerilogHDL 以及AHDL (Altera Hardware Description Language )等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD 设计流程。

Quartus II 可以在XP 、Linux 以及Unix 上使用,除了可以使用Tcl 脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。

Quartus II 支持Altera 的IP 核,包含了LPM/MegaFunction 宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA 工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA 工具。

此外,Quartus II 通过和DSP Builder 工具与Matlab/Simulink 相结合,可以方便地实现各种DSP 应用系统;支持Altera 的片上可编程系统(SOPC )开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

Maxplus II 作为Altera 的上一代PLD 设计软件,由于其出色的易用性而得到了广泛的应用。Altera 在Quartus II 中包含了许多诸如SignalTap II 、Chip Editor 和RTL Viewer 的设计辅助工具,集成了SOPC 和HardCopy 设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。

Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

1.4 硬件介绍

Cyclone 器件:

Cyclone 现场可编程门阵列系列基于1.5V 、0.13μm 全铜层SRAM 工艺,其密度增加至20060个逻辑元件(LE ),RAM 增加至228KB 。它具有生成时钟的锁相环以及DDR SDR 和快速RAM (FCRAM )存储器所需的专用双数据率(DDR )接口等。Cyclone 器件支持多种I/O 标准,包括640Mbps 的LVDS ,以及频率为33MHz 和66MHz 、数据宽度为32位和64位的PCI 。

Cyclone 器件可以实现Nios II 嵌入式处理器,而且只占用不到600个逻辑单元(LE ),因此在含多达20260个LE 的最大Cyclone 器件中,可以将多个Nios II 处理器集成到一个Cyclone 器件中。Nios II 系列嵌入式处理器以第一代Nios 处理器为基础,提供三种内核来满足嵌入式处理器的应用。设计者可以从高性能内核(超过200 DMIPS )、低成本内核(代于50美分的逻辑资源消耗)和性价比平衡的标准内核中进行选择。

开发人员通过向Nios II 处理器指令集中增加定制指令,可以加速软件算法。定制指令可以在一个时钟周期的时间内完成复杂的处理任务,为系统优化提供了一种高性价比的解决方案。用户添加的定制指令可以该问存储器和Nios II 系统外部的逻辑,提供了高效、灵活的访问数据和逻辑资源的能力。定制指令允许设计者灵活、轻便地设计高端软件,同时保留了并行硬件操作在可编程逻辑器件(PLD )中的性能优势。

1.5 课题研究

在本课程设计中使用Altera 公司的EP2C35系列的FPGA 芯片,利用

SOPC-NIOSII-EP2C35开发板上的资源,实现一个音乐流水灯。本设计的任务要求通过编程实现一段音乐旋律的循环播放,在音乐播放的过程中,流水灯根据旋律闪烁。

1.5.1 课题研究内容

主要内容:

在本课程设计中使用Altera 公司的EP2C35系列的EP2C35F484C7 -FPGA 芯

片,利用SOPC-NIOSII-EP2C35开发板上的资源,实现一个音乐流水灯。本设计的任务要求通过编程实现一段音乐旋律的循环播放,在音乐播放的过程中,流水灯根据旋律闪烁。

扩展内容:

1 利用数码管显示播放时间

2利用16*16点阵显示播放歌曲名称

3利用4×4键盘阵列键盘实现播放歌曲的切换

4利用液晶显示频谱分析

1.5.2 课题研究方法

1.5.

2.1 理论依据

根据设计要求分析系统功能,掌握设计中所需理论(音乐模块的设计,流水灯模块的设计,16*16点阵模块的设计,按键选择模块的设计,音乐播放时间模块的设计),阐述设计原理。

1.5.

2.2 音乐模块

基本原理:组成乐曲的每个音符的频率值以及持续时间是乐曲能连续演奏所需的基本数据。并将简单音乐的相应程序加载到蜂鸣器模块中,使其能够按照音乐的节奏发声。

1.5.

2.3 流水灯模块

通过对流水灯模块的编程控制,使其实现随着简单音乐的节奏有规律的进行点亮和熄灭。

1.5.

2.4 16*16点阵模块

16*16点阵的行为扫描选通信号、列为数据输入。显示采用逐行列扫描方式,数据端不断输入数据,行扫描按一定顺序逐行选通,扫描一个周期(16次)产生一帧画面。使其实现在按键选择播放相应简单音乐时,16*16点阵循环显示播放歌曲的名字。

1.5.

2.5 按键选择模块

由于4*4矩阵键盘模块、数码管模块与16*16点阵模块的引脚有相同的,所以不能在有数码管模块与16*16点阵模块的功能时同时用4*4矩阵键盘模块控制简单歌曲的切换。因此,我将采用拨动开关模块控制简单歌曲的切换。

1.5.

2.6 音乐播放时间模块

当音乐开始播放时,八位七段数码管开始从零开始计时,因此通过八位七段数码管可以知道音乐播放的时间。

2 课程设计方案及相应原理

2.1 课程设计总体方案

具体总体设计方案见图2.1、图2.2:

图2.1 总体方案设计流程图(点阵显示+按键选择+流水灯)

图2.2 总体方案设计流程图(时间显示+按键选择+流水灯)

开始

读取按键

扫描16*16点阵

16*16点阵选

择相应代码,

显示歌曲名称

读取按键

播放歌曲

读取歌曲代码

流水灯显示

开始

读取按键

播放歌曲

读取歌曲代码

流水灯显示

歌曲计时开始

2.2 具体设计方法

在本节中,将对各个模块的具体设计方法及仿真现象进行阐述,但最后的课程设计是将好几个模块的设计思路同时同时进行仿真和烧录至开发系统进行验证的。同时,由于4*4矩阵键盘模块、数码管模块与16*16点阵模块的引脚有相同的,所以不能在有数码管模块与16*16点阵模块的功能时同时用4*4矩阵键盘模块控制简单歌曲的切换。因此,课程设计内容里面要求的部分拓展内容,将分为两个程序来实现。

2.2.1 音乐模块

2.2.1.1 基本原理

为了便于理解,首先介绍一下硬件电路的发声原理。我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。而乐曲中的每一音符对应着一个确定的频率,因此,要想FPGA发出不用音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个基本要素,获取这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果是本实验的关键。

因此要实现在蜂鸣器上播放出有一定规律节奏的简单歌曲,就需要了解各个音阶的频率,以及怎样将这些频率转换为开发系统以及蜂鸣器能够识别的代码。具体个音阶的频率见图2.3,以及频率点及音符与音谱对应定义见图2.4:

图2.3 各音阶频率表

图2.4 频率点及音符与音谱对应表

2.2.1.2 程序及相应电路原理图

该模块程序如下所示:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity TKZC is

port( clk : in std_logic; --Clock Signal

spk : buffer std_logic; --speaker driver

led : out std_logic_vector(11 downto 0));

end TKZC;

architecture behave of TKZC is

signal tone : std_logic_vector(10 downto 0);

signal tone_count : std_logic_vector(10 downto 0);

signal tone_index : integer range 0 to 15;

signal clk10_count : std_logic_vector(17 downto 0);

signal time : integer range 0 to 270;

signal clk10 : std_logic;

begin

process(clk) --generate 10hz clock signal

begin

if(clk'event and clk='1') then

clk10_count<=clk10_count+1;

if(clk10_count=16#3fff#) then

clk10<=not clk10;

end if;

end if;

end process;

process(clk10)

begin

if(clk10'event and clk10='1') then

if(time=270) then

time<=0;

else

time<=time+1;

end if;

end if;

end process;

process(clk10)

begin

if(clk10'event and clk10='1') then

case time is

when 0=>tone_index<=6;

when 1=>tone_index<=7;

when 2=>tone_index<=8;

when 3=>tone_index<=8;--

when 4=>tone_index<=8;

when 5=>tone_index<=7;

when 6=>tone_index<=8;

when 8=>tone_index<=10; when 9=>tone_index<=10; when 10=>tone_index<=7; when 11=>tone_index<=7;-- when 12=>tone_index<=7; when 13=>tone_index<=7; when 14=>tone_index<=0; when 15=>tone_index<=0;-- when 16=>tone_index<=3; when 17=>tone_index<=3; when 18=>tone_index<=6; when 19=>tone_index<=6;-- when 20=>tone_index<=6; when 21=>tone_index<=5; when 22=>tone_index<=6; when 23=>tone_index<=6;-- when 24=>tone_index<=8; when 25=>tone_index<=8; when 26=>tone_index<=5; when 27=>tone_index<=5;-- when 28=>tone_index<=5; when 29=>tone_index<=5; when 30=>tone_index<=0; when 31=>tone_index<=0;-- when 32=>tone_index<=3; when 33=>tone_index<=3; when 34=>tone_index<=4; when 35=>tone_index<=4;-- when 36=>tone_index<=4; when 37=>tone_index<=3; when 38=>tone_index<=4; when 39=>tone_index<=0;-- when 40=>tone_index<=8; when 41=>tone_index<=8; when 42=>tone_index<=3; when 43=>tone_index<=3;-- when 44=>tone_index<=3; when 45=>tone_index<=3; when 46=>tone_index<=0; when 47=>tone_index<=9;-- when 48=>tone_index<=9; when 49=>tone_index<=9; when 50=>tone_index<=7;

when 52=>tone_index<=7; when 53=>tone_index<=4; when 54=>tone_index<=4; when 55=>tone_index<=4;-- when 56=>tone_index<=7; when 57=>tone_index<=7; when 58=>tone_index<=7; when 59=>tone_index<=7;-- when 60=>tone_index<=7; when 61=>tone_index<=7; when 62=>tone_index<=0; when 63=>tone_index<=0;---- when 64=>tone_index<=6; when 65=>tone_index<=7; when 66=>tone_index<=8; when 67=>tone_index<=8;-- when 68=>tone_index<=8; when 69=>tone_index<=7; when 70=>tone_index<=8; when 71=>tone_index<=8;-- when 72=>tone_index<=10; when 73=>tone_index<=10; when 74=>tone_index<=7; when 75=>tone_index<=7;-- when 76=>tone_index<=7; when 77=>tone_index<=7; when 78=>tone_index<=0; when 79=>tone_index<=0;-- when 80=>tone_index<=3; when 81=>tone_index<=3; when 82=>tone_index<=6; when 83=>tone_index<=6;-- when 84=>tone_index<=6; when 85=>tone_index<=5; when 86=>tone_index<=6; when 87=>tone_index<=6;-- when 88=>tone_index<=8; when 89=>tone_index<=8; when 90=>tone_index<=5; when 91=>tone_index<=5;-- when 92=>tone_index<=5; when 93=>tone_index<=5; when 94=>tone_index<=0;

when 96=>tone_index<=0; when 97=>tone_index<=3; when 98=>tone_index<=4; when 99=>tone_index<=4;-- when 100=>tone_index<=8; when 101=>tone_index<=7; when 102=>tone_index<=7; when 103=>tone_index<=7;-- when 104=>tone_index<=8; when 105=>tone_index<=8; when 106=>tone_index<=9; when 107=>tone_index<=9;-- when 108=>tone_index<=9; when 109=>tone_index<=10; when 110=>tone_index<=8; when 111=>tone_index<=8;-- when 112=>tone_index<=0; when 113=>tone_index<=0; when 114=>tone_index<=8; when 115=>tone_index<=7;-- when 116=>tone_index<=6; when 117=>tone_index<=6; when 118=>tone_index<=7; when 119=>tone_index<=7;-- when 120=>tone_index<=5; when 121=>tone_index<=5; when 122=>tone_index<=6; when 123=>tone_index<=6;-- when 124=>tone_index<=6; when 125=>tone_index<=6; when 126=>tone_index<=0; when 127=>tone_index<=0;-- when 128=>tone_index<=8; when 129=>tone_index<=9; when 130=>tone_index<=10; when 131=>tone_index<=10;-- when 132=>tone_index<=10; when 133=>tone_index<=9; when 134=>tone_index<=10; when 135=>tone_index<=10;-- when 136=>tone_index<=12; when 137=>tone_index<=12; when 138=>tone_index<=9;

when 140=>tone_index<=9;-- when 141=>tone_index<=9; when 142=>tone_index<=0; when 143=>tone_index<=0; when 144=>tone_index<=5;-- when 145=>tone_index<=5; when 146=>tone_index<=8; when 147=>tone_index<=7; when 148=>tone_index<=8;-- when 149=>tone_index<=8; when 150=>tone_index<=10; when 151=>tone_index<=10; when 152=>tone_index<=10;-- when 153=>tone_index<=10; when 154=>tone_index<=10; when 155=>tone_index<=10; when 156=>tone_index<=0;-- when 157=>tone_index<=0; when 158=>tone_index<=0; when 159=>tone_index<=0; when 160=>tone_index<=6;-- when 161=>tone_index<=7; when 162=>tone_index<=8; when 163=>tone_index<=8; when 164=>tone_index<=7;-- when 165=>tone_index<=7; when 166=>tone_index<=9; when 167=>tone_index<=9; when 168=>tone_index<=8;-- when 169=>tone_index<=8; when 170=>tone_index<=8; when 171=>tone_index<=5; when 172=>tone_index<=5;-- when 173=>tone_index<=5; when 174=>tone_index<=9; when 175=>tone_index<=0; when 176=>tone_index<=0;-- when 177=>tone_index<=11; when 178=>tone_index<=11; when 179=>tone_index<=10; when 180=>tone_index<=10;-- when 181=>tone_index<=9; when 182=>tone_index<=9;

when 184=>tone_index<=8;-- when 185=>tone_index<=10; when 186=>tone_index<=10; when 187=>tone_index<=10; when 188=>tone_index<=10;-- when 189=>tone_index<=10; when 190=>tone_index<=10; when 191=>tone_index<=0; when 192=>tone_index<=0;-- when 193=>tone_index<=10; when 194=>tone_index<=10; when 195=>tone_index<=10; when 196=>tone_index<=10;-- when 197=>tone_index<=0; when 198=>tone_index<=0; when 199=>tone_index<=10; when 200=>tone_index<=10;-- when 201=>tone_index<=13; when 202=>tone_index<=13; when 203=>tone_index<=13; when 204=>tone_index<=13;-- when 205=>tone_index<=12; when 206=>tone_index<=12; when 207=>tone_index<=12; when 208=>tone_index<=12;-- when 209=>tone_index<=10; when 210=>tone_index<=10; when 211=>tone_index<=8; when 212=>tone_index<=8;-- when 213=>tone_index<=0; when 214=>tone_index<=8; when 215=>tone_index<=9; when 216=>tone_index<=9;-- when 217=>tone_index<=8; when 218=>tone_index<=9; when 219=>tone_index<=9; when 220=>tone_index<=13;-- when 221=>tone_index<=10; when 222=>tone_index<=10; when 223=>tone_index<=10; when 224=>tone_index<=10;-- when 225=>tone_index<=0; when 226=>tone_index<=0;

when 228=>tone_index<=10;-- when 229=>tone_index<=13; when 230=>tone_index<=13; when 231=>tone_index<=13; when 232=>tone_index<=13;-- when 234=>tone_index<=12; when 235=>tone_index<=12; when 236=>tone_index<=12; when 237=>tone_index<=12;-- when 238=>tone_index<=10; when 239=>tone_index<=9; when 240=>tone_index<=8; when 241=>tone_index<=8;-- when 242=>tone_index<=8; when 243=>tone_index<=8; when 244=>tone_index<=0; when 245=>tone_index<=8;---- when 246=>tone_index<=9; when 247=>tone_index<=9; when 248=>tone_index<=8; when 249=>tone_index<=9;-- when 250=>tone_index<=9; when 251=>tone_index<=9; when 252=>tone_index<=7; when 253=>tone_index<=7;-- when 254=>tone_index<=6; when 255=>tone_index<=6; when 256=>tone_index<=6; when 257=>tone_index<=6;-- when 258=>tone_index<=0; when 259=>tone_index<=0; when 260=>tone_index<=6; when 261=>tone_index<=7;-- when 262=>tone_index<=6; when 263=>tone_index<=6; when 264=>tone_index<=6; when 265=>tone_index<=6;-- when 266=>tone_index<=6; when 267=>tone_index<=6; when 268=>tone_index<=0; when 269=>tone_index<=0;-- when others=>tone_index<=0; end case;

end if;

end process;

process(tone_index)

begin

case tone_index is

when 0=>tone<="11111111111";

when 3=>tone<="010********";

when 4=>tone<="010********";

when 5=>tone<="01100000011";

when 6=>tone<="01110001111";

when 7=>tone<="10000001010";

when 8=>tone<="10001000010";

when 9=>tone<="10010101100";

when 10=>tone<="10100001000";

when 11=>tone<="10100110011";

when 12=>tone<="10110000001";

when 13=>tone<="10111000111";

when others=>tone<="11111111111";

end case; end process;

process(clk) --control the frequence of the speaker

begin

if(clk'event and clk='1') then

if(tone_count=16#7ff#) then

tone_count<=tone;

if(tone<2047) then

spk<=not spk;

end if;

else

tone_count<=tone_count+1;

end if;

end if;

end process;

end behave;

2.2.2 流水灯模块

2.2.2.1 基本原理

在LED1~LED12引脚上按照简单音乐的节奏有规律的的输出流水数据,如原来输出的数据是000000000011则表示点亮LED1,LED2(共阴接法),流水一次后,输出的数据应该为000000000111,而此时则应点亮LED1~LED3三个LED 发光二极管。就可以实现LED 流水灯。但是根据本次课程设计的要求,每次只会有一个音阶响起,所以每次只会有一个LED 灯亮起。

2.2.2.2 程序及相应电路原理图

该模块程序如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity TKZC is

port( clk : in std_logic; --Clock Signal

spk : buffer std_logic; --speaker driver

led : out std_logic_vector(11 downto 0));

end TKZC;

architecture behave of TKZC is

signal tone : std_logic_vector(10 downto 0);

signal tone_count : std_logic_vector(10 downto 0);

signal tone_index : integer range 0 to 15;

signal clk10_count : std_logic_vector(17 downto 0);

signal time : integer range 0 to 270;

signal clk10 : std_logic;

begin

process(clk) --generate 10hz clock signal

begin

if(clk'event and clk='1') then

clk10_count<=clk10_count+1;

if(clk10_count=16#3fff#) then

clk10<=not clk10;

end if;

end if;

end process;

process(clk10)

begin

if(clk10'event and clk10='1') then

if(time=270) then

time<=0;

else

time<=time+1;

end if;

end if;

end process;

process(clk10)

begin

if(clk10'event and clk10='1') then

case time is

when 0=>tone_index<=6;

when 1=>tone_index<=7;

when 2=>tone_index<=8;

when 3=>tone_index<=8;--

when 4=>tone_index<=8;

when 5=>tone_index<=7;

when 6=>tone_index<=8;

when 7=>tone_index<=8;--

when 8=>tone_index<=10;

when 9=>tone_index<=10;

when 10=>tone_index<=7;

when 11=>tone_index<=7;--

when 12=>tone_index<=7;

when 13=>tone_index<=7;

when 14=>tone_index<=0;

when 15=>tone_index<=0;--

when 16=>tone_index<=3;

when 17=>tone_index<=3;

when 18=>tone_index<=6;

when 19=>tone_index<=6;--

when 20=>tone_index<=6;

when 21=>tone_index<=5;

when 22=>tone_index<=6;

when 23=>tone_index<=6;--

when 24=>tone_index<=8;

when 25=>tone_index<=8;

when 26=>tone_index<=5;

when 27=>tone_index<=5;--

when 28=>tone_index<=5;

when 29=>tone_index<=5;

when 30=>tone_index<=0;

when 31=>tone_index<=0;--

when 32=>tone_index<=3;

when 34=>tone_index<=4; when 35=>tone_index<=4;-- when 36=>tone_index<=4; when 37=>tone_index<=3; when 38=>tone_index<=4; when 39=>tone_index<=0;-- when 40=>tone_index<=8; when 41=>tone_index<=8; when 42=>tone_index<=3; when 43=>tone_index<=3;-- when 44=>tone_index<=3; when 45=>tone_index<=3; when 46=>tone_index<=0; when 47=>tone_index<=9;-- when 48=>tone_index<=9; when 49=>tone_index<=9; when 50=>tone_index<=7; when 51=>tone_index<=7;-- when 52=>tone_index<=7; when 53=>tone_index<=4; when 54=>tone_index<=4; when 55=>tone_index<=4;-- when 56=>tone_index<=7; when 57=>tone_index<=7; when 58=>tone_index<=7; when 59=>tone_index<=7;-- when 60=>tone_index<=7; when 61=>tone_index<=7; when 62=>tone_index<=0; when 63=>tone_index<=0;---- when 64=>tone_index<=6; when 65=>tone_index<=7; when 66=>tone_index<=8; when 67=>tone_index<=8;-- when 68=>tone_index<=8; when 69=>tone_index<=7; when 70=>tone_index<=8; when 71=>tone_index<=8;-- when 72=>tone_index<=10; when 73=>tone_index<=10; when 74=>tone_index<=7; when 75=>tone_index<=7;-- when 76=>tone_index<=7;

when 78=>tone_index<=0; when 79=>tone_index<=0;-- when 80=>tone_index<=3; when 81=>tone_index<=3; when 82=>tone_index<=6; when 83=>tone_index<=6;-- when 84=>tone_index<=6; when 85=>tone_index<=5; when 86=>tone_index<=6; when 87=>tone_index<=6;-- when 88=>tone_index<=8; when 89=>tone_index<=8; when 90=>tone_index<=5; when 91=>tone_index<=5;-- when 92=>tone_index<=5; when 93=>tone_index<=5; when 94=>tone_index<=0; when 95=>tone_index<=0;-- when 96=>tone_index<=0; when 97=>tone_index<=3; when 98=>tone_index<=4; when 99=>tone_index<=4;-- when 100=>tone_index<=8; when 101=>tone_index<=7; when 102=>tone_index<=7; when 103=>tone_index<=7;-- when 104=>tone_index<=8; when 105=>tone_index<=8; when 106=>tone_index<=9; when 107=>tone_index<=9;-- when 108=>tone_index<=9; when 109=>tone_index<=10; when 110=>tone_index<=8; when 111=>tone_index<=8;-- when 112=>tone_index<=0; when 113=>tone_index<=0; when 114=>tone_index<=8; when 115=>tone_index<=7;-- when 116=>tone_index<=6; when 117=>tone_index<=6; when 118=>tone_index<=7; when 119=>tone_index<=7;-- when 120=>tone_index<=5;

双单片机控制流水灯(精)

案例8 双单片机通信控制流水灯 用串行工作方式进行单片机之间的通信,电路图如下图所示。两个89S51单片机通过串行口进行通信,设置U1使用的晶振频率是11.0592MHz,U2使用的晶振频率是22.1184MHz,U1的RXD接U2的TXD,U1的TXD接U2的RXD,U2接8个发光二极管,要求由U1向U2发送数据,使8个发光二极管按从左到右逐一点亮的流水灯效果。 MCS-51单片机之间的串行异步通信 1.串行口的编程串行口需初始化后,才能完成数据的输入、输出。其初始化过程如下: (1)按选定串行口的工作方式设定SCON的SM0、SM1两位二进制编码。 (2)对于工作方式2或3,应根据需要在TB8中写入待发送的第9位数据(地址为1,数据为0)。 (3)若选定的工作方式不是方式0,还需设定接收/发送的波特率。 (4)设定SMOD的状态,以控制波特率是否加倍。 (5)若选定工作方式1或3,则应对定时器T1进行初始化以设定其溢出率。 2.案例分析由于串行口通信时传输的“0”或者“1”是通过相对于“地”的

电压区分的,因此使用串行口通信时,必须将双方的“地”线相连以使其具有相同的电压参考点。需要注意的是,异步通信时两个单片机的串行口波特率必须是一样的。由于U1使用的晶振频率是11.0592MHz,U2使用的晶振频率是22.1184MHz,因此二者的串行口初始化程序不完全一样。假设使用240bit/s的波特率,使用串行工作方式1,Tl使用自动装载的方式2,则Ul的TH1应初始化为136,U2的TH1应初始化为16。 对应的程序完成如下功能:Ul和U2进行双工串行通信,Ul给U2循环发送流水灯控制字,U2收到控制字后送到P0口,点亮相应发光二极管,双方都用中断方式进行收发。 (1)单片机U1的源程序 #include unsigned char sdata=0xfe; void isr_uart(); void main() { TMOD=0X20; TH1=136; TL1=136; SCON=0x40; PCON=0; TR1=1; EA=1;ES=1; SBUF=sdata; while(1); } void isr_uart() interrupt 4 {

单片机实现对音乐流水灯的控制

单片机实现对音乐流水灯的控制 摘要:自上世纪70年代以来,单片机作为一种集成电路芯片,其发展越来越完善,性能越来越优越,而且单片机的应用不断深入国民经济和人们生活的各个领域,给人们的生活带来了极大方便,满足了人们越来越高的生活需求。本文就是研究单片机在娱乐场所的应用,通过感应音乐声音的强度去控制流水灯流动的节奏。这一研究对改善娱乐场所的活跃气氛有较大的意义。该电路分3个部分,即数据采集部分,单片机处理部分,驱动电路部分。 关键词:数据采集;数据处理;流水灯;单片机;控制 The single a computer realizes to the control of the music flowing running water light Abstract:Since the 70's of last century, the single a machine is used as a kind of integrated circuit an each realm for, its development more and more perfectly, function more coming roughly superiorly, and single an application of machine continuously going deep into national economy with people living, the life for people brought biggest convenient, satisfied the more and more high life in people need. This text be strength that research that rhythm the single a machine is amusing the amenity applied, pass to respond the music voice to control the flowing water light flow. This a research to improve amusement amenity active atmosphere contain bigger meaning. That electric circuit divides 3 parts, namely the data collects part, the single a machine handles part, color light control part. Key word:data collecting system;data handle;flowing water light;single computer;control 1 引言 声音传感器输出的是声音模拟信号,信号电压的大小反映声音的强弱,整个设计的思想就是用这个信号去控制流水灯的闪烁。由于输入信号是模拟信号,而单片机所能处理的是只能是数字信号,所以这里要用到一个A/D转换器,去将模拟信号转换为数字信号,本文中采用的是8位高速A/D转换器TLC5510。8位数字信号输入单片机AT89C51后按大小被程序分为4组,分别控制输出4个不同的延时去控制流水的流动速度。 2 电路功能原理 图1 电路功能原理图 本文所要实现的是将娱乐场所的流水彩灯去适应音乐声强的大小,即根据声音的大小改变流水灯的流水快慢,节奏。要实现这一功能需要一些硬件。图1是其功能原理图。首先,要将声音信号转换成为电信号,这里需要一个声音传感器。从传感器出来是一个模拟信号,而信号最终要通过单片机系统去处理,一般单片机只能识别数字信号,所以信号处理前必须将模拟信号转换为数字信号。这里需要一个A/D转换器。数据经过单片机的处理,去控制16支灯,如果直接用引脚控制的话需要16根数据线,而输出数据是八位的数字信号,这里造成数据线的不足。为了解决这一问题,还引入了可编程并行接

流水灯实验报告

实验一流水灯实验 一、实验目的 1)简单I/O引脚的输出 2)掌握软件延时编程方法 3)简单按键输入捕获判断 二、实验实现的功能 1)开机时点亮12发光二极管,闪烁三下 2)按照顺时针循环依次点亮发光二极管 3)通过按键将发光二极管的显示由顺时针改为逆时针方式三、系统硬件设计 单片机STC10F08XE 1片 发光二极管led 红4个 黄4个 绿4个 按键6个 复位电路 时钟电路 如下图所示: 四、系统软件设计

#include sbit L1=P0^5; sbit L2=P0^6; sbit L3=P0^7; void Delay(void) { unsigned char i,j,k; for(i=10;i>0;i--) for(j=132;j>0;j--) for(k=150;k>0;k--); } Scan_Key() { unsigned char FLAG=0; unsigned char n; n=(L1==0)||(L2==0)||(L3==0); if(n) { FLAG=1;} return FLAG; } main() { unsigned char y,n,s=0,b=1,m=0; unsigned char c=1; unsigned char a[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char h[]={0xff,0x38,0x34,0x2f,0x1f}; n=Scan_Key(); for(y=0;y<3;y++) { P2=0; P3=0; Delay(); Delay(); Delay(); P2=0xff; P3=0xff; Delay(); Delay(); Delay(); } while(1) { while(1) { m=m+n; P3=0x3f; while(1) { for(;b<9;b++) { n=Scan_Key(); m=m+n; if((P3==0x3f)&&(m%2==0)) {P2=a[b];Delay();} else { P2=0xff;break; } if(m%2==0) c=1; P2=0xff; } for(;c<5;c++) {n=Scan_Key(); m=m+n; if((P2==0xff)&&(m%2==0)) { P3=h[c];Delay();} else { P3=0x3f;break;} } if(m%2==0) b=1; break; } if(m%2==1) break; } while(1) { for(;b>0;b--)

(完整word版)51单片机流水灯

51单片机的流水灯控制 班级:100712 姓名:全建冲 学号:10071047

一、设计要求 用51单片机设计一个流水灯的控制方案,要求采用定时器定时,利用中断法控制流水灯的亮灭,画出电路图和程序流程图,写出程序代码以及代码注释。 二、电路原理图 原理图分析: 本原理图采用STC89S52单片机控制8个LED灯,其中8个LED灯的负极接单片机的P1端口,正极通过1KΩ排阻连接到电源上。原理图中还给出了晶振与复位端,以保证控制器的稳定工作。

三、程序流程图

四、程序代码及注解 1.非中断定时器控制 #include #include//包含了_crol_函数的头文件 #define uchar unsigned char #define uint unsigned int uint i=0; uchar a=0xfe; void main() { TMOD=0x01;//设置工作方式为定时器0,16位手动重装初值 TH0=(65536-46080)/256;//50毫秒定时赋初值 TL0=(65536-46080)%256; TR0=1;//启动定时器0 while(1) { If(TF==1)//读溢出标志位 { TH0=(65536-46080)/256;//重新赋初值 TL0=(65536-46080)%256;

i++; if(i==10)//500毫秒定时 { i=0; P1=a;//P1端口赋值 a=_crol_(a,1);//循环左移 } TF=0;//清除定时器溢出标志 } } } 程序分析:本程序采用非中断定时器法控制流水灯,核心语句在于读取标志位TF位,TF为定时器溢出标志位,溢出时硬件自动置一,所以循环读取标志位以判断定时器是否溢出,而每次溢出需要手动清零,否则定时器无法再次溢出,利用标志i读取10次即可达到500毫秒的定时。另外需要注意的是单片机晶振为11.0592MHz,所以计时一个数的时间为12/11.0592=1.085us,故定时50毫秒的计数为50000/1.085=46080。 2.中断定时器控制 #include

花样流水灯实验报告

黄淮学院信息工程学院 单片机原理及应用课程设计性实验报告

五、硬件电路设计 根据设计任务,首先进行系统硬件的设计。其硬件原理图由LED显示电路和单片机最小系统组成,如图所示,其中包括时钟电路采用部时钟方式,复位电路采用上电自动复位。由于单片机的I/O口的高电平驱动能力只有微安级,而灌电流可以达到3毫安以上,因此采用低电平驱动。P1、P2、P3分别控制8个led灯。 六、软件程序设计 1、软件设计思路 如果通过上图所示电路图完成实验要求,通过数组,分别同时控P0、P1、P2分别控制8个led灯,从而协调控制24个灯实现花样流水灯效果。 开始 编写数组 主循环 逐个点亮 24灯同时闪烁 逐个熄灭

P3=table1[i]; delayms(500); } shan();//全部闪烁 for(i=0;i<8;i++)//逐个熄灭{ P3=table2[i]; delayms(500); } for(i=0;i<8;i++) { P1=table3[i]; delayms(500); } for(i=0;i<8;i++) { P0=table2[i]; delayms(500); } } } void delayms (uintt) { uint x,y; for(x=t; x>0;x--) for(y=50;y>0;y--); } 七、软硬件仿真调试分析 1、仿真调试结果

图片 1 逐个点亮图片 2 24灯闪烁 图片 3 逐个熄灭 2、性能测试及结果分析 通过仿真结果发现通过上述系统可以实现实验要求,24个灯逐个点亮,24个灯全亮后,24个灯一起闪烁,闪烁5次后,然后24个灯逐个熄灭。由此证明系统满足实验要求。 八、项目总结 在本次花样流水灯试验中,使用循环程序、数组语句实现了实验要求,设计过程中遇到了很多的问题,但经过努力,最终设计出了合理的解决方案。通过此次实验,对多个led灯的控制能力进一步得到提升。 九、项目设计报告成绩 实验报告成绩: 指导教师签字: 年月日

单片机音乐控制流水灯

摘要 本设计是一种基于AT89C51单片机音乐控制彩灯的方案,实现单片机演奏音乐,并且对LED彩灯随音符频率的不同而闪烁发光。本方案以AT89C51单片机作为主控核心,利用三极管和蜂鸣器,通过三极管放大电流使用蜂鸣器播放音乐,利用编程实现亮灯循环模式,在有8个LED彩灯,根据用户需求可以编写若干种亮灯模式.例如左右闪烁,隔几个亮灭,蜂鸣器可以根据用户需求改写编程播放各种音乐。本方案具有设计简单、体积小、元器件少、电路结构简单等优点。该设计方案设计及其简单,典型的89c51单片机,亮灯模式多,播放各种类型的音乐,具有体积小、价格低、低能耗等优点。在美丽的都市夜晚,彩灯的循环亮灭,播放动人的音乐,衬托出美丽的氛围,音乐彩灯具有更广阔的发展天地。 关键字:AT89C51 LED彩灯音乐 Abstract This 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.

单片机流水灯实验报告

流水灯实习报告 一、实验原理 单片机通过P0口连接锁存器74ls273,P0同时作为低八位地址,实验板内P2口连接74ls138,任意一个输出连接74ls273片选,再将74ls273接八个LED 灯,通过软件控制对74ls273送入显示数据就可以按要求显示了。 二、硬件原理图 三、实验程序 ORG 00H AJMP START ORG 001BH AJMP INT ORG 0100H START: MOV SP,#60H MOV TMOD,#10H MOV TL1,#00H MOV TH1,#4CH MOV R0,#00H MOV R1,#20 SETB TR1 SETB ET1 SETB EA

INT: PUSH ACC PUSH PSW PUSH DPL PUSH DPH CLR TR1 MOV TL1,#B0H MOV TH1,#3CH SETB TR1 DJNZ R1,EXIT MOV R1,#20 MOV DPTR,#DATA MOV A,R0 MOVC A,@A+DPTR MOV DPTR,#8000H Movx @DPTR,A INC R0 ANL 00,#07H EXIT: POP DPH

POP PSW POP ACC RETI DATA: DB 05H,0AH,50H,0A0H,55H,0AAH,0FFH,0H END 四、实验功能 以实验机上74LS273做输出口,接八只发光二极管,编写程序,使开机后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒钟L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个二极管全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮……一直循环下去. 五、实验总结 通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。而安排课程设计的基本目的,是在于通过理论与实际的结合、人与人的沟通,进一步提高思想觉悟和领悟力。 尤其是观察、分析和解决问题的实际工作能力。它的一个重要功能,在于运用学习成果,检验学习成果。运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。这也是一次预演和准备毕业设计工作。通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。课程设计促进了我

单片机c语言编程控制流水灯

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。那个单片机究竟有什么 功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^) 我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机 上接上最少的外围电路元件让单片机工作。一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。 #include //头文件定义。或用#include其具体的区别在于:后者定义了更多的地址空间。 //在Keil安装文件夹中,找到相应的文件,比较一下便知! sbit P1_0 = P1 ^ 0; //定义管脚 void main (void) { while(1) { P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效 } } 就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。因为我们把LED的正通过电阻接至VCC。 P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。那么这样就能达到了我们预先的要求了。 while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。如果我们要试着点亮其他的LED,也类似上述语句。这里就不再讲了。 点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其 实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。假设我们有8个LED分别接在P1口的8个引脚上。硬件连接,在 P1_1--P1_7上再接7个LED即可。例程如下: #include sbit P1_0 = P1 ^ 0; sbit P1_1 = P1 ^ 1; sbit P1_2 = P1 ^ 2; sbit P1_3 = P1 ^ 3; sbit P1_4 = P1 ^ 4; sbit P1_5 = P1 ^ 5; sbit P1_6 = P1 ^ 6; sbit P1_7 = P1 ^ 7; void Delay(unsigned char a) { unsigned char i; while( --a != 0) {

单片机课程设计报告--心形流水灯

井冈山大学 机电工程学院 单片机 课程设计报告 课程名称:单片机 设计题目:心形流水灯 姓名:玉红 专业:生物医学工程 班级:11级医工本一班 学号:110615017 指导教师:王佑湖 2013年11月27日

目录 1引言 (2) 1.1设计任务 (2) 1.2设计要求……………………………………………… ..2 2 课题综述 (2) 2.1课题的来源 (2) 2.2面对的问题 (2) 3 系统分析 (2) 3.1 STC89C52单片机引脚图及引脚功能介绍 (2) 4 系统设计 (4) 4.1硬件设计 (4) 4.1.1硬件框图 (4) 4.1.2硬件详细设计 (5) 4.2 软件设计 (5) 4.3 硬件原理图 (6) 4.4 元件清单 (6) 4.5 硬件焊接

图 (6) 4.6 代码编写 (7) 5心得体会 (7) 6致 (8) 参考文献 (8) 1 引言 单片机课程设计主要是为了让我们增进对STC89C51单片机电路 的感性认识,加深对理论方面的理解。了解软硬件的有关知识,并掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。另外,通过简单课题的设计练习,使我们了解必须提交的各项工程文件,达到巩固、充实和综合运用所学知识解决实际问题的目 的。 1.1设计任务 设计一个单片机控制的流水灯系统 1.2设计要求 (1)32个LED灯; (2)可实现多种的亮灯(如左循环,右循环,间隔闪,90度交叉闪等)。 2 课题综述

2.1 课题的来源 当今社会,这种由单片机芯片控制各种硬件工作的技术也日益成熟,并普及在交通、化工、机械等各个领域。而流水灯这项技术在生活中的应用更是广泛,较为贴近生活。而流水灯控制的设计所需要的知识也正好吻合了我们本学期对于单片机这门课程的学习,所以设计流水灯控制的这个课题让我们对知识的学习和巩固都有了进一步的加深。 2.2 面对的问题 这次课程设计是通过STC89C52位单片机实现。但面对的问题却是两方面的:一个是软件的设计,也就是实现流水灯控制功能的程序编辑;另一个是硬件的设计,需要我们自己连接、焊接电路板。而更为严峻的就是设计的最后还要将软硬件相结合。 3 系统分析 3.1 STC 89C52单片机引脚图及引脚功能介绍 本次设计的目的在于加深STC89C52单片机的理解,首先来简单认识一下,它的引脚如图3-1所示: 图3.1 STC89C52

心形音乐流水灯原理图1

CR YSTAL1 12MHZ P1.01P1.23P1.34P1.45P1.56P1.67P1.78RS T 9P3.0/RXD 10P3.1/TXD 11P3.2 INT012P3.3/INT113P3.4/T014P3.5/T115P3.6/WP 16P3.7/RD 17XTAL218XTAL119GND 20 P2.021 P2.122P2.223P2.324P2.425P2.526P2.627P2.728NA 29ALE 30EX_LVD 31P0.732P0.633P0.5 34P0.435P0.336P0.237P0.138P0.039VC C 40 P1.12STC40AT1 AT89S 52 +5V R3510K 1 2 C110uF 12 C2 221 2C322 R5510 +5V R6510 R7510 R9510 R8510 R10510 R11510 R12510 R13510 R14510 R15510 R16510 R17510 R18510 R4510 R3510 D1LED D2LED D3LED D4LED D5LED D6LED D7LED D8LED D9LED D10LED D11LED D12LED D13LED D14LED D15LED D16LED +5V 1LS 1 SPEAKER S1 SW-SPST 1 2 J1+5V 电源 1 23 J2 音乐芯片 11029384756 JP1L 1102938475 6 JP2O 1102938475 6 JP4E 1102938475 6 JP3V R21510 R22510 R23510 R25510 R24510 R26510 R27510 R28510 R29510 R30510 R31510 R32510 R33510 R34510 R20510 R19510 D17LED D18LED D19LED D20LED D21LED D22LED D23LED D24LED D25LED D26LED D27LED D28LED D29LED D30LED D31LED D32LED +5V +5V +5V R2200 +5V P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P 0.0 P 0.1 P 0.2 P 0.3 P 0.4 P 0.5 P 0.6 P 0.7 P 1.0 P 1.7 P 1.6 P 1.5 P 1.4 P 1.3 P 1.2 P 1.1 P 2.0 P 2.1 P 2.2 P 2.3 P 2.4 P 2.5 P 2.6 P 2.7 P 3.0 P 3.1 P 3.2 P 3.3 P 3.4 P 3.5 P 3.6 P 3.7 P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7 P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7 P2.0 P2.1P2.2P2.3P2.4P2.5P2.6P2.7R1 200 +5V

流水灯设计报告

流水灯设计报告 一、实验目的 通过本实验教学,学习数字电路综合应用(将单元电路组成系统电路的方法),掌握简单数字系统设计方法。通过查阅手册和文献资料,培养独立分析和解决实际问题的能力。掌握示波器、信号发生器、频率计、万用电表等常用电子仪器设备的使用。获得数字电路综合应用能力。 二、实验内容 用D 触发器和译码器设计一个8位可循环的流水灯,用仿真软件进行仿真,最后根据电路图在万能板上焊接出来。 三、实验原理 1.D 触发器 D 触发器的状态方程为:Q n+1=D 。其状态的更新发生在CP 脉冲的边沿,74LS74(CC4013)、74LS175(CC4042)等均为上升沿触发,故又称之为上升沿触发器的边沿触发器,触发器的状态只取决于时针到来前D 端的状态。D 触发器应用很广,可用做数字信号的寄存,移位寄存,分频和波形发生器等,图A 为74LS74外引线排列,图B 为D 触发器逻辑符号。 2.译码器 74LS138 为3 线-8 线译码器,共有 54LS138和 74LS138 两种线路结构型式 工作原理: ① 当一个选通端(E1)为高电平,另两个选通端((/E2))和/(E3))为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。比如:A2A1A0=110时,则Y6输出端输出低电平信号。 图A 74LS74外引线排列 图B D 触发器逻辑符号

表1 74LS138逻辑功能表 ② 利用 E1、E2和E3可级联扩展成 24 线译码器;若外接一个反相器还可级联扩展成 32 线译码器。 ③ 若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。 ④ 可用在8086的译码电路中,扩展内存。 引脚功能: A0∽A2:地址输入端 STA (E1):选通端 /STB (/E2)、/STC (/E3):选通端(低电平有效) /Y0∽/Y7:输出端(低电平有效) VCC :电源正 GND :地 A0∽A2对应Y0——Y7;A0,A1,A2以二进制形式输入,然后转换成十进制,对应相应Y 的序号输出低电平,其他均为高电平。 如图C 所示为74LS138译码器的引脚排列图。功能表如表1所示 四、实验结果 图C 74LS138的引脚排列图

基于51单片机的流水灯

基于51单片机的流水灯 利用51单片机P0口实现8个LED(发光二极管)的流水灯控制。可以使用Proteus软件进行仿真调试。 1 硬件设计 利用单片机的PO口控制8个LED,其电路如下图所示。 在桌面上双击图标,打开ISIS 7 Professional窗口(本人使用的是v7.4 SP3中文版)。单击菜单命令“文件”→“新建设计”,选择DEFAULT模板,保存文件名为“LSD.DSN”。在器件选择按钮中单击“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示 都可以不画,它们都是默认的。 在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER和GROUND放置电源和地。放置好元件后,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计。 2 软件设计 流水灯又称为跑马灯,在函数中可以将P0口的八种不同状态做成一维数组,循环执行即可,如下所示。当然也可以采用其它函授来实现,如左移一位<<1(或右移一位>>1),循环左移函授_crol_(或循环右移函授_cror_)等。 /****************************************************************** 流水灯

*******************************************************************/ #include "reg51.h" const tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void delayms(unsigned int x) //延时 { unsigned int j; unsigned char k; for(j=0;j

流水灯课程设计(免费)..

数字电子技术课程设计报告 (彩灯控制器) 专 专业:电子信息工程 班级:7B1211 学号:123025 姓名:白旭飞 年月:2014-6-28

一、设计要求 1. 以8或10个指示灯作为显示器件,能自动的从左到右、从右到左自动的依次被点亮,如此周而复始,不断循环。 2.打开电源时控制器可自动清零,每个指示灯被点亮的时间相同约为0.5S~2S 范围内。 3.用计算机画出设计电路图,进行仿真分析验证其正确性。 4.写设计说明书一份(画总原理框图以及说明主要工作原理,单元电路的设计和元器件的选择,画出完整的电路图和元器件明细表,收获、体会及建议) 二、设计的作用,目的 1.作用 利用控制电路可使彩灯(例如霓虹灯)按一定的规律不断的改变状态,不仅可获得良好的观赏效果,且可以省电(与彩灯全亮相比)。 2.目的 用NE555芯片,74LS151芯片,74LS163芯片,74LS194,以及一些逻辑门芯片完成彩灯控制器。 三、设计的具体实现 1.系统概述 接通电源时,555占空比可调振荡器产生1s单位的脉冲,脉冲送到下一个模块74LS151计数器,目的实现模5计数器,达到每五秒生成一个脉冲输向下一个芯片74LS194移位寄存器以及计数器74LS163。进而彩灯在脉冲的作用下依次点亮,并实现循环,完成实验要求。 2.总体思路 先用555定时器用来生成1s标准单位cp脉冲,把脉冲给计数器74LS151,通过74LS151形成模5加法计数器,再将74LS151输出信号供给74LS194移位寄 存器输入端,Q 0,Q 1, Q 2 和Q 3 接彩灯然后连接几个逻辑门,把74LS194接成环形 计数器。就能实现基本电路要求。 3.方案设计 总体电路共分三大块。第一块实现时钟信号的产生;第二块实现灯亮灭情况的演示;第三块实现灯亮灭的控制及节拍控制。

微机原理与接口技术课程设计报告音乐流水灯

微机原理与接口技术课程设计论文题目:音乐流水灯 姓名:鞠强 学号:201330020228 班级:1330202 专业:自动化 2015年6月

一、实验任务及要求 任务: 1、掌握综合使用基本输入输出设备、通用接口芯片、专用接 口芯片的方法; 2、掌握实时处理程序的编制和调试方法。 要求:用8255、8253、8259配合8086使蜂鸣器发出唱歌声同时还能够使用数码管进行边跳舞边唱歌实验。 二、硬件连线 键盘的控制、LED显示模块:采用74系列模块控制 键盘的行信号Q_0、Q_1、Q_2、Q_3分别与开放的输入信号Q0、Q1、Q2、Q3相连,键盘的列信号P_0、P_1、P_2和开放的输出信号P0、P1、P2相连。74芯片的片选信号CS1接地址译码信号340H, CS2接地址译码信号360H。 蜂鸣器发声控制:由8255模块控制; PC0直接与蜂鸣器相连,CS_4连接到实验仪中部的地址输出端CS_4 中断处理模块:由8259控制 8259的片选CS-1连地址输出300H,INT1连总线输入INTR,8259模块的INT-A连总线的INTA,8259的SP/1连+5V, 8259的IRQ0连接到8253的OUT0。

三、程序流程图 主程序 初始化各阶段寄存器及相关变量 初始化8253、8255芯片 设置中断向量、开放8253中断屏蔽 开放处理器中断

中断服务程序 保护现场 判断时间是否不小于59分55秒 报时 扫描键盘 G 键? 调用启停子程序S COUNT COUNT=40? ADDONE 子程序 COUNT 清0 显示时间,调用显示时间子程序 结束中断(发EOI 命令) 恢复现场 中断返回 Y Y N Y

最新五种编程方式实现流水灯的单片机c程序讲课教案

五种编程方式实现流水灯的单片机C程序 //功能:采用顺序结构实现的流水灯控制程序 /*此方式中采用的是字操作(也称为总线操作)*/ #include void delay(unsigned char i); //延时函数声明 void main() //主函数 { while(1) { P1 = 0xfe; //点亮第1个发光二极管,0.000389s delay(200); //延时 P1 = 0xfd; //点亮第2个发光二极管,0.155403s,0.1558 delay(200); //延时 P1 = 0xfb; //点亮第3个发光二极管 delay(200); //延时 P1 = 0xf7; //点亮第4个发光二极管 delay(200); //延时 P1 = 0xef; //点亮第5个发光二极管 delay(200); //延时 P1 = 0xdf; //点亮第6个发光二极管 delay(200); //延时 P1 = 0xbf; //点亮第7个发光二极管 delay(200); //延时 P1 = 0x7f; //点亮第8个发光二极管 delay(200); //延时 } } //函数名:delay //函数功能:实现软件延时 //形式参数:unsigned char i; // i控制空循环的外循环次数,共循环i*255次 //返回值:无 void delay(unsigned char i) //延时函数,无符号字符型变量i为形式参数{ unsigned char j, k; //定义无符号字符型变量j和k for(k = 0; k < i; k++) //双重for循环语句实现软件延时 for(j = 0; j < 255; j++); } //功能:采用循环结构实现的流水灯控制程序 //此方式中采用的移位,按位取反等操作是位操作 #include //包含头文件REG51.H void delay(unsigned char i); //延时函数声明 void main() //主函数

电子课程设计—电子流水灯设计报告

《电子技术》 课程设计报告 设计题目:电子流水灯电路设计与制作

电子流水灯电路设计与制作报告 一、设计目的 1.能够全面的巩固和应用“电子技术”课程中所学的基础理论和基本方法,并初步掌握小型数字系统设计的基本方法。 2.能够合理、灵活地应用各种标准集成电路(SSI、MSI、LSI等)器件实现规定的数字系统。 3.培养独立思考、独立准备资料、独立设计规定功能的数字系统能力。 4.培养独立进行实验,包括电路布局、安装、调试和排除故障的能力。 5.培养书写综合设计实验报告的能力。 二、设计任务 用中小规模集成电路设计并制作一个能实现8个彩灯正序或反序按1秒依次点亮的电路: 1.由晶振电路或555电路产生1HZ标准秒脉冲信号,作为电路的CP。 2.可逆的顺序脉冲发生电路。 3.显示驱动电路 4.彩灯。 5.电源。 三、设计方案

2、单元电路设计 ①秒脉冲发生电路 由555电路实现秒脉冲,f=1HZ。 ②可逆的顺序脉冲发生电路 可用74LS1191实现,5号引脚接拨动开关,拨动开关的2个端分别接高电平(接5V电源)和低电平(接地),当开关拨到高电平时,进行减计数,当开关拨到低电平时,进行加计数,这样来实现可逆顺序脉冲发生电路 ③显示驱动电路 可由74ls138实现译码,来控制发光2极管的发光情况 74LS138真值表

R3-R10电阻起到保护发光二极管的作用。 ④电源电路 将12V电压整流成5V。 3、整机电路图

555集成电路各引脚名称:1地GND,2触发,3输出,4复位,5控制电压,6门限(阈值)7放电,8电源电压VCC。 74ls191各引脚名称:1-3并行数据输入端,2-3输出端,6-7输出端,5加减计数方式控制端,11电源,4地GND,14秒脉冲输入端,12计数控制端,13时钟输出端 74ls138各引脚名称:1-3译码地址输入端,7-15译码输出端,16电源,8地GND,4-5选通端(低电平有效),6选通端(高电平有效) 四、主要元器件介绍 1.通用实验底板 2.直流稳压电源(5V) 3.集成电路:555、74LS191、74LS138 4.电容:47uF/16V,0.01uF/16V 5.电阻:10k,1k 6.数显:发光二极管 7.开关:波动开关 五、焊接与调试 1、元器件布局图 2、焊接步骤

单片机音乐流水灯程序

#include 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, //低音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 // 频率-半周期数据表低八位 code unsigned char FREQL[] = { 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音1234567 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i

相关主题
文本预览
相关文档 最新文档