《实验11乒乓球游戏设计》由会员分享,可在线阅读,更多相关《实验11乒乓球游戏设计(7页珍藏版)》请在金锄头文库上搜索。
1、实验十一 乒乓球游戏设计一、 实验目的1、 学习和理解乒乓球游戏的设计和工作原理。二、实验仪器PC机,操作系统为Windows2000/XP,本课程所用系统均为WindowsXP(下同),Mux+plusII设计平台,GW48系列SOPC/EDA实验开发系统。三、实验原理以发光二极管点亮状态做为球,8个并排发光管做球行进路线,每次点亮一个发光二极管,做为乒乓球运行的当前位置。 可以进行双打。以两个按键开关作为球拍,由游戏者(甲、乙)各控制一个,按下开关表示击球。甲乙双方各有一个记分牌,由一个数码管显示双方的得分。 球的运行速度在可预置。 1局比赛开始前,裁判按动每局开始发球开关,每次由右边乙方
2、首先发球,乒乓球光点即出现在发球一方的球拍位置上,电路处于发球状态。 2能自动判球记分。只要一方失球,对方记分牌上则自动加1分,即累计低分方为胜利。 3球拍按钮开关在球的一个来回中,只有第一次按动才起作用,若再次按动或持续按下不松开,将无作用。即在击球时,只有在球的光点移至击球者一方球拍位置时,第一次按动按钮,击球才有效。四、实验步骤1、利用MAX+plusII对附录的程序进行文本编辑输入和仿真测试;给出仿真波形。最后进行引脚锁定并进行测试,硬件验证此游戏的系统功能。 2、测试步骤:Bain和bbin分别为左右球拍控制信号,分别由键8和键1控制。clr是清0控制,由键7控制;clk是乒乓球行进
3、速度时钟,接clock2,4HZ ; souclk是失球发声时钟,接clock5,1024HZ ;ballout(70)指示球路行进情况,用8个发光管担任,即D1D8担任;countbh(30)和countbl(30)接数码管7和6,分别指示左边球手的得分的高位和低位;countah(30)和countal(30)接数码管3和2,分别指示右边球手的得分的高位和低位;lamp接数码管7的一个段,指示clock2速;speaker接蜂鸣器,指示失球提示。 3、设目标器件是EP1K30TC144-3,本实验电路结构图NO.3,将实验系统左下角多位选择多路开关的4号拨码打上。4、下载目标文件后,可用键
4、1和8实验游戏。 图4-2 实验电路结构图NO.5五、问题讨论与提高1、以11分为一局的话 如何显示胜负局?附录:library ieee;use ieee.std_logic_1164.all;entity tennis isport(bain,bbin,clr,clk,souclk:in std_logic; ballout:out std_logic_vector(7 downto 0); countah,countal,countbh,countbl:out std_logic_vector(3 downto 0); lamp,speaker: out std_logic);end;a
5、rchitecture ful of tennis iscomponent soundport(clk,sig,en:in std_logic; sout:out std_logic);end component;component ballctrlport(clr,bain,bbin,serclka,serclkb,clk:in std_logic; bdout,serve,serclk,ballclr,ballen:out std_logic);end component;component ballport(clk,clr,way,en:in std_logic; ballout: ou
6、t std_logic_vector(7 downto 0);end component;component boardport(ball,net,bclk,serve:in std_logic; couclk,serclk:out std_logic);end component;component cou10port(clk,clr:in std_logic; cout: out std_logic; qout: out std_logic_vector(3 downto 0);end component;component cou4port(clk,clr:in std_logic; c
7、out:out std_logic; qout:out std_logic_vector(3 downto 0);end component;component mwayport(servea,serveb:in std_logic; way:out std_logic);end component;signal net,couclkah,couclkal,couclkbh,couclkbl,cah,cbh:std_logic;signal serve,serclka,serclkb,serclk,ballclr,bdout,way,ballen:std_logic;signal bbll:s
8、td_logic_vector(7 downto 0);beginnet=bbll(4);ballout=bbll;lamp=clk;uah:cou4 port map(couclkah,clr,cah,countah);ual:cou10 port map(couclkal,clr,couclkah,countal);ubh:cou4 port map(couclkbh,clr,cbh,countbh);ubl:cou10 port map(couclkbl,clr,couclkbh,countbl);ubda:board port map(bbll(0),net,bain,serve,co
9、uclkal,serclka);ubdb:board port map(bbll(7),net,bbin,serve,couclkbl,serclkb);ucpu:ballctrl port map(clr,bain,bbin,serclka,serclkb,clk,bdout,serve,serclk,ballclr,ballen);uway:mway port map(serclka,serclkb,way);uball: ball port map(clk,ballclr,way,ballen,bbll);usound: sound port map(souclk,ballen,bdou
10、t,speaker);end;library ieee;use ieee.std_logic_1164.all;entity sound isport(clk: in std_logic; sig: in std_logic; en: in std_logic; sout:out std_logic);end sound;architecture ful of sound isbegin sout=clk and (not sig) and en;end;library ieee;use ieee.std_logic_1164.all;entity ballctrl isport(clr: i
11、n std_logic; bain:in std_logic; bbin:in std_logic; serclka:in std_logic; serclkb:in std_logic; clk:in std_logic; bdout:out std_logic; serve:out std_logic; serclk:out std_logic; ballclr:out std_logic; ballen:out std_logic);end ballctrl;architecture ful of ballctrl issignal bd:std_logic;signal ser:std
12、_logic;beginbd=bain or bbin;ser=serclka or serclkb; serclk=ser;bdout=bd;process(clr,clk,bd)beginif(clr=1)then serve=1; ballclr=1;else if(bd=1)then ballclr=1; if(ser=1)then ballen=1; serve=0; else ballen=0; serve=1; end if; else ballclr=0; end if;end if;end process;end;library ieee;use ieee.std_logic
13、_1164.all;use ieee.std_logic_unsigned.all;entity ball isport(clk:in std_logic; clr:in std_logic; way:in std_logic; en:in std_logic; ballout:out std_logic_vector(7 downto 0);end ball;architecture ful of ball issignal lamp:std_logic_vector(9 downto 0);beginprocess(clk,clr,en)beginif(clr=1) then lamp=1
14、000000001; elsif en=0 then elsif (clkevent and clk=1)then if(way=1) then lamp(9 downto 1)=lamp(8 downto 0);lamp(0)=0; else lamp(8 downto 0)=lamp(9 downto 1);lamp(9)=0; end if;end if;ballout=lamp(8 downto 1);end process;end;library ieee;use ieee.std_logic_1164.all;entity board isport(ball:in std_logic; net:in std_logic; bclk:in std_logic; serve:in std_logic; couclk:out std_logic; serclk:out std_logic);end board;architecture ful of board isbegin