导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→谁能帮我修改下数字时钟的程序啊

* 94711: 谁能帮我修改下数字时钟的程序啊

   gbc9566 
gbc9566发表的帖子 

 谁能帮我修改下数字时钟的程序啊
请大家帮我改下这个数字时钟的程序,总共有3个错误和6个警告,但是我费了好大的劲就上不知道错在那里,请高手不赐教。小弟在此先谢谢大家了啊!


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.std_logic_arith.all;
ENTITY CK20 IS
PORT(CLK,SETH,SETM,SETS,RST: IN STD_LOGIC;  
     SECOND: OUT STD_LOGIC;
     LMIN,HMIN,LHOUR,HHOUR,LSEC,HSEC: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END CK20;

ARCHITECTURE CLOCK OF CK20 IS
SIGNAL CLK1,CLK2:STD_LOGIC;
SIGNAL LMIN1,HMIN1,LHOUR1,HHOUR1,LSEC1,HSEC1: STD_LOGIC_VECTOR(3 DOWNTO 0); 
SIGNAL  DISPLAYOUT: STD_LOGIC_VECTOR(3 DOWNTO 0); 
SIGNAL DBUS: STD_LOGIC_VECTOR(7 DOWNTO 0);


FUNCTION DISPLAY(SIGNAL A: STD_LOGIC_VECTOR(0 to 3))
RETURN STD_LOGIC_VECTOR IS                       --产生显示的子程序
 
     BEGIN
     CASE A IS
  when "0001" =>   DISPLAYOUT   <= "0001";
  when "0010" =>   DISPLAYOUT   <= "0010";
  when "0011" =>   DISPLAYOUT   <= "0011";
  when "0100" =>   DISPLAYOUT   <= "0100";
  when "0101" =>   DISPLAYOUT   <= "0101";
  when "0110" =>   DISPLAYOUT   <= "0110";
  when "0111" =>   DISPLAYOUT   <= "0111";
  when "1000" =>   DISPLAYOUT   <= "1000";
  when "1001" =>   DISPLAYOUT   <= "1001";
  when "1010" =>   DISPLAYOUT   <= "1010"; 
  when "1011" =>   DISPLAYOUT   <= "1011";
  when "1100" =>   DISPLAYOUT   <= "1100";
  when "1101" =>   DISPLAYOUT   <= "1101";
  when "1110" =>   DISPLAYOUT   <= "1110";
  when "1111" =>   DISPLAYOUT   <= "1111";
  when others =>   DISPLAYOUT   <= "0000";
    END CASE;
    RETURN DISPLAYOUT;
END FUNCTION DISPLAY;

             

             

BEGIN
SECOND  <=CLK1;
LSEC  <=DISPLAY(LSEC1);   --秒种的个位
HSEC  <=DISPLAY(HSEC1);   --秒种的十位
LMIN  <=DISPLAY(LMIN1);   --分钟的个位
HMIN  <=DISPLAY(HMIN1);   --分钟的十位
LHOUR  <=DISPLAY(LHOUR1);   --小时的个位
HHOUR  <=DISPLAY(HHOUR1);   --小时的十位


P1:PROCESS(CLK,RST)                 --CLK1产生一秒的时钟的块语句
   CONSTANT N:INTEGER:=32768;
   VARIABLE COUNT: INTEGER:=0;
   BEGIN
   IF RST='1' THEN
   COUNT:=0;
   CLK1  <='1';
   COUNT:=COUNT+1;
   ELSIF RISING_EDGE(CLK)THEN
     IF(COUNT  <N/2) THEN
       CLK1  <='1';
       COUNT:=COUNT+1;
     ELSIF(COUNT  <N)THEN
       CLK1  <='0';
       COUNT:=COUNT+1;  
     END IF;
   END IF;
END PROCESS;

P2:PROCESS(CLK1,RST)               --CLK2产生一分钟的时钟的块语句
   CONSTANT M:INTEGER:=60;
   VARIABLE CON: INTEGER:=0;
   BEGIN
   IF RST='1' THEN
   CON:=0;
   CLK2  <='1';
   CON:=CON+1;
   ELSIF RISING_EDGE(CLK1)THEN
     IF(CON  <M/2) THEN
       CLK2  <='1';
       CON:=CON+1;
     ELSIF(CON  <M)THEN
       CLK2  <='0';
       CON:=CON+1;  
     END IF;
   END IF;
END PROCESS;

P3:PROCESS(RST,SETH,SETM,SETS)                  --复位和置数
   BEGIN
   IF RST='1' THEN
      LSEC1  <="0000";
      HSEC1  <="0000";
      LMIN1  <="0000";
      HMIN1  <="0000";
      LHOUR1  <="0000";
      HHOUR1  <="0000";                                     
   ELSIF SETH='0' AND SETM='0' AND SETS='0' THEN      --置数
      IF (SETH='0') THEN
         LHOUR1  <=DBUS(3 DOWNTO 0);
         HHOUR1  <=DBUS(7 DOWNTO 4);
      ELSIF (SETM='0') THEN
         LMIN1  <=DBUS(3 DOWNTO 0);
         HMIN1  <=DBUS(7 DOWNTO 4);
      ELSIF (SETS='0') THEN
         LSEC1  <=DBUS(3 DOWNTO 0);
         HSEC1  <=DBUS(7 DOWNTO 4);
      END IF;
   END IF;
   

END PROCESS;

P4:PROCESS(CLK1)                          --秒钟的个位
   BEGIN
   IF RISING_EDGE(CLK1) THEN
      IF LSEC1  <9 THEN
          LSEC1  <=LSEC1+1;
      ELSE
          LSEC1  <="0000";
      END IF;
   END IF;
END PROCESS;


P5:PROCESS(CLK1)                          --秒钟的十位
   BEGIN
   IF RISING_EDGE(CLK1) AND LSEC1=9 THEN
      IF HSEC1  <5 THEN
         HSEC  <=HSEC1+1;
      ELSE 
         HSEC1  <="0000";
      END IF;
   END IF;
END PROCESS;

P6:PROCESS(CLK2)                          --分钟的个位
   BEGIN
   IF RISING_EDGE(CLK2) THEN
      IF LMIN1  <9 THEN
          LMIN1  <=LMIN1+1;
      ELSE
          LMIN1  <="0000";
      END IF;
   END IF;
END PROCESS;


P7:PROCESS(CLK2)                          --分钟的十位
   BEGIN
   IF RISING_EDGE(CLK2) AND LMIN1=9 THEN
      IF HMIN1  <5 THEN
         HMIN1  <=HMIN1+1;
      ELSE 
         HMIN1  <="0000";
      END IF;
   END IF;
END PROCESS;


P8:PROCESS(CLK2)                            --小时的个位
   BEGIN
   IF RISING_EDGE(CLK2) AND HMIN1=5 AND LMIN1=9 THEN
      IF HHOUR1="0010" THEN
         IF LHOUR1  <3 THEN
            LHOUR1  <=LHOUR1+1;
          ELSE
            LHOUR1  <="0000";
         END IF;
      ELSIF HHOUR1  <2 THEN
         IF LHOUR1  <9 THEN
            LHOUR1  <=LHOUR1+1;
         ELSE 
            LHOUR1  <="0000";
         END IF;
      END IF;
    END IF;
END PROCESS;


P9:PROCESS(CLK2)                                 --小时的十位
   BEGIN
   IF RISING_EDGE(CLK2) AND HMIN1=5 AND LMIN1=9 THEN
      IF HHOUR1=2 AND LHOUR1=3 THEN
         HHOUR1  <="0000";
      ELSIF HHOUR1  <2 AND LHOUR1=9 THEN
         HHOUR1  <=HHOUR1+1;
      END IF;
   END IF;
END PROCESS;

P10:PROCESS(CLK1)
begin                                --出错处理
   IF RISING_EDGE(CLK2) THEN
      IF  HHOUR1>  2 AND HMIN1>  6 AND HSEC1>  6 AND LHOUR1>  9 AND LMIN1>  9 AND LSEC1>  9 THEN
         LSEC1  <="0000";
         HSEC1  <="0000";
         LMIN1  <="0000";
         HMIN1  <="0000";
         LHOUR1  <="0000";
         HHOUR1  <="0000";
      END IF;
   END IF;
END PROCESS;

END CLOCK;



发表时间:2006年6月15日18:59:24

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:有知道这个元件的吗外观近似电位器,但是出来的有四个脚,旋动旋钮的时候有啪嗒声,是一个仪表的旋钮,知道
[下一篇帖子]:请版主允许我发个招聘信息:招聘高级嵌入式工程师,各位有没有兴趣?在杭州经朋友介绍,这里高手较多,公司