名称:篮球计时器倒计时器DE0-CV开发板篮球比赛定时器
软件:Quartus II
语言:VHDL
代码功能:
篮球计时器倒计时器要求篮球比赛
(1)主持人宣布比赛开始前,所有模块就位
(2)裁判宣布开始时,比赛正式开始,进入12分钟倒计时,同时进入24秒倒计时抢球,且信号灯显示抢到球的一方。
(3)当球被另方夺取时,重新进入24秒倒计时,信号灯显示抢到球的一方
(4)当24秒倒计时为0时(犯规时),蜂呜器(信号灯)提示。
(5)当裁判宣布暂停吋,12分钟倒计吋暂停,24秒倒计时复位,进人60秒倒计时。60秒倒计时为0时,暂停结束,蜂鸣器(信号灯)提示,继续12分钟倒计时
(6)一节比赛结束时,蜂鸣器(信号灯)提示,数码管显示节数
本代码已在DE0-CV开发板验证,开发板如下,其他开发板可通过修改管脚适配:
演示视频:篮球计时器倒计时器DE0-CV开发板篮球比赛定时器
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
代码下载:
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; --控制模块 ENTITY control IS PORT ( clk : IN STD_LOGIC;--时钟 reset : IN STD_LOGIC;--复位 clk_1 : IN STD_LOGIC;--1hz start_n : IN STD_LOGIC;--开始 stop_n : IN STD_LOGIC;--暂停 ball_sw1 : IN STD_LOGIC;--抢球1 ball_sw2 : IN STD_LOGIC;--抢球2 stop_led : OUT STD_LOGIC;--暂停指示灯 over24sec_led : OUT STD_LOGIC;--24s超时指示灯 ball_led : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);--抢球指示灯 end_led : OUT STD_LOGIC;--结束指示灯 match : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--比赛节数 timedown_o : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--倒计时 time12_min_o : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--12分钟分 time12_sec_o : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--12分钟秒 ); END control; ARCHITECTURE trans OF control IS type state_type is (s_idle,s_wait12min,s_stop,s_over24sec,s_end,s_start); signal state : state_type; SIGNAL ball_sw1_buf0 : STD_LOGIC; SIGNAL ball_sw1_buf1 : STD_LOGIC; SIGNAL ball_sw2_buf0 : STD_LOGIC; SIGNAL ball_sw2_buf1 : STD_LOGIC; SIGNAL sw1_r : STD_LOGIC; SIGNAL sw2_r : STD_LOGIC; SIGNAL time24 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; SIGNAL time60 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; SIGNAL time12_min : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; SIGNAL time12_sec : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; SIGNAL match_num : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; BEGIN PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN ball_sw1_buf0 <= ball_sw1;--抢球1 ball_sw1_buf1 <= ball_sw1_buf0; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN ball_sw2_buf0 <= ball_sw2;--抢球2 ball_sw2_buf1 <= ball_sw2_buf0; END IF; END PROCESS; sw1_r <= NOT(ball_sw1_buf0) AND ball_sw1_buf1;--抢球1 sw2_r <= NOT(ball_sw2_buf0) AND ball_sw2_buf1;--抢球2 timedown_o <= time60 WHEN (state = s_stop) ELSE--根据状态切换显示60s还是24s倒计时 time24; time12_min_o <= time12_min;--分钟倒计时 time12_sec_o <= time12_sec;--秒钟倒计时 PROCESS (clk, reset) BEGIN IF ((NOT(reset)) = '1') THEN time60 <= "00111100";--复位 ELSIF (clk'EVENT AND clk = '1') THEN IF (state = s_wait12min AND stop_n = '0') THEN time60 <= "00111100";--60s ELSIF (state = s_stop AND clk_1 = '1') THEN time60 <= time60 - "00000001";--倒计时 END IF; END IF; END PROCESS; --24秒倒计时 PROCESS (clk, reset) BEGIN IF ((NOT(reset)) = '1') THEN time24 <= "00011000"; ELSIF (clk'EVENT AND clk = '1') THEN IF (sw1_r = '1' OR sw2_r = '1' OR start_n = '0') THEN time24 <= "00011000"; ELSIF (state = s_stop) THEN time24 <= "00011000"; ELSIF (state = s_wait12min AND clk_1 = '1') THEN time24 <= time24 - "00000001"; END IF; END IF; END PROCESS; --12分钟倒计时 PROCESS (clk, reset) BEGIN IF ((NOT(reset)) = '1') THEN time12_min <= "00000000"; time12_sec <= "00000000"; ELSIF (clk'EVENT AND clk = '1') THEN IF (state = s_start) THEN
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 管脚分配
6. 仿真图