乒乓球游戏电路设计.docx
- 文档编号:7398006
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:10
- 大小:277.87KB
乒乓球游戏电路设计.docx
《乒乓球游戏电路设计.docx》由会员分享,可在线阅读,更多相关《乒乓球游戏电路设计.docx(10页珍藏版)》请在冰豆网上搜索。
乒乓球游戏电路设计
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的实现
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
if(clk'eventandclk='1')then
if(tmp="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;
2、模块CORNA的实现
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(clr,clk)
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';
elseshe:
=she(6downto0)&'0';
endif;
endif;
endif;
endif;
shift<=she;
endprocess;
process(clk,clr,amark,bmark)
variableaha,ala,bha,bla:
std_logic_vector(3downto0);
variabletmp1,tmp2:
integer;
begin
ifclr='0'then
aha:
="0000";
ala:
="0000";
bha:
="0000";
bla:
="0000";
tmp1:
=0;
tmp2:
=0;
elseifclk'eventandclk='1'then
ifamark>tmp1then
ifala="1001"then
ala:
="0000";
aha:
=aha+1;
tmp1:
=tmp1+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;
endif;
endprocess;
endcom_arc;
3、模块CH41A的实现
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;
4、模块DISPA的实现
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;
3、仿真及仿真结果分析
在这个仿真图中,看到serve数组为1,代表乙发球。
I从8开始依次递减计数,控制发光管亮暗light信号也随着i的数值变化,见图4.3所示。
由light端口输出的高电平驱动芯片以外的发光二极管使之点亮,这样就可以通过发光二极管模拟乒乓球的运动轨迹。
可以看到,在甲该击球的时候没有击球,也就是hit1在state状态6的时候没有高电平‘1’输入,则乙得分,count2由0变1,score22的值随之变化。
从最后一行state值的变化,可以清楚分析状态转移。
三、结论及心得体会
在大学课程即将接近尾声的时候,学院最后为我们安排了EDA课程设计,通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 乒乓球 游戏 电路设计