
篮球记分牌
反稀释条款-生女儿的祝福语
2023年2月20日发(作者:宝贝成长记录)一设计思路分析
篮球比赛计时记分系统程序多而且复杂,所以用图形设计方法来设计。先把每一模块的程序写好,
然后生成图形文件,最后新建一个顶层图形文件,把各模块联结起来。包括的模块有分频模块、计时模
块、记分模块、脉冲产生模块、滤波模块、选择模块、声光显示模块,显示模块及消抖模块等。
程序总体框图为:
二单元电路设计
2.112进制减法计数器
这个计数器用来表示每一节比赛的分钟位,它的时钟脉冲应由前一个60进制计数器
的CO提供。具备复位功能。可以将12进制改为任意进制的减法计数器。当计数结束后,
计数器不再计数。
当CO有效时进行减法计数,当计数器减到0之,SO输出一个高电平。EN等于1
显示电路
5
进
制
计
时
60
进
制
计
时
24
进
制
计
时
99
进
制
计
分
99
进
制
计
分
数据选择器
赛
节
显
示
电
路
时钟脉冲
2
时计数器复位,当C05等于1时实现比赛加时操作。
生成元件图:
CO
C05
EN
GE[3..0]
SHI[3..0]
SO
C12
inst
仿真波形图:
2.260进制减法计数器
这个计数器用来表示每一节比赛的秒钟位。要求在完成12个60进制的计数后,计
数器不再计数。具备清零、暂停以及复位的功能。
当CLK有效时进行减法计数,CLR等于1时整个计数器清零,EN等于1时计数器
复位,PAUSE等于1时计数器暂停计数,。当计数器减到0之,CO输出一个高电平。
生成元件图:
3
CLK
PAUSE
SO
EN
CLR
GE[3..0]
SHI[3..0]
CO
OUT1
C60
inst
仿真波形图:
2.399进制可逆计数器
这个计数器用来表示比赛球队分别的得分。当S出现上升沿时开始记分,CLR等于
1时整个计数器清零。
生成元件图:
S
CLR
GE[3..0]
SHI[3..0]
SCORE
inst
仿真波形如下:
是
是
是
4
2.61对2数据选择器
由于比赛两方的比分不尽相同,所以用一个数据选择器来正确的给某一方加分。
当按下P4时,给A队加分,A的输出为CO;
当再次按下P4时,给B队加分,B的输出为CO。
程序流程图:
生成元件图:
CO
P4
A
B
LED_A
LED_B
SE_2
inst1
仿真波形如下:
5
2.7脉冲产生器
由于比赛的得分分别为1分,2分,3分。所以对应的,当得分为1时,应
当产生1个脉冲,当得分为2时,产生2个脉冲,以此类推。
在输入信号CLK存在的情况下,当P1为高电平,则CO产生1个脉冲信
号。P2为高电平,产生2个脉冲信号。P3为高电平,产生3个脉冲信号。
生成元件图
CLK
P1
P2
P3
CO
POINT
inst
仿真波形如下:
2.8滤波模块
从脉冲产生器仿真的波形图看出,输出脉冲会有毛刺,所以加一个滤波模
块,用以消除毛刺。
如果高电平持续时间大于某一数值,则判定为是一个脉冲,否则判定为毛
刺。
LIBRARYIEEE;
6
_LOGIC_;
_LOGIC_;
ENTITYLBIS
PORT(CLK_50MHZ:INSTD_LOGIC;
OUT2:OUTSTD_LOGIC;
CO:INSTD_LOGIC);
END;
ARCHITECTUREONEOFLBIS
SIGNALQQ:INTEGERRANGE25000000DOWNTO0;
BEGIN
PROCESS(CLK_50MHZ)
BEGIN
IFCLK_50MHZ'EVENTANDCLK_50MHZ='1'THEN
IFCO='1'THEN
QQ<=QQ+1;
ELSE
QQ<=0;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(QQ)
BEGIN
IFQQ>125500THEN
7
OUT2<='1';
ELSE
OUT2<='0';
ENDIF;
ENDPROCESS;
END;
生成元件图:
CLK_50MHZ
CO
OUT2
LB
inst
2.9声光显示模块
上半场计时中,上半场指示灯亮,时间到,输出3s的声光提示,下半
场指示灯亮,时间到,输出5s的声光提示。
2.9.1上下半场指示
程序流程图:
生成元件图:
CO
SO
RST
EN
SHANG
XIA
LED_XIA
LED_SHANG
LED_SHOW
inst
8
仿真波形图:
2.9.2上半场声光提示
SHANG
CLK_5MS
BOOM
LED
SHANG
inst1
2.9.3下半声声光提示
XIA
CLK_5MS
BOOM
LED
XIA
inst
9
2.10显示模块
由于试验箱采用动态显示,所以需要将BCD码转换成段码和位码。
D0到D7分别表示8个LED管。
程序可以表示为:
LIBRARYIEEE;
_LOGIC_;
_LOGIC_;
ENTITYDISPIS
PORT(CLK:INSTD_LOGIC;
m_ge,m_shi,f_ge,f_shi,a_ge,a_shi,b_ge,b_shi:INSTD_LOGIC_VECTOR(3
DOWNTO0);
sel:OUTSTD_LOGIC_VECTOR(7DOWNTO0);
LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));
END;
ARCHITECTUREONEOFDISPIS
SIGNALQQ:INTEGERRANGE25000000DOWNTO0;
SIGNALCLK2:STD_LOGIC;
SIGNALQ:STD_LOGIC_VECTOR(3DOWNTO0);
signalsel1:STD_LOGIC_VECTOR(2DOWNTO0);
10
BEGIN
PROCESS(CLK)--数码管扫描分频
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFQQ<25000THEN
QQ<=QQ+1;
ELSE
QQ<=0;
CLK2<=NOTCLK2;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CLK2)--扫描数码管选择
BEGIN
IFCLK2'EVENTANDCLK2='1'THEN
sel1<=sel1+1;
ENDIF;
ENDPROCESS;
PROCESS(sel1)--Q值选择,数码管显示选择
BEGIN
CASEsel1IS
WHEN"000"=>Q<=m_ge;sel<="00000001";
WHEN"001"=>Q<=m_shi;sel<="00000010";
WHEN"010"=>Q<=f_ge;sel<="00000100";
WHEN"011"=>Q<=f_shi;sel<="00001000";
11
WHEN"100"=>Q<=a_ge;sel<="00010000";
WHEN"101"=>Q<=a_shi;sel<="00100000";
WHEN"110"=>Q<=b_ge;sel<="01000000";
WHEN"111"=>Q<=b_shi;sel<="10000000";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
PROCESS(Q)--数码管显示
BEGIN
CASEQIS
WHEN"0000"=>LED7S<="1000000";
WHEN"0001"=>LED7S<="1111001";
WHEN"0010"=>LED7S<="0100100";
WHEN"0011"=>LED7S<="0110000";
WHEN"0100"=>LED7S<="0011001";
WHEN"0101"=>LED7S<="0010010";
WHEN"0110"=>LED7S<="0000010";
WHEN"0111"=>LED7S<="1111000";
WHEN"1000"=>LED7S<="0000000";
WHEN"1001"=>LED7S<="0010000";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCES