数字逻辑课程设计报告

时间:2024.4.29

数字逻辑课程设计

多功能数字钟

        班级:

        学号:

        课程设计人:

指导老师:

课题:

        完成时间:

一、设计目的:

学会应用数字系统设计方法进行电路设计,熟练地运用汇编语言。

二、设计任务及要求:

1.记时、记分、记秒

2.校时、校分、秒清0

3.整点报时

4.时间正常显示

5.闹时功能

三、设计思路:

将整个闹钟分为以下几个模块,每个模块中都有详细的各部分的设计思路,源代码及仿真图像,生成的器件。

1.计时模块

计小时:24进制计数器

计分、计秒:60进制计数器

计时间过程:

计秒:1HZ计数脉冲,0~59循环计数,计数至59时产生进位信号。

计分:以秒计数器进位信号作为分计数脉冲,0~59循环计数,59时产生进位。

计时:以分计数器进位信号作为时计数脉冲,0~23循环计数,23时清0。

                                                            

二十四进制计数器代码:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity cnt24 is

 port (clk:in std_logic;

       qh,ql:out std_logic_vector(3 downto 0));

end cnt24;

architecture behave of cnt24 is

signal q1,q0:std_logic_vector(3 downto 0);

begin

    process(clk)

      begin

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

          if(q1="0010" and q0="0011")then

            q1<="0000";q0<="0000";

          elsif(q0="1001")then

            q0<="0000";q1<=q1+'1';

          else

            q0<=q0+'1';

          end if;

        end if;

      qh<=q1;

      ql<=q0;

    end process;

end behave;

仿真结果:

图一、cnt24仿真图像

六十进制计数器代码:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity cnt60 is

 port (clk:in std_logic;

       clr:in std_logic;

       ql,qh:out std_logic_vector(3 downto 0);

       c:out std_logic);

end cnt60;

architecture cnt of cnt60 is

signal q1,q0:std_logic_vector(3 downto 0);

begin

    process(clk,clr)

      begin

      if(clr='1')then

        q1<="0000";q0<="0000";c<='0';

      else

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

          if(q1="0101" and q0="1001")then-----到59

            q1<="0000";q0<="0000";c<='1';

          elsif(q1<"0101" and q0="1001")then

            q0<="0000";q1<=q1+'1';c<='0';

          elsif(q0<"1001") then

            q0<=q0+'1';

          end if;

        end if;

      end if;

      qh<=q1;

      ql<=q0;

    end process;

end cnt;

仿真结果:

图二、cnt60仿真图像

图三、生成的计数器符号

2.校时模块:

思路:按下校时键 ,时位迅速递增,满23清0

   按下校分键 ,分位迅速递增,满59清0 

   注意:此时应屏蔽分进位。

   按清0键,秒清0。

   脉冲按键S1~S8、拨动开关K1~K12任选三个。

两个问题:

(1)如何实现校对时间时,计数器快速递增?

   按键校对时间时,将一个频率较高的计数脉冲信号作用于计数器,屏蔽正常计时的计数脉冲信号。

(2)如何消除“抖动”?

   电路抖动:一次按键的弹跳现象,电路产生多个计数脉冲,导致一次按键,多次计数的误动作。

   抖动产生的原因:物理原因。

   消除的简易方法:D触发器,同步按键脉冲。

3.整点报时模块:

从59分50秒开始,每2秒一次低音报时;当达到整点时,进行一次高音报时。

低音:频率可定为500HZ;高音:频率可定为1KHZ。

报时效果:报时脉冲接扬声器输入,引脚号:N6。

整点报时器件代码

library  ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity alert_31 is

port(m1,m0,s1,s0:in std_logic_vector(3 downto 0);

     siga,sigb:out std_logic);

end alert_31;

architecture alert of alert_31 is

 begin

 siga<='1'when(m1="0101" and m0="1001" and s1="0101" and (s0="0000" or s0="0010" or s0="0100" or s0="0110" or s0="1000"))else'0';

 sigb<='1'when(m1="0000" and m0="0000" and s1="0000" and s0="0000")else'0';

end alert;

仿真结果:

图四、整点报时模块,低频率报时

图五、整点报时器件符号

4、分频模块:

设计一个进制较大的计数器,分频产生各种频率的脉冲信号。

代码:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity freq_divider is

port (clk:in std_logic;

      hz512,hz64,hz4,hz1:out std_logic);

End freq_divider;

architecture beh of freq_divider is

    signal cc: std_logic_vector(9 downto 0);

begin

    process(clk)

    begin

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

       if(cc="1111111111")then

           cc<="0000000000";

       else

           cc<=cc+1;

       end if;

    end if;

    end process;

    hz512<=cc(0);

    hz64<=cc(3);

    hz4<=cc(7);

    hz1<=cc(9);

end beh;   

仿真结果:

     

图六、分频器仿真及生成器件符号

5.动态扫描显示模块:

动态模式下,8个数码管连接同个七段码,需要进行分时控制的动态扫描显示。

七段译码器代码:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

 

ENTITY dtsm is

  port(

   clk:in std_logic;

   h:in std_logic_vector(7 downto 0);

   m:in std_logic_vector(7 downto 0);

   s:in std_logic_vector(7 downto 0);

    seg7out:out std_logic_vector(6 downto 0);

   sel:buffer std_logic_vector(2 downto 0)

       );

END dtsm;

ARCHITECTURE beha of dtsm is

  signal key:std_logic_vector(3 downto 0);

  BEGIN

     PROCESS(clk)

     variable dount:std_logic_vector(2 downto 0):="000";

     BEGIN

     IF(rising_edge(clk))then

        IF dount="101" then

           dount:="000";

        ELSE

            dount:=dount+1;

        END IF;

     END IF;

     sel<=dount;

     end process;

     PROCESS(sel)

     BEGIN

     CASE sel IS

        when "000"=>key<=h(7 downto 4);

        when "001"=>key<=h(3 downto 0);

        when "010"=>key<=m(7 downto 4);

        when "011"=>key<=m(3 downto 0);

        when "100"=>key<=s(7 downto 4);

        when "101"=>key<=s(3 downto 0);

        when others=>null;

        END CASE;

      

     END PROCESS;

     PROCESS (key)

     BEGIN

     case key is

       when"0000"=>seg7out<="0111111";

       when"0001"=>seg7out<="0000110";

       when"0010"=>seg7out<="1011011";

       when"0011"=>seg7out<="1001111";

       when"0100"=>seg7out<="1100110";

       when"0101"=>seg7out<="1101101";

       when"0110"=>seg7out<="1111101";

       when"0111"=>seg7out<="0000111";

       when"1000"=>seg7out<="1111111";

       when"1001"=>seg7out<="1101111";

       when"1010"=>seg7out<="1110111";

       when others=>null;

     END CASE;

     END PROCESS;

 END beha;

器件生成:

图七、动态扫描器件

6.闹时模块:

多路选择器源程序:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity alarmset is

port(sel:in std_logic;

      hclo,mclo,sclo,halr,malr,salr: in std_logic_vector(7 downto 0);

  h,s,m:out std_logic_vector(7 downto 0));

end alarmset;

architecture beh of alarmset is

begin

  process(sel)

  begin

 if(sel='0')then h<=hclo;

                 m<=mclo;

             s<=sclo;

    else h<=halr;

         m<=malr;

     s<=salr;

  end if;

  end process;

end beh;

数值比较器代码:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity alarmcmp is

port( h,m,halr,malr: in std_logic_vector(7 downto 0);

      stop:in std_logic;

      sig:out std_logic);          

end alarmcmp;

architecture beh of alarmcmp is

begin

process(h,m,halr,malr,stop)

begin

 if stop='1'then

    sig<='0';

  end if;

 if h=halr and m=malr and stop='0' then

    sig<='1';

   else sig<='0';

 end if;

 end process;

end beh;

器件生成:

         

图八、多路选择器和数值比较器

四、顶层图:

图九、顶层图

六、设计中遇到的问题及解决方法:

问题1、 第一次下载仿真时,秒不动,按下清零键自动计时,松开又自动清零。解决方法:在秒的计数器清零端加一个非门,这样当一下载到实验板后,在一秒后就可以自动计时,且若要清零则按下Sc按键即可。

问题2、分始终保持00状态,秒的进位不能使它变化,校分也不起作用。后来老师检查后才发现,这个问题产生的原因是,我的六十进制计数器是置“1”时清零,而顶层电路图上却是设计的“0”时清零,故错把清零端接至了“vcc”.

解决方法:将分的清零端的“vcc”改为“gnd”,再次下载时,分位就可以动了。

问题3、不知道如何设置闹钟设定与正常计时状态的显示切换。

解决方法:  通过上网搜索以及询问同学,发现了再加一个开关用来控制不同模块的显示。

七、心得体会:

在此次的多功能数字钟设计过程中,让我看到理论与实践的差别和联系,理论固然重要,然而我们要在实践中发现错误,并解决错误,提高自己的动手能力和实际解决问题的能力。

同时,此次设计也锻炼了自己独立思考问题的能力和通过查看相关资料来解决问题的习惯。虽然这只是一次简单的课程设计,但通过这次课程设计我了解了课程设计的一般步骤,和设计中应注意的问题。设计本身并不是有很重要的意义,而是对待问题时的态度和处理事情的能力。至于设计的成绩无须看得太过于重要,而是设计的过程,设计的思想和设计电路中的每一个环节,电路中各个部分的功能是如何实现的。

最后闹钟也没有自己做出来,仿照同学的设计才做出来,这说明自己平时的学习中还存在很多不足,以后应该更用功学习理论知识,同时加强动手能力。总的来说,这次课程设计使我收获良多,特别是当它第一次整点报时的时候,心中愉悦无比,自己动手学到的东西是最多的。

更多相关推荐:
数字逻辑课程设计报告

东莞理工学院07级计算机专业本科数字逻辑课程课程设计报告班级07计科1班姓名沈美珠学号20xx41402102同组成员黄浪指导老师肖慧娟日期20xx1231一课程设计名称六路抢答器的设计二课程设计地点电子工程学...

数 字 电 路 课 程 设 计 报 告

数字电路课程设计报告课题名称:篮球竞赛30秒计时器姓名:学号:专业班级:通信工程1指导教师:设计日期:20##年1月5日摘要:随着信息时代的到来,电子技术在社会生活中发挥着越来越重要的作用,运用模电和数电知识设…

广工数字逻辑课程设计报告

20xx年6月23日广东工业大学课程设计任务书一课程设计的内容完成彩灯循环控制器的设计任务二课程设计的要求与数据设计要求包括110路彩灯分别用10个发光二极管L0L1L9模拟2要求显示四种不同的花型110路彩灯...

数电课程设计报告

数电课程设计说明题目数字电子钟的设计部班级名号书系专业姓学指导教师起止日期摘要这次课程设计采用的课题是数字电子钟的设计数字钟是一种用数字电路技术实现时分秒计时的装置与机械式始终相比具有更高的准确性和直观性且无机...

江苏大学09级数字逻辑课程设计报告

数字逻辑课程设计多功能数字钟学院名称计算机科学与通信工程专业班级通信0902学生学号指导老师赵念强完成日期20xx年7月2日多功能数字钟课程设计实验报告一实验目的1学会应用数字系统设计方法进行电路设计2进一步提...

数字逻辑系统课程设计报告 (1)

数字逻辑系统课程设计报告课题电子密码锁专业电子信息工程技术班级B1311学号21311060104姓名李文翔设计时间20xx年3月23日27日评定成绩指导教师目录一设计内容与要求1设计内容2设计要求二方案设计1...

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

数字逻辑电路课程设计报告拔河游戏机20##年9月6日摘要1、任务与要求:电子拔河游戏机是一种能容纳甲乙双方参赛或甲乙双方加裁判的三人游戏电路。由一排LED发光二极管表示拔河的的电子绳。由甲乙双方通过按纽开关使发…

华信学院数字逻辑课程设计报告

石家庄经济学院华信学院数字逻辑课程设计报告题目数字秒表姓名学号班号指导老师成绩20xx年6月目录1课程设计目的2开发工具选择3设计方案4模块描述5VHDL实现6调试仿真7课程设计回顾总结参考文献附录1课程设计目...

简易售货机的设计 数字逻辑课程设计报告

石家庄经济学院华信学院数字逻辑课程设计报告题目简易售货机的设计姓名学号班号指导老师成绩目录1课程设计目的2开发工具选择3设计方案4模块描述5VHDL实现6调试仿真7课程设计回顾总结参考文献附录1课程设计目的1设...

数字逻辑课程设计报告-电子钟

数字逻辑电路课程设计报告数字逻辑课程设计报告-----多功能数字钟的实现一.设计目的:1.学会应用数字系统设计方法进行电路设计。2.进一步提高MaxplusII软件开发应用能力。3.培养学生综合实验能力。二.实…

数字逻辑程序设计报告

北京邮电大学课程设计报告目录1频率计设计2电子钟显示设计3药片装瓶系统设计4任务日志以及个人心得一实验目的1掌握较复杂的逻辑设计和测试2学习用原理图VHDL语言设计逻辑电路3学习数字电路模块层次设计4掌握isp...

《数字逻辑》数字时钟课程设计报告

数字逻辑课程设计报告题目学院部专业班级学生姓名学号月共指导教师签字题目一摘要钟表的数字化给人们的生产生活带来了极大的方便并且极大的扩展了钟表原先的报时功能诸如定时自动报有这些都是以钟表数字化为基础的因此研究数字...

数字逻辑课程设计报告(31篇)