篮球比赛24秒计时器的设计
- 格式:doc
- 大小:353.73 KB
- 文档页数:15
赣南师院
物理与电子信息学院
数字电路课程设计报告书
姓名:
班级:电子信息工程09级
学号:
时间: 2011年 6 月 15日
- 3 - 论文题目 篮球比赛24秒计时器的设计
课程论文
要 求
在篮球比赛中,规定了球员的持球时间不能超过24秒,否则就违例了。本课程设计的“篮球比赛24秒计时器”,可用于篮球比赛中,用于对球员持球时间24秒限制。一旦球员的持球时间超过了24秒,它自动的报警从而判定此球员的违例。
具体要求如下:
1、设计一个篮球比赛24秒计时器,具备显示24秒计时功能;
2、计时器为递减工作,时间间隔为1S;
3、递减到零时发光报警;
4、设置外部开关,控制计时器的启动、暂停。
设计过程 一、 设计方案
1、硬件实验:本次试验由秒脉冲发生器、计数器、译码与显示电路、报警电路和控制电路(辅助时序控制电路)等五个部分组成,本设计利用555作为振荡电路,74LS161实现十分频,由74LSl92、74LS48和七段共阴LED数码管构成计时电路,具有计时器启动、暂停、连续计时和报警功能,绘制好电路图,焊好电路板。
2、软件实验:在QUARTUSII软件中,运用VHDL语言编写程序,其中包括计数器,计时器,控制部分以及七段显示码译码器部分,再利用仿真检测结果,最后到实验室下载记录结果,实现功能。
二、设计思路
在NBA篮球比赛中有一个24秒进攻规则,即从获取球权到投篮击中篮板、篮框、命中或投篮被侵犯,其有效时间合计不能超过24秒,否则被判违例,将失去球权。在此过程中,设置24秒、启动倒计时、暂停倒计时或者中途终止24秒(即球权归对方)均由裁判控制。
1、 计数器和控制电路是系统的主要部分,计数器完成24秒计时功能,而
控制电路具有直接控制计数器的启动计数、暂停/连接计数、译码显示电路的显示和灭灯等功能。
本设计采用555作为振荡电路,由74LSl92、74LS48和七段共阴LED数码管构成计时电路,具有计时器、启动、暂停、连续计时和报警功能。该电路制作、调试简单,采用普通器件,一装即成
- 4 - 计数器计数器由两片74LS192同步十进制可逆计数器构成。
利用减计数RD=0,LD=0,CPD=1,实现计数器按8421码递减进行减计数。
2、脉冲信号经过递减计数器、译码器、再由数码管显示出来,中间包括控制电路
因为实验要求是计时器递减,按照每秒一次的规律,所以应该设计一个千分频,CLK=1KHZ,分频后CLK1=1HZ,
再设计两个减法计数器,一个为2进制,一个为4进制,十位为2进制
个位为4进制,要求是个位为0,十位为0的时候显示灯亮,并且个位变为2,十位变为4,然后再依次递减。
设计控制端,使能控制端en,en=1时,继续计数,en=0时,计数不变,起到一个暂停的作用,清零端cln,cln=1时计数清零,cl=0时可以计数,置数端ldn,ldn=1时,计数不变,ldn=0时,可以置数0~9
设计一个译码器,编写一个七段显示码,由一个简单的计数器控制循环,一个进程选定两个数码显示管显示数据。
三、设计过程
1、硬件电路实验
1.1 电路设计分析
555定时器用来产生周期为1秒的脉冲信号,供计数器进行倒计数 ,以便将计数器输出的数据传送给译码器,译码器再译码驱动七段数码管显示输出,控制电路实现“篮球竞赛30s” 的暂停/继续工作,清零复位,置数/工作;报警电路实现30s计数器减至0秒时报警电路发出光警报,由此分析得出30秒计时器的总体参考方案框图如图1-1所示。它包括秒脉冲发生器、计数器、译码显示电路、报警电路和控制电路等五个模块组成。其中计数器和控制电路是系统的主要模块。
译码显示
控制电路 报警电路路 外部操作开关 秒脉冲发生计数器
- 5 - 图1-1 24秒计时器系统设计框图
1.2 单元电路设计
1.2.1秒脉冲发生器
用555与74LS161集成电路组成多谐振荡电路为系统提供时钟秒脉冲。555定时器应用为多谐振荡电路时,当电源接通Vcc通过电阻R1、R2向电容C充电,其上电压按指数规律上升,当u上升至2/3Vcc,会使比较器C1输出翻转,输出电压为零,同时放电管T导通,电容C通过R2放电;当电容电压下降到1/3Vcc,比较器C2工作输出电压变为高电平,C放电终止,Vcc通过R1、R2又开始充电;周而复始,形成振荡。则其振荡周期与充放电时间有关,也就是与外接元件有关,不受电源电压变化影响。
公式计算:
T1=(R1+R2)Cln2;
T2=R2Cln2;
振荡周期T = T1+T2=0.7 ( R1 + 2R2) C =0.1 (s)
若取C=10μF,结合实际选取电阻为R1=5.1K,R2=4.7K
再通过74LS161计数产生秒脉冲
图1-2 555多谐振荡电路图
1.2.2 计数电路
计数电路选用两片中规模集成电路74LS192进行设计,74LS192是十进
- 6 - 制计数器,具有“异步清零”和“异步置数”功能,且有进位和借位输出端。两片74LS192构成预置数的三十进制递减计数器,计数器十位接成三进制,计数器个位接成十进制,置数端A、B、C、D通过开关接高低电平,若接高电平可进行其他置数;此计数器预置数为(0001 1000)=(24)10,只有当低位端发出错位脉冲,高位计数器才做减计数。1片74LS192构成1秒减计数电路(即个位)。74LS192的引脚图和功能表如图所示。它的计数原理是:使加计数脉冲信号引脚CPu=1,计数脉冲加入个位74LS192引脚CPD脚,当减计数到零时,个位 74LS192的CO端发出错位脉冲,使十位计数器减计数,当高、低位计数器处于全零时,CPD(DWN)端的输入时钟脉冲作用下,计数器再次进入下次循环减计数。
图1-3 74LS192引脚图
表1 74LS192功能表
输出 输入
MR LD CPU CPD P3 P2 P1 P0 Q3 Q2 Q1 Q0
1 X X X X X X X 0 0 0 0
0 0 X X d c b a d c b a
0 1 ↑ 1 X X X X 加计数
0 1 1 ↓ X X X X 减计数
1.2.3 译码显示电路
此模块主要是由74LS48译码器和共阴极七段LED显示器组成,通过计数器加到译码器,从而实现共阴极七段LED显示器从30递减到零的计数显示功能。
1、74LS48是七段显示译码器,其管脚图如下图2-3所示。现将各管脚功能介绍一下:
- 7 - A、B、C、D是BCD码的输入端;
a,b,c,d,e,f,g是输出端;
试灯输入端LT:低电平有效。当LT=0时,
数码管的七段应全亮,与输入的译码信号无关。本输入端用于测试数码管的好坏;
动态灭零输入端RBI:低电平有效。当LT=1、RBI=0、且译码输入为0时,该位输出不显示,即0字被熄灭;当译码输入不全为0时,该位正常显示。本输入端用于消隐无效的0。如数据0034.50可显示为34.5;
灭灯输入/动态灭零输出端RBO:这是一个特殊的端钮,有时用作输入,有时用作输出。当RBO作为输入使用,且RBO=0时,数码管七段全灭,与译码输入无关。当RBO作为输出使用时,受控于LT和RBI:当LT=1且RBI=0时,RBO=0;其它情况下RBO=1。本端钮主要用于显示多位数字时,多个译码器之间的连接。本设计将RBI、LT、RBO都置高电平。
图1-4 74LS48管脚图
2、共阴极七段LED显示器是较常用的显示数码管,但在使用时要注意的是:
看清楚自己用的数码管是共阴极还是共阳极的,最好在使用前用万电用表测一下它的极性,其管脚图如下图2-4所示,如果为共阴极的,其管脚COM端接地;如果为共阳极的,起管脚COM段要接高电平。
- 8 -
图1-5 共阴极七段LED显示器管脚图
1.2.4 报警电路
报警电路,经过74LS00的一个高电平促使发出光报警,当复位时警报停止。电路图2-5所示。
图1-6 报警电路
1.2.5 控制电路
控制电路是24S倒计时设计的核心,电路如图2-6。
当复位开关闭合时,触发器置低电平,送至74LS192的LD端和UP端,计数器的LD=0,计数器预置数,反之,计数器启动处于计数工作状态。
图(a)开关SW1控制计数器的暂停/计数。74LS11输出端接74LS192(2)的DWN端。当SW1下合时,触发器输出低电平,与十位74LS192(1)的13脚BO端输出的高电平和555定时器输出的时钟脉冲一起通过2与门,使得2与门输出低电平,送至74LS192(2)的4脚DWN端,令计数器停止工作,显示器上保持原来的数不变;当SW1上合时,74LS00门电路打开,脉冲信号送入计数器的减脉冲输入端,计数器继续累计计数。
- 9 -
图2-6 暂停/继续工作电路
1.2.6 开关设置
为了方便控制操作,灵活更改预置数范围,本设计使用了几个开关,其实际效用见表2所示。表2开关设置一览表开关名称实际效用置数/启动切换开关,清零/工作切换开关,暂停/继续切换开关,十位置数切换开关和光电报警停止开关。
表2 开关设置一览表
开关名称 实际效用
复位开关 置数/启动切换开关
SW1 暂停/继续切换开关
1.3 整体电路图
根据以上各个模块分析得出整体电路图,如图1-10所示。
- 10 - 图1-10
实验仿真结果如下:
通过Proteus 7.7的仿真,可以很好的看到从24到00的计数,通过SW1可控制计数的暂停与继续,复位开关控制启动与复位,当计数到00时,发光二极管发光报警。
2、软件实验原理
用VHDL语言编写程序,能实现倒计时计数,暂停,清零等功能,其中要编好七段显示管的程序,使其能在实验箱上正常显示。
library ieee ;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity djs is
port (clk,cln,en,ldn:in std_logic;
d:in std_logic_vector(3 downto 0);
display:out std_logic_vector(6 downto 0);
sel:out std_logic_vector (1 downto 0);
co:out std_logic);
end;
architecture one of djs is
signal cqs :std_logic_vector(3 downto 0):="0010";
signal cqg :std_logic_vector(3 downto 0):="0100";