数字逻辑电路课程设计实验报告

  • 格式:doc
  • 大小:168.50 KB
  • 文档页数:15

数字逻辑电路课程设计报告 1 数字逻辑电路课程设计 ---------多功能数字时钟

班级:信息安全1002 姓名:潘祥熙 学号:3100604048 指导老师:袁晓云 时间:2011-6-25 数字逻辑电路课程设计报告 2 目录 【封面】---------------------------------------------------------------------------- -1-

【目录】----------------------------------------------------------------------------- -2- 【设计目的】---------------------------------------------------------------------- -3- 【设计要求】----------------------------------------------------------------------- -3- 【数字钟的组成和基本工作原理】------------------------------------------- 3~4 【模块及模块功能】------------------------------------------------------------- 5~8 【总体设计模块设计】--------------------------------------------------------- 8 【效果分析】 ------------------------------------------------------------ 9-10 【心得体会】 ---------------------------------------------------------------- 11 【参考文献】 --------------------------------------------------------------- 12 数字逻辑电路课程设计报告

3 【设计目的】 掌握各类计数器以及它们相连的设计方法; 掌握多个数码管显示的原理与方法; 掌握MAX+plus技术的层次化设计方法: 掌握使用VHDL语言的设计思想;对整个系统的设计有一个了解。

【设计要求】 (1) 能进行正常的时、分、秒计时功能,分别由6个数码管显示24好、60min、60s。 (2) 按下k1键时,计数器迅速递增,并24h循环,计满23h后再回00. (3) 按下k2键时,计数器迅速递增,并60min循环,计满59min后再回00,但不向“时”进位。 (4) 按下k3键,秒钟自动清零; (5) 利用扬声器做整点报时;当计时到达59’59”时开始报时在59’50”、52”、54”、56”、58”鸣叫,鸣叫声频为500Hz;到达59’60”时为最后一声整点报时,频率为1kHz.

【数字钟的组成和基本工作原理】 数字钟实际上是一个对标准频率进行计数的计数电路。它的计时周期是24小时,由于计数器的起始时间不可能与标准时间(如北京时间)一致所以采用校准功能和报时功能。 数字钟电路主要由译码显示器、校准电路、报时电路、时计数、分计数、秒计数器,振荡电路和单次脉冲产生电路组成。其中电路系统由秒信号发生器、“时”、“分”、“秒”计数器、译码器及显示器、校准电路、整点报时电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个时脉冲信号,该信号将被送到时计数器。时计数器采用24进制计时器,可实现对一天24小时的计时。译码显示电路将“时”、“分”、“秒”计数器的输出状态通过显示驱动电路,七段显示译码器译码,在经过六位LED七段显示器显示出来。整点报时电路时根据计时系统的输出状态产生一个脉冲信号,然后去触发一音频发生器实现低、高音报时。校准电路时用来对“时”、“分”、“秒”显示数字进行校对调整的。如图1所示多功能数字钟的组成框图。 数字逻辑电路课程设计报告 4 译码驱动 译码驱时十位计数

分频器电路 分频器电路 振荡器电路

译码驱动 译码驱动 译码驱动 译码驱时个位计数 分十位计数 分十位计数秒十位计数 秒十位计数

校时电路 校分电路 数字逻辑电路课程设计报告

5 多功能数字时钟的总体设计框图 如下图所示 时显示器 分显示器 秒显示器

校时 校分 清零 多功能数字时钟的总体设计框图

时十位 时个位 分十位 分个位 秒十位 秒个位 扬声器 译码器 译码器 译码器 译码器 译码器 译码器

时计数器 分计数器 秒计数器 MUX MUX 报时电路

HADJ HAOJ SCLR 基准频率 分频器

DA SB SC

1Hz 4Hz 64Hz

500Hz 数字逻辑电路课程设计报告

6 设计方案: 根据总体设计框图,可以将整个系统分为5个模块来实现,分别是计时模块、校时模块、整点报时模块、分频模块、动态显示模块. (1)计时模块 该模块的设计相对简单,使用一个二十四进制和两个六十进制计数器级联,构成数字钟的基本框架。二十四进制计数器用于计时,六十计时器用于计分和计秒。只要给秒计数器一个1Hz的时钟脉冲,则可以正常计时。分计数器以秒计数器的进位作为计数脉冲,小时计数器以分计数器的进位作为计数脉冲。 (2)校时模块 校时模块设计要求实现校时、校分以及秒清零的功能。 1按下校时键,小时计数器迅速递增以调至所需要的小时位。 2按下校分键,分数计数器迅速递增以调至所需要的分位。 3按下清零键,将秒计数器清零。 可以选择实验板上的3个脉冲案件进行锁定。 对于此模块的设计,有3个需要注意的问题: 1在校分时,分数计数器的计数不应对小时位产生影响,因而需要屏蔽此时分计数器的

进位信号以防止小时计数器计数。 2按键抖动的消除

所谓“抖动”是指一次按键时的弹跳现象,通常实验板中按键所用的开关为机械弹跳开关,由于机械点的弹性作用,按键开关在闭合时并不能马上接通,而断开时也并不能马上断开,使得闭合及断开的瞬间伴随着一系列的电压抖动,从而导致本来一次按键,希望计数一次,结果因为抖动多次计数多次,且计数随机,这样就严重影响了时间的校对。 3计数采用1Hz的脉冲驱动计数器计数,而校对时间对应选用相对高频率的信号驱动计

数器以达到快速校对时间的目的。显然,这两种计数器脉冲之间需要进行相应的选择切换。于是将计时和校时模块合起来的电路是实现示意图所示。两种脉冲信号用两路选择器进行选择,选择条件为是否按键。按键输出经过了消抖处理。 数字逻辑电路课程设计报告

7 多功能数字钟的计时和校时模块 (3)整点报时模块 该模块的功能要求是:计时到59分50秒时,每两秒一次低音报时,整点时进行高音报时,可以将报时信号接到实验板上的扬声器输出。而已不同频率的脉冲信号区分低音和高音报时。比如可以用500Hz信号进行低音报时,1kHz信号作为高音报时信号。 进行报时的条件是计数器计数至所需要的时间点,因而需要实现一个比较模块,将分计数器和秒计数器的输出连至比较输入端完成比较过程。 (4)分频模块 在本系统中需要用到多种不同频率的脉冲信号,上至高音报时信号,下至1Hz的计时脉冲。所有这些脉冲信号均可以通过一个基准分频分频器产生。基准频率分频器就是一个进制很大的计数器,利用计数器的分频功能,从不同的输出为得到所需要的脉冲信号。 (5) 动态显示模块 时间的显示需要用到6个数码管,如果实验板上可用的静态显示数码管有6个或6个以上则很容易实现,只需要将小时高位到秒低位Ginger6组输出按顺序锁定到6个数码管上即可。

二十四进制计数器 六十进制计数器 六十进制计数器 2MUX 2MUX

消抖 校时 消抖 校分 1Hz 高频计数脉冲

分频 数字逻辑电路课程设计报告

8 【模块及模块功能】 (1)60进制计数器

(2)24进制计数器 数字逻辑电路课程设计报告

9 (3)分频电路 数字逻辑电路课程设计报告

10 (4)报时电路 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ALERT is port(f1:in std_logic_vector(3 downto 0); f2:in std_logic_vector(3 downto 0); m1:in std_logic_vector(3 downto 0); m2:in std_logic_vector(3 downto 0); sinlk: out std_logic; sin500: out std_logic); end ALERT; architecture arc of ALERT is begin sinlk<='1'when(f1="0000" and f2="0000" and m1="0000" and m2="0000")else'0'; sin500<='1'when(f1="0101"and f2="1001"and m1="0101"and (m2="0000"or m2="0010" or m2="0100" or m2="0110" or m2="1000"))else'0'; end arc;

(5)扫描电路 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity scaner_60 is port(a,b,c,d,e,f:in std_logic_vector(3 downto 0); cp :in std_logic; sel :out std_logic_vector(5 downto 0); display :out std_logic_vector(3 downto 0) ); end scaner_60; architecture a of scaner_60 is signal count:std_logic_vector(3 downto 0); begin process(cp) begin if(cp'event and cp='1') then if(count="0101") then