当前位置:文档之家› 篮球24秒计时器

篮球24秒计时器

电子课程设计——篮球24秒计时器学院:电子信息工程专业:电子101501姓名:学号:201015020131指导教师:2012年12月篮球24秒计时器一设计任务与要求(1)有显示24秒的计时功能;(2)置外部操作开关,控制计时器的直接清零,起碇和暂停\连续功能;(3)计时器为24秒递减计时器,其间隔时间为1秒;(4)计时器递减计时到零时,数码显示器不能灭灯,就发出光电报警信号。

二、总体框图方案一:利用VHDL语言构成的24s篮球可控计时器方案二:由各个单元模块构成的24s篮球可控计时器从框图可知:方案一是完全利用VHDL语言编写各个模块,然后将所有模块连接进行仿真及测试;而方案二是利用已有的芯片构成相应模块,后组合连接仿真。

方案二在设计中有一定的简便性且不用编写繁琐的程序,因此,以下设计采用方案二。

篮球24秒计时器,它包括秒脉冲发生器、计数器译码显示、控制电路和报警电路五部分组成。

其中计数器和控制电路是电路的主要部分。

计数器完成24秒计时功能。

而控制电路完成电路的直接清零、启动计数、暂时/连续计数;译码显示电路的显示与亮灯和到时间启动报警功能。

秒脉冲发生器产生的信号是电路的时钟脉冲和定时标准。

注:(1)由于实验箱具备提供不同频率的脉冲,在具体设计时将省略秒脉冲发生器部分。

(2)为了能下载到实验箱验证结果,方案二的译码电路部分采用方案一的显示电路。

三、选择器件(1)同步十进制双时钟加减计数器74LS192(以下简称74192)(2)四2输入与非门74LS00(以下简称7400)(3)EP1C12核心板白色按钮(PB0,PB1)(4)EP1C12核心板贴片二极管(LED3)(5)EP1C12核心板数码管(仅两位)四、功能模块(1)25进制减法计数器此部分采用两个74192构成25进制减法计数器,具备置数和清零的功能。

74192为同步十进制双时钟加减计数器,它具有双时钟输入,并具有清零和置数功能。

以下为74192引脚图:LDN为置数端BON为借位数端CLR为清零端A~D置数并行数据输入QA~QD计数数据输出UP为加计数时钟端DN为减计数时钟端下表为74192的逻辑功能表脉冲加到CPU端,则计数器在预置数的基础上进行加法计数,当计数到9(1001),CON端输出进位下降沿跳变脉冲;当LDN=1,CLR=0,UP=1时,如果有时钟脉冲加到DN端,则计数器在预置数的基础上进行减法计数,当计数到0(0000)时,BON端输出借位下降沿跳变脉冲。

由此设计出二十五进制减法计数器,预置数位N=(00100100)=(24),当低位计数器的借位输出端BON输出借位脉冲时,高位计数器才进行减法计数。

当计数到高低位计数器都为0时,高位计数器的借位输出端BON输出借位脉冲,使置数端LDN=0,则计数器完成置数置零,在DN端输入脉冲的作用下,进行下一循环的减法计数。

下图为25进制减法计数器(利用74192)本图是采用将两片十进制计数器串联,后使用整体清零和整体置数的方法,形成25进制减法计数器。

其仿真图为:(2)控制模块控制电路主要是为了实现定时器的启动、直接清零和暂停/连续功能,其中在直接清零时,由控制开关控制74192的清零端,从而使显示器显示零;通过暂停/连续开关从而实现断点定时功能。

电路图如下:通过控制暂停输入管脚(即左下角的管脚)的电平高低来控制计数器输出波形,其工作原理可概括为:当暂停管脚输入为低电平时,G4(两2输入与非门)输出低电平,将G2(即三输入与非门)封锁,计数器没有计数脉冲送入,暂停计数。

当计数器满24个脉冲,高位计数器的BO端输出低电平,一方面将G2封锁,另一方面点亮发光二极管,发出报警信号。

其仿真结果如下:从仿真图可以看出,上面所预期的功能全部实现。

(3)译码显示模块设计此模块是为了人们能更直观的观察到实验结果,以验证自己的猜想。

EDA实验箱的数码显示原理:EP1C12核心板上8个数码管,低8位为7位段控制信号加小数点选取位,高8位为8个数码管com端选取,通过发送不同的总线值来选取数码管。

驱动八位数码管显示电路框图为:以下分段说明各部分功能及连接:1)时钟脉冲计数器源程序为:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; ENTITY div_clk ISPORT(clk_in : IN std_logic;div_out: OUT std_logic);END div_clk;ARCHITECTURE a OF div_clk ISSIGNAL fre_N: integer range 0 to 100000; SIGNAL clk_tmp: std_logic;BEGINdiv_out<=clk_tmp;process(clk_in)beginif falling_edge(clk_in)thenif fre_N>=99999 thenfre_N<=0;clk_tmp<= not clk_tmp;elsefre_N<=fre_N+1;end if;end if;end process;END a;生成模块为:此模块仿真结果如下:此模块主要是实现脉冲计数的功能。

为后面的段位选择器提供脉冲。

(注:上图中因输入脉冲频率太高,呈现出黑色条。

实验箱输入为50MHz。

)2)数据选择器源程序为:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;ENTITY seltime ISPORT(clk1,reset:IN STD_LOGIC;num:IN STD_LOGIC_VECTOR(3 downto 0);numt:in std_logic_vector(3 downto 0);sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);daout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END entity seltime;ARCHITECTURE fun OF seltime ISSIGNAL count:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGINsel<=count;process(clk1,reset)beginif(reset='0')thencount<="000";elsif(clk1'event and clk1='1')thenif(count>="001")thencount<="000";elsecount<=count+1;end if;end if;case count iswhen"000"=>daout<=num(3 downto 0); when"001"=>daout<=numt(3 downto 0); when others=>daout<=null; end case;end process;end fun; 生成的模块为:该模块的仿真结果如下:数据选择模块 seltime 如图示。

此模块输入信号一个是数据选择器的地址码sel[2..0],另一部分是数据信息num[3..0]和numt[3..0]。

地址码sel[2..0]来自时钟脉冲计数器,由地址码sel[2..0]决定输出哪个输入数据。

输出信号为daout[3..0]。

3) 3-8 线译码器源程序:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY decode3_8 ISPORT(SEL:IN std_logic_vector(2 downto 0); Q: OUT std_logic_vector(7 downto 0)); END decode3_8;ARCHITECTURE a OF decode3_8 ISBEGINQ<="11111110" when sel= 0 else "11111101" when sel= 1 else "11111011" when sel= 2 else "11110111" when sel= 3 else "11101111" when sel= 4 else "11011111" when sel= 5 else "11111111";END a;生成的模块为:该模块的仿真图如下:3-8 线译码器模块DECODE3_8 如图示。

DECODE3_8 模块的输入端是A[2..0]接收时钟脉冲计数器模块的输出信号,经过译码后输出信号Q[7..0]分别接八个数码管的阴极Vss7、Vss6、Vss5、Vss4、Vss3、Vss2、Vss1、Vss0,使对应的数码管的阴极为低电平,对应的数码管被点亮。

要显示八位数字,需要八个输出端,所以做成3-8 线译码器。

4)七段译码器源程序为:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY deled ISPORT(num:IN STD_LOGIC_VECTOR(3 DOWNTO 0);led:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END deled;ARCHITECTURE fun OF deled ISBEGINled<="1111110"when num="0000"else"0110000"when num="0001"else"1101101"when num="0010"else"1111001"when num="0011"else"0110011"when num="0100"else"1011011"when num="0101"else"1011111"when num="0110"else"1110000"when num="0111"else"1111111"when num="1000"else"1111011"when num="1001"else"1110111"when num="1010"else"0011111"when num="1011"else"1001110"when num="1100"else"0111101"when num="1101"else"1001111"when num="1110"else"1000111"when num="1111";END fun;生成的模块为:该模块的仿真如下图:七段译码器模块deled 如图示。

相关主题