乒乓球游戏模拟器设计.docx

上传人:b****7 文档编号:10546735 上传时间:2023-02-21 格式:DOCX 页数:21 大小:292.16KB
下载 相关 举报
乒乓球游戏模拟器设计.docx_第1页
第1页 / 共21页
乒乓球游戏模拟器设计.docx_第2页
第2页 / 共21页
乒乓球游戏模拟器设计.docx_第3页
第3页 / 共21页
乒乓球游戏模拟器设计.docx_第4页
第4页 / 共21页
乒乓球游戏模拟器设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

乒乓球游戏模拟器设计.docx

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

乒乓球游戏模拟器设计.docx

乒乓球游戏模拟器设计

基于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]刘克刚,”单品机实验讲义”,武汉大学电子信息学院

李朝青.《单片机原理及接口技术(第三版)》北京航空航天大学出版社

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

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

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

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