1、武汉科技大学微机原理课程设计模拟电梯系统汇编武汉科技大学微机原理课程设计-模拟电梯系统(汇编)二一三二一四学年第 二 学期电子技术学院电子信息工程系课程设计报告书班 级: 姓 名: 课程名称: 微机原理及应用课程设计 学时学分: 1 周 1 学分 指导老师: 杨 君 二一三年十二月 三十一日一、课程设计目的:综合运用本课程知识,利用集成电路设计实现一些中小规模电子电路或者完成一定功能的程序,以复习巩固课堂所学的理论知识,提高程序设计实现系统、绘制系统电路图的能力,为实际应用奠定一定的基础。二、课程设计时间安排:第一天:教师布置设计任务,讲解设计要求,提示设计要点。第二三天:查阅资料(在图书馆或
2、上网),提出设计方案。第三七天:画出详细设计图(电路图),编写程序,调试程序,得出实验结果并写出设计报告。三、课程设计选题:设计要求: (1). 在 1- 8楼之间一次可输入多个任意楼层号连续控制电梯按指定楼层号顺序上升与下降.以上过程完成后可重新输入任意楼层号连续控制电梯按指定楼层号顺序上升与下降.只有按ESC键才退出程序返回DOS状态。例如 : 1-3-5-7-6-4-2-1 (可观察教十楼电梯的实际运行情况). (2). 在 1 - 7 楼之间按任意顺序不连续控制电梯上升与下降. 按一次计算机键盘的上箭头电梯上升一楼,按一次计算机键盘的下箭头电梯下降一楼. (上箭头的ASCII码19H
3、, 下箭头的ASCII码1AH . ) (3). 在电梯上升与下降过程中,要显示出 1-7 楼之间所要到达的楼层数,同时还要用箭头显示电梯是上升状态还是下降状态. (4). 电梯运行到指定楼层后,打开电梯门,然后关门继续运行. (5). 电梯运行时, 在任意时刻遇到紧急情况时应能实时中断电梯运行.也可以在任意时刻恢复电梯运行.(按A/a 键模拟中断发生,电梯停止运行.按B/b 键恢复电梯运行) (6). 在计算机屏幕上将电梯的平面模型改成三维立体模型. (7). 在电梯旁画一个小方块.这个小方块随电梯上升而上升,下降而下降.以增加电梯运行时的动感. (8). 电梯仿真软件运行时,应在计算机屏幕
4、上详细说明其使用方法,以及本软件作者姓名和日期.报告要求: (1). 在报告中应对电梯仿真软件的设计思想,设计方法用文字详细说明. (2). 在报告中应有完整的程序清单(必需加注释). (3). 在报告中应有完整的程序框图. (4). 谈谈自己通过这次设计实践的收获和体会.参考文献 :1 朱定华,微机原理、汇编与接口技术,清华大学出版社,2005 2 徐士良,PC机C图形编程手册,清华大学出版社,1994四、课程设计内容:1、程序模块:3、程序设计思路:电梯模拟程序主要是一个画图程序,程序需要利用一连串的画图指令来实现动画效果。首先,程序中将用到INT 10H的一系列指令来实现画图功能。要实现
5、动画效果,如电梯门开关、电梯上下移动就必须在生成新的图形同时将老的图形擦去,所以运动的过程分为擦去原有图像和画新图像两部分完成。当新的图形可以直接覆盖原有效果时则直接画新图形即可,新图形无法覆盖老效果时则首先要用背景颜色将原有图形重绘一次,这样就达到了擦出的效果。CPU完成一连串画图指令速度是非常迅速的,为了清除观察到动画效果所以添加了一个延时模块,在画图命令中调用此命令可以清晰观察到动画效果。其次,还需要INT 21H的9H号功能实现字符串的显示功能。由于需要键盘输入电梯控制相关指令,所以需要用到INT 16H的1H号功能停止和继续电梯的运动;还需要INT 21H的0AH号功能实现输入兵显示
6、字符串;以及INT 21H的0CH号功能清空键盘缓存。在此基础上,用一系列的循环、判断、跳转命令将各种功能结合起来最终搭建成模拟电梯程序。4、程序代码及注释: CLEAR MACRO ; 清屏的宏 MOV BH,7 ; 卷入行属性,黑底白字,正常显示. MOV AX,0600H ; AH=6 屏幕初始化或上卷.AL=0 整个窗口空白. INT 10H ; CH=左上角行号,CL=左下角列号. ENDM ; DH=右上角行号,DL=右下角列号. ;- POS MACRO ; 移动光标的宏 MOV BH,00H ; BH=页号 DH,DL=行号,列号. MOV AH,02H ; AH=2 置光标位
7、置. INT 10H ENDM;- HENG MACRO X1,Y1,COLOR,X2 ; 写横的宏 LOCAL BH1 ; 定义标号 MOV CX,X1 ; 起始点横作标-CX MOV DX,Y1 ; 起始点纵作标-DX BH1: MOV AH,0CH ; 写象素 MOV AL,COLOR ; 设定颜色参数-AL INT 10H INC CX CMP CX,X2 ; 写至终点横作标为止 JNZ BH1 ENDM;- SHU MACRO CX1,CY1,COLOR,CY2 ; 写竖的宏 LOCAL BH2 ; 定义标号 MOV CX,CX1 MOV DX,CY1 BH2: MOV AH,0CH
8、 MOV AL,COLOR ; AL=(00-0FH)共16种颜色. INT 10H INC DX CMP DX,CY2 JNZ BH2 ENDM;- DELAY MACRO ;延时1s的宏 LOCAL READ PUSH DX ;入栈,保护原有DX、CX中的数据 PUSH CX SUB AX,AX INT 1AH ;INT 1AH的0号功能读当前时钟值,CX:DX=时钟计数值 MOV TIME,DX MOV TIME2,CX READ: SUB AX,AX INT 1AH SUB DX,TIME SBB CX,TIME2 CMP DX,DLY JB READ POP CX ;出栈,恢复现场
9、POP DX ENDM;- UP MACRO N,DX1 ;小方块上升的宏 LOCAL UPA,UPB ; 定义标号 MOV AL,N ;小方块从N-1层上升至N层 MOV CH,30 ;小方块上升一层,并且将下一层的小方块清除 MUL CH ;30*N个像素 MOV DX,430 SUB DX,AX ;430-30*N个像素得到画小方块的纵坐标下限值 MOV DZ,DX ADD DX,20 ;每个小方块边长为20个像素 MOV DX1,DX ;得到纵坐标上限值 UPA: HENG 170,DZ,0CH,190 ;画小方块 INC DZ MOV AX,DX1 CMP DZ,AX JNZ UPA
10、 ADD DX,11 ;坐标调整到移动之前的坐标 MOV DZ,DX ADD DX,20 MOV DX1,DX UPB: HENG 170,DZ,00H,190 ;擦原小方块 INC DZ MOV AX,DX1 CMP DZ,AX JNZ UPB ENDM;- DOWN MACRO N,DX1 ;小方块下降的宏 LOCAL DOWNA,DOWNB ; 定义标号 MOV AL,N ;小方块从N+1层下降至N层 MOV CH,30 ;小方块下降一层,并且将上一层的小方块清除 MUL CH MOV DX,430 SUB DX,AX MOV DZ,DX ADD DX,20 MOV DX1,DX DOW
11、NA: HENG 170,DZ,0CH,190 ;画小方块 INC DZ MOV AX,DX1 CMP DZ,AX JNZ DOWNA SUB DX,49 MOV DZ,DX ADD DX,20 MOV DX1,DX DOWNB: HENG 170,DZ,00H,190 ;擦原有小方块 INC DZ MOV AX,DX1 CMP DZ,AX JNZ DOWNB ENDM;- CLOSE MACRO ;画电梯关门状态的宏 LOCAL CE MOV DZ,220 CE: HENG 210,DZ,09H,370 ;电梯关门 INC DZ CMP DZ,420 JNZ CE SHU 291,220,0
12、2H,420 ;电梯大门缝隙 SHU 290,220,02H,420 SHU 289,220,02H,420 ENDM;- HALF MACRO ;画电梯半开门状态的宏 LOCAL HF MOV DZ,221 HF: HENG 210,DZ,09H,250 ;电梯半开门 HENG 252,DZ,07H,328 HENG 330,DZ,09H,370 INC DZ CMP DZ,420 JNZ HF SHU 251,220,02H,420 ;电梯大门缝隙 SHU 329,220,02H,420 ENDM;- FULL MACRO ;画电梯全开门状态的宏 LOCAL FL MOV DZ,221 F
13、L: HENG 210,DZ,09H,215 ;电梯全开门 HENG 217,DZ,07H,363 HENG 365,DZ,09H,370 INC DZ CMP DZ,420 JNZ FL SHU 216,220,02H,420 ;电梯大门缝隙 SHU 364,220,02H,420 ENDM;- PAUSE MACRO ;电梯紧急暂停的宏 LOCAL WAIT,WAN SUB AX,AX MOV AH,1 INT 16H CMP AL,a ;读取键盘缓存中是否有a,有就进入暂停等待循环,没有则退出 JNZ WAN MOV DX,0301H POS MOV DX,OFFSET MSG7 ;显示
14、MSG7 MOV AH,9 INT 21H MOV AH,0CH ;清空键盘缓存 INT 21H WAIT: CLC ;CF=0 MOV AH,1 INT 16H CMP AL,b ;检测键盘缓存中是否有b,有就退出暂停等待循环,没有则继续循环 JNZ WAIT WAN: MOV DX,0301H POS MOV DX,OFFSET MSG6 ;用于将MSG7的信息擦除 MOV AH,9 INT 21H MOV AH,0CH INT 21H ENDM;- data segment MSG1 DB Please press 1-8 or w/s ro others to terminate.(e
15、g: 1-3-8/w): $ ; 输出多个空格是为了清空上一次的输入 MSG2 DB Please press any key.,$ MSG3 DB Floor: $ MSG4 DB Direction: $ MSG5 DB To: $ MSG6 DB When the elevator running, please press a to emergency stop. $MSG7 DB Please press b to continue. $ MSG8 DB WUST LiGang 2014.2.5 $ DAT DB 0FFH,0,255 DUP(0) DLY EQU 18 DZ DW
16、0 TIME DW 0,0 NUM1 DB 1 NUM2 DB 1 COUNT DB 0 DX1 DW 0 DX2 DW 0 data ends;- stacks segment STA DW 100 DUP(0) TOP DW ? stacks ends;- code segment assume cs:code,ds:data,ss:stacks;- start proc far mov ax,data mov ds,ax mov ax,stacks mov ss,ax mov ax,data mov es,ax push ax push bx push cx push dx push s
17、i push di MOV CX,0 MOV DX,2479H MOV BH,7 MOV AX,0601H INT 10H MOV AX,0012H ;置图形显示方式 INT 10H ;640列*480行,16色. MOV DX,0 ;光标位置初始化 POS HENG 220,99,0AH,420 ;信息栏外边框 HENG 220,151,0AH,420 SHU 220,99,0AH,151 SHU 420,99,0AH,151 HENG 223,102,0AH,417 ;信息栏内边框 HENG 223,148,0AH,417 SHU 223,102,0AH,148 SHU 417,102,0
18、AH,148 CLOSE ;电梯大门处于关闭状态 HENG 210,220,02H,370 ;电梯大门缝隙边框 HENG 210,420,02H,370 SHU 210,220,02H,420 SHU 370,220,02H,420 HENG 209,219,02H,371 ;加粗边框 SHU 209,220,02H,420 SHU 371,220,02H,420 MOV DZ,219 MOV DX1,210 MOV DX2,370 SB1: HENG DX1,DZ,03H,DX2 ;三维电梯上侧面 DEC DZ INC DX1 INC DX2 CMP DZ,180 JNZ SB1 MOV D
19、Z,371 MOV DX1,220 MOV DX2,420 SB2: SHU DZ,DX1,03H,DX2 ;三维电梯右侧面 INC DZ DEC DX1 DEC DX2 CMP DZ,410 JNZ SB2 MOV DZ,421 SB3: HENG 160,DZ,0EH,200 ;画电梯框架 SUB DZ,30 CMP DZ,151 JNZ SB3 SHU 160,181,0EH,422 SHU 200,181,0EH,422 MOV DZ,400 BRICK: HENG 170,DZ,0CH,190 ;画初始小方块 INC DZ MOV AX,420 CMP DZ,AX JNZ BRICK
20、 MOV DX,072BH POS MOV DL,NUM1 ADD DL,30H MOV AH,2 INT 21H ;初始楼层显示1 MOV DX,1C3BH POS MOV DX,OFFSET MSG8 ;显示MSG8 MOV AH,9 INT 21H MOV DX,0723H POS MOV DX,OFFSET MSG3 ;显示MSG3 MOV AH,9 INT 21H MOV DX,081DH POS MOV DX,OFFSET MSG4 ;显示MSG4 MOV AH,9 INT 21H MOV DX,082DH POS MOV DX,OFFSET MSG5 ;显示MSG5 MOV AH
21、,9 INT 21H MOV DX,0301H POS MOV DX,OFFSET MSG6 ;显示MSG6 MOV AH,9 INT 21H INPUT: MOV DX,0101H POS MOV DX,OFFSET MSG1 ;显示MSG1 MOV AH,9 INT 21H MOV DX,0143H POS MOV DX,OFFSET DAT ;输入并显示字符串 MOV AH,10 INT 21H MOV AL,DAT+1 MOV COUNT,AL ;记录输入的字符个数 MOV BP,2 MOV AL,DATBP CMP AL,w ;输入w则上升一层 JE UP1 CMP AL,s ;输入
22、s则下降一层 JE DOWN1 CMP AL,31H ;输入小于1的ACS码则退出 JB OVER CMP AL,38H ;输入大于8的ACS码则退出 JA OVER AND AL,0FH ;输入1至8则进入多楼层控制命令循环TARGET1 MOV NUM1,AL TARGET1: ADD BP,2 ;因为输入格式为1-2-6,每次BP偏移两位起到了仅取有效位数字的作用 MOV AL,DATBP AND AL,0FH ;将字符转换为数字 CMP AL,1 ;检测后续输入的字符是否合法,超出18范围则返回输入界面 JB INPUT CMP AL,8 JA INPUT MOV NUM2,AL MO
23、V DX,0831H POS MOV DL,DATBP ;显示电梯下一站要停的楼层数 MOV AH,2 INT 21H DELAY TARGET2: MOV AL,NUM2 CMP AL,NUM1 ;若下一站楼层大于当前楼层,则跳至上升命令段 JA TARGET3 ;若下一站楼层小于当前楼层,则在当前命令段 MOV AL,NUM2 CMP AL,NUM1 ;第二次比较,若到达目标楼层或两站楼层相同则跳至SHOW命令显示开关门动画 JZ SHOW DEC NUM1 PAUSE ;在画图命令之前插入暂停命令,确保电梯在任何楼层时都能暂停 DOWN NUM1,DX1 ;电梯下降 MOV DX,082
24、9H POS MOV DL,19H ;显示下箭头 MOV AH,2 INT 21H MOV DX,072BH POS MOV DL,NUM1 ;显示当前楼层数 ADD DL,30H ;将数字转换为ASC码 MOV AH,2 INT 21H DELAY ;电梯在每一层停留1S以便观察 JMP TARGET2 TARGET3: INC NUM1 PAUSE ;在画图命令之前插入暂停命令,确保电梯在任何楼层时都能暂停 UP NUM1,DX1 ;电梯上升 MOV DX,0829H POS MOV DL,18H ;显示上箭头 MOV AH,2 INT 21H MOV DX,072BH POS MOV D
25、L,NUM1 ;显示当前楼层数 ADD DL,30H ;将数字转换为ASC码 MOV AH,2 INT 21H DELAY ;电梯在每一层停留1S以便观察 JMP TARGET2 UP1: CMP NUM1,8 JNB INPUT INC NUM1 MOV DX,0831H POS MOV DL,NUM1 ;显示电梯下一站要停的楼层数 ADD DL,30H MOV AH,2 INT 21H UP NUM1,DX1 ;电梯上一层 MOV DX,0829H POS MOV DL,18H ;显示上箭头 MOV AH,2 INT 21H MOV DX,072BH POS MOV DL,NUM1 ;显示
26、当前楼层数 ADD DL,30H ;将数字转换为ASC码 MOV AH,2 INT 21H JMP SHOW DOWN1: CMP NUM1,1 JNA INPUT DEC NUM1 MOV DX,0831H POS MOV DL,NUM1 ;显示电梯下一站要停的楼层数 ADD DL,30H MOV AH,2 INT 21H DOWN NUM1,DX1 ;电梯下一层 MOV DX,0829H POS MOV DL,19H ;显示下箭头 MOV AH,2 INT 21H MOV DX,072BH POS MOV DL,NUM1 ;显示当前楼层数 ADD DL,30H ;将数字转换为ASC码 MO
27、V AH,2 INT 21H SHOW: MOV DX,0829H POS MOV DL,- ;到达楼层时Direction显示- MOV AH,2 INT 21H DELAY ;电梯门开关每个动作间停留1S以便观察 PAUSE ;每个动作后插入PAUSE使电梯能在开关门时暂停 HALF DELAY PAUSE FULL DELAY PAUSE HALF DELAY PAUSE CLOSE DELAY PAUSE SUB AX,AX INT 1AH MOV TIME,DX MOV TIME2,CX MOV AH,0CH INT 21H ;清空键盘缓冲区 MOV AL,COUNT CBW ;将字节扩展为字 CMP BP,AX ;若此时没到输入数据最后一位则进入TARGET1,若已到最后一位则进入INPUT开始新一轮运行 JB TARGET1 JMP INPUT OVER: MOV DX,101CH ;显示MSG2 POS MOV DX,OFFSE
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1