西安电子科技大学通信工程学院课程设计.docx

上传人:b****0 文档编号:331393 上传时间:2022-10-09 格式:DOCX 页数:30 大小:23.81KB
下载 相关 举报
西安电子科技大学通信工程学院课程设计.docx_第1页
第1页 / 共30页
西安电子科技大学通信工程学院课程设计.docx_第2页
第2页 / 共30页
西安电子科技大学通信工程学院课程设计.docx_第3页
第3页 / 共30页
西安电子科技大学通信工程学院课程设计.docx_第4页
第4页 / 共30页
西安电子科技大学通信工程学院课程设计.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

西安电子科技大学通信工程学院课程设计.docx

《西安电子科技大学通信工程学院课程设计.docx》由会员分享,可在线阅读,更多相关《西安电子科技大学通信工程学院课程设计.docx(30页珍藏版)》请在冰豆网上搜索。

西安电子科技大学通信工程学院课程设计.docx

西安电子科技大学通信工程学院课程设计

课程设计实验报告

010812##

跳舞机设计一.设计目的:

掌握矩阵键盘和显示接口的硬件设计方法

掌握键盘扫描程序和显示程序的编程方法

实用程序设计及学习DOS、BIOS调用

1.基本功能设计:

至少设计4个数码管和4个按键

数码管显示的舞蹈动作是随机的

可以统计游戏者的分数

2.扩展功能:

电脑和实验版上可以加一些声光电的效果

3.创新功能:

,,

作为正常↑→↓←,当作反向应用,

即↓←↑→。

二.系统方案:

设计思路如下:

产生4个随机数,将随机数和方向对应。

将随机方向显示在数码管上,从按键获得方向输入,比较两方向的值。

时间结束将统计到的正确值转换成评分,输出评分等级。

程序分为以下几大部分:

主程序,RDNUM,DISPLAY,SCANNUM1,CMPNUM。

其中RDNUM调用系统时间规范化产生随机数,载入BUF,;DISPLAY则将BUF1的数值在TABEL2查询获得数码管值,并将内容显示出来;SCANNUM1循环调用DISPLAY以维持在扫描键值期间的数码管显示,同时监控按键获得键值,查询TABE1将键值转换为数值,超时则记为-1;CMPNUM调整键值和随机数,将他们的对应域统一,形成映射,比较二者的值;主程序通过循环调用SCANNUM1持续监控按键直到超时,4次调用CMPNUM,统计正确数,最后对结果评分等级NICE,GOOD,PASS,FAIL,调用DISPLAY显示评分。

1.主程序:

MOVAX,DATA

MOVDS,AX;数据段段址送DS。

MOVAX,STACK

MOVSS,AX;堆栈段段址送SS。

MOVSP,OFFSETTOP;获取堆栈指针。

MOVDX,0EE03H;DX指向8255的D口。

MOVAL,10001001B;工作方式状态控制字,

表示方式0,端口C输出。

OUTDX,AL;完成8255初始化。

STEP1:

CALLFARPTRRDNUM;调用RDNUM生

成随机数,存储于BUF。

LEADI,BUF;DI传递当前正在比较的随机数。

MOVCX,4STEP2:

CALLFARPTRSCANNUM1;扫描键值,返回值

start

初始化8255

产生随机数,存入缓存

扫描键盘,将扫描到的键值存

入缓存,超时则标记-1

比较随机数和键值统计正确值

数码管显示评分等级

end

存于BL。

CALLFARPTRCMPNUM;比较数值。

INCDI;读取下一个随机数。

LOOPSTEP2;循环四次逐个键值扫描,比较。

STEP3:

;将成绩转换对应评分。

MOVAX,RESULT

CMPAL,4

JENICE

CMPAL,3

JEGOOD

CMPAL,2

JEPASS

FAIL:

;成绩小于2输出FAIL。

MOVAH,0FH

MOVBUF[0],AH

MOVAH,0AH

MOVBUF[1],AH

MOVAH,1H

MOVBUF[2],AH

MOVBUF[3],AH

JMPSTEP4

PASS:

;成绩为2输出PASS。

MOVAH,21H

MOVBUF[0],AH

MOVAH,0AH

MOVBUF[1],AH

MOVAH,5H

MOVBUF[2],AH

MOVBUF[3],AH

JMPSTEP4

GOOD:

;成绩为3输出GOOD。

MOVAH,6H

MOVBUF[0],AH

MOVAH,22H

MOVBUF[1],AH

MOVBUF[2],AH

MOVAH,0H

MOVBUF[3],AH

JMPSTEP4

NICE:

;成绩为4输出NICE。

MOVAH,10H

MOVBUF[0],AH

MOVAH,1H

MOVBUF[1],AH

MOVAH,0CH

MOVBUF[2],AH

MOVAH,0EH

MOVBUF[3],AH

JMPSTEP4

STEP4:

MOVCX,9000

STP5:

CALLFARPTRDISPLAY;显示评分。

LOOPSTP5;闪烁维持评分显示。

MOVAH,4CH

INT21H

CODE1SEGMENT

ASSUMECS:

CODE1

RDNUMPROCFAR

PUSHAX

PUSHBX

PUSHCX

PUSHDX

PUSHDI;寄存器保护。

DO1:

MOVAH,2CH;2CH号功能调用,

取系统时间:

DL存放毫秒

INT21H

MOVAL,DL;将毫秒值除以5,调整随机偏移量的取值在0-4之间。

MOVAH,0

MOVBL,5

DIVBL;AH是一个0-4的随机数去查询伪随机表。

RDNUM

RET

获取系统时间产生随机数

随机数查表获得伪随机序列

序列依次载入BUF

LEADI,TABLE3

RDSCAN:

MOVAL,[DI];将随机表内容放入AL。

INCDI

INCDI;指向转换表下一个查找字节。

CMPAL,AH;比较AL,AH。

JNZRDSCAN;不等则继续查找。

MOVAL,[DI-1];相等则开始查表对BUF赋值。

MOVBUF[0],AL

MOVAL,[DI+1]

MOVBUF[1],ALMOVAL,[SI+3]MOVBUF[2],ALMOVAL,[SI+5]MOVBUF[3],AL

POPDI

POPDX

POPCX

POPBX

POPAX

RET;返回。

RDNUMENDPCODE1ENDS

CODE2SEGMENT

ASSUMECS:

CODE2

DISPLAYPROCFAR

PUSHAX

PUSHBX

PUSHCX

PUSHDX

PUSHDI

PUSHSI;寄存器保护。

MOVCX,4;循环显示4个数码管。

LEADI,BUF;DI指向输入的数据。

MOVAH,00001000B;由左至右显示。

DO2:

MOVBL,[DI];将输入数据放入BL。

LEASI,TABLE2;SI指向由BUF

到LED数码管的转换表。

MOVDX,0EE00H;DX指向A口地址。

MOVAL,0FFH;显示为空。

OUTDX,AL;将AL内容显示。

DO3:

MOVBH,[SI];将转换表内容放入BH。

MOVDH,0FFH

INCSI

INCSI;指向转换表下一个查找字节。

CMPBL,BH;比较BL,BH。

JNZDO3;在转换表中查找对应值。

MOVDX,0EE01H;将DX指向B口。

MOVAL,AH;给AL赋值(应显示那个数码管。

OUTDX,AL;控制哪个管显示。

MOVDX,0EE00H;将DX指向A口。

MOVAL,[SI-1];查找到的数码管值写入AL。

OUTDX,AL

DELAY:

;维持显示,使数码管数据显示清晰。

PUSHCX

PUSHAX

MOVAX,200

REP1:

;用两个循环来控制时延。

MOVCX,1000

REP2:

CX=4

随机数查表转换

8255输出待显值

时延,维持显示

更新待显值和数码管

CX=0?

RET

CX-1

DISPLAY

LOOPREP2

DECAX

CMPAX,0

JNZREP1;AX不为0继续循环。

POPAX

POPCX

RORAH,1;循环左移。

INCDI;更换下一个显示数据。

LOOPDO2;

POPSI

POPDI

POPDX

POPCX

POPBX

POPAX

RET

DISPLAYENDPCODE2ENDS

CODE3SEGMENT

ASSUMECS:

CODE3

SCANNUM1PROCFAR

PUSHAX

PUSHCX

PUSHDX

PUSHDI

PUSHSI;寄存器保护,

将BX作为参数传递的方式,不压栈。

MOVCX,SCANNUM;控制扫描循环次数。

SCANLOOP1:

CALLFARPTRDISPLAY;调用DISPLAY显示。

MOVAL,00001111B

MOVDX,0EE05H

ANDAL,LED

OUTDX,AL;74L374口高位置零。

MOVDX,0EE02H;控制C口。

INAL,DX;将C口内容读到AL。

ANDAL,00001111B;取出AL低四位。

CMPAL,00001111B;判断是否有键按下(无键按下时为全1。

JESCANLOOP3;无键值时跳转。

MOVAH,11101111B;扫描第一行。

SCANLOOP2:

MOVAL,AH;有键按下则开始扫描。

MOVDX,0EE05H

OUTDX,AL

MOVDX,0EE02H

INAL,DX

ANDAL,00001111B;取出AL低四位。

CMPAL,00001111B;判断是否有键按下(无键按下时为全1。

JNESCANLOOP4;有则译键码。

ROLAH,1;AH左移读取下一行。

CMPAH,11111110B;循环四次,各行扫完结束?

JNZSCANLOOP2;没有则进行下一次扫描。

SCANLOOP3:

LOOPSCANLOOP1

MOVBL,0FFH;超时标记。

JMPSCANLOOP7;循环结束,跳出扫描。

SCANLOOP4:

;键值查表。

SCAN

调用DISPLAY,显示

行输出全0

列输入值

=1111?

行输出初值AH=11101111

行输出AH

列输入值

=1111?

AH左环移

4行扫描完否?

N

N

Y

N

Y

调用DISPLAY,消抖

读入列值

列输入值

=1111?

调用DISPLAY,消抖

获得键值

将键值译码放入BL

DE→CX

Y

RET

CX=0?

BL=-1

Y

(CX-1→CX

N

N

ANDAH,0F0H;AH带有行号特征,AND后行特征位为0。

MOVBL,AL

ORBL,AH;行列OR获得键值。

MOVDI,OFFSETTABLE1;获取键值对应表的地址。

SCANLOOP5:

;键值和随机数映射。

MOVBH,[DI]

INCDI

INCDI

CMPBL,BH;键值和查表比较。

JNZSCANLOOP5

MOVBL,[DI-1];查到值放入BL。

SCANLOOP6:

CALLFARPTRDISPLAY;调用显示。

INAL,DX

ANDAL,00001111B

CMPAL,00001111B;判断按键是否松开。

JNESCANLOOP6;没有继续监听。

SCANLOOP7:

CALLFARPTRDISPLAY;消抖。

POPSI

POPDI

POPDX

POPCX

POPAX

RET

SCANNUM1ENDP

CODE3ENDS

CODE4SEGMENT

ASSUMECS:

CODE4

CMPNUMPROCFAR

PUSHCX

PUSHDX

PUSHSI;寄存器压栈保护。

MOVBH,[DI];BH装载随机数,BL装载键值。

CHANGE1:

;键值映射范围调整。

PUSHBX

PUSHAX

MOVAL,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 中医中药

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

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