西安电子科技大学通信工程学院课程设计Word文档下载推荐.docx
《西安电子科技大学通信工程学院课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《西安电子科技大学通信工程学院课程设计Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。
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
MOVAH,5H
GOOD:
成绩为3输出GOOD。
MOVAH,6H
MOVAH,22H
MOVAH,0H
NICE:
成绩为4输出NICE。
MOVAH,10H
MOVAH,0CH
MOVAH,0EH
STEP4:
MOVCX,9000
STP5:
CALLFARPTRDISPLAY;
显示评分。
LOOPSTP5;
闪烁维持评分显示。
MOVAH,4CH
INT21H
CODE1SEGMENT
ASSUMECS:
CODE1
RDNUMPROCFAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI;
寄存器保护。
DO1:
MOVAH,2CH;
2CH号功能调用,
取系统时间:
DL存放毫秒
MOVAL,DL;
将毫秒值除以5,调整随机偏移量的取值在0-4之间。
MOVAH,0
MOVBL,5
DIVBL;
AH是一个0-4的随机数去查询伪随机表。
RDNUM
RET
获取系统时间产生随机数
随机数查表获得伪随机序列
序列依次载入BUF
LEADI,TABLE3
RDSCAN:
MOVAL,[DI];
将随机表内容放入AL。
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
CODE2
DISPLAYPROCFAR
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;
显示为空。
将AL内容显示。
DO3:
MOVBH,[SI];
将转换表内容放入BH。
MOVDH,0FFH
INCSI
INCSI;
CMPBL,BH;
比较BL,BH。
JNZDO3;
在转换表中查找对应值。
MOVDX,0EE01H;
将DX指向B口。
MOVAL,AH;
给AL赋值(应显示那个数码管。
控制哪个管显示。
将DX指向A口。
MOVAL,[SI-1];
查找到的数码管值写入AL。
OUTDX,AL
DELAY:
维持显示,使数码管数据显示清晰。
MOVAX,200
REP1:
用两个循环来控制时延。
MOVCX,1000
REP2:
CX=4
随机数查表转换
8255输出待显值
时延,维持显示
更新待显值和数码管
CX=0?
CX-1
DISPLAY
LOOPREP2
DECAX
CMPAX,0
JNZREP1;
AX不为0继续循环。
RORAH,1;
循环左移。
更换下一个显示数据。
LOOPDO2;
POPSI
DISPLAYENDPCODE2ENDS
CODE3SEGMENT
CODE3
SCANNUM1PROCFAR
寄存器保护,
将BX作为参数传递的方式,不压栈。
MOVCX,SCANNUM;
控制扫描循环次数。
SCANLOOP1:
调用DISPLAY显示。
MOVAL,00001111B
MOVDX,0EE05H
ANDAL,LED
74L374口高位置零。
MOVDX,0EE02H;
控制C口。
INAL,DX;
将C口内容读到AL。
ANDAL,00001111B;
取出AL低四位。
CMPAL,00001111B;
判断是否有键按下(无键按下时为全1。
JESCANLOOP3;
无键值时跳转。
MOVAH,11101111B;
扫描第一行。
SCANLOOP2:
有键按下则开始扫描。
MOVDX,0EE02H
INAL,DX
JNESCANLOOP4;
有则译键码。
ROLAH,1;
AH左移读取下一行。
CMPAH,11111110B;
循环四次,各行扫完结束?
JNZSCANLOOP2;
没有则进行下一次扫描。
SCANLOOP3:
LOOPSCANLOOP1
MOVBL,0FFH;
超时标记。
JMPSCANLOOP7;
循环结束,跳出扫描。
SCANLOOP4:
键值查表。
SCAN
调用DISPLAY,显示
行输出全0
列输入值
=1111?
行输出初值AH=11101111
行输出AH
AH左环移
4行扫描完否?
N
Y
调用DISPLAY,消抖
读入列值
获得键值
将键值译码放入BL
DE→CX
BL=-1
(CX-1→CX
ANDAH,0F0H;
AH带有行号特征,AND后行特征位为0。
MOVBL,AL
ORBL,AH;
行列OR获得键值。
MOVDI,OFFSETTABLE1;
获取键值对应表的地址。
SCANLOOP5:
键值和随机数映射。
MOVBH,[DI]
键值和查表比较。
JNZSCANLOOP5
MOVBL,[DI-1];
查到值放入BL。
SCANLOOP6:
调用显示。
ANDAL,00001111B
判断按键是否松开。
JNESCANLOOP6;
没有继续监听。
SCANLOOP7:
消抖。
SCANNUM1ENDP
CODE3ENDS
CODE4SEGMENT
CODE4
CMPNUMPROCFAR
寄存器压栈保护。
MOVBH,[DI];
BH装载随机数,BL装载键值。
CHANGE1:
键值映射范围调整。
MOVAL,BL
MO