找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4047|回复: 0
收起左侧

vhdl多功能电子秒表程序

[复制链接]
ID:112317 发表于 2016-4-7 01:15 | 显示全部楼层 |阅读模式
0.png
vhdl编的多功能电子秒表,可以记录几个人的时间,并且可以在跑秒的时候查看记录。
  1. library ieee;
  2.   use  ieee.std_logic_1164.all;
  3.   use ieee.std_logic_unsigned.all;
  4.   use ieee.std_logic_arith.all;

  5. entity  clock  is
  6.   port( cp:in std_logic;
  7.                 minten:        out std_logic_vector(3 downto 0);
  8.                 min        :        out std_logic_vector(3 downto 0);
  9.                 secten:        out std_logic_vector(3 downto 0);
  10.                 sec:        out std_logic_vector(3 downto 0);
  11.                 stop:        in std_logic;
  12.                 reset:         in std_logic;
  13.         lamp:   out std_logic;
  14.         lam:   out std_logic;
  15.         read: in std_logic);
  16. end clock;

  17. architecture a of clock is
  18. signal mten: integer range 0 to 9;
  19. signal m: integer range 0 to 9;
  20. signal sten: integer range 0 to 9;
  21. signal ss: integer range 0 to 9;
  22. signal read_signal:integer range 0 to 3;
  23. signal ta : integer range 0 to 10;
  24. signal tb : integer range 0 to 10;
  25. signal tc : integer range 0 to 10;
  26. signal td : integer range 0 to 10;
  27. signal xa : integer range 0 to 10;
  28. signal xb : integer range 0 to 10;
  29. signal xc : integer range 0 to 10;
  30. signal xd : integer range 0 to 10;
  31. signal stop_signal: std_logic;

  32. begin
  33. -------------------stop_signal---------------
  34.     process(stop)
  35.     begin
  36.     if stop'event and stop='1' then
  37.        stop_signal<=not stop_signal;
  38.     end if;
  39.     end process;
  40. ------------------clock goes------------------
  41.         process(cp)
  42.         begin
  43.                 if cp'event and cp='1' then
  44.                         if reset='0' then       
  45.                         if stop_signal='1' then
  46.                                 if ss=9 then
  47.                                         ss<=0;
  48.                                         if sten=5 then
  49.                                                 sten<=0;
  50.                                                 if m=9 then
  51.                                                         m<=0;
  52.                                                         if mten=5 then
  53.                                                                 mten<=0;
  54.                                                         else mten<=mten+1;
  55.                                                         end if;
  56.                                                 else m<=m+1;
  57.                                                 end if;
  58.                                         else sten<=sten+1;
  59.                                         end if;
  60.                                 else ss<=ss+1;
  61.                                 end if;
  62.                         end if;
  63.                         else mten<=0;
  64.                                 m<=0;
  65.                                 sten<=0;
  66.                                 ss<=0;

  67.                         end if;
  68.                 end if;
  69.   end process;
  70. ------------------------------read_signal-----------
  71. process(read)
  72. begin
  73.   if read'event and read='1' then
  74.      
  75. if read_signal=2 then read_signal<=0 ;else read_signal<=read_signal+1 ; end if ;
  76.   end if;
  77. end process;
  78. --------------------record--------------
  79. process(read_signal)
  80. begin
  81.   if stop_signal='1' then  
  82.   case read_signal is
  83.         when 1=> ta<=ss;tb<=sten; tc<=m; td<=mten;lamp<='1';lam<='0';
  84.         when 2=> xa<=ss;xb<=sten; xc<=m; xd<=mten;lam<='1'; lamp<='0';
  85.         when others => lamp<='0' ;lam<='0';
  86.    end case;
  87. end if;
  88. end process;      
  89. ------------------------display--------------
  90. process(cp,read_signal)
  91. begin
  92.     case read_signal  is
  93.     when 1=>if stop_signal='0' then
  94.     minten<=conv_std_logic_vector(td,4);
  95.         min<=conv_std_logic_vector(tc,4);
  96.         secten<=conv_std_logic_vector(tb,4);
  97.         sec<=conv_std_logic_vector(ta,4);
  98.           end if;
  99.     when 2=>
  100.            if stop_signal='0' then
  101.     minten<=conv_std_logic_vector(xd,4);
  102.         min<=conv_std_logic_vector(xc,4);
  103.         secten<=conv_std_logic_vector(xb,4);
  104.         sec<=conv_std_logic_vector(xa,4);
  105.           end if;
  106.     when others=>
  107.         minten<=conv_std_logic_vector(mten,4);
  108.         min<=conv_std_logic_vector(m,4);
  109.         secten<=conv_std_logic_vector(sten,4);
  110.         sec<=conv_std_logic_vector(ss,4);
  111.     end case;
  112. end process;
  113. end a;
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表