当前位置:首页 » 打游戏机 » 拔河游戏机论文
扩展阅读
天成解说一个人的游戏 2021-03-16 21:51:02
打游戏什么牌子显卡好 2021-03-16 21:51:00

拔河游戏机论文

发布时间: 2021-01-21 13:25:34

㈠ EDA 课程设计 ——拔河游戏机

一、总体设计思想
电子拔河游戏机是一种能容纳甲乙双方参赛游戏电路。由一排发光二极管表示拔河的“电子绳”。由甲乙双方通过按纽开关使发光二极管向一方的终点延伸,当延伸到某方的最后一个发光二极管时, 则该方获胜,连续比赛多局以定胜负。

1.基本原理
本电路要求使用9个发光二极管,开机后只有中间一个发亮,此即拔河的中心点。游戏双方各持一个按钮,迅速地、不断地按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按一次,亮点移动一次。亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。最后用数码管显示获胜者的盘数。
由设计内容可知,首先需要一个十进制的计数器,用于对双方按钮的次数计数,并通过译码器显示在数码管上。设计要求用50MHz的频率,而设计用到的是1K Hz的频率,所以要设计一个程序进行分频。其次,显视控制部分设计要求在发光二极管上显示游戏状态,双方每按十次,亮点向先按十次移动一次,对脉冲进行计数,每十次移一位。需接入一个清零端 ,用于复位。再次,运用VHDL程序语言进行各个模块的程序编写,控制电路的正常运行。最后,将以上程序组装起来,就可得到所需要的拔河游戏机
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity bahe is
port (a,b,rst,clk:in std_logic;
sg,led:out std_logic_vector(8 downto 0);
bt:out std_logic_vector(7 downto 0));
end bahe;
----------------------------------
architecture one of bahe is
component cnt10
port (clk,rst,en:std_logic;
cout:out std_logic;
cq:out std_logic_vector(3 downto 0));
end component;
component scan
port (clk :in std_logic;
a1, a2,a3,b1,b2,b3:in std_logic_vector(3 downto 0);
sg:out std_logic_vector(8 downto 0);
bt: out std_logic_vector(7 downto 0));
end component;
component lmov
port (kl ,kr:in std_logic_vector(3 downto 0) ;
led:out std_logic_vector(8 downto 0);
en : out std_logic;
rst:in std_logic);
end component;
signal e,f,ca1,ca2,cb1,cb2:std_logic;
signal cqa1,cqa2,cqa3,cqb1,cqb2,cqb3:std_logic_vector(3 downto 0);
begin
u1: cnt10 port map (en=>e,rst=>rst,clk=>a,cout=>ca1,cq=>cqa1);
u2: cnt10 port map (en=>e,rst=>rst,clk=>ca1,cout=>ca2,cq=>cqa2);
u3: cnt10 port map (en=>e,rst=>rst,clk=>ca2,cq=>cqa3);
u4: cnt10 port map (en=>e,rst=>rst,clk=>b,cout=>cb1,cq=>cqb1);
u5: cnt10 port map (en=>e,rst=>rst,clk=>cb1,cout=>cb2,cq=>cqb2);
u6: cnt10 port map (en=>e,rst=>rst,clk=>cb2,cq=>cqb3);
u7: scan port map (a1=>cqa1,a2=>cqa2,a3=>cqa3,b1=>cqb1,
b2=>cqb2,b3=>cqb3,clk=>clk,sg=>sg,bt=>bt);
u8:lmov port map (en=>e,kl=>cqa2,kr=>cqb2,rst=>rst,led=>led);
end architecture one;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt10 is
port(clk,rst,en:std_logic;
cout:out std_logic;
cq:out std_logic_vector(3 downto 0));
end;
architecture one of cnt10 is
begin
process(clk,rst,en)
variable cqi:std_logic_vector(3 downto 0);
begin
if rst='1' then
cqi:=(others=>'0');
elsif clk'event and clk='1' then
if en='1' then
if cqi<9 then cqi:=cqi+1;
else cqi :=(others=>'0');
end if ;
end if;
end if;
if c qi=9 then cout<='0' ;
else cout<='1';
end if;
cq<=cqi;
end process;
end;
电路的VHDL程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity scan is
port (clk :in std_logic;
a1,a2,a3,b1,b2,b3:in std_logic_vector(3 downto 0);
sg:out std_logic_vector(8 downto 0);
bt: out std_logic_vector(7 downto 0));
end;
architecture one of scan is
signal cnt4:std_logic_vector(2 downto 0);
signal a:std_logic_vector(3 downto 0);
signal clk1:std_logic;
begin
p1:process(cnt4)
begin
case cnt4 is
when "000"=>bt<="10000000";a<=a1;
when "001"=>bt<="01000000";a<=a2;
when "010"=>bt<="00100000";a<=a3;
when "011"=>bt<="00000100";a<=b1;
when "100"=>bt<="00000010";a<=b2;
when "101"=>bt<="00000001";a<=b3;
when others=>bt<="00000000";
end case ;
end process p1;
---------------------------------
p2:process (clk)
variable ct:integer range 0 to 50000;
begin
if clk'event and clk='1' then --1000HZ
if ct<49999 then
ct:=ct+1;
clk1<='0';
else
ct:=0;
clk1<='1';
end if;
end if;
end process p2;
process(clk1)
begin
if clk1'event an d clk1='1' then
if cnt4<5 then
cnt4<=cnt4+1;
else
cnt4<="000";
end if;
end if;
end process;
------------------------------------
process (a)
begin
case a is
when "0000"=>sg<="100000000";
when "0001"=>sg<="111110001";
when "0010"=>sg<="001001000";
when "0011"=>sg<="001100000";
when "0100"=>sg<="000110010";
when "0101"=>sg<="000100100";
when "0110"=>sg<="000000100";
when "0111"=>sg<="111110000";
when "1000"=>sg<="000000000";
when "1001"=>sg<="100011111";
when "1010"=>sg<="000100100";
when "1011"=>sg<="000011000";
when "1100"=>sg<="010001100";
when "1101"=>sg<="001001000";
when "1110"=>sg<="001000000";
when "1111"=>sg<="000011111";
when others=>null;
end case ;
end process;
end;
⑸ 胜负显示
将双方终端二极管正极经非门后的输出分别接到二个CC4518计数器的EN端,CC4518的两组4位BCD码分别接到实验装置的两组译码显示器的A、B、C、D插口处。当一方取胜时,该方终端二极管发亮,产生一个上升沿,使相应的计数器进行加一计数,于是就得到了双方取胜次数的显示,若一位数不够,则进行二位数的级联。
⑹ 复位
其VHDL程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity lmov is
port (kl ,kr:in std_logic_vector(3 downto 0) ;
led:out std_logic_vector(8 downto 0);
en : out std_logic;
rst:in std_logic);
end ;
architecture one of lmov is
begin
process(rst,kl,kr)
begin
if rst='1' then led<="111101111";en<='1';
elsif kl-kr=1 then led<="111011111";en<='1';
elsif kl-kr=2 then led<="110111111";en<='1';
elsif kl-kr=3 then led<="101111111";en<='1';
elsif kl-kr=4 then led<="011111111";en<='0';
elsif kr-kl=1 then led<="111110111";en<='1';
elsif kr-kl=2 then led<="111111011";en<='1' ;
elsif kr-kl=3 then led<="111111101";en<='1';
elsif kl-kr=4 then led<="111111110";en<='0';
elsif kr-kl=0 then led<="111101111";en<='1';
else null;
end if;
end process;
end;

㈡ EDA 课程设计拔河游戏机

一、总体设计思想

电子拔河游戏机是一种能容纳甲乙双方参赛游戏电路。由一排发光二极管表示拔河的“电子绳”。由甲乙双方通过按纽开关使发光二极管向一方的终点延伸,当延伸到某方的最后一个发光二极管时,则该方获胜,连续比赛多局以定胜负。

1.基本原理

本电路要求使用9个发光二极管,开机后只有中间一个发亮,此即拔河的中心点。游戏双方各持一个按钮,迅速地、不断地按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按一次,亮点移动一次。亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。最后用数码管显示获胜者的盘数。

由设计内容可知,首先需要一个十进制的计数器,用于对双方按钮的次数计数,并通过译码器显示在数码管上。设计要求用50MHz的频率,而设计用到的是1KHz的频率,所以要设计一个程序进行分频。其次,显视控制部分设计要求在发光二极管上显示游戏状态,双方每按十次,亮点向先按十次移动一次,对脉冲进行计数,每十次移一位。需接入一个清零端,用于复位。再次,运用VHDL程序语言进行各个模块的程序编写,控制电路的正常运行。最后,将以上程序组装起来,就可得到所需要的拔河游戏机

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitybaheis

port(a,b,rst,clk:instd_logic;

sg,led:outstd_logic_vector(8downto0);

bt:outstd_logic_vector(7downto0));

endbahe;

----------------------------------

architectureoneofbaheis

componentcnt10

port(clk,rst,en:std_logic;

cout:outstd_logic;

cq:outstd_logic_vector(3downto0));

endcomponent;

componentscan

port(clk:instd_logic;

a1,a2,a3,b1,b2,b3:instd_logic_vector(3downto0);

sg:outstd_logic_vector(8downto0);

bt:outstd_logic_vector(7downto0));

endcomponent;

componentlmov

port(kl,kr:instd_logic_vector(3downto0);

led:outstd_logic_vector(8downto0);

en:outstd_logic;

rst:instd_logic);

endcomponent;

signale,f,ca1,ca2,cb1,cb2:std_logic;

signalcqa1,cqa2,cqa3,cqb1,cqb2,cqb3:std_logic_vector(3downto0);

begin

u1:cnt10portmap(en=>e,rst=>rst,clk=>a,cout=>ca1,cq=>cqa1);

u2:cnt10portmap(en=>e,rst=>rst,clk=>ca1,cout=>ca2,cq=>cqa2);

u3:cnt10portmap(en=>e,rst=>rst,clk=>ca2,cq=>cqa3);

u4:cnt10portmap(en=>e,rst=>rst,clk=>b,cout=>cb1,cq=>cqb1);

u5:cnt10portmap(en=>e,rst=>rst,clk=>cb1,cout=>cb2,cq=>cqb2);

u6:cnt10portmap(en=>e,rst=>rst,clk=>cb2,cq=>cqb3);

u7:scanportmap(a1=>cqa1,a2=>cqa2,a3=>cqa3,b1=>cqb1,

b2=>cqb2,b3=>cqb3,clk=>clk,sg=>sg,bt=>bt);

u8:lmovportmap(en=>e,kl=>cqa2,kr=>cqb2,rst=>rst,led=>led);

endarchitectureone;

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt10is

port(clk,rst,en:std_logic;

cout:outstd_logic;

cq:outstd_logic_vector(3downto0));

end;

architectureoneofcnt10is

begin

process(clk,rst,en)

variablecqi:std_logic_vector(3downto0);

begin

ifrst='1'then

cqi:=(others=>'0');

elsifclk'eventandclk='1'then

ifen='1'then

ifcqi<9thencqi:=cqi+1;

elsecqi:=(others=>'0');

endif;

endif;

endif;

ifcqi=9thencout<='0';

elsecout<='1';

endif;

cq<=cqi;

endprocess;

end;

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityscanis

port(clk:instd_logic;

a1,a2,a3,b1,b2,b3:instd_logic_vector(3downto0);

sg:outstd_logic_vector(8downto0);

bt:outstd_logic_vector(7downto0));

end;

architectureoneofscanis

signalcnt4:std_logic_vector(2downto0);

signala:std_logic_vector(3downto0);

signalclk1:std_logic;

begin

p1:process(cnt4)

begin

casecnt4is

when"000"=>bt<="10000000";a<=a1;

when"001"=>bt<="01000000";a<=a2;

when"010"=>bt<="00100000";a<=a3;

when"011"=>bt<="00000100";a<=b1;

when"100"=>bt<="00000010";a<=b2;

when"101"=>bt<="00000001";a<=b3;

whenothers=>bt<="00000000";

endcase;

endprocessp1;

---------------------------------

p2:process(clk)

variablect:integerrange0to50000;

begin

ifclk'eventandclk='1'then--1000HZ

ifct<49999then

ct:=ct+1;

clk1<='0';

else

ct:=0;

clk1<='1';

endif;

endif;

endprocessp2;

process(clk1)

begin

ifclk1'eventandclk1='1'then

ifcnt4<5then

cnt4<=cnt4+1;

else

cnt4<="000";

endif;

endif;

endprocess;

------------------------------------

process(a)

begin

caseais

when"0000"=>sg<="100000000";

when"0001"=>sg<="111110001";

when"0010"=>sg<="001001000";

when"0011"=>sg<="001100000";

when"0100"=>sg<="000110010";

when"0101"=>sg<="000100100";

when"0110"=>sg<="000000100";

when"0111"=>sg<="111110000";

when"1000"=>sg<="000000000";

when"1001"=>sg<="100011111";

when"1010"=>sg<="000100100";

when"1011"=>sg<="000011000";

when"1100"=>sg<="010001100";

when"1101"=>sg<="001001000";

when"1110"=>sg<="001000000";

when"1111"=>sg<="000011111";

whenothers=>null;

endcase;

endprocess;

end;

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitylmovis

port(kl,kr:instd_logic_vector(3downto0);

led:outstd_logic_vector(8downto0);

en:outstd_logic;

rst:instd_logic);

end;

architectureoneoflmovis

begin

process(rst,kl,kr)

begin

ifrst='1'thenled<="111101111";en<='1';

elsifkl-kr=1thenled<="111011111";en<='1';

elsifkl-kr=2thenled<="110111111";en<='1';

elsifkl-kr=3thenled<="101111111";en<='1';

elsifkl-kr=4thenled<="011111111";en<='0';

elsifkr-kl=1thenled<="111110111";en<='1';

elsifkr-kl=2thenled<="111111011";en<='1';

elsifkr-kl=3thenled<="111111101";en<='1';

elsifkl-kr=4thenled<="111111110";en<='0';

elsifkr-kl=0thenled<="111101111";en<='1';

elsenull;

endif;

endprocess;

end;

㈢ 电子技术课程设计 拔河游戏机 谁能给个做好的WORD文档啊

一、设计任务分析:
数字电子技术课程设计是数字电子技术基础课程的实践性教学环节,是为了理论结合实际的电子基础知识,验证,巩固和消化电子技术基本知识,综合应用数字电子技术解决生产第一线的实际问题,提高基本的专业动手能力,进一步培养分析问题和解决问题的能力,以后更好的为社会服务。
设计主要内容及要求 :
1、设计一个模拟拔河游戏比赛的逻辑电路。
2、电路使用15个发光二极管,开机后只有在拔河绳子中间的发光二极管亮。
3、比赛双方各持一个按钮,快速不断地按动按钮,产生脉冲,谁按得快,发光的二极管就向谁的方向移动,每按一次,发光二极管移动一位。
4、亮的发光二极管移到任一方的终点时,该方就获胜,此后双方的按钮都应无作用,状态保持,只有当栽判按动复位后,在拔河绳子中间的发光二极管重新亮。
5、用七段数码管显示双方的获胜盘数。
二、实验设计思路
基本要求如下:
(1)比赛开始时,由裁判下达命令后,甲乙双方才能输入信号,否则,由于电路具有自锁功能,使输入信号无效。
(2)“电子绳”到少由15个LED管构成, 裁判下达“开始比赛”的命令后,位于“电子绳”中点的LED点亮。甲乙双方通过按键输入信号,使发亮的LED管向自己一方移动,并阻止其向对方延伸。当从中点至自己一方终点的LED管全部点亮时,表示比赛结束。这时,电路自锁,保持当前状态不变,除非由裁判使电路复位。
三、总体设计方案:
3.1、电路设计原理
拔河游戏机需用15个(或9个)发光二极管排列成一行,开机后只有中间一个点亮,以此作为拔河的中心线,游戏双方各持一个按键,迅速地、不断地按动产生脉冲,谁按得快,亮点向谁方向移动,每按一次,亮点移动一次。移到任一方终端二极管点亮,这一方就得胜,此时双方按键均无作用,输出保持,只有经复位后才使亮点恢复到中心线。
显示器显示胜者的盘数。
.实验电路如下:
原理:
可逆计数器74LS193原始状态输出4位二进制数0000,经译码器输出使中间的一只电平指示灯点亮。当按动A、B两个按键时,分别产生两个脉冲信号,经整形后分别加到可逆计数器上,可逆计数器输出的代码经译码器译码后驱动电平指示灯点亮并产生位移,当亮点移到任何一方终端后,由于控制电路的作用,使这一状态被锁定,而对输入脉冲不起作用。如按动复位键,亮点又回到中点位置,比赛又可重新开始。
将双方终端指示灯的正端分别经两个与非门后接到2个十进制计数器CC4518的使能端EN,当任一方取胜,该方终端指示灯点亮,产生1个下降沿使其对应的计数器计数。这样,计数器的输出即显示了胜者取胜的盘数。
1.编码电路
编码器有二个输入端,四个输出端,要进行加 / 减计数,因此选用74LS193双时钟二进制同步加 / 减计数器来完成。
2.整形电路
74LS193是可逆计数器,控制加减的CP脉冲分别加至5脚和4脚,此时当电路要求进行加法计数时,减法输入端CPD 必须接高电平;进行减法计数时,加法输入端CPU 也必须接高电平,若直接由A、B键产生的脉冲加到5脚或4脚,那么就有很多时机在进行计数输入时另一计数输入端为低电平,使计数器不能计数,双方按键均失去作用,拔河比赛不能正常进行。加一整形电路,使A、B二键出来的脉冲经整形后变为一个占空比很大的脉冲,这样就减少了进行某一计数时另一计数输入为低电平的可能性,从而使每按一次键都有可能进行有效的计数。整形电路由与门74LS08和与非门74LS00构成。
3.译码电路:
由4线-16线译码器CC4514构成。译码器的输出Y0~Y15中选出15个接电平指示灯,电平指示灯的负端接地,而正端接译码器;这样,当输出为高电平时电平指示灯点亮。
比赛准备,译码器输入为0000,Y0输出为1,中心处指示灯首先点亮,当编码器进行加法计数时,亮点向右移,进行减法计数时,亮点向左移。
4.控制电路:
为指示出谁胜谁负,需用一个控制电路。当亮点移到任何一方的终端时,判该方为胜,此时双方的按键均宣告无效。此电路可由或非门74LS02构成。将双方终端指示灯的正接至或非门的2个输入端,当获胜一方为“1”,而另一方则为“0”,或非门输出为“0”,再送到74LS193计数器的置数端 ,于是计数器停止计数,处于预置状态,由于计数器数据端D0、D1、D2、D3和输出Q0、Q1、Q2、Q3对应相连,输入也就是输出,从而使计数器对脉冲不起作用。
5.胜负显示:
将双方终端指示灯正极经与非门输出后分别接到二个CC4518计数器的CP端,CC4518的两组4位BCD码分别接到实验箱中的两组译码显示器的8、4、2、1插孔上。当一方取胜时,该方终端指示灯发亮,产生一个上升沿,使相应的计数器进行加一计数,于是就得到了双方取胜次数的显示,若一位数不够,则进行二位数的级连。
6.复位
为能进行多次比赛而需要进行复位操作,使亮点返回中心点,可用一个开关控制74LS193的清零端R即可。
胜负显示器的复位也应用一个开关来控制胜负计数器CC4518的清零端R,使其重新计数。
CC4518功能表下表所示,引脚排列见附录。
输 入 输出功能
时钟
CP 清零
RD 使能
EN
× 1 × 全部为0
↑ 0 1 加计数
0 0 ↓
↓ 0 × 保持
× 0 ↑
↑ 0 0
1 0 ↓
另外,团IDC网上有许多产品团购,便宜有口碑