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

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

  
楼 主:gbc9566 2006年6月15日18:59
 谁能帮我修改下数字时钟的程序啊
请大家帮我改下这个数字时钟的程序,总共有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;


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:有知道这个元件的吗

[下一篇主题]:请版主允许我发个招聘信息:招聘高级嵌入式工程师,各位有没有兴趣?在杭州