乒乓球比赛计分显示器设计(单片机考试任务书)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
乒乓球比赛计分显示器设计(单片机考试任
务书)
河北工业大学计算机硬件技术基础(MCS-51单片机原理及应
用)
综合性、开放性实验考试任务书
学院班级设计人成绩
一、题目:乒乓球比赛计分显示器设计
二、问题的提出
1)根据乒乓球比赛规则,设计一个乒乓球比赛计分显示器
2)比赛中暂停定时处理
3)区分初赛和决赛局数计分
三、总体设计
1、分析问题的功能
1)按照乒乓球比赛规则,初赛单打采用三局两胜制,先胜两局者获胜。
每局比赛先得11分并同时领先对手2分者胜一局,否则,超过11分后直到领先对手2分者胜一局。
决赛采用七局四胜制
2)主程序可不断根据按键情况识别各参赛者得分计入总分并显示输出各参赛者当前得分
3)采用外部中断模拟球场中途暂停(显示倒计时1分钟), 当暂停解除后恢复正常计分显示
2、系统总体结构设计
(1)硬件设计:
A.本实验采用实验仪上的8个8段LED显示器作为计分显示器,将八个8段LED 显示器分为4个一组,分别显示每个队手的得分。
包括:参赛运动员姓名(1个英文字母表示)、分数(2位00-99分)和获胜局数(1位),分数和获胜局数按比赛规则随着各参赛者得分情况而改变。
B.采用键盘模拟得分和获胜局数,不同的键按下代表不同的含义,用不同的键区分是否为决赛、代表各参赛者的得分和获胜的局数。
C.用软件延时来控制暂停时间
(2)软件设计:
主程序:用散转判断按键调用相应子程序实现对应按键功能
子程序块1:获取按键,控制8段显示器显示
子程序块2:确定初赛决赛
子程序块3:实现中场暂停倒计时显示
子程序块4:选手代码、得分与获胜局数的控制与显示
四、详细设计:
1、硬件详细设计:
(1)按键分配:
12345678
选择左边选手代码左边选手
比分加1
左边选手
胜局加1
交换场地开始初赛
910111213141516
选择右边选手代码右边选手
比分加1
右边选手
胜局加1
比赛结束
暂停
倒计时
决赛
(2)连线:P1.0→RST ;SDA →P1.7 ;SCL→P1.6;INT_KEY→P3.2 (3)资源分配:
00H~07H 0组寄存器
00H SYSTEMREG
01H KEYREG
07H CMDBUF0 命令缓冲区0
08H~0FH 1组寄存器CMDBUF1 命令缓冲区1
10H~17H 2组寄存器DPRAM 显示缓存区
18H~1FH 3组寄存器
20H~2FH 位地址区
30H~37H
38H~3FH DISBUF显示缓冲区
40H~47H MTD发送数据缓冲区
48H~4FH MRD接收数据缓冲区
50H SLA器件从地址
51H SUBA器件子地址
52H NUMBYTE字节变量
53H KEY用户按键
56H SCORE1 比分1寄存单元
57H SCORE2 比分2寄存单元
58H JUSHU 比赛胜局寄存单元
60H~67H 显示寄存区
68H~6FH 计时循环控制数寄存区
70H~7FH 堆栈区
80H~0F0H 特殊寄存器地址区
2、流程图
3、程序清单
SDA BIT P1.7
SCL BIT P1.6
RST BIT P1.0
INT_KEY BIT P3.2
MTD EQU 40H
MRD EQU 48H
DISBUF EQU 38H
;定义ZLG7290器件地址及子地址
ZLG7290 EQU 70H
ACK BIT 10H
SLA DATA 50H
SUBA DATA 51H
NUMBYTE DATA 52H
KEY DATA 53H
JUSHU EQU 58H
SCORE1 EQU 56H
SCORE2 EQU 57H
SYSTEMREG EQU 00H
KEYREG EQU 01H
CMDBUF0 EQU 07H
CMDBUF1 EQU 08H
DPRAM EQU 10H
ORG 8000H
LJMP MAIN
ORG 8100H
;-------主程序如下:
MAIN: MOV SP,#70H
CLR RST
LCALL DELAY
SETB RST
LCALL DELAY
LCALL CLSDISP
MAINLOOP:MOV DISBUF+0,#0
MOV DISBUF+1,#0
MOV DISBUF+2,#0
MOV DISBUF+3,#0
MOV DISBUF+4,#0
MOV DISBUF+5,#0
MOV DISBUF+6,#0
MOV DISBUF+7,#0
MOV JUSHU,#0
MOV SCORE1,#0
MOV SCORE2,#0
LCALL DISPLAY WAITKEY: JB INT_KEY,WAITKEY
LCALL GETKEY
MOV A,KEY
JZ WAITKEY
MOV DPTR,#TABL
MOVC A,@A+DPTR
JMP @A+DPTR TABL: DB COM0- TABL
DB COM1- TABL
DB COM2- TABL
DB COM3- TABL
DB COM4- TABL
DB COM5- TABL
DB COM6- TABL
DB COM7- TABL
DB COM8- TABL
DB COM9- TABL
DB COM10- TABL
DB COM11- TABL
DB COM12- TABL
DB COM13- TABL
DB COM14- TABL
DB COM15- TABL
DB COM16- TABL COM0: LJMP WAITKEY
COM1: LCALL XUANSHOU1
LJMP WAIT0
COM2: LCALL BIFEN1
LJMP WAIT0
COM3: LCALL JUS1
LJMP WAIT0
COM4: LJMP WAITKEY
COM5: LJMP WAITKEY
COM6: LCALL JIAOHUAN
LJMP WAIT0
COM7: LCALL KAISHI
LJMP WAIT0
COM8: LCALL CHU
LJMP WAIT0
COM9: LCALL XUANSHOU2
LJMP WAIT0
COM10: LCALL BIFEN2
LJMP WAIT0
COM11: LCALL JUS2
LJMP WAIT0
COM12: LJMP WAITKEY
COM13: LJMP WAITKEY
COM14: LJMP MAINLOOP
COM15: LCALL ZANTING
LJMP WAIT0
COM16: LCALL JUE
WAIT0: LCALL DISPLAY
LJMP WAITKEY
;子程序名:CLSDISP
;功能:清除显示内容
;调用:VI2C_ASM.INC
;入口参数:无
;出口参数:无
;占用资源: R0,R1,R2,R3(工作寄存器组1),ACC,CY,R5(当前工作寄存器组)
CLSDISP: MOV R5,#8
MOV A,#01100000B
CLS1: MOV SLA,#ZLG7290
MOV SUBA,#CMDBUF0
MOV MTD,A
MOV MTD+1,#1FH
MOV NUMBYTE,#02H
PUSH ACC
PUSH PSW
SETB RS0
CLR RS1
LCALL IWRNBYTE
POP PSW
POP ACC
INC A
LCALL DELAY
DJNZ R5,CLS1
RET
;子程序名:DISPLAY
;功能:在8段LED数码管显示
;调用:VI2C_ASM.INC
;入口参数: DISBUF+0~ DISBUF+7,8字节显示缓冲区
;出口参数:无
;占用资源: R0,R1,R2,R3(工作寄存器组1),ACC,CY,R0,R5(当前工作寄存器组)
DISPLAY: MOV R5,#8
MOV A,#01100000B
MOV R0,# DISBUF
DISP1: MOV SLA,#ZLG7290
MOV SUBA,#CMDBUF0
MOV MTD,A
MOV MTD+1,@R0
MOV NUMBYTE,#02H
PUSH ACC
PUSH PSW
SETB RS0
CLR RS1
LCALL IWRNBYTE
POP PSW
POP ACC
INC A
INC R0
LCALL DELAY
DJNZ R5,DISP1
RET
;子程序名:GETKEY
;功能:获取用户按键值(KEY)
;调用:VI2C_ASM.INC
;入口参数:无
;出口参数:KEY
;占用资源: R0,R1,R2,R3(工作寄存器组1),ACC,CY
GETKEY: MOV SLA,#ZLG7290
MOV SUBA,#01H
MOV NUMBYTE,#01H
PUSH ACC
PUSH PSW
SETB RS0
CLR RS1
LCALL IRDNBYTE
POP PSW
POP ACC
MOV KEY,MRD
RET
;子程序名: DELAY
;功能:延时约36.5 MS(11.0592MHZ时钟)
;调用:YS500US
;入口参数:无
;出口参数:无
;占用资源: R7,R6
DELAY: MOV R7,#80H
MIN: LCALL YS500US
DJNZ R7,MIN
RET
;子程序名: DELAY7S
;功能:延时约7.3S(11.0592MHZ时钟)
;调用:DELAY
;入口参数:无
;出口参数:无
;占用资源: 6AH
DELAY7S: MOV 6AH,#200
YAN: LCALL DELAY
DJNZ 6AH,YAN
RET
;子程序名: YS500US
;功能:延时约279US(11.0592MHZ时钟)
;调用:无
;入口参数:无
;出口参数:无
;占用资源: R6
YS500US: MOV R6,#80H
DJNZ R6,$
RET
;子程序名: CHU
;功能:闪烁显示“CHUSAI”字样7秒,确定为初赛,3局2胜;调用:DELAY1S
;入口参数:无
;出口参数:JUSHU(58H)
;占用资源: DISBUF,60H~67H
CHU: MOV 60H,DISBUF+0
MOV 61H,DISBUF+1
MOV 62H,DISBUF+2
MOV 63H,DISBUF+3
MOV 64H,DISBUF+4
MOV 66H,DISBUF+6
MOV 67H,DISBUF+7
MOV DISBUF+0,#1FH
MOV DISBUF+1,#41H
MOV DISBUF+2,#4AH
MOV DISBUF+3,#45H
MOV DISBUF+4,#5AH
MOV DISBUF+5,#51H
MOV DISBUF+6,#4CH
MOV DISBUF+7,#1FH
MOV JUSHU,#2
LCALL DISPLAY
LAY1: LCALL DELAY7S
MOV DISBUF+0,60H
MOV DISBUF+1,61H
MOV DISBUF+2,62H
MOV DISBUF+3,63H
MOV DISBUF+4,64H
MOV DISBUF+5,65H
MOV DISBUF+6,66H
MOV DISBUF+7,67H
RET
;子程序名: JUE
;功能:闪烁显示“JUESAI”字样7秒,确定为初赛,3局2胜;调用:DELAY1S
;入口参数:无
;出口参数:JUSHU(58H)
;占用资源: DISBUF,60H~67H
JUE: MOV 60H,DISBUF+0
MOV 61H,DISBUF+1
MOV 62H,DISBUF+2
MOV 63H,DISBUF+3
MOV 64H,DISBUF+4
MOV 65H,DISBUF+5
MOV 66H,DISBUF+6
MOV 67H,DISBUF+7
MOV DISBUF+0,#1FH
MOV DISBUF+1,#41H
MOV DISBUF+2,#4AH
MOV DISBUF+3,#45H
MOV DISBUF+4,#4EH
MOV DISBUF+5,#5AH
MOV DISBUF+7,#1FH
MOV JUSHU,#4
LCALL DISPLAY
LAY2: LCALL DELAY7S
MOV DISBUF+0,60H
MOV DISBUF+1,61H
MOV DISBUF+2,62H
MOV DISBUF+3,63H
MOV DISBUF+4,64H
MOV DISBUF+5,65H
MOV DISBUF+6,66H
MOV DISBUF+7,67H
RET
;子程序名: KAISHI
;功能:首先发球的一方闪烁5秒
;调用:DELAY1S
;入口参数:无
;出口参数:无
;占用资源: DISBUF+7
KAISHI: MOV A,DISBUF+7
ADD A,#40H
MOV DISBUF+7,A
LCALL DISPLAY
D10: LCALL DELAY7S
MOV A,DISBUF+7
SUBB A,#40H
MOV DISBUF+7,A
RET
;子程序名: ZANTING
;功能:比赛暂停10秒,显示倒计时
;调用:无
;入口参数:无
;出口参数:无
;占用资源: R0,R1,R2,R3(工作寄存器组1),ACC,CY ,DISBUF ZANTING: MOV 60H,DISBUF+0
MOV 61H,DISBUF+1
MOV 62H,DISBUF+2
MOV 63H,DISBUF+3
MOV 64H,DISBUF+4
MOV 65H,DISBUF+5
MOV 66H,DISBUF+6
MOV DISBUF+0,#1FH
MOV DISBUF+1,#1FH
MOV DISBUF+2,#0
MOV DISBUF+3,#0
MOV DISBUF+4,#1FH
MOV DISBUF+5,#1FH
MOV DISBUF+6,#1FH
MOV DISBUF+7,#1FH
MOV 6CH,#10
DE: MOV A,6CH
MOV B,#10
DIV AB
MOV DISBUF+3,A
MOV DISBUF+2,B
LCALL DISPLAY
LCALL DELAY1S
DJNZ 6CH,DE
MOV DISBUF+0,60H
MOV DISBUF+1,61H
MOV DISBUF+2,62H
MOV DISBUF+3,63H
MOV DISBUF+4,64H
MOV DISBUF+5,65H
MOV DISBUF+6,66H
MOV DISBUF+7,67H
RET
;子程序名: JIAOHUAN
;功能:比赛双方交换场地,显示交换
;调用:无
;入口参数:DISBUF
;出口参数:DISBUF
;占用资源: 60H ,61H,62H,63H
JIAOHUAN:
MOV 60H,DISBUF+0
MOV 61H,DISBUF+1
MOV 62H,DISBUF+2
MOV 63H,DISBUF+3
MOV 64H,SCORE2
MOV DISBUF+0,DISBUF+4
MOV DISBUF+1,DISBUF+5
MOV DISBUF+2,DISBUF+6
MOV DISBUF+3,DISBUF+7
MOV SCORE2,SCORE1
MOV SCORE1,64H
MOV DISBUF+4,60H
MOV DISBUF+5,61H
MOV DISBUF+6,62H
MOV DISBUF+7,63H
RET
;子程序名: XUANSHOU1
;功能:显示选手代码
;调用:无
;入口参数:DISBUF+7
;出口参数:DISBUF+7
;占用资源: DISBUF+7,ACC
XUANSHOU1:
MOV A,DISBUF+7
ADD A,#1
CJNE A,#20H,FANWEI1
FANWEI1: JC NEI1
MOV DISBUF+7,#0
LJMP HUI1
NEI1: MOV DISBUF+7,A
HUI1: RET
;子程序名: XUANSHOU2
;功能:显示选手代码
;调用:无
;入口参数:DISBUF+3
;出口参数:DISBUF+3
;占用资源: DISBUF+3,ACC
XUANSHOU2:
MOV A,DISBUF+3
ADD A,#1
CJNE A,#20H,FANWEI2
FANWEI2: JC NEI2
MOV DISBUF+3,#0
LJMP HUI2
NEI2: MOV DISBUF+3,A
HUI2: RET
;子程序名:BIFEN1
;功能:比分加1,显示选手比分,判断此选手是否赢得本局;调用:无
;入口参数:DISBUF+5 ,DISBUF+6,SCORE1,SCORE2
;出口参数:DISBUF+5 ,DISBUF+6 ,DISBUF+2,DISBUF+1,SCORE1 ,SCORE2
;占用资源: ACC,B
BIFEN1: MOV A,SCORE1
ADD A,#1
MOV SCORE1,A
MOV B,#10
DIV AB
MOV DISBUF+6,A
MOV DISBUF+5,B
MOV A,SCORE1
CJNE A,#11,BI1
BI1: JC BACK1
SUBB A,#2
CJNE A,SCORE2,FEN1
FEN1: JC BACK1
MOV A,DISBUF+7
ADD A,#40H
MOV DISBUF+7,A
MOV DISBUF+1,#0
MOV DISBUF+2,#0
MOV DISBUF+5,#0
MOV DISBUF+6,#0
MOV SCORE1,#0
MOV SCORE2,#0
BACK1: RET
;子程序名:BIFEN2
;功能:比分加1,显示选手比分,判断此选手是否赢得本局
;调用:无
;入口参数:DISBUF+5 ,DISBUF+6,SCORE1,SCORE2
;出口参数:DISBUF+5 ,DISBUF+6 ,DISBUF+2,DISBUF+1,SCORE1 ,SCORE2
;占用资源: ACC,B
BIFEN2: MOV A,SCORE2
ADD A,#1
MOV SCORE2,A
MOV B,#10
DIV AB
MOV DISBUF+2,A
MOV DISBUF+1,B
MOV A,SCORE2
CJNE A,#11,BI2
BI2: JC BACK2
SUBB A,#2
CJNE A,SCORE1,FEN2
FEN2: JC BACK2
MOV A,DISBUF+3
ADD A,#40H
MOV DISBUF+3,A
MOV DISBUF+1,#0
MOV DISBUF+2,#0
MOV DISBUF+5,#0
MOV DISBUF+6,#0
MOV SCORE1,#0
MOV SCORE2,#0
BACK2: RET
;子程序名:JUS1
;功能:所赢局数加1,显示选手赢局,判断此选手是否赢得本场;调用:无
;入口参数:DISBUF,JUSHU
;出口参数:DISBUF
;占用资源: ACC
JUS1: MOV A,DISBUF+7
SUBB A,#40H
MOV DISBUF+7,A
MOV A,DISBUF+4
ADD A,#1
MOV DISBUF+4,A
CJNE A,58H,JU1
JU1: JC BACK3
MOV A,DISBUF+7
ADD A,#40H
MOV DISBUF+7,A
BACK3: RET
;子程序名:JUS2
;功能:所赢局数加1,显示选手赢局,判断此选手是否赢得本场;调用:无
;入口参数:DISBUF,JUSHU
;出口参数:DISBUF
;占用资源: ACC
JUS2: MOV A,DISBUF+3
SUBB A,#40H
MOV DISBUF+3,A
MOV A,DISBUF+0
ADD A,#1
MOV DISBUF+0,A
CJNE A,58H,JU2
JU2: JC BACK4
MOV A,DISBUF+3
ADD A,#40H
MOV DISBUF+3,A
BACK4: RET
;子程序名: DELAY1S
;功能:延时约1.085S
;调用:无
;入口参数:无
;出口参数:无
;占用资源: R5,R6,R7(工作寄存器组0)
DELAY1S: MOV R5,#10
REPT1: MOV R6,#100
REPT2: MOV R7,#200
REPT3: NOP
NOP
NOP
DJNZ R7,REPT3
DJNZ R6,REPT2
DJNZ R5,REPT1
RET
$INCLUDE(VI2C_ASM.INC)
END
五、调试程序的方法
为A赋值,单步运行;
子程序分块调试;
检查有无死循环或错误程序
六、所设计的程序最终完成的功能(结果)
1、确定初赛决赛,将获胜所需局数寄存于JUSHU单元
2、比赛中暂停,显示倒计时
3、比赛开始发球方闪烁
4、交换场地,双方显示交换
5、调节显示选手代码
6、选手成绩加1,判断是否满11分,判断是否满11分后高于对方2分,若全满足,比分清0,获胜方闪烁
7、获胜方停止闪烁,选手所胜局数加1,判断是否到达本场比赛获胜应达局数,若胜则胜方闪烁
七、对该设计题目更完善的方案
1、自我评价。
完成了实验的基本要求及创新要求,在LED显示器与键盘实验原有程序基础上,成功原创添加各程序,并实现以上所有功能。
但仍存在一些问题:没有充分使用堆栈;计时器没有校准;加分按键须层层递进,不能越级加分;曾一度陷入计时器死循环,无法自拔。
2、更完善的方案。
(1)校准计时器,使计时更准确
(2)增加按键或程序,使之能在闪烁显示获胜方的基础上越级加分
(3)增加按键,使之可在暂停计时中途即可返回计分显示
(4)与实际乒乓球比赛规则更接近,增加按键,使每次比赛发球方闪烁
八、收获及心得体会
1、通过本次考试设计,自己在哪些方面的能力有所提高
(1)统筹规划,理出程序主线,在主线的基础上设计分支程序;
(2)以模块分配的方式处理复杂问题;
(3)与同组人工作分配,及时沟通串联各项程序进度
(3)现有的东西并不一定普遍适用,需要质疑和分析。
2、收获和心得体会。
成功感是最大的体会,首先是我们程序的原创,其次是在经历不停的思考、请教、修改与校正后对单片机考试有了更多的了解,同时也感受到了团队合作共同进步的团队成就感,尤其是看到共同编写的程序成功运行的时候,有一种自豪感。
日期:。