棋类竞赛计时钟 报告.docx
《棋类竞赛计时钟 报告.docx》由会员分享,可在线阅读,更多相关《棋类竞赛计时钟 报告.docx(23页珍藏版)》请在冰点文库上搜索。
棋类竞赛计时钟报告
目录
一总体功能设计1
1.系统的总体功能介绍1
2.系统总体思路及原理1
3.系统总体框图2
二单元电路设计3
1.控制模块3
2.计时器模块4
3.选择器模块5
4.显示模块6
5.报警模块7
三编程下载7
1.控制器程序8
3.计时器程序9
3.选择器程序15
4.显示器程序15
5.报警器程序17
四总结与体会18
五附录18
六参考文献20
一总体功能设计
1.系统的总体功能介绍
1.该计时钟可分别完成甲乙对规定用时的计时和规定时间用完后的读秒计时。
2.规定甲乙双方各有2小时比赛规定用时,分别设计各方的用时定时器,并用数码管显示各方已用的时、分从0:
00~1:
59计时间隔为1S。
3.2小时规定时间用完后,每方限定在30秒内必须下出一步棋,此时定时器将完成对读秒时间的30S倒计时,并数码管显示此时过程30~00。
若计时到零,则发生警报信号该方超时负。
4.各定时器设置计时暂停/继续键,在规定时间计时时,该键的作用为暂停本方计时,并继续对方计时;在读秒时间计时时,该键的作用为复位本方计时起始点29S,并启动对方定时器。
2.系统总体思路及原理
系统总共分为五大模块:
1.控制模块
规定时间内输入继续\暂停端能暂停其中一方2小时计时器的同时继续另一方的计时;
当甲方或乙方用完规定的2小时后,启用其相应的30秒倒计时;
倒计时结束后,胜负已分,可复位重新开始,进行下一轮比赛。
2.计时器模块
三十秒计时器是一个倒计时计时器,甲乙双方规定时间用尽后的30秒;
二小时计时器是计算甲乙双方所规定的30秒时间。
3.选择模块
使用轮流显示甲乙双方的规定计时时间,其优点是能够在显示管较少的情况中正常计时。
4.显示模块
这是一个动态扫描显示电路,在相对应的显示管上显示八个输入端口的输入的数据。
5.报警模块
在30秒计时器,计时完后,分别采用两种方式(提示灯和警鸣)来进行报警。
3.系统总体框图
系统的总体框图如下所示:
输入
输出输出
二单元电路设计
1.控制模块
控制模块,是整个电路的核心,控制着整个计时的变化过程,其仿真结果如下所示:
图中count2ha是甲方2小时规定时间的进位,count30sa是甲方30秒倒计时的进位,en2ha控制甲方的2小时的规定时间的继续\暂停,en30sa控制甲方30秒计数器的暂停\继续,clr30sa是控制甲方30秒计时起的清零,count2hb是乙方2小时规定时间的进位,count30sb是乙方30秒倒计时的进位,en2hb控制乙方的2小时的规定时间的继续\暂停,en30sb控制乙方30秒计数器的暂停\继续,clr30sb控制乙方30秒计时器的清零。
2.计时器模块
分为三十秒倒计时模块和2小时规定计时模块
三十秒计时器是一个减法计数器,在规定2小时计时完成后进行的最后30秒倒计时,其仿真结果如下所示:
由此可知此模块30秒倒计时miaozhong1为30秒倒计时个位数,miaozhong2为倒计时的十位数,倒计时完成后产生一个进位count30,接入控制器中。
2小时规定计时器则是一个加法计时器,完成规定时间的计时,2其仿真结果如下所示:
由图可看出,此模块所显示的是分和时的计时,fenzhong1为60分钟的个位数,fenzhong2为60分钟的十位数。
时钟为小时数。
2小时后count也产生一个进位接入控制器中。
3.选择器模块
选择器模块是其本质是一个选择型开关,是对甲乙双方进行选择的模块当。
当start为0时,选用甲方,当start为1时,则选择乙方。
其仿真结果如下所示:
输入端口a、b、c、d、e代表着甲方用时情况,分别接入30秒个位、30秒十位、2小时分个位、2小时分十位、2小时时个位。
输入端口f、g、h、i、k代表着乙方用时情况,分别接入30秒个位、30秒十位、2小时分个位、2小时分十位、2小时时个位。
输出端口m30s1,m30s2,Fg,fenzhong,s,choose分别为30秒个位,30秒十位,60分钟个位,60分钟十位,小时位数,选择端口(用显示A,b表示甲乙方)。
4.显示模块
将所需显示的端口接入,采用位动态扫描显示,能更好的体现出甲乙双方比赛记录时间的整个过程。
甲方为‘1010’显示出A,乙方为‘1011’显示出b。
输入端口d0,d1,d3,d4,d5,d7分别接入30秒个位,30秒十位,60分钟个位,60分钟十位,小时位数,选择端口(用显示A,b表示甲乙方)。
5.报警模块
报警模块是甲方或乙方将最后30秒用尽后,提出警报,则代表甲方或乙方比赛失败,其仿真图如下所示:
由图可知,co30sa接入甲方30秒进位,co30sb接入乙方30秒进位,任意一方用尽30秒后会产生警报声,区分甲乙双方的是图中a,b(代表甲乙方)所接入的显示灯不同。
三编程下载
各模块程序清单如下:
1.控制器程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYkongzhiqiIS
PORT
(count2ha,count30sa,count2hb,count30sb:
INSTD_LOGIC;
clrkongzhiqi,s:
INSTD_LOGIC;
en2ha,en30sa,en2hb,en30sb,clr30sa,clr30sb:
OUTSTD_LOGIC);
ENDkongzhiqi;
ARCHITECTUREaOFkongzhiqiIS
BEGIN
PROCESS(s,count2ha)
BEGIN
if(s='0')thenen2ha<='0';
elsif(count2ha='0')then
en2ha<='1';
elseen2ha<='0';
ENDIF;
ENDPROCESS;
PROCESS(s,count2ha,count30sa)
BEGIN
if(count30sa='1')thenen30sa<='0';
elsif(count2ha='1'ands='1')then
en30sa<='1';
elseen30sa<='0';
ENDIF;
ENDPROCESS;
PROCESS(s,count2hb)
BEGIN
if(s='1')thenen2hb<='0';
elsif(count2hb='0')then
en2hb<='1';
elseen2hb<='0';
ENDIF;
ENDPROCESS;
PROCESS(s,count2hb,count30sb)
BEGIN
if(count30sb='1')thenen30sb<='0';
elsif(count2hb='1'ands='0')then
en30sb<='1';
elseen30sb<='0';ENDIF;
ENDPROCESS;
PROCESS(s,clrkongzhiqi)
BEGIN
if(clrkongzhiqi='1')thenclr30sa<='1';
elsif(s='0')then
clr30sa<='1';
elseclr30sa<='0';
ENDIF;
ENDPROCESS;
PROCESS(s,clrkongzhiqi)
BEGIN
if(clrkongzhiqi='1')thenclr30sb<='1';
elsif(s='1')then
clr30sb<='1';
elseclr30sb<='0';
ENDIF;
ENDPROCESS;
enda;
3.计时器程序
30秒计时器程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYsanshimiaoIS
PORT
(clk:
INSTD_LOGIC;
clr,en:
INSTD_LOGIC;
count30:
OUTSTD_LOGIC;
miaozhong1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
miaozhong2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDsanshimiao;
ARCHITECTUREaOFsanshimiaoIS
SIGNALbcd1n:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALvcd10n:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk,clr,en)
BEGIN
if(clr='1')thencount30<='0';
elsif(clk'EVENTANDclk='1')then
if(bcd1n=0andvcd10n=0)then
count30<='1';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(clk,clr)
BEGIN
IF(clr='1')THEN
bcd1n<="1001";
ELSIF(clk'EVENTANDclk='1')THEN
IF(en='1')THEN
IF(bcd1n=0)THEN
bcd1n<="1001";
ELSIF(bcd1n=0andvcd10n=0)THEN
bcd1n<="1001";
ELSE
bcd1n<=bcd1n-1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
miaozhong1<=bcd1n;
miaozhong2<=vcd10n;
PROCESS(clk,clr)
BEGIN
IF(clr='1')THEN
vcd10n<="0010";
ELSIF(clk'EVENTANDclk='1')THEN
IF(en='1')THEN
IF(bcd1n=0ANDvcd10n=0)THEN
vcd10n<="0010";
ELSIF(bcd1n=0)THEN
vcd10n<=vcd10n-1;
ELSE
vcd10n<=vcd10n;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
enda;
2小时计时器程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYerxiaoshiIS
PORT
(clk:
INSTD_LOGIC;
clr:
INSTD_LOGIC;
en:
INSTD_LOGIC;
count:
OUTSTD_LOGIC;
fenzhong1,shizhong1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
fenzhong2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDerxiaoshi;
ARCHITECTUREaOFerxiaoshiIS
SIGNALbcd11n:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALvcd110n:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALbcd21n:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALvcd210n:
STD_LOGIC_VECTOR(3DOWNTO0);SIGNALbcd31n:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALvcd310n:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALco,co1:
STD_LOGIC;
BEGIN
PROCESS(co,clr)
BEGIN
IF(clr='1')THEN
bcd21n<="0000";
ELSIF(co'EVENTANDco='1')THEN
IF(bcd21n=9)THEN
bcd21n<="0000";
ELSE
IF(en='1')THEN
bcd21n<=bcd21n+1;
ELSE
bcd21n<=bcd21n;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(co,clr)
BEGIN
IFclr='1'THEN
vcd210n<="0000";
ELSIF(co'EVENTANDco='1')THEN
IF(bcd21n=9)THEN
IF(vcd210n=5)THEN
vcd210n<="0000";
ELSE
IF(en='1')THEN
vcd210n<=vcd210n+1;
ELSE
vcd210n<=vcd210n;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(co)
BEGIN
if(co'EVENTANDco='1')then
if(bcd21n=9andvcd210n=5)then
co1<='1';
elseco1<='0';
ENDIF;
ENDIF;
ENDPROCESS;
fenzhong1<=bcd21n;
fenzhong2<=vcd210n;
shizhong1<=bcd31n;
PROCESS(clk,clr)
BEGIN
IF(clr='1')THEN
bcd11n<="0000";
ELSIF(clk'EVENTANDclk='1')THEN
IF(bcd11n=9)THEN
bcd11n<="0000";
ELSE
IF(en='1')THEN
bcd11n<=bcd11n+1;
ELSE
bcd11n<=bcd11n;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(clk,clr)
BEGIN
IFclr='1'THEN
vcd110n<="0000";
ELSIF(clk'EVENTANDclk='1')THEN
IF(bcd11n=9)THEN
IF(vcd110n=5)THEN
vcd110n<="0000";
ELSE
IF(en='1')THEN
vcd110n<=vcd110n+1;
ELSE
vcd110n<=vcd110n;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(clk)
BEGIN
if(clk'EVENTANDclk='1')then
if(bcd11n=9andvcd110n=5)then
co<='1';
elseco<='0';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(co1,clr)
BEGIN
IF(clr='1')THEN
bcd31n<="0000";
ELSIF(co1'EVENTANDco1='1')THEN
IF(bcd31n=1)THEN
bcd31n<="0000";
ELSE
IF(en='1')THEN
bcd31n<=bcd31n+1;
ELSE
bcd31n<=bcd31n;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(clk)
BEGIN
if(clk'EVENTANDclk='1')THEN
if(bcd21n=9andvcd210n=5andbcd31n=1andbcd11n=9andvcd110n=5)then
count<='1';
elsif(clr='1')thencount<='0';
ENDIF;
endif;
ENDPROCESS;
enda;
3.选择器程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYchooseqiIS
PORT
(start:
INSTD_LOGIC;
a,b,c,d,e:
inSTD_LOGIC_VECTOR(3DOWNTO0);
f,g,h,i,j:
inSTD_LOGIC_VECTOR(3DOWNTO0);
30s1,30s2,Fg,fengzhong,S,choose:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDchooseqi;
ARCHITECTUREaOFchooseqiIS
BEGIN
PROCESS(start,a,b,c,d,e,f,g,h,i,j)
BEGIN
if(start='1')then
30s1<=a;30s2<=b;Fg<=c;fengzhong<=d;S<=e;choose<="1010";
else30s1<=f;30s2<=g;Fg<=h;fengzhong<=i;S<=j;choose<="1011";
endif;
ENDPROCESS;
enda;
4.显示器程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYxianshiqiIS
PORT(CLK:
INSTD_LOGIC;
d0,d1,d3,d4,d5,d7:
inSTD_LOGIC_VECTOR(3DOWNTO0);
SG:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);--段控制信号输出
BT:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));--位控制信号输出
END;
ARCHITECTUREoneOFxianshiqiIS
SIGNALCNT8:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALA:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
P1:
PROCESS(CNT8)
BEGIN
CASECNT8IS
WHEN"000"=>BT<="00000001";A<=d0;
WHEN"001"=>BT<="00000010";A<=d1;
WHEN"010"=>BT<="00000100";A<="1101";
WHEN"011"=>BT<="00001000";A<=d3;
WHEN"100"=>BT<="00010000";A<=d4;
WHEN"101"=>BT<="00100000";A<="1100";
when"110"=>BT<="01000000";A<=d5;
WHEN"111"=>BT<="10000000";A<=d7;
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESSP1;
P2:
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'
THEN
CNT8<=CNT8+1;
ENDIF;
ENDPROCESSP2;
P3:
PROCESS(A)
BEGIN
CASEAIS
WHEN"0000"=>SG<="00111111";WHEN"0001"=>SG<="00000110";
WHEN"0010"=>SG<="01011011";WHEN"0011"=>SG<="01001111";
WHEN"0100"=>SG<="01100110";WHEN"0101"=>SG<="01101101";
WHEN"0110"=>SG<="01111101";WHEN"0111"=>SG<="00000111";
WHEN"1000"=>SG<="01111111";WHEN"1001"=>SG<="01101111";
WHEN"1010"=>SG<="01110111";WHEN"1011"=>SG<="01111100";
WHEN"1100"=>SG<="01000000";WHEN"1101"=>SG<="00000000";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESSP3;
END;
5.报警器程序
libraryieee;
useieee.std_lo