课程设计实验报告
题目:跳舞机
时间:2011 年 1 月 19 日
跳舞机实验报告
一.设计目的:
1.掌握矩阵键盘和显示接口的硬件的设计方法
2.掌握键盘扫描程序和显示程序的编程方法
3.实用程序设计及学习 DOS、BIOS 调用
二.设计任务:
1.基本功能设计:
(1)至少设计 4 个数码管和 4 个按键
(2)数码管显示的舞蹈动作是随机的
(3)可以统计游戏者的分数
2.扩展功能:电脑和实验版上可以加一些声光电的效果
3.创新功能:跳舞机开始以后,玩家可以先选择难度,难度越高,按键的速
度也需要更高
三.系统方案:
总的设计方案需要考虑程序变量和实现功能两部分。
程序变量:
BUF:字节型,存放输入的数据
TB1:字节型,存放输入键值到 BUF 数据的转化表
TBS:字节型,存放 BUF 数据到数码管字型码的转化表
MUN:字型,记录玩家按键正确的次数
LED:字节型,发光二极管控制信号
DE: 字型,SCAN 子程序中的循环次数
功能介绍:程序开始时,六个 LED 数码管循环闪烁等待玩家按任意键开始
跳舞。本游戏设置两个难度等级,当玩家按下的是上方的八个按键时表示玩家选
择等级“难”,否则表示玩家选择等级“易”。游戏开始后,左边的两个数码管交
替显示随机方向,我们用 、 、 、 分别表示上下左右四个方向,左边第
三个数码管标识当前游戏的等级, 表示“难”, 表示“易”,右边三个数码
管显示玩家按对的次数,即分数。
玩家在游戏时,按照左边两个数码管的提示按动键盘,由于键盘中一些按键
已无法正常使用,我们每一个方向有两个键来对应,如下图所示。
游戏时,每个方向仅停留很短一段时间,根据时间的停留长短,我们设置“难”
“易”等级。如果玩家能在有限时间内正确按下键盘,则右边计数的三个数码管
显示分数加 1,如果反应超时或按错,则蜂鸣器“滴”一声。
游戏结束后玩家的成绩显示大约 30s 后程序退出。
其中,扩展功能为:
除基本功能外,还加入了声、光功能。当玩家按键错误时,主板上的蜂鸣器
发出“滴”的一声。在整个游戏过程中,实验板上的 4 个发光二极管分为两组
交替闪烁。
创新功能为:
开始游戏时,可以首先选择难度等级,这里设为“难”,“易”两个级别。
这个功能可以通过在 SCAN 子程序中改变循环的次数,来改变箭头显示的速
度,速度快的为“难”,慢的为“易”。
四.硬件原理及电路原理图:
1.硬件原理
(1)8255
8255 的管脚图见右边:
8255A为一可编程的通用接口芯片。它有三个数据端
口A、B、C,每个端口为8位,并均可设成输入和输出方
式,但各个端口仍有差异:
端口A(PA0~PA7):8位数据输出锁存/缓冲器,8
位数据输入锁存器;
端口B (PB0~PB7):8位数据I/O锁存/缓冲器,8
位数据输入缓冲器;
端口C(PC0~PC7):8位输出锁存/缓冲器,8位输入
缓冲器(输入时没有锁存);在模式控制下这个端口又
可以分成两个4位的端口,它们可单独用作为输出控制和
状态输入。
在8255A中,除了这三个端口外,还有一个控制寄存
器,用于控制8255A的工作方式。因此8255A共有4个端口
寄存器,分别用A0,A1指定:
A1=0,A0=0,表示访问端口A;
A1=0,A0=1,表示访问端口B;
A1=1,A0=0,表示访问端口C;
A1=1,A0=1,表示访问控制寄存器;
当向A1=1,A0=1的端口寄存器(即控制寄存器)发送D7=1的控制字时,
其作用为方式控制字,各个位的含义如图所示
(2)74LS374
74LS374 的管脚图如下:
主要端口的含义:
D0~D7
OE
CP
O0~O7
2.电路图
数据输入端
三态允许控制端(低电平有效)
时钟输入端
输出端
五.程序流程:
1. 主程序及流程图
MOV DX,0EE03H
MOV AL,10001001B
OUT DX,AL
CALL FAR PTR READY ;开始
MOV CX,100
CALL FAR PTR RAND;把一个随机数放入
;主程序循环 100 次
;完成 8255 初始化
BUF
CALL FAR PTR SCAN;有键按下终止
CALL FAR PTR COMP;比较
LOOP DO1
MOV AL,21
MOV BUF[5],AL
MOV AX,MUN
MOV BL,5
MUL BL
MOV DL,100
DIV DL
;计算成绩
MOV BUF[2],AL
;取出计数的百位放
入 BUF[2]
MOV AL,AH
MOV AH,0
MOV DL,10
DIV DL
MOV BUF[1],AL
MOV BUF[0],AH
;取出计数的十位放
入 BUF[1]
;取出计数的个位放
入 BUF[0]
MOV CX,20000
DO2:
CALL FAR PTR DISPLAY
LOOP DO2
MOV AH,4CH
INT 21H
2. 子程序及流程图
主程序流程图
DISPLAY 子程序及流程图
DISPLAY PROC FAR
D2: MOV BL,[SI]
;将输入数据放入 BL
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
PUSH SI
MOV CX,6
MOV SI,OFFSET BUF
MOV AH,00000001B
MOV DI,OFFSET TBS
MOV DX,0EE00H
MOV AL,0FFH
OUT DX,AL
;DX 指向 A 口地址
;循环 6 次
;显示最低位
T2: MOV BH,[DI]
MOV DH,0FFH
INC DI
INC DI
CMP BL,BH
;将转换表内容放入 BH
;DI+2 → DI
;比较 BL,BH
JNZ T2
MOV DX,0EE01H
MOV AL,AH
OUT DX,AL
MOV DX,0EE00H
MOV AL,[DI-1]
OUT DX,AL
;将 DX 指向 B 口
;给 AL 赋值
;控制哪个管显示
;将 DX 指向 A 口
;将数据写入 AL
DELAY:
PUSH CX
PUSH BX
MOV BX,200
AGAIN:
MOV CX,1000
DLP:
LOOP DLP
DEC BX
CMP BX,0
JNZ AGAIN
POP BX
POP CX
ROL AH,1
INC SI
LOOP D2
POP SI
POP DI
POP DX
POP CX
POP BX
POP AX
RET
DISPLAY ENDP
;循环左移一位
;数据指针后移一位
;循环 6 次
DISPLAY 子程序流程图
READY 子程序及流程图
READY 子程序流程图
READY PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX,0
RE1:
;产生循环闪烁效果
;判断 CX 的奇偶
;CX 是偶数时跳至 RE2
RE2:
INC CX
MOV AX,CX
MOV BL,2
DIV BL
CMP AH,0
JZ RE2
MOV AL,17
MOV BUF[5],AL
MOV AL,14
MOV BUF[4],AL
MOV BUF[2],AL
MOV AL,15
MOV BUF[3],AL
MOV BUF[1],AL
MOV AL,19
MOV BUF[0],AL
JMP RE3
MOV AL,18
MOV BUF[5],AL
MOV AL,15
MOV BUF[4],AL
MOV BUF[2],AL