乒乓球实验报告.docx
- 文档编号:27824654
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:38
- 大小:25.09KB
乒乓球实验报告.docx
《乒乓球实验报告.docx》由会员分享,可在线阅读,更多相关《乒乓球实验报告.docx(38页珍藏版)》请在冰豆网上搜索。
乒乓球实验报告
东南大学
《乒乓球比赛》
微机课程设计实验报告
姓名:
王祎学号:
08008401
专业:
自动化实验室:
计算机硬件技术
实验时间:
2010年10月26日报告时间:
2010年10月28日
评定成绩:
审阅教师:
一、实验目的与内容……………………………………………………………2
二、总方案设计及原理…………………………………………………………3
(一)比赛规则………………………………………………………………3
(二)面板设计………………………………………………………………3
(三)方案流程图……………………………………………………………3
三、方案实现与测试……………………………………………………………5
(一)各模块硬件设计………………………………………………………5
(二)整体硬件连线图…………………………………………………………6
(三)系统框图………………………………………………………………7
(四)主程序设计……………………………………………………………7
(1)主程序流程图………………………………………………………7
(2)主要程序片段………………………………………………………9
(五)子程序设计……………………………………………………………11
(1)延时子程序………………………………………………………11
(2)屏幕显示子程序……………………………………………………12
(3)数码管扫描比分子程序………………………………………………13
(4)移动速度选择子程序………………………………………………16
(5)规定等待时间选择子程序……………………………………………17
四、程序设计中遇到的问题及解决方法………………………………………18
五、分析与总结…………………………………………………………………18
附录………………………………………………………………………………19
一.实验目的与内容
1)基本要求
用8个LED发光管(红黄绿)的来回滚动显示来模拟打乒乓球时乒乓球在两边球台上的来回运动。
比赛
双方用按钮/开关(双方各用1个按钮/开关)来模拟发球与接球,即发球方按动其控制的按钮/开关,球从
发球方一侧向另一方运动(LED发光管从发球方到对方逐个点亮,滚动显示),当球运动至接球方时,接球
方立即按动其控制的按钮/开关,“击球”使球“弹回”发球方一侧,如此周而复始,直至在规定的击球时间内有一方未能完成击球动作,从而对方得一分,然后继续比赛。
比赛规则可参照一般的乒乓球比赛规则。
要求:
(1)球以每秒滚过1个LED的速度移动;
(2)回球需在球到达后的秒内进行(按下按钮),否则按失球计;
(3)球未到达提前按下按钮按失球处理,不起回球作用;
(4)在PC机上显示比赛过程,同时用2个八段数码管显示比分(按10进制计数,初始值0:
0,可自行设计显示及规则,可简化为0-9,也可为0-99);
(5)要求精确计时。
2)设计提示
球到达接球方后,立即读接球方的按钮状态,若未按则有效(若已按下则按失球计),并开始秒的计时,在这个秒内不断读接球方按钮状态,直到按下代表“击球”动作。
3)进一步设计要求
(1)通过拨动开关控制球的移动速度,即可设置每个LED点亮时间(秒、秒、秒);
(2)通过拨动开关控制允许击球的时间(秒、秒、秒);
(3)用8×8点阵配合比赛过程,显示比分;
(4)用一个开关控制进入智能模式,智能模式要求:
球移动速度取决于击球时间,球移动速度(每个LED点亮时间)在~秒内可变,具体取决于球到达接球方后击球所花的时间0~秒,如花费的时间短则回球后球移动速度快,反之回球后移动速度慢,如下表所示。
球移动速度与击球时间对应表
球到达至击球时间
0~秒
~秒
~秒
~秒
球移动速度(灯点亮时间)
秒
秒
秒
秒
二.总方案设计及原理
(一)比赛规则
对题目进行理解和深化后,将乒乓球比赛的规则规定如下:
(1)使用两个开关K0、K7模拟左方和右方的发球和接球,拨向0表示不做任何动作,拨向1则表示接球和发球。
(2)球未到达提前将开关拨向1则按失球处理,不起回球作用。
(3)回球需在球到达后的规定时间内进行(按下按钮),否则按失球计。
接球的规定时间默认为秒,但是可以通过相应开关K4/K5选择其它规定时间,如秒、秒和秒。
(4)球的移动速度默认为秒,但是可以通过相应开关K2/K3选择其它速度,如秒、秒。
(5)该比赛采取9分制,即先得到9分的选手获胜,即一场比赛结束。
(6)每次发球由上一次失分方执行(输方发球)。
(7)在PC机上显示比赛过程,同时用两个八段数码管显示比分。
(二)面板设计
实验方案的面板设计如下:
K7K6K5K4K3K2K1K0
控制右边选手的发球和接球
控制左边选手的发球和接球
8盏灯显示乒乓球的移动
共同调节控制球的移动速度
共同调节控制接球的规定时间
数码管显示比赛分数
PC
显示比赛进程
(三)方案流程图
N
N
Y
N
Y
Y
N
N
开始
显示“比赛开始”
显示“请右边队员发球”
右边是否发球(K0是否已拨)
Y
N
显示“请左边队员接球”
球向左移动一次,并判断移动速度的开关状态并做出改变
是否到达最左边
Y
N
是否提前接球(是否拨K7)
判断接球规定时间的开关状态并做出改变。
并在规定时间内监测是否接到球(K7是否已拨)
Y
显示“请右边队员接球”
左边第二个灯亮并开始向右移动
球向右移动一次,并判断移动速度的开关状态并做出改变
是否到达最右边
Y
左边失球
右边得一分
N
数码管显示比分,并判断得分是否满9
显示“比赛结束”
显示“请左边队员发球”
左边是否发球(K7是否已拨)
退出比赛
结束
N
Y
N
Y
是否提前接球(是否拨K0)
判断接球规定时间的开关状态并做出改变。
并在规定时间内监测是否接到球(K0是否已拨)
Y
Y
右边失球
左边得一分
N
数码管显示比分,并判断得分是否满9
三.方案实现与测试
(一)各模块硬件设计
通过分析,确定需要用到芯片8255监测开关状态、输出灯的动态流向和输出数码管的段选。
需要用到芯片8253精确计时。
需要芯片74LS273用于位选。
(1)8255
8255是实现并行输入输出功能的芯片,对于流水灯和数码管显示有很好的实现效果。
8255有三个口供选择,我将其设定为方式0,A、B口输出、C口输入,C口对应的PC0~PC7(除PC1、PC6外)分别与开关K0~K7(除K1、K6外)相对应,用于监测左方和右方的发球与接球、改变灯移动时间间隔和改变规定的等待时间。
A口对应的PA0~PA7与LED灯L0~L7相连接,通过A口并行输出控制灯的流动。
B口对应的PB0~PB7与八段数码管的a~h相对应,通过B口并行输出控制数码管断码的选择。
(2)8253
8253用于精确定时,由于用于定时器要定时到秒、秒、秒和秒,又由于最大初始值为65536,所以需要计数器通道0和1级联使用。
GATE0、GATE1都接5V高电平,CLK0输入接1MHZ脉冲信号,计数器通道0输出的OUT0与计数器通道1的输入CLK1相连接,最终的通道1的输出OUT1与8255的PC1口相连接,监测是否计数已满,计数器通道0采用计数方式3,计数器通道1采用计数方式2。
(3)74LS273
由于8255的口都被占用了,所以要使用74LS273对数码管的位选进行选择。
数码管的显示在比赛过程中一直显示,两个数码管的显示要用动态显示,即通过位选,使数码管一位一位地显示,由于显示的速度过快,则肉眼看到觉得两个数码管是一起亮的。
74LS273的输出Q1接位选的S0,输出Q2接位选的S1,而74LS273的输入接实验箱的D0、D1的数据输出。
但是不能一直对其进行位选,所以应该将数码管显示程序多放在整个程序当中,使得数码管看上去在整个比赛过程中一直亮着。
(二)整体硬件连线图
(三)系统框图
out
并行输出流水灯状态
8255
并行输入开关状态
(PC1、PC6除外)
PC1
并行输出数码管断码
流水灯
开关(K1、K6除外)
数码管
8253
计数
初始值
74LS273
数码管位选
位选数值
(四)主程序设计
(1)主程序流程图
Y
N
N
Y
Y
N
N
N
N
Y
N
Y
开始
设置8255为方式0,C口输入,A、B口输出
显示“competitionbegin”
显示“rightfaqiu”
调用比分扫描子程序
8255C口输入数据最右边是否为1
显示“leftgetready”
8255A口输出01H,CL=8
左移一位,A口输出,调用比分扫描子程序,CL减一
调用比分扫描子程序、延时子程序
CL=1
8255C口输入最高位是否为1
调用等待响应时间子程序
调用扫描比分子程序
8255C口输入最高位是否为1
8255C口输入右边第二位是否为0
8255A口输出00H,右边比分加一
调用扫描比分子程序
显示“rightgetgoal”
调用屏幕显示子程序、扫描子程序
得分是否达到9
Y
显示“gameover”
显示“rightwin”
调用扫描比分子程序
退出
显示“leftgetready”
8255A口输出01H,CL=7
Y
N
Y
Y
N
N
N
N
Y
N
Y
显示“leftfaqiu”
调用比分扫描子程序
8255C口输入数据
最左边是否为1
显示“rightgetready”
8255A口输出80H,CL=8
右移一位,A口输出,调用比分扫描子程序,CL减一
调用比分扫描子程序、延时子程序
CL=1
8255C口输入最低位是否为1
调用等待响应时间子程序
调用扫描比分子程序
8255C口输入最低位是否为1
8255C口输入右边第二位是否为0
8255A口输出00H,左边比分加一
调用扫描比分子程序
显示“leftgetgoal”
调用屏幕显示子程序、扫描子程序
得分是否达到9
Y
显示“gameover”
显示“leftwin”
调用扫描比分子程序
退出
显示“rightgetready”
8255A口输出80H,CL=7
(2)主要程序片段
①、8255设置控制字
MOVDX,IO8255;给8255控制字
MOVAL,89H;方式0,A、B输出,C口输入
OUTDX,AL
②、8255C口监测开关状态及计数器计数状态
A:
是否发球(右方):
BEGIN11:
CALLDISP;扫描比分
MOVDX,IO8255C;监视开关,是否开始;右边发球
INAL,DX
TESTAL,01H;右边是否开关已拨
JZBEGIN11;未拨,继续监测开关
B:
是否接球(左方):
MOVDX,IO8255C;先判断左边开关的状态;检测左边开关
INAL,DX
TESTAL,80H;1000000
JNZFAIL2;先按下,按失球计
;开始检测是否接到球
JMPJIXU1
JIXU1:
CALLWAITTIME;开始等待响应计时
JIEQIU2:
CALLDISP;扫描比分
MOVDX,IO8255C;左边接球
INAL,DX
TESTAL,80H;判断左边是否击到球
JNZJIDAO2;击到球,比赛继续
INAL,DX
TESTAL,02H
JNZJIEQIU2;一直循环,当完时,算失球
JMPFAIL2;跳转到失球程序
③、8255A口并行输出(球的移动)
A:
发球后球的移动(从右到左):
MOVBL,01H;起始状态,最右边开始亮
MOVAL,BL
MOVDX,IO8255A;输出A口
OUTDX,AL;00000001
MOVCL,8;八次移动
BISAI1:
CALLDISP;扫描比分子程序
MOVDL,0FFH;判断是否有ESC键按下
MOVAH,06H
INT21H
CMPAL,27
JZEXIT1;有键按下,则退出
CALLDELAY;调用延时子程序
ROLBL,1;向左移动一次
MOVAL,BL
MOVDX,IO8255A;输出A口
OUTDX,AL
CALLDISP;调用扫描子程序
DECCL;每移动一次减一
CMPCL,1;判断是否在最左边
JNZBISAI1;若未完,继续
B:
接球后球的移动(从左到右):
MOVBL,40H;左边第二个马上亮;左边击到球
MOVDX,IO8255A
MOVAL,BL
OUTDX,AL
MOVCL,7;7次移动
JMPBISAI2;跳转到从左到右的流水灯的程序
C:
失球后灯要全灭(左失球后):
FAIL2:
CALLDISP;先显示一下以前的比分
MOVBL,00H;一次结束后灯全部熄灭
MOVAL,BL
MOVDX,IO8255A
OUTDX,AL
④、显示字符串程序
例如:
MOVDX,OFFSETSTRING0;STRING0为字符串“比赛开始”
MOVAH,09H;显示信息“比赛开始”
INT21H
(五)子程序设计
(1)延时子程序
①流程图
N
Y
延时子程序入口
调用选择初始值子程序(灯的移动速度选择)
调用扫描比分子程序
送初始值,使8253开始计数
8255C口输入,判断8253是否计数满
子程序结束返回
②主要程序
DELAYPROCNEAR;延迟子程序
PUSHAX
PUSHDX
CALLLEDTIME;送初始值
JM:
CALLDISP;扫描比分
MOVDX,IO8255C;看计时状态
INAL,DX;右边第二个开关检测计时器是否满
TESTAL,02H
JNZJM;未满,继续监测
POPDX
POPAX
RET;开始移动
DELAYENDP
(2)屏幕显示子程序
①流程图
屏幕显示子程序入口
显示“scoreleft:
right”
将比分转换为ASCII码
显示左边得分
显示“:
”
显示右边得分
子程序结束返回
②主要程序
PCXSPROCNEAR;显示屏幕子程序
PUSHAX
PUSHDX
MOVDX,OFFSETSTRING10
MOVAH,09H;显示信息“现在比分”
INT21H
MOVAL,YF;比分转换,转换为对应的ASCII码
MOVAH,ZF
ADDAL,30H
ADDAH,30H
MOVYX,AL
MOVZX,AH
MOVDL,ZX;显示真实比分,左边得分
MOVAH,02H
INT21H
MOVDL,3AH;显示“:
”
MOVAH,02H
INT21H
MOVDL,YX;显示右方得分
MOVAH,02H
INT21H
POPDX
POPAX
RET
PCXSENDP
(3)数码管扫描比分子程序
①流程图
N
Y
扫描比分子程序入口
CX=3
LS273送位码00H(全灭)
送左边得分断码至8255B口
LS273送位码02H(左边亮)
延时
LS273送位码00H(全灭)
送右边得分断码至8255B口
LS273送位码01H(右边亮)
延时
CX=0
子程序结束返回
②主要程序
例如输出左边分数:
MOVDX,LS273
MOVAL,00H
OUTDX,AL;送全灭位选码
XORSI,SI
MOVSI,OFFSETLED
MOVBL,ZF;选择左边分数相对应的断码
MOVBH,00H
ADDSI,BX
MOVAL,BYTEPTR[SI]
MOVDX,IO8255B
OUTDX,AL;并行输出左边分数
MOVDX,LS273
MOVAL,02H;位选选择02H,使左边数码管亮
OUTDX,AL
如果要输出右边分数,则应选择右边分数相对应的断码,位选选择01H,使右边数码管亮。
(4)移动速度选择子程序
①流程图
N
Y
N
Y
移动速度选择子程序入口
送8253控制字36H(计数器0,方式3,先低后高)
8255C口读开关状态(K2、K3)
K2/K3=1/0
AX=600(速度)
K2/K3=0/1
AX=400(速度)
AX=1000(速度)
8253送计数器0通道初始值
送8253控制字74H(计数器1,方式2,先低后高)
AX=500,8253送计数器1通道初始值
开始计数,子程序返回
②主要程序
通过K2/K3选择灯的移动速度,速度默认为.,另可选择:
MOVDX,IO8253C;给8253控制字
MOVAL,36H;计数器0先写低后写高,方式3,二进制
OUTDX,AL
MOVDX,IO8255C;读开关状态
INAL,DX
ANDAL,00001100B;开关2/3调节速度
CMPAL,04H;2/3=1/0
JNZNEXT1
MOVAX,600;速度
JMPTIME
NEXT1:
CMPAL,08H;2/3=0/1
JNZNEXT2
MOVAX,400;速度
JMPTIME
NEXT2:
MOVAX,1000;速度
TIME:
MOVDX,IO8253A
OUTDX,AL;先写低字节
MOVAL,AH
OUTDX,AL;后写高字节
MOVDX,IO8253C
MOVAL,74H;方式2
OUTDX,AL
MOVAX,500;写入循环计数初值500
MOVDX,IO8253B
OUTDX,AL;先写低字节
MOVAL,AH
OUTDX,AL;后写高字节,开始计时
(5)规定等待时间选择子程序
①流程图
Y
N
N
Y
N
Y
规定等待时间选择子程序入口
送8253控制字36H(计数器0,方式3,先低后高)
8255C口读开关状态(K4、K5)
K4/K5=1/0
AX=600(速度)
K4/K5=0/1
AX=400(速度)
AX=1000(速度)
8253送计数器0通道初始值
送8253控制字74H(计数器1,方式2,先低后高)
AX=500,8253送计数器1通道初始值
开始计数,子程序返回
K4/K5=1/1
AX=200(速度)
②主要程序
子程序中的其它部分与上面的移动速度子程序相同,规定等待时间默认为,另可通过K4、K5选择速度,不同的部分程序如下:
MOVDX,IO8255C;读开关状态
INAL,DX
ANDAL,00110000B;开关4/5调节等待响应时间
CMPAL,10H;5/4=0/1
JNZWAIT1
MOVAX,600;速度
JMPWTIME
WAIT1:
CMPAL,20H;5/4=1/0
JNZWAIT2
MOVAX,400;速度
JMPWTIME
WAIT2:
CMPAL,30H;5/4=1/1
JNZWAIT3
MOVAX,200;速度
JMPWTIME
WAIT3:
MOVAX,1000速度
四.程序设计中遇到的问题及解决方法
1、8255的A、B、C口都被占用,数码管的位选无法使用8255实现。
解决方法:
8255B口连接断码a~h,两个数码管要动态显示,需要使用74LS273进行位选,实现数码管显示。
2、在调试过程中发现只有右边的数码管亮,左边的不亮。
解决方法:
先检查硬件设备,没有问题。
再利用单步调试,发现程序也没有问题。
后来发现左边的数码管有亮,但是因为亮的时间不够,肉眼看到的就是不亮,而右边的之所以一直亮,是因为在退出数码管扫描显示子程序时,选中了位码S0,所以一直亮。
只需要将扫描子程序多多放在流水灯的主程序里面,多运行几次,肉眼看到数码管就都是亮的,就能解决这个问题。
3、发现主程序过长,从程序尾跳到程序头不能一步实现。
解决方法:
在程序中设置过渡跳转程序即可解决。
4、当接到球后,从左到右移动时,发现会有两个两个灯一起移动的情况。
解决方法:
单步调试时发现程序有问题。
赋给流水灯的值为60H,即01100000,应将赋的值为40H,即01000000,左边第二个灯亮。
5、当在主程序中有的地方加上数码管扫描比分子程序后,出现了流水灯不走的情况。
解决方法:
在单步调试中发现,这种情况都是发生在子程序加在JZ、JNZ等判断条件前一行的。
说明子程序是改变了标志寄存器中的一些标志位。
所以应将子程序的调用放在其它地方,不能放在判断条件的前一行。
五.分析与总结
1、具体实验分析见各部分的调试实验分析。
2、硬件是基础,做实验时要首先检查硬件设备是否可用,保证后续实验的可检测性。
3、在实验中应不要带电接线、插拔芯片;插拔接线时轻微转动,便于插拔。
4、在实验中学会使用示波器、万用表、逻辑笔观察、测量。
5、实验中出现问题时,要进行单步调试来发现问题。
6、在程序设计中,设计流程图是十分关键的,有了流程图后对软件设计有一定的指导方向。
附录:
程序代码
IOPORTEQU0EC00H-0280H;tpc卡中设备的io地址
IO8255AEQUIOPORT+288H;8255A口地址
IO8255BEQUIOPORT+289H;8255B口地址
IO8255CEQUIOPORT+28AH;8255C口地址
IO8255EQUIOPORT+28BH;8255控制寄存器端口地址
IO8253CEQUIOPORT+283H;8253控制寄存器地址
IO8253AEQUIOPORT+280H;计数器通道0地址
IO8253BEQUIOPORT+281H;计数器通道1地址
LS273EQUIOPORT+2A8H;273,位选地址
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATASEGMENT
ZFDB00H;左边队员的比分
YFDB00H;右边队员的比分
ZXDB00H;左边队员比分显示
YXDB00H;右边队员比分显示
STRING0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 乒乓球 实验 报告