武汉科技大学微机原理课程设计模拟电梯系统汇编.docx

上传人:b****8 文档编号:23856778 上传时间:2023-05-21 格式:DOCX 页数:27 大小:417.17KB
下载 相关 举报
武汉科技大学微机原理课程设计模拟电梯系统汇编.docx_第1页
第1页 / 共27页
武汉科技大学微机原理课程设计模拟电梯系统汇编.docx_第2页
第2页 / 共27页
武汉科技大学微机原理课程设计模拟电梯系统汇编.docx_第3页
第3页 / 共27页
武汉科技大学微机原理课程设计模拟电梯系统汇编.docx_第4页
第4页 / 共27页
武汉科技大学微机原理课程设计模拟电梯系统汇编.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

武汉科技大学微机原理课程设计模拟电梯系统汇编.docx

《武汉科技大学微机原理课程设计模拟电梯系统汇编.docx》由会员分享,可在线阅读,更多相关《武汉科技大学微机原理课程设计模拟电梯系统汇编.docx(27页珍藏版)》请在冰豆网上搜索。

武汉科技大学微机原理课程设计模拟电梯系统汇编.docx

武汉科技大学微机原理课程设计模拟电梯系统汇编

武汉科技大学微机原理课程设计-模拟电梯系统(汇编)

 

二○一三~二○一四学年第二学期

电子技术学院

电子信息工程系

课程设计报告书

 

班级:

姓名:

课程名称:

微机原理及应用课程设计

学时学分:

1周1学分

指导老师:

杨君

二○一三年十二月三十一日

 

一、课程设计目的:

综合运用本课程知识,利用集成电路设计实现一些中小规模电子电路或者完成一定功能的程序,以复习巩固课堂所学的理论知识,提高程序设计实现系统、绘制系统电路图的能力,为实际应用奠定一定的基础。

二、课程设计时间安排:

第一天:

教师布置设计任务,讲解设计要求,提示设计要点。

第二~三天:

查阅资料(在图书馆或上网),提出设计方案。

第三~七天:

画出详细设计图(电路图),编写程序,调试程序,得出实验结果并写出设计报告。

三、课程设计选题:

设计要求:

(1).在1--8楼之间一次可输入多个任意楼层号连续控制电梯按指定楼层号顺序上升与下降.以上过程完成后可重新输入任意楼层号连续控制电梯按指定楼层号顺序上升与下降.只有按ESC键才退出程序返回DOS状态。

例如:

1-3-5-7-6-4-2-1(可观察教十楼电梯的实际运行情况).

(2).在1--7楼之间按任意顺序不连续控制电梯上升与下降.按一次计算机键盘的上箭头电梯上升一楼,按一次计算机键盘的下箭头电梯下降一楼.(上箭头的ASCII码19H,下箭头的ASCII码1AH.)

(3).在电梯上升与下降过程中,要显示出1--7楼之间所要到达的楼层数,同时还要用箭头显示电梯是上升状态还是下降状态.

(4).电梯运行到指定楼层后,打开电梯门,然后关门继续运行.

(5).电梯运行时,在任意时刻遇到紧急情况时应能实时中断电梯运行.也可以在任意时刻恢复电梯运行.(按A/a键模拟中断发生,电梯停止运行.按B/b键恢复电梯运行)

(6).在计算机屏幕上将电梯的平面模型改成三维立体模型.

(7).在电梯旁画一个小方块.这个小方块随电梯上升而上升,下降而下降.以增加电梯运行时的动感.

(8).电梯仿真软件运行时,应在计算机屏幕上详细说明其使用方法,以及本软件作者姓名和日期.

报告要求:

(1).在报告中应对电梯仿真软件的设计思想,设计方法用文字详细说明.

(2).在报告中应有完整的程序清单(必需加注释).

(3).在报告中应有完整的程序框图.

(4).谈谈自己通过这次设计实践的收获和体会.

参考文献:

[1]朱定华,微机原理、汇编与接口技术,清华大学出版社,2005

[2]徐士良,PC机C图形编程手册,清华大学出版社,1994

四、课程设计内容:

1、程序模块:

 

 

3、程序设计思路:

电梯模拟程序主要是一个画图程序,程序需要利用一连串的画图指令来实现动画效果。

首先,程序中将用到INT10H的一系列指令来实现画图功能。

要实现动画效果,如电梯门开关、电梯上下移动就必须在生成新的图形同时将老的图形擦去,所以运动的过程分为擦去原有图像和画新图像两部分完成。

当新的图形可以直接覆盖原有效果时则直接画新图形即可,新图形无法覆盖老效果时则首先要用背景颜色将原有图形重绘一次,这样就达到了擦出的效果。

CPU完成一连串画图指令速度是非常迅速的,为了清除观察到动画效果所以添加了一个延时模块,在画图命令中调用此命令可以清晰观察到动画效果。

其次,还需要INT21H的9H号功能实现字符串的显示功能。

由于需要键盘输入电梯控制相关指令,所以需要用到INT16H的1H号功能停止和继续电梯的运动;还需要INT21H的0AH号功能实现输入兵显示字符串;以及INT21H的0CH号功能清空键盘缓存。

在此基础上,用一系列的循环、判断、跳转命令将各种功能结合起来最终搭建成模拟电梯程序。

4、程序代码及注释:

CLEARMACRO;清屏的宏

MOVBH,7;卷入行属性,黑底白字,正常显示.

MOVAX,0600H;AH=6屏幕初始化或上卷.AL=0整个窗口空白.

INT10H;CH=左上角行号,CL=左下角列号.

ENDM;DH=右上角行号,DL=右下角列号.

;---------------------------------------

POSMACRO;移动光标的宏

MOVBH,00H;BH=页号DH,DL=行号,列号.

MOVAH,02H;AH=2置光标位置.

INT10H

ENDM

;---------------------------------------

HENGMACROX1,Y1,COLOR,X2;写横的宏

LOCALBH1;定义标号

MOVCX,X1;起始点横作标-->CX

MOVDX,Y1;起始点纵作标-->DX

BH1:

MOVAH,0CH;写象素

MOVAL,COLOR;设定颜色参数-->AL

INT10H

INCCX

CMPCX,X2;写至终点横作标为止

JNZBH1

ENDM

;---------------------------------------

SHUMACROCX1,CY1,COLOR,CY2;写竖的宏

LOCALBH2;定义标号

MOVCX,CX1

MOVDX,CY1

BH2:

MOVAH,0CH

MOVAL,COLOR;AL=(00--0FH)共16种颜色.

INT10H

INCDX

CMPDX,CY2

JNZBH2

ENDM

;---------------------------------------

DELAYMACRO;延时1s的宏

LOCALREAD

PUSHDX;入栈,保护原有DX、CX中的数据

PUSHCX

SUBAX,AX

INT1AH;INT1AH的0号功能读当前时钟值,CX:

DX=时钟计数值

MOVTIME,DX

MOVTIME[2],CX

READ:

SUBAX,AX

INT1AH

SUBDX,TIME

SBBCX,TIME[2]

CMPDX,DLY

JBREAD

POPCX;出栈,恢复现场

POPDX

ENDM

;---------------------------------------

UPMACRON,DX1;小方块上升的宏

LOCALUPA,UPB;定义标号

MOVAL,N;小方块从N-1层上升至N层

MOVCH,30;小方块上升一层,并且将下一层的小方块清除

MULCH;30*N个像素

MOVDX,430

SUBDX,AX;430-30*N个像素得到画小方块的纵坐标下限值

MOV[DZ],DX

ADDDX,20;每个小方块边长为20个像素

MOVDX1,DX;得到纵坐标上限值

UPA:

HENG170,[DZ],0CH,190;画小方块

INC[DZ]

MOVAX,DX1

CMP[DZ],AX

JNZUPA

ADDDX,11;坐标调整到移动之前的坐标

MOV[DZ],DX

ADDDX,20

MOVDX1,DX

UPB:

HENG170,[DZ],00H,190;擦原小方块

INC[DZ]

MOVAX,DX1

CMP[DZ],AX

JNZUPB

ENDM

;---------------------------------------

DOWNMACRON,DX1;小方块下降的宏

LOCALDOWNA,DOWNB;定义标号

MOVAL,N;小方块从N+1层下降至N层

MOVCH,30;小方块下降一层,并且将上一层的小方块清除

MULCH

MOVDX,430

SUBDX,AX

MOV[DZ],DX

ADDDX,20

MOVDX1,DX

DOWNA:

HENG170,[DZ],0CH,190;画小方块

INC[DZ]

MOVAX,DX1

CMP[DZ],AX

JNZDOWNA

SUBDX,49

MOV[DZ],DX

ADDDX,20

MOVDX1,DX

DOWNB:

HENG170,[DZ],00H,190;擦原有小方块

INC[DZ]

MOVAX,DX1

CMP[DZ],AX

JNZDOWNB

ENDM

;---------------------------------------

CLOSEMACRO;画电梯关门状态的宏

LOCALCE

MOV[DZ],220

CE:

HENG210,[DZ],09H,370;电梯关门

INC[DZ]

CMP[DZ],420

JNZCE

SHU291,220,02H,420;电梯大门缝隙

SHU290,220,02H,420

SHU289,220,02H,420

ENDM

;---------------------------------------

HALFMACRO;画电梯半开门状态的宏

LOCALHF

MOV[DZ],221

HF:

HENG210,[DZ],09H,250;电梯半开门

HENG252,[DZ],07H,328

HENG330,[DZ],09H,370

INC[DZ]

CMP[DZ],420

JNZHF

SHU251,220,02H,420;电梯大门缝隙

SHU329,220,02H,420

ENDM

;---------------------------------------

FULLMACRO;画电梯全开门状态的宏

LOCALFL

MOV[DZ],221

FL:

HENG210,[DZ],09H,215;电梯全开门

HENG217,[DZ],07H,363

HENG365,[DZ],09H,370

INC[DZ]

CMP[DZ],420

JNZFL

SHU216,220,02H,420;电梯大门缝隙

SHU364,220,02H,420

ENDM

;---------------------------------------

PAUSEMACRO;电梯紧急暂停的宏

LOCALWAIT,WAN

SUBAX,AX

MOVAH,1

INT16H

CMPAL,'a';读取键盘缓存中是否有"a",有就进入暂停等待循环,没有则退出

JNZWAN

MOVDX,0301H

POS

MOVDX,OFFSETMSG7;显示MSG7

MOVAH,9

INT21H

MOVAH,0CH;清空键盘缓存

INT21H

WAIT:

CLC;CF=0

MOVAH,1

INT16H

CMPAL,'b';检测键盘缓存中是否有"b",有就退出暂停等待循环,没有则继续循环

JNZWAIT

WAN:

MOVDX,0301H

POS

MOVDX,OFFSETMSG6;用于将MSG7的信息擦除

MOVAH,9

INT21H

MOVAH,0CH

INT21H

ENDM

;---------------------------------------

datasegment

MSG1DB'Pleasepress"1-8"or"w/s"rootherstoterminate.(eg:

1-3-8/w):

$';输出多个空格是为了清空上一次的输入

MSG2DB'Pleasepressanykey.','$'

MSG3DB'Floor:

$'

MSG4DB'Direction:

$'

MSG5DB'To:

$'

MSG6DB'Whentheelevatorrunning,pleasepress"a"toemergencystop.$'

MSG7DB'Pleasepress"b"tocontinue.$'

MSG8DB'WUSTLiGang2014.2.5$'

DATDB0FFH,0,255DUP(0)

DLYEQU18

DZDW0

TIMEDW0,0

NUM1DB1

NUM2DB1

COUNTDB0

DX1DW0

DX2DW0

dataends

;---------------------------------------

stackssegment

STADW100DUP(0)

TOPDW?

stacksends

;---------------------------------------

codesegment

assumecs:

code,ds:

data,ss:

stacks

;---------------------------------------

startprocfar

movax,data

movds,ax

movax,stacks

movss,ax

movax,data

moves,ax

pushax

pushbx

pushcx

pushdx

pushsi

pushdi

MOVCX,0

MOVDX,2479H

MOVBH,7

MOVAX,0601H

INT10H

MOVAX,0012H;置图形显示方式

INT10H;640列*480行,16色.

MOVDX,0;光标位置初始化

POS

HENG220,99,0AH,420;信息栏外边框

HENG220,151,0AH,420

SHU220,99,0AH,151

SHU420,99,0AH,151

HENG223,102,0AH,417;信息栏内边框

HENG223,148,0AH,417

SHU223,102,0AH,148

SHU417,102,0AH,148

CLOSE;电梯大门处于关闭状态

HENG210,220,02H,370;电梯大门缝隙边框

HENG210,420,02H,370

SHU210,220,02H,420

SHU370,220,02H,420

HENG209,219,02H,371;加粗边框

SHU209,220,02H,420

SHU371,220,02H,420

MOV[DZ],219

MOVDX1,210

MOVDX2,370

SB1:

HENGDX1,[DZ],03H,DX2;三维电梯上侧面

DEC[DZ]

INCDX1

INCDX2

CMP[DZ],180

JNZSB1

MOV[DZ],371

MOVDX1,220

MOVDX2,420

SB2:

SHU[DZ],DX1,03H,DX2;三维电梯右侧面

INC[DZ]

DECDX1

DECDX2

CMP[DZ],410

JNZSB2

MOV[DZ],421

SB3:

HENG160,[DZ],0EH,200;画电梯框架

SUB[DZ],30

CMP[DZ],151

JNZSB3

SHU160,181,0EH,422

SHU200,181,0EH,422

MOV[DZ],400

BRICK:

HENG170,[DZ],0CH,190;画初始小方块

INC[DZ]

MOVAX,420

CMP[DZ],AX

JNZBRICK

MOVDX,072BH

POS

MOVDL,NUM1

ADDDL,30H

MOVAH,2

INT21H;初始楼层显示"1"

MOVDX,1C3BH

POS

MOVDX,OFFSETMSG8;显示MSG8

MOVAH,9

INT21H

MOVDX,0723H

POS

MOVDX,OFFSETMSG3;显示MSG3

MOVAH,9

INT21H

MOVDX,081DH

POS

MOVDX,OFFSETMSG4;显示MSG4

MOVAH,9

INT21H

MOVDX,082DH

POS

MOVDX,OFFSETMSG5;显示MSG5

MOVAH,9

INT21H

MOVDX,0301H

POS

MOVDX,OFFSETMSG6;显示MSG6

MOVAH,9

INT21H

INPUT:

MOVDX,0101H

POS

MOVDX,OFFSETMSG1;显示MSG1

MOVAH,9

INT21H

MOVDX,0143H

POS

MOVDX,OFFSETDAT;输入并显示字符串

MOVAH,10

INT21H

MOVAL,DAT+1

MOVCOUNT,AL;记录输入的字符个数

MOVBP,2

MOVAL,DAT[BP]

CMPAL,'w';输入w则上升一层

JEUP1

CMPAL,'s';输入s则下降一层

JEDOWN1

CMPAL,31H;输入小于1的ACSⅡ码则退出

JBOVER

CMPAL,38H;输入大于8的ACSⅡ码则退出

JAOVER

ANDAL,0FH;输入1至8则进入多楼层控制命令循环TARGET1

MOVNUM1,AL

TARGET1:

ADDBP,2;因为输入格式为"1-2-6",每次BP偏移两位起到了仅取有效位数字的作用

MOVAL,DAT[BP]

ANDAL,0FH;将字符转换为数字

CMPAL,1;检测后续输入的字符是否合法,超出1~8范围则返回输入界面

JBINPUT

CMPAL,8

JAINPUT

MOVNUM2,AL

MOVDX,0831H

POS

MOVDL,DAT[BP];显示电梯下一站要停的楼层数

MOVAH,2

INT21H

DELAY

TARGET2:

MOVAL,NUM2

CMPAL,NUM1;若下一站楼层大于当前楼层,则跳至上升命令段

JATARGET3;若下一站楼层小于当前楼层,则在当前命令段

MOVAL,NUM2

CMPAL,NUM1;第二次比较,若到达目标楼层或两站楼层相同则跳至SHOW命令显示开关门动画

JZSHOW

DECNUM1

PAUSE;在画图命令之前插入暂停命令,确保电梯在任何楼层时都能暂停

DOWNNUM1,DX1;电梯下降

MOVDX,0829H

POS

MOVDL,19H;显示下箭头

MOVAH,2

INT21H

MOVDX,072BH

POS

MOVDL,NUM1;显示当前楼层数

ADDDL,30H;将数字转换为ASCⅡ码

MOVAH,2

INT21H

DELAY;电梯在每一层停留1S以便观察

JMPTARGET2

TARGET3:

INCNUM1

PAUSE;在画图命令之前插入暂停命令,确保电梯在任何楼层时都能暂停

UPNUM1,DX1;电梯上升

MOVDX,0829H

POS

MOVDL,18H;显示上箭头

MOVAH,2

INT21H

MOVDX,072BH

POS

MOVDL,NUM1;显示当前楼层数

ADDDL,30H;将数字转换为ASCⅡ码

MOVAH,2

INT21H

DELAY;电梯在每一层停留1S以便观察

JMPTARGET2

UP1:

CMPNUM1,8

JNBINPUT

INCNUM1

MOVDX,0831H

POS

MOVDL,NUM1;显示电梯下一站要停的楼层数

ADDDL,30H

MOVAH,2

INT21H

UPNUM1,DX1;电梯上一层

MOVDX,0829H

POS

MOVDL,18H;显示上箭头

MOVAH,2

INT21H

MOVDX,072BH

POS

MOVDL,NUM1;显示当前楼层数

ADDDL,30H;将数字转换为ASCⅡ码

MOVAH,2

INT21H

JMPSHOW

DOWN1:

CMPNUM1,1

JNAINPUT

DECNUM1

MOVDX,0831H

POS

MOVDL,NUM1;显示电梯下一站要停的楼层数

ADDDL,30H

MOVAH,2

INT21H

DOWNNUM1,DX1;电梯下一层

MOVDX,0829H

POS

MOVDL,19H;显示下箭头

MOVAH,2

INT21H

MOVDX,072BH

POS

MOVDL,NUM1;显示当前楼层数

ADDDL,30H;将数字转换为ASCⅡ码

MOVAH,2

INT21H

SHOW:

MOVDX,0829H

POS

MOVDL,'-';到达楼层时"Direction"显示"-"

MOVAH,2

INT21H

DELAY;电梯门开关每个动作间停留1S以便观察

PAUSE;每个动作后插入PAUSE使电梯能在开关门时暂停

HALF

DELAY

PAUSE

FULL

DELAY

PAUSE

HALF

DELAY

PAUSE

CLOSE

DELAY

PAUSE

SUBAX,AX

INT1AH

MOVTIME,DX

MOVTIME[2],CX

MOVAH,0CH

INT21H;清空键盘缓冲区

MOVAL,COUNT

CBW;将字节扩展为字

CMPBP,AX;若此时没到输入数据最后一位则进入TARGET1,若已到最后一位则进入INPUT开始新一轮运行

JBTARGET1

JMPINPUT

OVER:

MOVDX,101CH;显示MSG2

POS

MOVDX,OFFSE

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

当前位置:首页 > 高中教育 > 理化生

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

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