乒乓球游戏机的设计.docx

上传人:b****6 文档编号:5771247 上传时间:2023-01-01 格式:DOCX 页数:23 大小:289.84KB
下载 相关 举报
乒乓球游戏机的设计.docx_第1页
第1页 / 共23页
乒乓球游戏机的设计.docx_第2页
第2页 / 共23页
乒乓球游戏机的设计.docx_第3页
第3页 / 共23页
乒乓球游戏机的设计.docx_第4页
第4页 / 共23页
乒乓球游戏机的设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

乒乓球游戏机的设计.docx

《乒乓球游戏机的设计.docx》由会员分享,可在线阅读,更多相关《乒乓球游戏机的设计.docx(23页珍藏版)》请在冰豆网上搜索。

乒乓球游戏机的设计.docx

乒乓球游戏机的设计

电子课程设计

——乒乓球游戏机

 

目录

一、设计任务与要求

二、总体框图

三、选择器件

四、功能模块

1.信号控制模块

2.分频模块

3.片选信号产生模块

4.数码管控制模块

5.3—8译码模块

6.非门

7.显示模块

五、总体设计电路

1.总体电路的原理图

2.总体电路的管脚分配图

3.总体电路的仿真图

4.实验连线与硬件验证情况

5.方案二介绍

六、心得体会

乒乓球游戏机

一、设计任务与要求

任务:

设计一个乒乓球游戏机,模拟乒乓球比赛的基本过程和规则,并能裁判和自动计分。

要求如下:

1.使用乒乓球游戏机的甲乙双方在不同的位置罚球或击球。

2.乒乓球的位置和移动方向可由发光二极管和依次点亮的方向决定,为球的移动速度为一定值(我们设计中设为0.5秒移动一位)。

使用者可按乒乓球的位置发出相应的动作,在其他时候击球视为犯规,给对方加一分;都犯规双方各加一分。

二、总体框图

图1总体框图

设计思路

用8个发光二极管代表乒乓球,在游戏机两侧各设置二个开关,一个是发球开关,一个是击球开关。

即若A方按动发球开关时,靠近A方的第一灯亮,然后二极管由A向B逐次点亮,代表乒乓球在移动。

当过网后(按设计者规定的球位),B就可以击球,否则判B方失分,A方自动加分,重新发球比赛继续进行到一方计分到21分,该局结束,计分牌清零,可以开始新的一局比赛。

反之B发球时也一样。

将核心模块分俩个进程:

第一个实现逻辑功能,第二个将整数记分转换为十进制数,便于译码显示,其中为方发球键;用模块产生数码管的片选信号;Ch41a模块用于送出数码管的片选信号变化的数据;得分显示模块用七段译码器。

各个状态间的转移控制要根据要求来改变转移的状态由于设计要求实现LED灯依此从下到上,或从上到下的移动,同时球拍击球。

若击中,则球向相反方向移动,若未击中,则对方得1分。

很明显用VHDL中的状态机来实现其功能将非常简便和明了。

就其功能,若要实现记分,就得用到7段数码管,考虑到硬件要求,考虑用动态扫描技术来解决。

动态扫描前要进行译码,即把记数得分的结果译码成七段码。

B得分

 

设计方案

方案一:

完全用VHDL语言编写程序。

方案二:

用硬件模块设计。

三、器件选择

1、装有QuartusII软件的计算机一台。

2、EDA实验箱一个

(1)7段数码显示管。

(2)8个LED灯。

(3)芯片:

使用Altera公司生产的Cyclone系列芯片,选用EP1C12Q240C8片。

3、下载接口是数字芯片的下载接口(JTAG)主要用于FPGA芯片的数据下载

Cyclone的性能特性:

Cyclone器件的性能足以和业界最快的FPGA进行竞争。

CycloneFPGA内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。

FPGA的基本特点主要有:

(1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。

(2)FPGA可做其它全定制或半定制ASIC电路的中试样片。

(3)FPGA内部有丰富的触发器和I/O引脚。

(4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

(5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。

可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。

四、功能模块

方案一

(一)控制模块:

是该电路的核心模块有两个功能能

a)是实现整个设计的逻辑功能,当游戏开始时,先通过CLR对整个系统进行清零,在输入CLK上升沿有效的条件下,甲方开始发球,LED灯从距离甲方最近的一个开始闪亮,并依次向乙方移动,过了网后乙方就可以击球,若乙方击球成功,则球按原路返回,再次过网后甲方就可击球,若甲击球成功,则按以上游戏一直进行下去,若有一方击球失败或提前击球则LED灯全部熄灭,对方在记分牌上自动记一分;当其中的一方记满21分时比赛结束,清零后可开始下一局。

b)是将整数计分转换为十进制数,便于译码显示。

当甲乙双方的记分低位到达9时使低位清零,同时使高位加1,以便正确地在数码管上显示得分。

CLR为乒乓球游戏清零键,af为A方发球控制键,aj接球键;bf为乙方发球控制键,bj接球键;CLK为控制乒乓球行进速度的时钟信号,接50MHZ时钟信号源;SHIFT[7..0]为LED灯显示输出端,接8个LED显示灯;ah[3..0]为甲方记分的高位,al[3..0]为甲方记分的低位,bh[3..0]为乙方记分的高位,bl[3..0]为乙方记分的低位,以上四位都要经过译码器译码后接8位共阴极数码显示管。

图2控制模块

●VHDL程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycomais

port(clr,af,aj,bf,bj,clk:

instd_logic;

shift:

outstd_logic_vector(7downto0);

ah,al,bh,bl:

outstd_logic_vector(3downto0));

endcoma;

architecturecom_arcofcomais

signalamark,bmark:

integer;

begin

process(clk,clr)

variablea,b:

std_logic;

variableshe:

std_logic_vector(7downto0);

begin

ifclr='0'then

a:

='0';

b:

='0';

she:

="00000000";

amark<=0;

bmark<=0;

elsifclk'eventandclk='1'then

ifa='0'andb='0'andaf='0'then

a:

='1';

she:

="10000000";

elsifa='0'andb='0'andbf='0'then

b:

='1';

she:

="00000001";

elsifa='1'andb='0'then

ifshe>8then

ifbj='0'then

amark<=amark+1;

a:

='0';

b:

='0';

she:

="00000000";

else

she:

='0'&she(7downto1);

endif;

elsifshe=0then

amark<=amark+1;

a:

='0';

b:

='0';

else

ifbj='0'then

a:

='0';

b:

='1';

else

she:

='0'&she(7downto1);

endif;

endif;

elsifa='0'andb='1'then

ifshe<16andshe/=0then

ifaj='0'then

bmark<=bmark+1;

a:

='0';

b:

='0';

she:

="00000000";

else

she:

=she(6downto0)&'0';

endif;

elsifshe=0then

bmark<=bmark+1;

a:

='0';

b:

='0';

else

ifaj='0'then

a:

='1';

b:

='0';

else

she:

=she(6downto0)&'0';

endif;

endif;

endif;

endif;

shift<=she;

endprocess;

process(clk,clr,amark,bmark)

variableaha,ala,bha,bla:

std_logic_vector(3downto0);

variabletrap1,tmp1,tmp2:

integer;

begin

ifclr='0'then

aha:

="0000";

ala:

="0000";

bha:

="0000";

bla:

="0000";

tmp1:

=0;

tmp2:

=0;

elsifclk'eventandclk='1'then

ifamark>tmp1then

ifala="1001"then

ala:

="0000";

aha:

=aha+1;

tmp1:

=trap1+1;

else

ala:

=ala+1;

tmp1:

=tmp1+1;

endif;

endif;

ifbmark>tmp2then

ifbla="1001"then

bla:

="0000";

bha:

=bha+1;

tmp2:

=tmp2+1;

else

bla:

=bla+1;

tmp2:

=tmp2+1;

endif;

endif;

endif;

al<=ala;

bl<=bla;

ah<=aha;

bh<=bha;

endprocess;

endcom_arc;

●波形仿真

波形分析:

CLR的低电平有效,其清零后,在CLK上升沿有效的条件下,甲方af先发球,则LED灯显示十进制数80,即为二进制数10000000,乒乓球灯右移,波形图符合要求。

(二)

分频器:

其实是一个计数器。

在此设计中主要功能是用于让乒乓球的移动速度为0.5S移动一位。

图3分频器模块

端口说明CLK输入OUTCLOK输出。

●VHDL程序

LIBRARYieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

ENTITYdivIS

port(

clk:

instd_logic;

outclk:

outstd_logic);

enddiv;

ARCHITECTUREoneOFdivIS

begin

process(clk)

variablecnt:

integerrange0to15000000;

variabletmp:

std_logic;

begin

if(clk'eventandclk='1')then

ifcnt>=14999999then

cnt:

=0;

tmp:

=nottmp;

else

cnt:

=cnt+1;

endif;

endif;

outclk<=tmp;

endprocess;

endone;

波形仿真

●波形分析:

CLK输入50MHZ的脉冲信号,经分频OUTCLK输出2HZ的脉冲式乒乓球以0.5/S的数度运动符合要求。

(三)SEL模块:

片选信号产生模块,用来产生数码管的片选信号。

 

图4SEL模块

 

其与数据转换模块的对应关系如下表所示:

表1

接口序号

数据转换模块

SEL2

SEL1

SEL0

选择数据

0

0

0

d2

0

0

1

d3

0

1

0

d3

0

1

1

d3

1

0

0

d0

1

0

1

d1

1

1

0

d3

1

1

1

d3

CLK是扫描时钟信号接50MHZ时钟信号源,A[2..0]是代表扫描片选地址信号SEL2,SEL1,SEL0的管脚同四位扫描驱动地址的低三位相连。

●VHDL程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityselis

port(clk:

instd_logic;

sell:

outstd_logic_vector(2downto0));

endsel;

architecturesel_arcofselis

begin

process(clk)

variabletmp:

std_logic_vector(2downto0);

begin

ifclk'eventandclk='1'then

iftmp="000"then

tmp:

="001";

elsiftmp="001"then

tmp:

="100";

elsiftmp="100"then

tmp:

="101";

elsiftmp="101"then

tmp:

="000";

endif;

endif;

sell<=tmp;

endprocess;

endsel_arc;

●波形图

●波形分析:

当CLK的上升沿到达时,sell按照十进制数0、1、4、5、0变化,并且向端口外输出片选信号,符合设计模块的要求。

(四)Ch41a模块:

于送出数码管的片选信号。

将十进制的输入信号用七段数码管显示。

图5ch41a模块

数据转换模块在输入片选信号的作用下对核心模块输送过来的数据进行选择,并从输出端口进行输出。

其中sel[2..0]为输入片选信号,d0[3..0]、d1[3..0]、d2[3..0]、d3[3..0]分别为得分记录的数据,分别接甲方记分低位,甲方记分高位,乙方记分低位,乙方记分高位。

q[3..0]为被选中的数据,并向七段译码器输出。

●VHDL程序:

libraryieee;

useieee.std_logic_1164.all;

entitych41ais

port(sel:

instd_logic_vector(2downto0);

d0,d1,d2,d3:

instd_logic_vector(3downto0);

q:

outstd_logic_vector(3downto0));

endch41a;

architecturech41_arcofch41ais

begin

process(sel)

begin

caseselis

when"100"=>q<=d0;

when"101"=>q<=d1;

when"000"=>q<=d2;

whenothers=>q<=d3;

endcase;

endprocess;

endch41_arc;

●波形图

●波形分析:

由上述波形图可以看出:

在输入片选信号的作用下,当sel为0时,q输出d2的数据,sel为5时,q输出d1的数据,sel为其它数时,q输出d3的数据。

波形符合要求。

(五)3—8译码模块

图63—8译码模块

 

●VHDL程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydecode3_8is

port(sel:

instd_logic_vector(2downto0);

QQ:

outstd_logic_vector(7downto0));

enddecode3_8;

architectureoneofdecode3_8is

begin

QQ<="11111110"whensel=0else

"11111101"whensel=1else

"11111011"whensel=2else

"11110111"whensel=3else

"11101111"whensel=4else

"11011111"whensel=5else

"11111111";

endone;

集成芯片

图774LS138

●管脚说明

(1)A、B、C为输入端。

(2)G1、G2AN、G2BN是控制端。

(3)Y0N、Y1N、Y2N、Y3N、Y4N、Y5N、Y6N、Y7N是输出端。

每一个输出端的输出函数Yi=mi.(mi为输入端的最小项)。

G1=1、G2AN=G2BN=0时才能进行译码,当不满足条件时不能进行译码。

G1AN、G2AN、G2BN是控制端又称片选端。

利用它们可以扩展译码器的功能。

真值表表2

输入端

输出

C

B

A

Y7

Y6

Y5

Y4

Y3

Y2

Y1

Y0

0

0

0

0

0

0

0

0

0

0

1

0

0

1

0

0

0

0

0

0

1

0

0

1

0

0

0

0

0

0

1

0

0

0

1

0

0

0

0

0

1

0

0

0

1

0

0

0

0

0

1

0

0

0

0

1

0

1

0

0

1

0

0

0

0

0

1

1

0

0

0

0

0

0

0

1

1

1

0

0

0

0

0

0

0

●波形仿真

●波形分析

由上述波形图可以看出:

当SE为001时输出QQ1,当SEL为010时输出QQ2,SEL为011时输出QQ3,SEL为100时输出QQ4,SEL为101输出QQ5。

(六)非门:

反相器。

是实现逻辑非得逻辑电路。

输入端为高电平,输出端为低电平。

图8非门

 

真值表:

输入

输出

A

Y

0

1

1

0

 

(七)译码显示模块:

用来计分。

图9译码显示模块

显示模块是由七段LED数码管译码和动态扫描显示两部分组成。

采用的是共阴极七段数码管,译码电路将输出的8421BCD妈转换为,数码管需要的逻辑状态此模块为数码管控制模块,功能是控制七段数码管对转换后的数字进行显示,使其完成甲方和乙方各自得分记录显示。

其中d[3..0]接数据转换模块的输出端口,q[6..0]连接七段扫描数码管的段输入a、b、c、d、e、f、g,利用其控制特性在数码管上显示出参加乒乓球游戏的甲乙双方各自得分。

●VHDL程序:

libraryieee;

useieee.std_logic_1164.all;

entitydispais

port(d:

instd_logic_vector(3downto0);

q:

outstd_logic_vector(6downto0));

enddispa;

architecturedispa_arcofdispais

begin

process(d)

begin

casedis

when"0000"=>q<="0111111";

when"0001"=>q<="0000110";

when"0010"=>q<="1011011";

when"0011"=>q<="1001111";

when"0100"=>q<="1100110";

when"0101"=>q<="1101101";

when"0110"=>q<="1111101";

when"0111"=>q<="0100111";

when"1000"=>q<="1111111";

whenothers=>q<="1101111";

endcase;

endprocess;

enddispa_arc;

●波形仿真

●波形分析:

由上面仿真图可以看出,译码模块完成了对数据在数码管上正确地显示。

波形符合要求。

 

五、总体设计电路图

(1)顶层原理框图

 

整体工作情况:

clk和clk1分别接扫描时钟信号和时钟信号,其它端口接法如上所述,SEL产生片选信号并作用于数据转换模块CH41A,COMA为核心模块,实现逻辑功能,并且对数据进行数制转换。

CH41A将所选数据送到七段译码器模块DISPA,使得分在数码管上显示。

 

(2)、管脚分配图:

按照管脚分配图上所示,对各管脚在EDA实验箱上进行连接,clk接clk5时钟信号源,rd为清零控制键,af接按键,aj接按键,bf发按键,bj接按键,clk接时钟信号源,sell[2..0]接扫描SEL0、SEL1、SEL2,shift[7..0]接八个LED显示灯,q[6..0]接数码管a、b、c、d、e、f、g。

在乒乓球游戏开始时,先按rd键对系统进行清零,然后甲或者乙就可以按发球键发球,在LED灯上显示球的行进路径,当过网后另一方就可以击球,数码管设置了两个记分牌,分别来记录甲乙的得分情况。

通过自己的实际操作知道此电路完成了设计任务。

(3)波形仿真

球运动轨迹

结果分析:

由上述仿真波形可以知道,并且通过硬件实现知道整个电路完成了设计要求的任务符合。

(4)硬件连接情况:

af、aj、bf、bj连接EPC12上四位按键PB[0]、PB[1]、PB[2]、PB[3]。

时钟CLK与实验箱上的IO3连。

CLK为EP1C12板上的50MHZ晶振输入。

Rd为EPIC12板上的复位键。

q[0]……q[6]、Q[0]Q[7]与16位数据线连。

Shift[0]……shift{7}与EDA_VI板上的IO9-IO16连接,用于8为LED灯显示。

即乒乓球的运动轨迹。

VGA[3..0]左端8个数码管,低8位为7位端总加小数点选取位,高八位为左端8个数码管COM选取,即如果要选取数码管0,则发送总线值为:

1111111011111111,如果选取数码管1,则发送总线值为1111110111111111.此时所选取数码管7端和DP位将全亮。

方案二:

主模块:

双向移位寄存器74LS194。

集成芯片

真值表:

输入

输出

功能

CR

模式

CP

串行

并行

Q(0)

Q

(1)

Q

(2)

Q(3)

M(0)

M

(1)

D(sr)

D(sl)

D(0)

D

(1)

D

(2)

D(3)

Q(0)

Q

(1)

Q

(2)

Q(3)

1

*

*

*

*

*

*

*

*

*

0

0

0

0

清零

0

*

*

0

*

*

*

*

*

*

0

1

1

*

*

d

d

d

d

d

d

d

d

保持

0

0

1

*

1

1

0

1

0

1

1

0

1

左移

0

0

1

*

0

1

0

1

0

0

1

0

1

0

1

0

1

*

1

1

0

0

1

0

0

1

右移

0

1

0

0

*

1

1

0

0

1

0

0

0

0

0

0

*

*

*

1

0

0

0

1

0

0

0

保持

●原理框图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1