ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:18.17KB ,
资源ID:3648232      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3648232.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机实验课程作业乒乓球.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机实验课程作业乒乓球.docx

1、单片机实验课程作业乒乓球;系统晶振是 11.0592 MHz;R0控制延时程序时间 R1标记连续发球次数 R3设置球弹跳一次的路程 R4储存某些情况下8个LED灯的状态 R5设置等待击球的时间 R6,R7用于LED数码管显示AGREEN EQU P1.0BGREEN EQU P1.1ARED EQU P1.2BRED EQU P1.3SCOREA EQU 70H ;A的得分SCOREB EQU 71H ;B的得分BOARDA EQU 72H ;A的得胜局数BOARDB EQU 73H ;B的得胜局数SPEED EQU 74H ;存储球的移动速度LEDMOD EQU 00H ;左边输入 八位字符

2、显示 ;外部译码键扫描方式,双键互锁LEDFEQ EQU 2FH ;扫描速率LEDCLS EQU 0C1H ;清除显示 RAMLEDWR0 EQU 80H ;设定的将要写入的显示RAM地址LBOARD EQU 02H ;三局两胜制LSCORE EQU 0BH ;11分制D8255 EQU 8406H ;8255 状态/命令口地址D8255A EQU 8400H ;8255 PA 口地址D8255B EQU 8402H ;8255 PB 口地址D8255C EQU 8404H ;8255 PC 口地址Z8279 EQU 0FF82H ;8279 状态/命令口地址D8279 EQU 0FF80H

3、;8279 数据口地址BOUND EQU 05H ;发球前弹跳的速度NUMMOVE EQU 07H ;球从左到右所走的路程NUMSHINE EQU 03H ;闪烁的次数READKB EQU 00H ;读 FIFO RAM 地址 0 的命令字DELETE EQU 0C2H ;清除FIFO RAMSRIGTH EQU 20H.0 ;设置此处片内RAM为发球权归属,0-A 1-B ORG 0000H AJMP START ORG 0040HSTART: MOV R1,#02H MOV SP,#60H MOV R5,#NUMSHINE ;设置闪烁三次 CLR SRIGTH ;设置A初始发球 MOV D

4、PTR,#D8255 MOV A,#82H MOVX DPTR,A ;置8255状态,方式0,PA,PC口输出,PB口输入 MOV DPTR,#D8255A ;DPTR指向A端口 MOV R3,#NUMMOVE ;设置路程 MOV A,#0H MOV SCOREA,A ;初始的分数都为0 MOV SCOREB,A MOV BOARDA,A MOV BOARDB,A ;可以设置回球的速度为0.5秒 LCALL INIT_ALL ;初始化8279并显示 LCALL INIT8279 MOV R0,#02H LCALL DELAY LCALL DISPLAY ;初始化8279并显示 LJMP REP

5、LAY ;*发球总程序SERVICE: MOV C,SRIGTH JNC ASERVICE ;如果为0,则A发球 LJMP BSERVICE ;否则B发球;*发球总程序;*A发球程序 ASERVICE: CLR AGREEN ;首先设置A方为绿灯,A发球 SETB AREDAWAIT: ;以下为等A发球,同时球在弹跳的程序 MOV R0,#BOUND ;设置弹跳为0.1秒一次 MOV R4,#01H MOV A,R4 MOV DPTR,#D8255A MOVX DPTR,A CPL P3.5 LCALL DELAY MOV A,#00H MOVX DPTR,A CPL P3.5 LCALL D

6、ELAY LCALL GETKEY ;循环等待A方发球 CJNE A,#0FFH,AWAIT MOV A,B CJNE A,#30H,AWAIT ;如果输入的不是A的发球键,继续循环 ASEND: ;A传球程序 CLR AGREEN CLR ARED SETB BRED SETB BGREEN ;可以设置回球的速度为0.5秒 MOV A,SPEED MOV R0,A ;可以设置回球的速度为0.5秒 MOV A,#01H LCALL ROTATE1 ;调用A传球程序,把球送到B方 CPL P3.5 LCALL INVALID_8279 ;要求A传球期间B的按键无效 LCALL INIT_8255

7、 LCALL SHINE ;shine持续数秒,期间B可以输入 LCALL GETKEY ;读取这一期间的输入 CJNE A,#0FFH,AUDITA ;如果没有输入,B失球,开始清算! MOV A,B CJNE A,#36H,AUDITA ;如果没有输入(输入错误),B失球,开始清算! LJMP BSEND;*A发球程序;B发球程序* BSERVICE: CLR BGREEN ;首先设置B方为绿灯,B发球 SETB BRED BWAIT: ;以下为等B发球,同时球在弹跳的程序 MOV R0,#BOUND ;设置弹跳为0.2秒一次 MOV R4, #80H MOV A,R4 MOV DPTR,

8、#D8255A MOVX DPTR,A CPL P3.5 LCALL DELAY MOV A,#00H MOVX DPTR,A CPL P3.5 LCALL DELAY LCALL GETKEY ;看B方发球有没有发球 CJNE A,#0FFH,BWAIT MOV A,B CJNE A,#36H,BWAIT ;如果输入的不是B的发球键,继续循环 BSEND: ;B传球程序 CLR BGREEN CLR BRED SETB ARED SETB AGREEN ;可以设置回球的速度为0.5秒 MOV A,SPEED MOV R0,A ;可以设置回球的速度为0.5秒 MOV A,#80H LCALL

9、ROTATE2 ;调用B传球程序,把球送到B方 CPL P3.5 LCALL INVALID_8279 ;要求B传球期间A的按键无效 LCALL INIT_8255 LCALL SHINE ;shine持续数秒,期间A可以输入 LCALL GETKEY ;读取这一期间的输入 CJNE A,#0FFH,AUDITB ;如果没有输入,A失球,开始清算! MOV A,B CJNE A,#30H,AUDITB ;如果没有输入(输入错误),A失球,开始清算! LJMP ASEND;*B发球程序 REPLAY: DJNZ R1,RESTA MOV R1,#02H CPL SRIGTHRESTA: LJMP

10、 SERVICE AUDITA: CLR BRED SETB BGREEN SETB AGREEN SETB ARED LCALL DELAY MOV A,SCOREA ;A的得分加一 INC A MOV SCOREA,A ;初始化8279并显示 LCALL DISPLAY NOP ;初始化8279并显示 CJNE A,#LSCORE,REPLAY ;没加够11,则继续玩 LJMP CHECKA ;加够11,则进入A的2级清算 AUDITB: CLR ARED SETB AGREEN SETB BGREEN SETB BRED LCALL DELAY MOV A,SCOREB ;B的得分加一

11、INC A MOV SCOREB,A ;初始化8279并显示 LCALL DISPLAY ;初始化8279并显示 CJNE A,#LSCORE,REPLAY ;没加够11,则继续玩 LJMP CHECKB ;加够11,则进入B的2级清算 CHECKA: MOV A,#0H ;AB的得分清零 MOV SCOREA,A MOV SCOREB,A MOV A,BOARDA INC A MOV BOARDA,A ;初始化8279并显示 LCALL DISPLAY ;初始化8279并显示 CJNE A,#LBOARD,REPLAY LJMP AWINCHECKB: MOV A,#0H ;AB的得分清零

12、MOV SCOREA,A MOV SCOREB,A MOV A,BOARDB INC A MOV BOARDB,A ;初始化8279并显示 LCALL DISPLAY ;初始化8279并显示 CJNE A,#LBOARD,REPLAY LJMP BWIN AWIN: CLR AGREEN SETB ARED SETB BRED SETB BGREEN MOV A,#0H MOV SCOREA,A MOV SCOREB,A MOV BOARDB,A LCALL DISPLAY SJMP $BWIN: CLR BGREEN SETB ARED SETB BRED SETB AGREEN MOV A

13、,#0H MOV SCOREA,A MOV SCOREB,A MOV BOARDA,A LCALL DISPLAY SJMP $ ;*击球&闪烁程序ROTATE1: ;从左向右击球的程序 MOVX DPTR,A ;点亮LED RL A ;循环右移 LCALL DELAY ;延时 CPL P3.5 ;接入继电器,然后会哒哒哒的响,酷炫无比 DJNZ R3,ROTATE1 MOV R3,#NUMMOVE MOV R4,A ;R4是亮的状态,记下来,待会闪烁的时候要用到 MOV A,#00H ;重新设置灯都灭掉 MOVX DPTR,A RETROTATE2: ;从右向左击球的程序 MOVX DPTR

14、,A ;点亮LED RR A ;循环右移 LCALL DELAY ;延时 CPL P3.5 ;接入继电器,然后会哒哒哒的响,酷炫无比 DJNZ R3,ROTATE2 MOV R3,#NUMMOVE MOV R4,A ;R4是亮的状态,记下来,待会闪烁的时候要用到 MOV A,#00H ;重新设置灯都灭掉 MOVX DPTR,A RET SHINE: ;当球到达一方之后,会不断地闪烁 MOV A,R4 MOVX DPTR,A CPL P3.5 LCALL DELAY MOV A,#00H MOVX DPTR,A CPL P3.5 LCALL DELAY DJNZ R5,SHINE MOV R5,

15、#NUMSHINE RET;*击球&闪烁程序 ;*显示比分程序 ;显示字符子程序;输入: R6,位置 R7,值DISLED: PUSH DPH ;保存现场 PUSH DPL PUSH ACC MOV A,#LEDWR0 ;置显示起始地址 ADD A,R6 ;加位置偏移量 MOV DPTR,#Z8279 MOVX DPTR,A ;设定显示位置 MOV DPTR,#LEDSEG ;置显示常数表起始位置 MOV A,R7 MOVC A,A+DPTR ;查表 MOV DPTR,#D8279 MOVX DPTR,A ;显示数据 POP ACC ;恢复现场 POP DPL POP DPH RETDISPL

16、AY: PUSH ACC MOV A,BOARDB ;显示B的得胜局数在0号灯 ANL A,#0FH MOV R7,A MOV R6,#0 LCALL DISLED MOV A,BOARDA ;显示A的得胜局数在7号灯 ANL A,#0FH MOV R7,A MOV R6,#7 LCALL DISLED ;MOV R0,01H ;LCALL DELAY MOV A,SCOREA ;显示A的得分低位在4号灯 DA A ANL A,#0FH MOV R7,A MOV R6,#4 LCALL DISLED MOV A,SCOREA ;显示A的得分高位在5号灯 DA A SWAP A ANL A,#0

17、FH MOV R7,A MOV R6,#5 LCALL DISLED MOV A,SCOREB ;显示B的得分低位在2号灯 DA A ANL A,#0FH MOV R7,A MOV R6,#2 LCALL DISLED MOV A,SCOREB ;显示B的得分高位在2号灯 DA A SWAP A ANL A,#0FH MOV R7,A MOV R6,#3 LCALL DISLED POP ACC RET;*显示比分程序 ;*读取键盘子程序,鬼才要管里面什么意思呢*;输入: 无 ; 输出: B: 读到的键码 A: 按键的标志GETKEY: PUSH DPH ;保存现场 PUSH DPL PUSH

18、 PSW MOV DPTR,#Z8279 MOVX A,DPTR ;读8279状态 ANL A,#07H ;屏蔽D7-D3 JNZ GETVAL ;判断是否有键输入 MOV A,#0H ;置标志(无键输入) SJMP NKBHITGETVAL: MOV A,#READKB ;读 FIFO RAM 命令 MOVX DPTR,A MOV DPTR,#D8279 MOVX A,DPTR ;读键 ANL A,#3FH ;屏蔽 SHIFT 和 CTRL 键 MOV DPTR,#KEYCODE ;键码表起始地址 MOVC A,A+DPTR ;查表 MOV B,A ;置返回键值 MOV A,#0FFH ;置

19、标志(有键输入)NKBHIT: POP PSW ;恢复现场 POP DPL POP DPH RET;*读取键盘子程序,鬼才要管里面什么意思呢 INIT_ALL: MOV A,06H MOV SPEED,A INIT_8255: ;初始化8255芯片 MOV DPTR,#D8255 MOV A,#82H ;置8255状态 ;方式0,PA,PC口输出,PB口输入 MOVX DPTR,A MOV DPTR,#D8255A RETINIT8279: ;8279初始化子程序 PUSH DPH ;保存现场 PUSH DPL PUSH ACC MOV DPTR ,#Z8279 MOV A,#LEDMOD ;

20、置8279工作方式 MOVX DPTR,A MOV A,#LEDFEQ ;置键盘扫描速率 MOVX DPTR,A MOV A,#LEDCLS ;清除 LED 显示 MOVX DPTR,A POP ACC ;恢复现场 POP DPL POP DPH RETINVALID_8279: ;为了使得球弹跳期间的键盘输入动作无效 MOV DPTR,#Z8279 MOV A,#DELETE MOVX DPTR,A MOV A,#READKB ;重新设置 MOVX DPTR,A RET DELAY: ;延时子程序(1秒-A, 0.5秒-5) PUSH R0 PUSH R1 PUSH R2 ;MOV R0,#

21、05H ;可以控制回球的速度DELAY2: MOV R1,#00HDELAY3: MOV R2,#0B2H DJNZ R2,$ DJNZ R1,DELAY3 DJNZ R0,DELAY2 POP R0 POP R1 POP R2 RETLEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0,1,2,3,4,5,6,7 DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8,9,A,B,C,D,E,F DB 6DH,02H,08H,00H,59H,0FH,76H ;U,-,_, ,I,O,P, ;键盘键码表KEYCODE:DB 30H,31H,32H,33H,34H,35H,36H,37H ;0,1,2,3,4,5,6,7 DB 38H,39H,3AH,3BH,3CH,3DH,3EH,3FH ;8,9,A,B,C,D,D,F END

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

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