课程设计(论文)-集成音乐演奏功能和LED点阵显示功能的数字电子时钟设计-VHDL.doc_第1页
课程设计(论文)-集成音乐演奏功能和LED点阵显示功能的数字电子时钟设计-VHDL.doc_第2页
课程设计(论文)-集成音乐演奏功能和LED点阵显示功能的数字电子时钟设计-VHDL.doc_第3页
课程设计(论文)-集成音乐演奏功能和LED点阵显示功能的数字电子时钟设计-VHDL.doc_第4页
课程设计(论文)-集成音乐演奏功能和LED点阵显示功能的数字电子时钟设计-VHDL.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VHDL集成音乐演奏功能和LED点阵显示功能的数字电子时钟设计一、 设计内容 集成音乐演奏功能和LED点阵显示功能的数字电子时钟系统主要分为三个功能:带有手动调整功能的数字电子时钟、音乐演奏电路和8*8LED点阵显示电路。以下分别说明上述三个部分的电路功能和基本工作原理。 1数字电子时钟部分数字电子时钟采用六个数码管显示,显示方式如图1所示。为了减少CPLD芯片的I/O口资源占用并且提高系统的可靠性,数码管显示采用动态扫描方式显 图1示。数码管的选通信号真值表如下表1所示。当数码管的选通信号变化频率大于数码管选通信号 数码管顺序号(1表示该数码管被选通)S2S1S06#5#4#3#2#1#00000000100100001001 0000100011001000100010000101100000 表1 24Hz时,人眼便分辨不出数码管是依次被点亮的,感觉好像是六个数码管同时被点亮的。在基本时钟电路实现后,增加手动调整时间功能。该功能描述如下:选择三个按键分别作为调整时钟、分钟、秒钟的按键,当某一按键按下后,该按键对应的计时器从当前计数值以频率大于1Hz的脉冲序列作为计数时钟开始计数,此系统选用2Hz的脉冲序列。当按键松开时,数字时钟以该调整值作为计数初值继续计时。 2音乐演奏电路部分使用CPLD芯片的功率放大外围电路,设计数控分频器,使得电路在外部时钟的驱动下可以演奏设定的音乐。数控分频器的基本原理是:对于一个加法计数器而言,装载不同的计数初始值时会有不同频率的溢出输出信号产生。计数器溢出时,输出逻辑高电平,同时反馈给计数器的输入端作为装载信号,装载新的计数初值。否则输出逻辑低电平。根据不同频率的溢出输出信号驱动功率放大电路,便会产生不同音调的声音。根据数控分频器的基本原理编制合适的循环程序、查表程序便可以实现使用外围功率放大电路演奏一段音乐的目的。在音乐演奏电路基本功能实现以后,考虑将源代码嵌入数字电子时钟的源代码中,从而实现当数字时钟整点计时时刻,演奏设定音乐。嵌入方法可以考虑将音乐演奏电路程序作为子程序供数字时钟主程序调用。38*8LED点阵显示功能该功能是当在数字时钟在计时的时候点阵模块循环显示程序设定的字符。 图2点阵的电路原理图如图2所示。其中ROW为行扫描信号,COL为LED输出信号。比如,当行扫描信号为11111110时(ROW8ROW1),说明此时选通第一行LED。如果要选通第5行LED,那么行扫描信号应当为11101111。在确定哪一行LED被选中后,就要通过LED输出信号为该行LED送入逻辑电平,从电路图可以看出,LED输出信号为逻辑高电平时该位LED被点亮。比如在某一时刻程序选通第一行LED,现在要想让该行第二位LED被点亮,则输出信号为00000010(COL8COL1)。 从上述基本原理可以看出只要让行扫描信号做循环移位就可以实现逐行扫描的功能。循环移位可以通过一条单独指令完成,也可以通过子程序调用、查表等方法实现。 二、 设计原理 本次要求设计的数字电子时钟除了具有基本的计时功能以外还要求在整点时刻播放一段音乐,并且在8*8LED点阵显示模块上显示字符。因此整套电路分为三个部分:基本数字时钟部分、音乐演奏电路部分和LED点阵显示部分。以下分别对上述三个部分的电路设计原理进行说明。1数字时钟部分的设计原理数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。数字钟的原理方框图如图3所示。标准时基电路的产生方法:为了实现数字电子时钟的计时功能,必然要使用到一个周期是1s,即频率是1Hz的脉冲序列。由于晶振产生的脉冲序列频率稳定,可以通过分频的方法得到1Hz准确的脉冲序列。同时为了满足电路的其他功能需要,比如数码管选通信号的频率要求大于24Hz,同样可以通过分频方法得到这一脉冲序列。控制逻辑电路的设计原理:由计数器的计数过程可知,正常计数时,当秒计数器(60进制)计数到59 时,再来一个脉冲,则秒计数器清零,重新开始新一轮的计数,而进位则作为分计数器的计数脉冲,使分计数器计数加1。而60 进制计数器可用6 进制计数器和10 进制计数器构成。同样的原理,当分计数器计数到59时,再来一个脉冲,则分计数器清零,小时计数器加1。当小时计数器计到24时(24进制),分计时器再进位则所有计数器全部清零。因此计数电路需要两个60进制的计数器和一个24进制的计数器级联,便可以得到数字电子时钟的基本计数电路。将手动按键控制功能加入电路:把秒计数器的进位脉冲和一个频率为2Hz的脉冲信号同时接到一个2选1数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键没有按下时(即为逻辑低电平),数据选择器将秒计数器的进位脉冲送到分计数器,此时电子数字时钟正常工作;当按键按下时(即为逻辑高电平),数据选择器将外部输入2Hz 的脉冲信号序列作为分计数器的计数脉冲,使其计数频率加快,当达到正确时间时,松开按键从而达到调整时间的目的。调节分钟计时器、小时计时器的时间与上述原理相同。计数显示电路的设计原理:如前所述,数字时钟系统采用动态扫描方式进行数字送显。而动态扫描送显方式的关键是要确保选通信号与送显字符在时序上保持同步。比如,当数码管的片选信号S2S0为001时,根据表1可得,此时选通秒钟计时器的十位计数器,那么程序要完成在该时刻将秒钟十位的计数结果送入第2号数码管。其余计数器的送显方法与上述原理相同。 图47段数码管采用共阴极接法,电路连接方法如图4所示。使用六个相同的数码管进行级联显示。 2音乐演奏电路部分的设计原理数控分频器电路的设计原理:实现音乐演奏电路的关键是正确设计数控分频器电路。数控分频器是在通用分频器的基础上添加了由计数溢出信号控制输出信号翻转时刻的特殊分频器。其原理是预先设置计数终值,对于本电路而言设置的计数终值为2047,当程序载入不同的计数初值以后,在相同时钟的作用下产生溢出信号的时间不同。计数初值大,产生溢出信号的时间短,计数初值小,产生溢出信号的时间长。根据溢出信号的情况驱动外部功率放大电路就可以产生不同音调的声音。不同音调的声音对应的计数器计数初值如表2所示。音调音符1234567初始值高1730175017701790181518301930 中1410149015601600162216501690 低77391210361116119712901372 次低100200300400500600700 表2 从上述基本原理可以看出,只要编制适当的循环程序和查表程序就可以实现预先设定的功能。音乐演奏电路的原理框图如图5所示。 图538*8LED点阵显示电路部分的设计原理点阵显示模块提供88 点阵输出。点阵的结构实际上是一组很小的发光二极管,排列紧密而且规则。当点亮其中的一些灯,而熄灭一些灯时,点阵就可以显示图符。88 的点阵引脚有十八根,其中电源和地线引脚各一根,八根行扫描引脚,八根列扫描引脚。点阵的详细电路原理图如图2所示。点阵工作时,电源和地线固定连接好,当某一些行扫描和列扫描有信号时,点阵中对应交点上发光二极管被点亮。但是使用这种方法只能使点阵显示一行LED的信息。如果需要显示更为复杂的图符,需要用另外一种方法,既行扫描信号是以固定周期和固定次序循环变化,而列扫描信号在行扫描信号在某一特定值时,给出一组特定的数据。当行扫描信号变化周期比较快时,通过肉眼观察到的图符就是一个完整的。通过这种方法,可以用点阵显示复杂的图符。如果设计成点阵显示图符按某种事先指定的方法变化,则可以显示动画或其它信息。控制信号的使用方法在设计内容部分已经作了说明。三、 设计过程多功能数字电子时钟的设计原理采用自顶向下的设计方法,也就是将大系统分解为多个小系统。分解过程见图5。为了实现多功能数字时钟的各个功能,首多功能电子数字时钟基本数字时钟电路音乐演奏电路8*8LED点阵显示电路手动调整功能60进制计数器24进制计数器6进制计数器10进制计数器数控分频器音调计数初值功率放大电路通用分频器送显电路行扫描电路 输出值电路 图5先要实现小系统的功能,也就是说实现过程采用自底向上的方法。实现的顺序为:十进制数码管显示电路带清零、使能信号的十进制数码管显示电路任意进制计数器(仿真试验即可)采用动态扫描显示方法的60进制显示电路基本数字时钟电路通用分频器数控分频器音调计数初值装载电路8*8LED点阵显示电路联调。以下将根据上述设计步骤并且结合源代码详细说明各个部分的设计过程。以下程序全部经过调试并且可以实现预期功能。-带清零信号的十进制计数器,单独使用一个数码管进行显示-LIBRARY ieee;USE ieee.std_logic_1164.all;-ENTITY sevenseg ISPORT ( clk, reset: IN STD_LOGIC; digit: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END sevenseg;-ARCHITECTURE behave OF sevenseg ISBEGIN PROCESS (clk, reset) VARIABLE temp: INTEGER RANGE 0 TO 10; BEGIN IF (reset = 1 ) THEN temp:= 0; ELSIF (clkEVENT AND clk = 1) THEN IF (temp=10) THEN temp:= 0; ELSE temp:= temp+1; END IF; END IF; CASE temp IS WHEN 0 = digit digit digit digit digit digit digit digit digit digit NULL; END CASE; END PROCESS;END behave;-一千进制计数器(可以扩展为60进制和24进制计数器)-LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;-ENTITY counter1000 ISPORT( clk: in STD_LOGIC; qa: out STD_LOGIC_VECTOR(3 DOWNTO 0); qb: out STD_LOGIC_VECTOR(3 DOWNTO 0); qc: out STD_LOGIC_VECTOR(3 DOWNTO 0); qd: out STD_LOGIC_VECTOR(3 DOWNTO 0); END counter1000;-ARCHITECTURE behave OF counter1000 ISsignal tma: STD_LOGIC_VECTOR(3 DOWNTO 0);signal tmb: STD_LOGIC_VECTOR(3 DOWNTO 0);signal tmc: STD_LOGIC_VECTOR(3 DOWNTO 0);signal tmd: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINprocess(clk)beginif (clkevent and clk=1) then if( tma=1001) then tma=0000; tmb=tmb+1; elsif( tmb=1001 and tma=1001) then tma=0000; tmb=0000; tmc=tmc+1; elsif( tmc=1001 and tmb=1001 and tma=1001) then tma=0000; tmb=0000; tmc=0000; tmd=tmd+1; elsif( tmd=1001 and tmc=1001 and tmb=1001 and tma=1001) then tma=0000; tmb=0000; tmc=0000; tmd=0000; else tma=tma+1; end if; end if; qa=tma;qb=tmb;qc=tmc;qd=tmd; end process;END behave;-通用分频器-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;-entity freq_divider is port (clk:in std_logic; out1:buffer std_logic);end freq_divider; -architecture behave of freq_divider is signal count1: integer range 0 to 7;begin process(clk)begin if(clkevent and clk=1) then count1 = count1+1; if( count1=4) then-改变count1的终值可以改变分频频率- out1=not out1; count1 tone tone tone tone tone tone tone tone tone tone tone tone tone tone tone tone tone=2047; End case; End process; End behave;-8*8LED点阵显示-LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;-ENTITY display ISPORT( clk: in STD_LOGIC; qa: out STD_LOGIC_VECTOR(7 DOWNTO 0); -行扫描选通信号- qb: out STD_LOGIC_VECTOR(7 DOWNTO 0);-字形码输出信号- END display;-ARCHITECTURE behave OF display ISsignal tma: STD_LOGIC_VECTOR(7 DOWNTO 0);signal index: integer range 0 to 8;BEGINprocess(clk)beginif (clkevent and clk=1) then if (index=8) then index=0; else index=index+1; end if; end if;end process;sel: block -输出行扫描选通信号-begin tma =11111110 when index=0 else 11111101 when index=1 else 11111011 when index=2 else 11110111 when index=3 else 11101111 when index=4 else 11011111 when index=5 else 10111111 when index=6 else 01111111 when index=7 else 11111111; qa = tma;end block;eight_diode: block -显示“X”字形-begin qb =11000011 when tma=11111110 else 11100111 when tma=11111101 else 01111110 when tma=11111011 else 00111100 when tma=11110111 else 00111100 when tma=11101111 else 01111110 when tma=11011111 else 11100111 when tma=10111111 else 11000011 when tma=01111111 else 0000000;end block; END behave;-各个部分的软件仿真结果详见设计结果部分。其中乐曲演奏全部程序和基本数字时钟全部程序请参见附录。两部分程序都使用到了元件的设计和元件的声明、元件的实例化。这充分体现了VHDL电路设计的思想:自顶向下的设计方法。通过底层元件实例化的方法可以实现代码的共享,从而简化了整套电路的设计,提高了效率。就这点而言,VHDL电路设计有些类似现行的面向对象程序设计方法:首先定义类,然后实例化为对象,从而实现代码的共享。四、 设计结果 图6 带使能信号的十进制显示电路仿真 图7 60进制计数器电路仿真 图8 通用分频器仿真 图9 LED点阵显示电路仿真(qa为选通信号、qb为输出信号)五、 总结VHDL的含义是Very high speed Integrated circuits Hardware Description Language。它可以对电子电路和系统的行为进行描述。基于这种描述,结合相关的软件工具,可以得到所期望的实际电路与系统。VHDL语言的两个最直接的应用领域是可编程器件和专用集成电路ASIC( Application Specific Integrated Circuits),其中可编程器件包括复杂可编程器件CPLD(Complex Programmable Logic Devices)和现场可编程门阵列FPGA(Field Programmable Gate Arrays)。一段VHDL源代码写完后,使用芯片厂商提供的可编程器件来实现整个电路,或者将其交给专业加工工厂用于ASIC的生产,这也是目前许多复杂的商用芯片所采用的方法。比如日本FANUC、德国SIEMENS生产的CNC系统中大量ASIC都是采用这种方法制作而成的。对于数字电子系统而言,这种方法大大提高了系统的可靠性。仅就电子电路的设计方法而言无外乎有三种方法:第一种是采用EDA工具进行线路板级电路设计,这种方法就是通常所说的PCB设计。其优点是技术成熟,缺点是可靠性、可移植性不高。第二种方法就是采用硬件描述语言进行电路设计,这种方法克服了上述方法的缺点。而第三种方法是嵌入式设计。本次设计的题目是多功能电子数字时钟的设计,数字时钟集成了音乐演奏功能与LED点阵显示功能。通过数字时钟的设计初步了解了VHDL数字电路设计的设计流程与设计方法。并且对VHDL代码的结构、数据类型、并发与顺序代码、信号与变量、VHDL电路单元库的结构和使用方法,以及如何将新的设计加入到现有的单元库中有较为深入的理解。但是由于首次使用开发软件并且对VHDL语言认识的局限性,整套电路还存在不足和缺陷。六、 附录-数字时钟全部程序-LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY count60 ISPORT( clk: in STD_LOGIC; qa: out STD_LOGIC_VECTOR(3 DOWNTO 0); qb: out STD_LOGIC_VECTOR(2 DOWNTO 0); rco: OUT STD_LOGIC); END count60;ARCHITECTURE a OF count60 ISBEGINprocess(clk)variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);variable tmb: STD_LOGIC_VECTOR(2 DOWNTO 0);beginif (clkevent and clk=1) then rco=tmb(2)and tmb(0)and tma(3)and tma(0); -计算是否有进位- if (tma=1001) then tma:=0000; if (tmb=101) then -如果十位数为5,则十位数清零,否则十位数加一 tmb:=000; else tmb:=tmb+1; end if; else tma:=tma+1; -如果个位数不为9,则个位数加一- end if; end if; qa=tma;qb=tmb; -将结果输出-end process;END a;-File count60.vhd-LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY count24 ISPORT( clk: in STD_LOGIC; qa: out STD_LOGIC_VECTOR(3 DOWNTO 0); qb: out STD_LOGIC_VECTOR(1 DOWNTO 0); END count24;ARCHITECTURE a1 OF count24 ISBEGINprocess(clk)variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);variable tmb: STD_LOGIC_VECTOR(1 DOWNTO 0);beginif (clkevent and clk=1) then -if en=1 then if (tma=1001) then tma:=0000; tmb:=tmb+1; -如果个位数为9,个位数清零,十位数加一 elsif (tmb=10 and tma=0011) then tma:=0000; tmb:=00; -如果十位数为2,个位数为3,个位数十位-数均清零- else tma:=tma+1; -以上条件均不满足,则个位数加一- end if; -end if; end if; qa=tma;qb=tmb; -将结果输出-end process;END a1;-File count24.vhd-LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY nclock ISPort(clk: in std_logic; segout:out std_logic_vector(6 downto 0); selout:out std_logic_vector(2 downto 0);END nclock;Architecture a2 of nclock iscomponent count60 is -60进制元件声明-PORT( clk: in STD_LOGIC; qa: out STD_LOGIC_VECTOR(3 DOWNTO 0); -个位数计数- qb: out STD_LOGIC_VECTOR(2 DOWNTO 0); -十位数计数- rco: out STD_LOGIC); -计数进位-end component;component count24 is -24进制元件声明-PORT( clk: in STD_LOGIC; qa: out STD_LOGIC_VECTOR(3 DOWNTO 0); -个位数计数- qb: out STD_LOGIC_VECTOR(1 DOWNTO 0); -十位数计数- end component;signal tmsa,tmma,tmha: std_logic_vector(3 downt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论