乒乓球实验报告.doc_第1页
乒乓球实验报告.doc_第2页
乒乓球实验报告.doc_第3页
乒乓球实验报告.doc_第4页
乒乓球实验报告.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

乒乓球比赛实验报告 学号 08008401 东南大学乒乓球比赛微机课程设计实验报告姓 名: 王 祎 学 号: 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) 球以每0.5秒滚过1个LED的速度移动; (2) 回球需在球到达后的0.5秒内进行(按下按钮),否则按失球计; (3) 球未到达提前按下按钮按失球处理,不起回球作用; (4) 在PC机上显示比赛过程,同时用2个八段数码管显示比分(按10进制计数,初始值 0:0,可自行设计显示及规则,可简化为0-9,也可为0-99); (5) 要求精确计时。 2)设计提示 球到达接球方后,立即读接球方的按钮状态,若未按则有效(若已按下则按失球计),并开始0.5秒的计时,在这个0.5秒内不断读接球方按钮状态,直到按下代表“击球”动作。 3)进一步设计要求 (1)通过拨动开关控制球的移动速度,即可设置每个LED点亮时间(0.5 秒、0.3秒、0.2 秒) ; (2)通过拨动开关控制允许击球的时间(0.3 秒、0.2 秒、0.1 秒) ; (3)用88点阵配合比赛过程,显示比分; (4)用一个开关控制进入智能模式,智能模式要求:球移动速度取决于击球时间,球移动速度(每个LED 点亮时间)在 0.20.5秒内可变,具体取决于球到达接球方后击球所花的时间 00.5 秒,如花费的时间短则回球后球移动速度快,反之回球后移动速度慢,如下表所示。 球移动速度与击球时间对应表球到达至击球时间00.2 秒0.20.3 秒0.30.4 秒0.40.5 秒球移动速度(灯点亮时间)0.2 秒0.3 秒0.4 秒0.5 秒二. 总方案设计及原理(一)比赛规则 对题目进行理解和深化后,将乒乓球比赛的规则规定如下:(1) 使用两个开关K0、K7模拟左方和右方的发球和接球,拨向0表示不做任何动作,拨向1则表示接球和发球。(2) 球未到达提前将开关拨向1则按失球处理,不起回球作用。(3) 回球需在球到达后的规定时间内进行(按下按钮),否则按失球计。接球的规定时间默认为0.5秒,但是可以通过相应开关K4/K5选择其它规定时间,如0.3秒、0.2秒和0.1秒。(4) 球的移动速度默认为0.5秒,但是可以通过相应开关K2/K3选择其它速度,如0.3秒、0.2秒。(5) 该比赛采取9分制,即先得到9分的选手获胜,即一场比赛结束。(6) 每次发球由上一次失分方执行(输方发球)。(7) 在PC机上显示比赛过程,同时用两个八段数码管显示比分。(二)面板设计实验方案的面板设计如下:K7 K6 K5 K4 K3 K2 K1 K0控制右边选手的发球和接球控制左边选手的发球和接球8盏灯显示乒乓球的移动共同调节控制球的移动速度共同调节控制接球的规定时间数码管显示比赛分数PC显示比赛进程(三)方案流程图NNYNYYNN开 始显示“比赛开始”显示“请右边队员发球”右边是否发球(K0是否已拨)YN显示“请左边队员接球”球向左移动一次,并判断移动速度的开关状态并做出改变是否到达最左边YN是否提前接球(是否拨K7)判断接球规定时间的开关状态并做出改变。并在规定时间内监测是否接到球(K7是否已拨)Y显示“请右边队员接球”左边第二个灯亮并开始向右移动球向右移动一次,并判断移动速度的开关状态并做出改变是否到达最右边Y左边失球右边得一分N数码管显示比分,并判断得分是否满9显示“比赛结束”显示“请左边队员发球”左边是否发球(K7是否已拨)退出比赛结束NYNY是否提前接球(是否拨K0)判断接球规定时间的开关状态并做出改变。并在规定时间内监测是否接到球(K0是否已拨)YY右边失球左边得一分N数码管显示比分,并判断得分是否满9三. 方案实现与测试(一)各模块硬件设计通过分析,确定需要用到芯片8255监测开关状态、输出灯的动态流向和输出数码管的段选。需要用到芯片8253精确计时。需要芯片74LS273用于位选。(1)82558255是实现并行输入输出功能的芯片,对于流水灯和数码管显示有很好的实现效果。8255有三个口供选择,我将其设定为方式0,A、B口输出、C口输入,C口对应的PC0PC7(除PC1、PC6外)分别与开关K0K7(除K1、K6外)相对应,用于监测左方和右方的发球与接球、改变灯移动时间间隔和改变规定的等待时间。A口对应的PA0PA7与LED灯L0L7相连接,通过A口并行输出控制灯的流动。B口对应的PB0PB7与八段数码管的ah相对应,通过B口并行输出控制数码管断码的选择。(2)82538253用于精确定时,由于用于定时器要定时到0.5秒、0.3秒、0.2秒和0.1秒,又由于最大初始值为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 NNYYNNNNYN Y开 始设置8255为方式0,C口输入,A、B口输出显示“competition begin”显示“right faqiu”调用比分扫描子程序8255C口输入数据最右边是否为1 显示“left get ready”8255A口输出01H,CL=8左移一位,A口输出,调用比分扫描子程序,CL减一调用比分扫描子程序、延时子程序CL=18255C口输入最高位是否为1调用等待响应时间子程序调用扫描比分子程序8255C口输入最高位是否为18255C口输入右边第二位是否为08255A口输出00H,右边比分加一调用扫描比分子程序显示“right get goal”调用屏幕显示子程序、扫描子程序得分是否达到9Y显示“game over”显示“right win”调用扫描比分子程序退 出显示“left get ready”8255A口输出01H,CL=7Y N YYNNNNYN Y显示“left faqiu”调用比分扫描子程序8255C口输入数据最左边是否为1 显示“right get ready”8255A口输出80H,CL=8右移一位,A口输出,调用比分扫描子程序,CL减一调用比分扫描子程序、延时子程序CL=18255C口输入最低位是否为1调用等待响应时间子程序调用扫描比分子程序8255C口输入最低位是否为18255C口输入右边第二位是否为08255A口输出00H,左边比分加一调用扫描比分子程序显示“left get goal”调用屏幕显示子程序、扫描子程序得分是否达到9Y显示“game over”显示“left win”调用扫描比分子程序退 出显示“right get ready”8255A口输出80H,CL=7(2)主要程序片段、8255设置控制字MOV DX,IO8255 ;给8255控制字 MOV AL,89H ;方式0,A、B输出,C口输入OUT DX,AL、8255C口监测开关状态及计数器计数状态A:是否发球(右方):BEGIN11: CALL DISP ;扫描比分 MOV DX,IO8255C ;监视开关,是否开始;右边发球 IN AL,DX TEST AL,01H ;右边是否开关已拨 JZ BEGIN11;未拨,继续监测开关B:是否接球(左方): MOV DX,IO8255C ;先判断左边开关的状态;检测左边开关 IN AL,DX TEST AL,80H ;1000000 JNZ FAIL2 ;先按下,按失球计 ;开始检测是否接到球 JMP JIXU1JIXU1: CALL WAITTIME ;开始等待响应计时JIEQIU2: CALL DISP ;扫描比分 MOV DX,IO8255C ;左边接球 IN AL,DX TEST AL,80H ;判断左边是否击到球 JNZ JIDAO2 ;击到球,比赛继续 IN AL,DX TEST AL,02H JNZ JIEQIU2 ;一直循环,当0.5S完时,算失球 JMP FAIL2 ;跳转到失球程序、8255A口并行输出(球的移动)A:发球后球的移动(从右到左): MOV BL,01H ;起始状态,最右边开始亮 MOV AL,BL MOV DX,IO8255A ;输出A口 OUT DX,AL ;00000001 MOV CL,8 ;八次移动 BISAI1: CALL DISP ;扫描比分子程序 MOV DL,0FFH ;判断是否有ESC键按下 MOV AH,06H INT 21H CMP AL,27 JZ EXIT1 ;有键按下,则退出 CALL DELAY ;调用延时子程序 ROL BL,1 ;向左移动一次 MOV AL,BL MOV DX,IO8255A ;输出A口 OUT DX,AL CALL DISP ;调用扫描子程序 DEC CL ;每移动一次减一 CMP CL,1 ;判断是否在最左边 JNZ BISAI1 ;若未完,继续B:接球后球的移动(从左到右):MOV BL,40H ;左边第二个马上亮;左边击到球 MOV DX,IO8255A MOV AL,BL OUT DX,AL MOV CL,7 ;7次移动 JMP BISAI2 ;跳转到从左到右的流水灯的程序 C:失球后灯要全灭(左失球后):FAIL2: CALL DISP ;先显示一下以前的比分 MOV BL,00H ;一次结束后灯全部熄灭 MOV AL,BL MOV DX,IO8255A OUT DX,AL、显示字符串程序例如:MOV DX,OFFSET STRING0 ; STRING0为字符串“比赛开始” MOV AH,09H ;显示信息“比赛开始” INT 21H(五)子程序设计(1)延时子程序流程图NY延时子程序入口调用选择初始值子程序(灯的移动速度选择)调用扫描比分子程序送初始值,使8253开始计数8255C口输入,判断8253是否计数满子程序结束返回主要程序DELAY PROC NEAR ;延迟子程序 PUSH AX PUSH DX CALL LEDTIME ;送初始值 JM: CALL DISP ;扫描比分 MOV DX,IO8255C ;看计时状态 IN AL,DX ;右边第二个开关检测计时器是否满 TEST AL,02H JNZ JM;未满,继续监测 POP DX POP AX RET ;开始移动 DELAY ENDP(2)屏幕显示子程序流程图屏幕显示子程序入口显示“score left:right”将比分转换为ASCII码显示左边得分显示“:”显示右边得分子程序结束返回主要程序PCXS PROC NEAR ;显示屏幕子程序 PUSH AX PUSH DX MOV DX,OFFSET STRING10 MOV AH,09H ;显示信息“现在比分” INT 21H MOV AL,YF ;比分转换,转换为对应的ASCII码 MOV AH,ZF ADD AL,30H ADD AH,30H MOV YX,AL MOV ZX,AH MOV DL,ZX ;显示真实比分,左边得分 MOV AH,02H INT 21H MOV DL,3AH ;显示“:” MOV AH,02H INT 21H MOV DL,YX ;显示右方得分 MOV AH,02H INT 21H POP DX POP AX RET PCXS ENDP(3)数码管扫描比分子程序流程图NY扫描比分子程序入口CX=3LS273送位码00H(全灭)送左边得分断码至8255B口LS273送位码02H(左边亮)延 时LS273送位码00H(全灭)送右边得分断码至8255B口LS273送位码01H(右边亮)延 时CX=0子程序结束返回主要程序例如输出左边分数:MOV DX,LS273 MOV AL,00H OUT DX,AL ;送全灭位选码 XOR SI,SI MOV SI,OFFSET LED MOV BL,ZF ;选择左边分数相对应的断码 MOV BH,00H ADD SI,BX MOV AL,BYTE PTR SI MOV DX,IO8255B OUT DX,AL ;并行输出左边分数 MOV DX,LS273 MOV AL,02H ;位选选择02H,使左边数码管亮 OUT DX,AL如果要输出右边分数,则应选择右边分数相对应的断码,位选选择01H,使右边数码管亮。(4)移动速度选择子程序流程图NYNY移动速度选择子程序入口送8253控制字36H(计数器0,方式3,先低后高)8255C口读开关状态(K2、K3)K2/K3=1/0AX=600(速度0.3)K2/K3=0/1AX=400(速度0.2)AX=1000(速度0.5)8253送计数器0通道初始值送8253控制字74H(计数器1,方式2,先低后高)AX=500,8253送计数器1通道初始值开始计数,子程序返回主要程序通过K2/K3选择灯的移动速度,速度默认为0.5.,另可选择0.3/0.2:MOV DX,IO8253C ;给8253控制字 MOV AL,36H ;计数器0先写低后写高,方式3,二进制 OUT DX,AL MOV DX,IO8255C ;读开关状态 IN AL,DX AND AL,00001100B ;开关2/3调节速度 CMP AL,04H ;2/3=1/0 JNZ NEXT1 MOV AX,600 ;速度0.3 JMP TIME NEXT1: CMP AL,08H ;2/3=0/1 JNZ NEXT2 MOV AX,400 ;速度0.2 JMP TIME NEXT2: MOV AX,1000 ;速度0.5 TIME: MOV DX,IO8253A OUT DX,AL ;先写低字节 MOV AL,AH OUT DX,AL ;后写高字节 MOV DX,IO8253C MOV AL,74H ;方式2 OUT DX,AL MOV AX,500 ;写入循环计数初值500 MOV DX,IO8253B OUT DX,AL ;先写低字节 MOV AL,AH OUT DX,AL ;后写高字节,开始计时(5)规定等待时间选择子程序流程图YNNYNY规定等待时间选择子程序入口送8253控制字36H(计数器0,方式3,先低后高)8255C口读开关状态(K4、K5)K4/K5=1/0AX=600(速度0.3)K4/K5=0/1AX=400(速度0.2)AX=1000(速度0.5)8253送计数器0通道初始值送8253控制字74H(计数器1,方式2,先低后高)AX=500,8253送计数器1通道初始值开始计数,子程序返回K4/K5=1/1AX=200(速度0.1)主要程序子程序中的其它部分与上面的移动速度子程序相同,规定等待时间默认为0.5,另可通过K4、K5选择速度0.3/0.2/0.1,不同的部分程序如下: MOV DX,IO8255C ;读开关状态 IN AL,DX AND AL,00110000B ;开关4/5调节等待响应时间 CMP AL,10H ;5/4=0/1 JNZ WAIT1 MOV AX,600 ;速度0.3 JMP WTIME WAIT1: CMP AL,20H ;5/4=1/0 JNZ WAIT2 MOV AX,400 ;速度0.2 JMP WTIME WAIT2: CMP AL,30H ; 5/4=1/1 JNZ WAIT3 MOV AX,200 ;速度0.1 JMP WTIME WAIT3: MOV AX,1000 速度0.5四程序设计中遇到的问题及解决方法1、8255的A、B、C口都被占用,数码管的位选无法使用8255实现。解决方法:8255B口连接断码ah,两个数码管要动态显示,需要使用74LS273进行位选,实现数码管显示。2、在调试过程中发现只有右边的数码管亮,左边的不亮。解决方法:先检查硬件设备,没有问题。再利用单步调试,发现程序也没有问题。后来发现左边的数码管有亮,但是因为亮的时间不够,肉眼看到的就是不亮,而右边的之所以一直亮,是因为在退出数码管扫描显示子程序时,选中了位码S0,所以一直亮。只需要将扫描子程序多多放在流水灯的主程序里面,多运行几次,肉眼看到数码管就都是亮的,就能解决这个问题。3、发现主程序过长,从程序尾跳到程序头不能一步实现。解决方法:在程序中设置过渡跳转程序即可解决。4、当接到球后,从左到右移动时,发现会有两个两个灯一起移动的情况。解决方法:单步调试时发现程序有问题。赋给流水灯的值为60H,即01100000,应将赋的值为40H,即01000000,左边第二个灯亮。5、当在主程序中有的地方加上数码管扫描比分子程序后,出现了流水灯不走的情况。解决方法:在单步调试中发现,这种情况都是发生在子程序加在JZ 、JNZ等判断条件前一行的。说明子程序是改变了标志寄存器中的一些标志位。所以应将子程序的调用放在其它地方,不能放在判断条件的前一行。五分析与总结1、 具体实验分析见各部分的调试实验分析。2、 硬件是基础,做实验时要首先检查硬件设备是否可用,保证后续实验的可检测性。3、 在实验中应不要带电接线、插拔芯片;插拔接线时轻微转动,便于插拔。4、 在实验中学会使用示波器、万用表、逻辑笔观察、测量。5、 实验中出现问题时,要进行单步调试来发现问题。6、 在程序设计中,设计流程图是十分关键的,有了流程图后对软件设计有一定的指导方向。附录:程序代码 IOPORT EQU 0EC00H-0280H ;tpc卡中设备的io地址 IO8255A EQU IOPORT+288H ;8255A口地址 IO8255B EQU IOPORT+289H ;8255B口地址 IO8255C EQU IOPORT+28AH ;8255C口地址 IO8255 EQU IOPORT+28BH ;8255控制寄存器端口地址 IO8253C EQU IOPORT+283H ;8253控制寄存器地址 IO8253A EQU IOPORT+280H ;计数器通道0地址 IO8253B EQU IOPORT+281H ;计数器通道1地址 LS273 EQU IOPORT+2A8H ;273,位选地址; DATA SEGMENT ZF DB 00H ;左边队员的比分 YF DB 00H ;右边队员的比分 ZX DB 00H ;左边队员比分显示 YX DB 00H ;右边队员比分显示 STRING0 DB 0DH,0AH,competiton begin:,0DH,0AH,$ STRING1 DB 0DH,0AH,right faqiu,0DH,0AH,$ STRING2 DB 0DH,0AH,left faqiu,0DH,0AH,$ STRING3 DB 0DH,0AH,right get ready,0DH,0AH,$ STRING4 DB 0DH,0AH,left get ready,0DH,0AH,$ STRING5 DB 0DH,0AH,right get goal,0DH,0AH,$ STRING6 DB 0DH,0AH,left get goal,0DH,0AH,$ STRING7 DB 0DH,0AH,right win!,0DH,0AH,$ STRING8 DB 0DH,0AH,left win!,0DH,0AH,$ STRING9 DB 0DH,0AH,game over!,0DH,0AH,$ STRING10 DB 0DH,0AH,score left:right,0DH,0AH,$ LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段码(分别为0,1,2,3,4,5,6,7,8,9) DATA ENDS; STACKS SEGMENT STACK DB 100 DUP(?) STACKS ENDS;右边的标志为1,左边为2,规则为输家发球,流水灯及接球发球功能,显示在PC上的游戏进程和比分 ;开关2/3控制流水灯速度 ,默认速度是0.5,等待时间和由4/5控制,默认速度是0.5 ; CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKS START: MOV AX,STACKS MOV SS,AX MOV AX,DATA MOV DS,AX MOV DX,IO8255 ;给8255控制字 MOV AL,89H ;方式0,A、B输出,C口输入 OUT DX,AL START1: MOV DX,OFFSET STRING0 MOV AH,09H ;显示信息“比赛开始” INT 21H BEGIN1: MOV DX,OFFSET STRING1 MOV AH,09H ;显示信息“请右边队员发球” INT 21H BEGIN11: CALL DISP ;扫描比分 MOV DX,IO8255C ;监视开关,是否开始;右边发球 IN AL,DX TEST AL,01H ;右边是否开关已拨 JZ BEGIN11 MOV DX,OFFSET STRING4 MOV AH,09H ;显示信息“请左边队员接球” INT 21H MOV BL,01H ;起始状态,最 右边开始亮 MOV AL,BL MOV DX,IO8255A ;输出A口 OUT DX,AL ;00000001 MOV CL,8 ;八次移动 BISAI1: CALL DISP ;扫描比分 MOV DL,0FFH ;判断是否有ESC键按下 MOV AH,06H INT 21H CMP AL,27 JZ EXIT1 ;有键按下,则退出 CALL DELAY ;从右边到左边 ROL BL,1 ;向左移动一次 MOV AL,BL MOV DX,IO8255A ;输出A口 OUT DX,AL CALL DISP DEC CL ;每移动一次减一 CMP CL,1 ;判断是否在最左边 JNZ BISAI1 ;若未完,继续 MOV DX,IO8255C ;先判断左边开关的状态;检测左边开关 IN AL,DX TEST AL,80H ;1000000 JNZ FAIL2 ;先按下,按失球计 ;开始检测是否接到球 JMP JIXU1; BEGIN4: JMP BEGIN1 ;远程跳转; JIXU1: CALL WAITTIME ;开始等待响应计时 JIEQIU2: CALL DISP ;扫描比分 MOV DX,IO8255C ;左边接球 IN AL,DX TEST AL,80H ;判断左边是否击到球 JNZ JIDAO2 ;击到球,比赛继续 IN AL,DX TEST AL,02H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论