乒乓球游戏模拟器设计.docx
- 文档编号:11809069
- 上传时间:2023-04-02
- 格式:DOCX
- 页数:19
- 大小:289.89KB
乒乓球游戏模拟器设计.docx
《乒乓球游戏模拟器设计.docx》由会员分享,可在线阅读,更多相关《乒乓球游戏模拟器设计.docx(19页珍藏版)》请在冰豆网上搜索。
乒乓球游戏模拟器设计
基于MCS51单片机的乒乓球游戏模拟器设计
学号:
2008301200114
姓名:
李越
目录
1.摘要3
2.设计思路3
2.1乒乓球游戏规则3
2.2根据设计功能,设计思路如下3
3.硬件电路设计3
3.1AEDK5196ET实验系统的配置3
3.2部分的硬件连接图:
4
3.3实验系统布局图4
3.4硬件定时5
4.软件设计5
4.1设计流程图如下:
5
4.2软件设计说明7
4.3实验代码:
7
5.结束语14
6.参考文献14
1.摘要:
利用单片机中的定时器、IO接口、中断系统等资源,设计一个乒乓球游戏,利用单片机设计具有系统简单易懂,易于操作的优点。
2.设计思路:
用8个LED二极管的来回滚动显示模拟乒乓球的来回运动。
比赛双方用开关(K1和K8)控制发球与接球,当球运动至接球方时,接球方立即改变开关状态,“击球”使球“弹回”发球方一侧。
如此周而复始,直至在规定的击球时间内有一方未能完成击球动作,从而对方得一分;然后继续比赛。
2.1乒乓球游戏规则:
(1).采用两个开关作为击球键。
(2).发球采用一球轮换制。
(3).采用11分制,三局两胜制。
(4).采用P1口模拟球的移动。
2.2根据设计功能,设计思路如下:
(1)由P1口控制,用LED灯模拟乒乓球运动。
(2)球以每0.5s滚过1个LED的速度移动,回球需在球到达后的0.5s内进行(按下按钮),否则按失球计。
(3)球未到达提前按下按钮不起回球作用。
(4)当计满到十一分时结束当前局比赛,并熄灭所有LED发光管。
(5)设定5局3胜制,比赛结束八段码显示胜负局数。
3.硬件电路设计
3.1AEDK5196ET实验系统的配置
AEDK5196ET实验系统可以在串行模式和独立运行模式二种模式工作,本实验让它工作在串行模式下。
将K9的短路套插向51端,用实验机配套的串行通讯电缆,将9芯电缆的一端与实验机上的J9(9芯插座)相连,另一端与PC机的串行口相连。
AEDK5196ET实验机电源插座J3与工作电源相连,注意插入方向(如下图所示)。
将电源开关K13拨到左端(ON),AEDK5196ET机上将显示:
AEDK.U51(MCS-51状态)
3.2部分的硬件连接图:
3.3实验系统布局图
3.4硬件定时
由8031内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。
P1口的P1.0-P1.7分别接八个发光二极管。
开始比赛发球方的第一个灯先亮,然后依次往对方方向移动,到达对方位置时,如果能在0.5秒内能改变开关状态,则LED灯反向移动,循环往复,直至有一方没有失误,
4.软件设计
4.1设计流程图如下:
是
是
否
是
是
否
否
是
是
4.2软件设计说明
1.堆栈设定为#60H开始单元。
2.定时器T0、T1分别用作A、B击球时间控制,定时时间设定为用户设置的击球时间。
3.由jufaq和faqiu控制发球权。
jufaq局发球权,jufaq=0为A的发球权,faqiu控制发球方,faqiu=0为A发球。
4.发球控制,向右发球,后,送80H至74LS273,即点亮最左边的LED灯,然后将80H循环右移再送74LS273,LED灯即可循环向右点亮。
以此模拟乒乓球的运行轨迹。
每次右移之前需先进行一段时间的延时。
共右移七次,即循环点亮至最右边的LED灯。
向左发球:
与向右的步骤类似.不同的是初始送01H至74LS273,循环左移七次。
5.判断击球。
左右的击球判断原理一样.只是判断的键值不同。
以向左击球为例:
在最右边的LED灯刚好点亮的时候.从8279读取键值,若没有读取到键值,则表示“击球”过晚,“击球”无效。
“击球”成功后则进行下一次球的左,右循环移动以及随后的击球判断。
“击球”无效,则转入记分显示部分。
6.比分纪录及结果显示,用八个数码管显示,显示格式为“00—00—00”,最左边和最右边的两个为每局的小比分,十一分制,中间两个为大比分,第三个和第六个个数码管显示胜利方,如果左方胜利则左起第三个数码管显示数字“8”。
4.3实验代码:
;初始化程序
jufaqBIT20H.1;局发球权,jufaq=0为A的发球权
faqiuBIT20H.2;发球方,faqiu=0为A发球
jqsbaiBIT20H.3;判断是否击球失败
Z8279EQU0FF82H;8279状态/命令口地址
D8279EQU0FF80H;8279数据口地址
LEDMODEQU00H;左边输入八位字符显示
;外部译码键扫描方式,双键互锁
LEDFEQEQU2FH;扫描速率
LEDCLSEQU0C1H;清除显示RAM
LEDWR0EQU80H;设定的将要写入的显示RAM地址
READKBEQU40H;读FIFORAM地址0的命令字
ORG0000H
AJMPMAIN
ORG000BH
AJMPINT_T0;INTT0入口地址
ORG0100H
;主程序
MAIN:
MOVSP,#60H
LCALLINIT8279;初始化8279
CLRjufaq
MOVR2,#00H;A本局比分
MOVR3,#00H;B本局比分
MOVR4,#00H;A的局比分
MOVR5,#00H;B的局比分
CLRjqsbai
LCALLDISPLAY
;开始比赛
START:
MOVR2,#00H
MOVR3,#00H
LCALLDISPLAY
JBjufaq,LOOP21;判断是谁的发球权
CLRfaqiu
SJMPFAQIU
LOOP21:
SETBfaqiu;jufaq=1,B的发球权,使faqiu=1
;发球
FAQIU:
LCALLDISPLAY
JBfaqiu,BFAQIU;一球开始,判断是谁发球
;A发球
AFAQIU:
MOVP1,#01H;使P1.0端亮,准备发球
LOOP1:
SETBP3.1
NOP
JBP3.1,LOOP1;没击球时K0为高电平,P3.1读取K0信号
;为低电平时开始击球
LOOP2:
SETBP3.1
NOP
JNBP3.1,LOOP2;检测A击球开关K0是否按下,
A_MOVE:
;LED灯由左到右依次点亮
MOVP1,#02H
LCALLDELAY
MOVP1,#04H
LCALLDELAY
MOVP1,#08H
LCALLDELAY
MOVP1,#10H
LCALLDELAY
MOVP1,#20H
LCALLDELAY
MOVP1,#40H
LCALLDELAY
MOVP1,#80H
MOVTMOD,#01H;球到B了,初始化T0
MOVTL0,#00H
MOVTH0,#4CH;给T0赋初值
MOVR1,#10;定时0.5s的常数,10*50ms=0.5s
SETBTR0;T0开始计时
SETBET0;T0开中断
SETBEA;CPU开中断
LOOP10:
JBCjqsbai,ADEFEN;到了,检测B是否在0.5s内击球
;jqsbai=1,击球失败,A得分
SETBP3.2
NOP
JBP3.2,LOOP10
LOOP11:
JBCjqsbai,ADEFEN;到了,检测B是否在0.5s内击球
;击球失败,A得分
SETBP3.2
NOP
JNBP3.2,LOOP11;B在0.5s内击球成功,
CLRET0
CLREA
SJMPB_MOVE;B击球成功,球由B向A运动
;B发球
BFAQIU
MOVP1,#80H;使P1.7端亮,准备发球
LOOP3:
SETBP3.2
NOP
JBP3.2,LOOP3
LOOP4:
SETBP3.2
NOP
JNBP3.2,LOOP4;检测B击球开关K1是否按下,
SJMPB_MOVE
B_MOVE:
;LED灯由左到右依次点亮
MOVP1,#40H
LCALLDELAY
MOVP1,#20H
LCALLDELAY
MOVP1,#10H
LCALLDELAY
MOVP1,#08H
LCALLDELAY
MOVP1,#04H
LCALLDELAY
MOVP1,#02H
LCALLDELAY
MOVP1,#01H
MOVTMOD,#01H;球到B了,初始化T0
MOVTL0,#00H
MOVTH0,#4CH;给T0赋初值
MOVR1,#10;定时0.5s的常数,10*50ms=0.5s
SETBTR0;T0开始计时
SETBET0;T0开中断
SETBEA;CPU开中断
LOOP7:
JBCjqsbai,BDEFEN;到了,检测A是否在0.5s内击球
;击球失败,B得分
SETBP3.1
NOP
JBP3.1,LOOP7
LOOP8:
JBCjqsbai,BDEFEN;到了,检测A是否在0.5s内击球
;击球失败,B得分
SETBP3.1
NOP
JNBP3.1,LOOP8
CLRET0
CLREA
CPLjufaq
LJMPA_MOVE;A击球成功,球由A向B运动
;判分
ADEFEN:
INCR2;A加一分
MOVA,R2
CLRC
SUBBA,#3;A满分A赢,
JCLOOP16;交换发球权
MOVA,R2
CLRC
SUBBA,R3
CLRC
SUBBA,#02;A比B高两分A才赢
JCLOOP16;否则继续发球
INCR4;A赢这一局
LCALLDISPLAY
LCALLDELAY5;一局结束延时5秒
CJNER4,#02,LOOP17;判断A是否赢得这场比赛
MOVR7,#8
MOVR6,#3
LCALLDISLED;显示8,代表A方赢得比赛
LCALLDELAY5
AJMPOVER
BDEFEN:
INCR3;B加一分
MOVA,R3
CLRC
SUBBA,#5
JCLOOP16
MOVA,R3
CLRC
SUBBA,R2
CLRC
SUBBA,#02
JCLOOP16;判断这一局是否打完
INCR5;B赢的这一局
LCALLDISPLAY
LCALLDELAY5
CJNER5,#02,LOOP17;判断B是否赢得这场比赛
MOVR7,#8
MOVR6,#2
LCALLDISLED;显示8,代表B方赢得比赛
LCALLDELAY5
AJMPOVER
LOOP16:
CPLfaqiu;这局没打完,交换发球,继续比赛
AJMPFAQIU
LOOP17:
CPLjufaq;这局打完,交换发球权,开始新一局
AJMPSTART
;8279初始化子程序
INIT8279:
;8279初始化子程序
PUSHDPH;保存现场
PUSHDPL
PUSHACC
LCALLDELAY;延时
MOVDPTR,#Z8279
MOVA,#LEDMOD;置8279工作方式
MOVX@DPTR,A
MOVX@DPTR,A
MOVA,#LEDCLS;清除LED显示
MOVX@DPTR,A
LCALLDELAY;延时
POPACC;恢复现场
POPDPL
POPDPH
RET
;显示子程序
;输入:
R6,位置R7,值
DISLED:
PUSHDPH
PUSHDPL
PUSHACC
MOVA,#LEDWR0;置显示起始地址
ADDA,R6;加位置偏移量
MOVDPTR,#Z8279
MOVX@DPTR,A;设定显示位置
MOVDPTR,#LEDSEG;置显示常数表起始位置
MOVA,R7
MOVCA,@A+DPTR;查表
MOVDPTR,#D8279
MOVX@DPTR,A;显示数据
POPACC
POPDPL
POPDPH
RET
;延时子程序
DELAY:
PUSH2
PUSH1
PUSH0
DELAY1:
MOV1,#00H
DELAY2:
MOV0,#0B2H
DJNZ0,$
DJNZ1,DELAY2;延时100mS
DJNZ2,DELAY1
POP0
POP1
POP2
RET
END
;显示比分子程序
DISPLAY:
MOVA,R2
ADDA,#00H
DAA
ANLA,#0FH
MOVR7,A
MOVR6,#6
LCALLDISLED
MOVA,R2
DAA
SWAPA
ANLA,#0FH
MOVR7,A
MOVR6,#7
LCALLDISLED
MOVA,R3
DAA
ANLA,#0FH
MOVR7,A
MOVR6,#0
LCALLDISLED
MOVA,R3
DAA
SWAPA
ANLA,#0FH
MOVR7,A
MOVR6,#1
LCALLDISLED
MOVR7,R4
MOVR6,#4
LCALLDISLED
MOVR7,R5
MOVR6,#3
LCALLDISLED
RET
;T0中断子程序
INT_T0:
PUSHACC
PUSHPSW
CLRTR0
MOVTL0,#00H
MOVTH0,#4CH
SETBTR0
DJNZR1,EXIT;0.5s是否到了
CLRTR0
SETBjqsbai
EXIT:
POPPSW
POPACC
RETI
LEDSEG:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;'0,1,2,3,4,5,6,7'
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;'8,9,A,B,C,D,E,F'
5.结束语
本实验是基于AEDK5196ET单片机实验系统.以MCS一51单片机为核心,通过LED灯的左右滚动模拟乒乓球的移动,用数码管显示比赛得分和胜负标志,该游戏系统整体符合设计要求,易于操作,比赛结果显示明显,具有一定的可玩性,且运行稳定,可靠性较高。
通过对乒乓球游戏系统的编写,对编程的整体性和模块性有了全面的认识,对所学的专业基础知识有了更深刻的理解。
通过这次的练习,不仅是对基础知识的重新认识,也是对汇编程序的全面认识,对编程的一次很好的锻炼。
6.参考文献
[1]茹国宝,”单品机原理及应用实验指导书”,武汉大学电子信息学院
[2]刘克刚,”单品机实验讲义”,武汉大学电子信息学院
李朝青.《单片机原理及接口技术(第三版)》北京航空航天大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 乒乓球 游戏 模拟器 设计