logo资料库

跳舞机课程设计报告(附源程序).doc

第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
资料共26页,剩余部分请下载后查看
课程设计实验报告 题目:跳舞机 时间: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
分享到:
收藏