数字逻辑乒乓球比赛游戏机.docx
《数字逻辑乒乓球比赛游戏机.docx》由会员分享,可在线阅读,更多相关《数字逻辑乒乓球比赛游戏机.docx(14页珍藏版)》请在冰豆网上搜索。
数字逻辑乒乓球比赛游戏机
湖南涉外经济学院
课程设计报告
课程名称:
EDA技术与应用
报告题目:
乒乓球比赛游戏机的设计
学生姓名:
所在学院:
专业班级:
学生学号:
指导教师:
2016年12月28日
课程设计任务书
报告题目
乒乓球比赛游戏机设计
完成时间
学生姓名
专业班级
指导教师
职称
总体设计要求和技术要点
1.任务及要求:
(1)设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。
(2)用8个LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其移动的速度应能调节。
(3)当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。
若击中,则球向相反方向移动;若未击中,则对方得1分。
(4)一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。
(5)设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。
(6)甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球才有效。
(7)按《湖南涉外经济学院课程设计管理办法》要求提交课程设计报告。
工作内容及时间进度安排
第17周:
周1---周3:
立题、论证方案设计
周4---周5:
预答辩
第18周:
周1---周3:
仿真实验8
周4---周5:
验收答辩
课程设计成果
1.与设计内容对应的软件程序
2.课程设计总结报告
摘要
乒乓球运动是一项受大众非常喜爱的运动,它是一项集健身性,竞技性和娱乐性为一体的运动。
乒乓球是一项非常受大众喜欢的运动,几十年来,乒乓球运动在中国迅速兴起,很重要的原因就是对客观条件要求不高,随时随处就能玩起来。
乒乓球运动越来越多地被作为增强智力、提高工作效率以及保健、医疗和康复的极佳手段而引起各方面的重视。
如今,人们生活太忙碌,很多的人只能通过网络来玩乒乓球游戏,而乒乓球游戏机正好解决了人们的困扰。
它简单易行,只要简简单单几个手指的操作就能达到同样娱乐跟锻炼的效果。
关键字:
数显;频率;分频;计数器;状态机;
一、总体设计思想……………………………………………………………………1
1.基本原理…………………………………………………………2
二、设计步骤与调试过程……………………………………………………………2
1.总体设计电路…………………………………………………………2
2.模块设计与模块程序…………………………………………………………3
3.仿真结果分析………………………………………………………12
三、结论与心得………………………………………………………………………13
四、参考文献……………………………………………………………………13
一、总体设计思想
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;
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;
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的数值变化,见图1.2所示。
由light端口输出的高电平驱动芯片以外的发光二极管使之点亮,这样就可以通过发光二极管模拟乒乓球的运动轨迹。
可以看到,在甲该击球的时候没有击球,也就是hit1在state状态6的时候没有高电平‘1’输入,则乙得分,count2由0变1,score22的值随之变化。
从最后一行state值的变化,可以清楚分析状态转移。
三、结论及心得体会
这次课程设计,使我们对原本在课堂上课本中学习的知识有了更加深刻更加全面的了解,也使我们学习了解了QuartusⅡ软件。
此外,更加学会了将所学的知识用于实践中,真正用自己所学的知识来解决各种问题,更加锻炼了自己动手能力。
从刚开始拿到题目的迷茫,然后在网上查找筛选有用的资料,再到逐步开始努力解决问题,再经过不断的增删细节和一系列的修正,最终使实验结果完全符合实验要求。
在这个过程中,我们也遇到了许多问题。
例如如何解决计数器重复加分的问题,如何解决在一局比赛中只选取球员有效的脉冲的问题,如何解决裁判按下按键后换发球方的问题等等。
以及在设计电路图方面遇到的问题,最后终于克服重重困难,达到实验要求。
从中我们学会了在碰到困难时要学会,耐心,思考,用自己的能力,尽力自己解决问题。
在此衷心感谢各位老师的帮助和悉心教导,使我们学习到了更多的知识,探求到更多解决问题的办法。
同样还感谢一起合作的同伴,正是因为大家的共同努力和坚持不懈的探索精神,才有了我们这次的成功!
此次课程设计让我们认识到高新技术的快速发展和应用,让我们看到了EDA技术功能的强大,也让我们认识到掌握他们的重要性,同时也看到了各自的差距与不足。
只有今后坚持不懈地努力学习,拓宽知识面,才能更好的掌握新技术,才能适应社会的发展,为社会的发展做出贡献。
四、参考资料
[1]EDA技术与应用/陈忠平,高金定主编;北京:
中国电力出版社,2013.11
教师评语及设计成绩
教师评语:
课程设计成绩:
指导教师:
日期:
年月日