最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

实验七 LED数码显示时钟实验

来源:动视网 责编:小OO 时间:2025-10-01 18:26:53
文档

实验七 LED数码显示时钟实验

实验七LED数码显示时钟实验班级:通信1121姓名:王密学号:1121302230一、实验目的:1、地运用数字系统的设计方法进行数字系统设计。2、能进行较复杂的数字系统设计。3、数字钟的工作原理,数字钟的工作流程图与原理方框图,自顶向下的数字系统设计方法。二、实验原理:1、数字钟的基本工作原理:数字钟以其显示时间的直观性、走时准确性而受到了人们的欢迎并很快走进了千家万户。作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。数字钟的基本原理方框图如下:(
推荐度:
导读实验七LED数码显示时钟实验班级:通信1121姓名:王密学号:1121302230一、实验目的:1、地运用数字系统的设计方法进行数字系统设计。2、能进行较复杂的数字系统设计。3、数字钟的工作原理,数字钟的工作流程图与原理方框图,自顶向下的数字系统设计方法。二、实验原理:1、数字钟的基本工作原理:数字钟以其显示时间的直观性、走时准确性而受到了人们的欢迎并很快走进了千家万户。作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。数字钟的基本原理方框图如下:(
实验七 LED数码显示时钟实验

班级:通信1121  姓名:王密  学号:1121302230

一、实验目的 :

1、地运用数字系统的设计方法进行数字系统设计。

2、能进行较复杂的数字系统设计。 

3、数字钟的工作原理, 数字钟的工作流程图与原理方框图, 自顶向下的数字系统设计方法。

二、实验原理:

1、数字钟的基本工作原理: 

数字钟以其显示时间的直观性、走时准确性而受到了人们的欢迎并很快走进了千 家万户。作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。数字钟的基本原理方框图如下:

(1)时基T 产生电路:由晶振产生的频率非常稳定的脉冲,经整形、稳定电路后,产生一个频率为 1Hz的、非常稳定的计数时钟脉冲。 

(2)控制逻辑电路:产生调时、调分信号及位选信号。  

调时、调分信号的产生:由计数器的计数过程可知,正常计数时,当秒计数器( 60进制)计数到59 时,再来一个脉冲,则秒计数器清零,重新开始新一轮的计数,而进位则作为分计数器的计数脉冲,使分计数器计数加1。现在我们把电路稍做变动:把秒计数器的进位脉冲和一个频率为2Hz的脉冲信号同时接到一个2选1数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关不按下去时(即为0),则数据选择器将秒计数器的进位脉冲送到分计数器,此时,数字钟正常工作;当按键开关按下去时(即为1),则数据选择器将另外一个2Hz 的信号作为分计数器的计数脉冲,使其计数频率加快,当达到正确时间时,松开按键开关,从而达到调时的目的。调节小时的时间也一样的实现。 

(3)计数显示电路:由计数部分、数据选择器、译码器组成,是时钟的关键部分。 

计数部分: 由两个 60进制计数器和一个24 进制计数器组成,其中60 进制计数器可用6 进制计数器和10 进制计数器构成;24 进制的小时计数同样可用6 进制计数器和10 进制计数器得到:当计数器计数到24 时,“2”和“4”同时进行清零,则可实现24 进制计数。 

数据选择器:84输入14输出的多路数据选择器,因为本实验用到了8个数码管(有两个用来产生隔离符号‘—')。 

译码器:七段译码器。译码器必须能译出‘—’,由实验二中译码器真值表可得:字母 F 的8421BCD 码为“1111”,译码后为“1000111”,现在如果只译出‘—’,即字母F的中间一横,则译码后应为“0000001”,这样,在数码管上显示的就为‘—’。

2、自顶向下设计分割图: 

说明:按一下按键key0,完成复位功能,clk5选择1Hz的时钟,clk3选择的时钟频率尽量高。

三、实验连线:

1、将EP2C5适配板左下角的JTAG用十芯排线和万用下载区左下角的SOPC JTAG口连接起来,万用下载区右下角的电源开关拨到 SOPC下载的一边。

2、请将JPLED1短路帽右插,JPLED的短路帽全部上插,实验板右下方频率源 CLK1接任意频率作为扫描频率。

3、将实验板左端的JP103全部用短路帽接上(共八个)。

四、实验内容与步骤:(程序:EP2C5\imer\imer.sof)

1、打开Quartus II 6.0软件,点击“File→OpenProject”出现如下的对话框(图10.1),选中timer,点打开即可;

     

图10.1

2、点击“Tools-Programmer”后出现如下的对话窗口, 

3、在点”Edit→Add File………”出现如下对话框(图10.2),在图10.3对话框中,选中EP2C5/timer/timer.sof项目后点击打开回到Programmer对话框, 在下载对话窗口中“选中Program/ Configure”,点击“Start”即进行下载。

         

图10.2

         

图10.3

现将timer.vhd原程序作如下说明:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.STD_LOGIC_SIGNED.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY TIMER IS

  PORT( CLK5:IN STD_LOGIC;

        CLK3:IN STD_LOGIC;

         RST1:IN STD_LOGIC;

     SEG_SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);

     SEG_DA :OUT STD_LOGIC_VECTOR(7 DOWNTO 0)

        );

END TIMER;

ARCHITECTURE ADO OF TIMER IS

COMPONENT CNT10

   PORT(CLK:IN STD_LOGIC;

        RST:IN STD_LOGIC;

        CIN:IN STD_LOGIC;

      CNT_VAL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

        COUT :OUT STD_LOGIC

        );

  END COMPONENT;

COMPONENT CNT6

   PORT(CLK :IN STD_LOGIC;

        RST :IN STD_LOGIC;

        CIN :IN STD_LOGIC;

     CNT_VAL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

        COUT:OUT STD_LOGIC

         );

  END COMPONENT;

COMPONENT CNT2

   PORT(CLK: IN STD_LOGIC;

        RST: IN STD_LOGIC;

        CIN: IN STD_LOGIC;

    CNT_VAL:INOUT STD_LOGIC_VECTOR(3 DOWNTO 0);

      COUT :OUT STD_LOGIC

        );

  END COMPONENT;

COMPONENT CNT4

  PORT (CLK:IN STD_LOGIC;

        RST:IN STD_LOGIC;

        CIN:IN STD_LOGIC;

    CNT_VAL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

       COUT:OUT STD_LOGIC

        );

 END COMPONENT;

SIGNAL SEG_BUF1,SEG_BUF2,SEG_BUF3,SEG_BUF4:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL SEG_BUF5,SEG_BUF6,SEG_BUF7,SEG_BUF8:STD_LOGIC_VECTOR(3 DOWNTO 0); 

SIGNAL SEG_CNT :STD_LOGIC_VECTOR(2 DOWNTO 0);

SIGNAL SEG_TEMP:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL COUT:STD_LOGIC_VECTOR(5 DOWNTO 0);  

SIGNAL CLK:STD_LOGIC;

  BEGIN

  PROCESS (CLK3)

       BEGIN

          IF CLK3'EVENT AND CLK3='1' THEN

CLK<=NOT CLK ;

          END IF;

       END PROCESS;  

  PROCESS (CLK, RST1)

       BEGIN

                 IF CLK'EVENT AND CLK='1' THEN   

                         IF  RST1='1'  THEN

SEG_CNT<="000";

                         ELSE 

SEG_CNT<=SEG_CNT+1;

                         END IF;

                 END IF;

       END PROCESS;

SEG_SEL<=SEG_CNT;

SEG_BUF3<="1111";

SEG_BUF6<="1111";

PROCESS(SEG_CNT,SEG_BUF1,SEG_BUF2,SEG_BUF3,SEG_BUF4,SEG_BUF5,SEG_BUF6,SEG_BUF7,SEG_BUF8)

         BEGIN 

            CASE SEG_CNT IS

WHEN "000" => SEG_TEMP<=SEG_BUF1;

WHEN "001" => SEG_TEMP<=SEG_BUF2;

WHEN "010" => SEG_TEMP<=SEG_BUF3;

WHEN "011" => SEG_TEMP<=SEG_BUF4;

WHEN "100" => SEG_TEMP<=SEG_BUF5;

WHEN "101" => SEG_TEMP<=SEG_BUF6;

WHEN "110" => SEG_TEMP<=SEG_BUF7;

WHEN "111" => SEG_TEMP<=SEG_BUF8;

WHEN OTHERS => NULL;

              END CASE;

           END PROCESS;

       PROCESS (SEG_TEMP)

          BEGIN

             CASE SEG_TEMP IS

WHEN "0000" => SEG_DA<=x"3F";

WHEN "0001" => SEG_DA<=x"06";

WHEN "0010" => SEG_DA<=x"5B";

WHEN "0011" => SEG_DA<=x"4F";

WHEN "0100" => SEG_DA<=x"66";

WHEN "0101" => SEG_DA<=x"6D";

WHEN "0110" => SEG_DA<=x"7D";

WHEN "0111" => SEG_DA<=x"07";

WHEN "1000" => SEG_DA<=x"7F";

WHEN "1001" => SEG_DA<=x"6F";

WHEN "1010" => SEG_DA<=x"77";

WHEN "1011" => SEG_DA<=x"7B";

WHEN "1100" => SEG_DA<=x"39";

WHEN "1101" => SEG_DA<=x"3E";

WHEN "1110" => SEG_DA<=x"79";

WHEN "1111" => SEG_DA<=x"00";

            END CASE;

         END PROCESS;

U1 : CNT10 PORT MAP (CLK=>CLK5,RST=>RST1,CNT_VAL=>SEG_BUF1,COUT=>COUT(0),CIN=>'1');

U2 : CNT6 PORT MAP (CLK=>CLK5,RST=>RST1,CNT_VAL=>SEG_BUF2,COUT=>COUT(1),CIN=>COUT(0));

U3 : CNT10 PORT MAP (CLK=>CLK5,RST=>RST1,CNT_VAL=>SEG_BUF4,COUT=>COUT(2),CIN=>COUT(1));

U4 : CNT6 PORT MAP (CLK=>CLK5,RST=>RST1,CNT_VAL=>SEG_BUF5,COUT=>COUT(3),CIN=>COUT(2));

U5 : CNT4 PORT MAP (CLK=>CLK5,RST=>RST1,CNT_VAL=>SEG_BUF7,COUT=>COUT(4),CIN=>COUT(3));

U6 : CNT2 PORT MAP (CLK=>CLK5,RST=>RST1,CNT_VAL=>SEG_BUF8,COUT=>COUT(5),CIN=>COUT(4));

 END ADO;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

USE IEEE.STD_LOGIC_SIGNED.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY CNT10 IS

  PORT(CLK :IN STD_LOGIC;

       RST :IN STD_LOGIC;

       CIN :IN STD_LOGIC;

    CNT_VAL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

       COUT:OUT STD_LOGIC

        );

END CNT10;

ARCHITECTURE BEHAVE OF CNT10 IS

SIGNAL CNT_T:STD_LOGIC_VECTOR(3 DOWNTO 0);

    BEGIN 

       PROCESS(CLK)

         BEGIN 

              IF RST='1' THEN

CNT_T<="0000";

                 ELSIF CLK'EVENT AND CLK='1' THEN

                        IF CIN='1' THEN

                             IF CNT_T/= 9 THEN

CNT_T<=CNT_T+1;

                             ELSE 

CNT_T<="0000";

                             END IF;

                         END IF;

                  ELSE 

CNT_T<=CNT_T;

                  END IF;

           END PROCESS;

COUT<='1' WHEN CNT_T=9 AND CIN='1' ELSE '0' ;

CNT_VAL<=CNT_T;

      END BEHAVE;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

USE IEEE.STD_LOGIC_SIGNED.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY cnt6 IS

 PORT(CLK :IN STD_LOGIC;

      RST :IN STD_LOGIC;

      CIN :IN STD_LOGIC;

   CNT_VAL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

      COUT:OUT STD_LOGIC      

    );

END CNT6;

ARCHITECTURE ADO2 OF CNT6 IS

SIGNAL CNT_T :STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL COUTD :STD_LOGIC;

     BEGIN 

      PROCESS (CLK,RST)

           BEGIN

               IF  RST='1' THEN

CNT_T<="0000";

                  ELSIF CLK'EVENT AND CLK='1' THEN

                          IF   CIN='1' THEN

IF CNT_T< 5 THEN

CNT_T<=CNT_T+1;

                                ELSE 

CNT_T<=x"0";

                                END IF;

                            END IF;

                   ELSE

CNT_T<=CNT_T;

                END IF;

             END PROCESS;

COUT<='1' WHEN CNT_T=5 AND CIN='1' ELSE '0';

CNT_VAL<=CNT_T;

     END  ADO2;            

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.STD_LOGIC_SIGNED.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY CNT2  IS

 PORT(CLK :IN STD_LOGIC;

      RST :IN STD_LOGIC;

       CIN:IN STD_LOGIC;

   CNT_VAL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

      COUT:OUT STD_LOGIC

        );

 END CNT2;

ARCHITECTURE ADO3 OF CNT2 IS

SIGNAL CNT_T:STD_LOGIC_VECTOR (3 DOWNTO 0);

      BEGIN 

        PROCESS(CLK,RST)

             BEGIN

               IF RST='1' THEN

                       CNT_T<="0000";

                     ELSIF CLK'EVENT AND CLK='1' THEN

                        IF  CIN='1' THEN

IF CNT_T<1 THEN

CNT_T<=CNT_T+1;

                            ELSE 

CNT_T<="0000";

                            END IF;

                          END IF;

                     ELSE 

CNT_T<=CNT_T;

                 END IF;

       END PROCESS;

COUT<='1' WHEN CNT_T=1 AND CIN='1' ELSE '0';

CNT_VAL<=CNT_T;

  END ADO3;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.STD_LOGIC_SIGNED.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY CNT4 IS

  PORT(CLK :IN STD_LOGIC;

       RST:IN STD_LOGIC;

       CIN:IN STD_LOGIC;

   CNT_VAL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

      COUT:OUT STD_LOGIC

       );

END CNT4;

ARCHITECTURE BEHAVE OF CNT4 IS

  SIGNAL CNT_T:STD_LOGIC_VECTOR(3 DOWNTO 0);

  SIGNAL i:INTEGER;

    BEGIN

       PROCESS(CLK,RST)

        BEGIN

         i <= 0;

            IF RST='1' THEN

CNT_T<="0000";

             i <=0;

                ELSIF CLK'EVENT AND CLK='1' THEN

                 IF i<2 THEN

                          IF CIN='1' THEN

                         IF CNT_T<9 THEN

                             CNT_T<=CNT_T+1;

                                 

                              ELSE 

                             CNT_T<="0000";

                              END IF;

                          END IF;

                    ELSE 

                             IF CIN='1' THEN

                         IF CNT_T<3 THEN

                             CNT_T<=CNT_T+1;

                              ELSE 

                             CNT_T<="0000";

                              END IF;

                          END IF;

                    END IF;

                   ELSE

CNT_T<=CNT_T;

               END IF;

        END PROCESS;

CNT_VAL<=CNT_T;

COUT<='1' WHEN (CNT_T=9 AND CIN='1')OR (CNT_T=3 AND CIN='1' AND i=2) ELSE '0';

END BEHAVE;

引脚分配(Cyclone EP2C5Q208C8):

seg_d0-P3、seg_d1-P5、seg_d2-P6、seg_d3-P8、seg_d4-P10、seg_d5-P11、seg_d6-P12,sel0-P141、sel1-P142、sel2-P143,clk3-P130,rst-P43,clk5-P145

管脚标号seg_d0到seg_d 6分别接到LED的8位段码中的7位上(由于实验中不需要在LED上显示“.”,因此8位段码中显示“.”的数据没有接入,其默认为低电平,有兴趣的同学可以自己修改一下程序,其管脚分配如附录三所示);sel0到sel2接到实验箱中74ls138的输入端;clk为LED显示时钟输入,接到频率源clk1。clk5为电子时钟的震荡频率,100脚接key0用作系统复位。管脚标号对应的I/O如下图所示:

      User                      

Assignments                     Node Name

set_location_assignment PIN_3 -to seg_da[0]

set_location_assignment PIN_5 -to seg_da[1]

set_location_assignment PIN_6 -to seg_da[2]

set_location_assignment PIN_8 -to seg_da[3]

set_location_assignment PIN_10 -to seg_da[4]

set_location_assignment PIN_11 -to seg_da[5]

set_location_assignment PIN_12 -to seg_da[6]

set_location_assignment PIN_141 -to seg_sel[0]

set_location_assignment PIN_142 -to seg_sel[1]

set_location_assignment PIN_143 -to seg_sel[2]

set_location_assignment PIN_43 -to rst

set_location_assignment PIN_145 -to clk5

set_location_assignment PIN_130 -to clk3

五、实验现象:

在数码管上,会显示当前的时钟值,格式为11 11 11.会有两个数码管是熄灭的,作为小时和分钟的间隔,分钟和秒钟的间隔。

六、实验体会:

这次实验比较复杂,因为之前没有处理过这么长的代码,然后在老师的讲解之下看懂了代码,然后修改了日期之间进制的问题,所以花的时间比较多,但是收获很多。同时要感谢小组成员的合作。

文档

实验七 LED数码显示时钟实验

实验七LED数码显示时钟实验班级:通信1121姓名:王密学号:1121302230一、实验目的:1、地运用数字系统的设计方法进行数字系统设计。2、能进行较复杂的数字系统设计。3、数字钟的工作原理,数字钟的工作流程图与原理方框图,自顶向下的数字系统设计方法。二、实验原理:1、数字钟的基本工作原理:数字钟以其显示时间的直观性、走时准确性而受到了人们的欢迎并很快走进了千家万户。作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。数字钟的基本原理方框图如下:(
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top