乒乓球游戏电路设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、主要内容:

设计一个乒乓球游戏机,比赛由甲乙双方和裁判3人构成,能模拟比赛的基本过程和规则并能自动裁判和记分。

2、基本要求:

1、设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。

2、用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其移动的速度应能调节。

3、当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。

4、设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。

5、甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球才有效。

3、主要参考资料:

[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.

[2] 康华光主编.电子技术基础模拟部分. 北京:高教出版社,2006.

[3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.

一、总体设计思想

1.基本原理

用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其移动的速度应能调节。当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球才有效。

2.设计框图

1.1设计流程图

二、设计步骤和调试过程

1、总体设计电路

用8个发光二极管代表乒乓球台,在游戏机的两侧设置两个开关,一个是发球开关,一个是击球开关,甲方按动发球开关时,靠近甲方的第一盏灯亮,然后发光二极管由甲向乙依次点亮,代表乒乓球在移动。当球过网后,乙方就可击球。若乙方提前击球或没击中球,则判乙方失分,甲方自动加分,重新发球比赛继续进行到一方记分到21分,该局结束,记分牌清零,可以开始新的一局比赛。

使用VHDL进行电路系统设计,利用PLD来实现控制器的硬件电路

1.2乒乓游戏机的电路框图

2、模块设计和相应模块程序

系统各功能模块的实现

1、模块SEL的实现

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity sel is

port(clk:in std_logic;

sell:out std_logic_vector(2 downto 0));

end sel;

architecture sel_arc of sel is

begin

process(clk)

variable tmp:std_logic_vector(2 downto 0);

begin

if(clk'event and clk='1')then

if(tmp="000")then

tmp:="001";

elsif tmp="001"then

tmp:="100";

elsif tmp="100"then

tmp:="101";

elsif tmp="101"then

tmp:="000";

end if;

end if;sell<=tmp;

end process;

end sel_arc;

2、模块CORNA的实现

LIBRARY IEEE;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity coma is

port(clr,af,aj,bf,bj,clk:in std_logic;

shift:out std_logic_vector(7 downto 0);

ah,al,bh,bl:out std_logic_vector(3 downto 0)); end coma;

architecture com_arc of coma is

signal amark,bmark:integer;

begin

process(clr,clk)

variable a,b:std_logic;

variable she:std_logic_vector(7 downto 0);

begin

if clr='0'then

a:='0';

b:='0';

she:="00000000";

amark<=0;

bmark<=0;

elsif clk'event and clk='1'then

if a='0' and b='0' and af='0'then

a:='1';

she:="10000000";

elsif a='0' and b='0' and bf='0' then

b:='1';

she:="00000001";

elsif a='1'and b='0'then

if she>8 then

if bj='0'then

amark<=amark+1;

a:='0';

b:='0';

she:="00000000";

else

she:='0'&she(7 downto 1);

end if;

elsif she=0 then

amark<=amark+1;

a:='0';

b:='0';

else

if bj='0'then

a:='0';

b:='1';

else

she:='0'&she(7 downto 1);

end if;

end if;

elsif a='0' and b='1'then

if she<16 and she/=0 then

if aj='0' then

bmark<=bmark+1;

a:='0';

b:='0';

she:="00000000";

else

she:=she(6 downto 0)&'0';

end if;

elsif she=0 then

bmark<=bmark+1;

a:='0';

b:='0';

else

相关文档
最新文档