微機課程設(shè)計電梯仿真程序_第1頁
微機課程設(shè)計電梯仿真程序_第2頁
微機課程設(shè)計電梯仿真程序_第3頁
微機課程設(shè)計電梯仿真程序_第4頁
微機課程設(shè)計電梯仿真程序_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、二一四二一五學年 第一學期信息科學與工程學院自動化系課程設(shè)計報告書姓 名: 學 號: 201204134013 班 級: 自動化1201 課程名稱: 微機原理與應(yīng)用課程設(shè)計 指導教師: 程磊 2014年 12月 19日電梯仿真程序1.課程設(shè)計目的:在讀懂任務(wù)書給出的幾個子程序的基礎(chǔ)上,學習運用計算機動畫技術(shù)等手段自己獨立編制出一個完整的電梯運行計算機仿真程序.通過編制仿真程序的實踐,加強同學們對計算機順序控制的了解與認識,以達到掌握計算機順序控制規(guī)律和計算機順序控制技術(shù)所需的編程技巧以及相關(guān)的硬件基礎(chǔ)知識的目的。2.設(shè)計要求: (1). 在 1- 8樓之間一次可輸入多個任意樓層號連續(xù)控制電梯按

2、指定樓層號順序上升與下降.以上過程完成后可重新輸入任意樓層號連續(xù)控制電梯按指定樓層號順序上升與下降.只有按esc鍵才退出程序返回dos狀態(tài)。例如 : 1-3-5-8-6-4-2-1 (可觀察教六樓電梯的實際運行情況). (2). 在 1 - 8 樓之間按任意順序不連續(xù)控制電梯上升與下降. 按一次計算機鍵盤的上箭頭電梯上升一樓,按一次計算機鍵盤的下箭頭電梯下降一樓. (上箭頭的ascii碼19h , 下箭頭的ascii碼1ah . ) (3). 在電梯上升與下降過程中,要顯示出 1-8 樓之間所要到達的樓層數(shù),同時還要用箭頭顯示電梯是上升狀態(tài)還是下降狀態(tài). (4). 電梯運行到指定樓層后,打開電

3、梯門,然后關(guān)門繼續(xù)運行. (5). 電梯運行時, 在任意時刻遇到緊急情況時應(yīng)能實時中斷電梯運行.也可以在任意時刻恢復電梯運行.(按a/a 鍵模擬中斷發(fā)生,電梯停止運行.按b/b 鍵恢復電梯運行) (6). 在計算機屏幕上將電梯的平面模型改成三維立體模型. (7). 在電梯旁畫一個小方塊.這個小方塊隨電梯上升而上升,下降而下降.以增加電梯運行時的動感. (8). 電梯仿真軟件運行時,應(yīng)在計算機屏幕上詳細說明其使用方法,以及本軟件作者姓名和日期.3.使用方法和介紹:在提示“input the order(1-8f)(such as 1-2-5-2):”后面輸入用戶要去的樓層,可從任意樓層開始運行,

4、指定樓層號順序上升與下降,數(shù)字與數(shù)字之間用“-”連接,數(shù)字范圍為1-8。電梯上升與下降過程中,提示“now the floor is:”后面顯示出當前所要在的樓層數(shù),提示“to:”后面顯示1-8 樓之間所要到達的樓層數(shù),提示“direction :”后面顯示上下箭頭,代表電梯當前是上升狀態(tài)還是下降狀態(tài)。在電梯旁有一個小方塊。這個小方塊隨電梯上升而上升,下降而下降。增加電梯運行時的動感.。小方塊在一個8層的方框內(nèi)上下移動,電梯每上升一層,小方塊在方框內(nèi)上升一層,電梯每下降一層,小方塊在方框內(nèi)下降一層。并且小方塊在方框內(nèi)的位置與電梯當前所在樓層時對應(yīng)的,例如:若當前電梯運行到第8層,則小方塊也位于

5、第八層方框。為了使用戶能更清晰地看到電梯的運行過程,小方塊每到一層會停留1s的時間。電梯運行到指定樓層后,打開電梯門,然后關(guān)門繼續(xù)運行,為了模擬真實的效果,電梯在指定樓層停下,大門依次閉合-半開門-全開門-半開門-閉合。在 1 - 8 樓之間按任意順序不連續(xù)控制電梯上升與下降。按一次計算機鍵盤的上箭頭電梯上升一樓,按一次計算機鍵盤的下箭頭電梯下降一樓。 由于所使用的計算機的某些原因,這里輸入“w” 上升一樓,輸入“s” 下降一樓。電梯的不連續(xù)控制只在電梯停在某一層且關(guān)上的門之后。提示是“up or down only vailable when lift stop(use w or s )”,

6、當用戶可以對電梯進行不連續(xù)控制時,會出現(xiàn)“now vailable”的提示。電梯仿真軟件運行時,在計算機屏幕上顯示本軟件日期“*data: 2014-12-20*”,作者姓名“author is: xia zhi long ”和學號“xuehao:201204134013”。4.程序的設(shè)計思路在主程序的最前面是宏,將具有特定功能的畫圖代碼打包成一個個宏放在住程序的最前面。有清屏的宏,移光標的宏,寫橫的宏,寫豎的宏,畫小方塊上升的宏,畫小方塊下降的宏,畫初始小方塊的宏,畫電梯關(guān)門狀態(tài)的宏,畫電梯半開門狀態(tài)的宏,畫電梯全開門狀態(tài)的宏。由于這段畫圖的代碼在程序中會經(jīng)常使用,所將他們編成宏使用起來更方

7、便。除了主程序外還有一個延時1s的子程序。 開始主程序的運行后,先運行一段初始化程序,然后設(shè)置圖形顯示方式,再顯示提示信息以及有關(guān)信息,然后再畫電梯的三維模型,這樣整個初始界面就完成了。然后再提示信息下,用戶輸入要去的樓層,判斷該字符串的第一個字符的ascii碼是否在1-8范圍,如果不是則結(jié)束并返回dos界面,如果是則繼續(xù)進行下一步程序。將第1個數(shù)字代表的樓層設(shè)為當前站x(n),并賦給count(該變量用來記錄當前層)。將下個數(shù)字代表的層數(shù)設(shè)為下一站(如果當前站為最后一站,則重新回到開頭提示用戶輸入信息),將count與下一站x(n+1)相比較,若count大于下一站,則小方塊下降一層,cou

8、nt-,并顯示當前層和目標層以及下箭頭,一直循環(huán)直到相等;若count小于下一站,則小方塊上升一層,count+,并顯示當前層和目標層以及下箭頭,一直循環(huán)直到相等;相等時,則電梯大門大門依次閉合-半開門-全開門-半開門-閉合。大門關(guān)上后,調(diào)用mov ah,1 ; int 16h檢測是否有按鍵按下,若沒有鍵盤按下,則x(n)=x(n+1),讀取下一個字符,將該字符所代表的樓層賦給x(n+1),并回到前面檢測x(n)是否為最后目標層的程序段。若有鍵盤按下,則判斷al的值(該值為輸入的字符的ascii碼),若al為w則小方塊上升一層,count+;若al為s則小方塊下降一層,count-;兩者最后都

9、回到“x(n)=x(n+1),讀取下一個字符,將該字符所代表的樓層賦給x(n+1)”這一步,若al即不為w也不為s,則直接回到該步驟。以上是整個程序的大致流程和思路。5.程序的流程圖 6.程序清單clss macro ; 清屏之宏 mov bh,7 ; 卷入行屬性,黑底白字,正常顯示. mov ax,0600h ; ah=6 屏幕初始化或上卷.al=0 整個窗口空白. int 10h ; ch=左上角行號,cl=左下角列號. endm ; dh=右上角行號,dl=右下角列號. gb macro ; 移光標之宏 mov bh,00h ; bh=頁號 dh,dl=行號,列號. mov ah,02h

10、 ; ah=2 置光標位置. 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 ; 設(shè)定顏色參數(shù)-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: mo

11、v ah,0ch mov al,color ; al=(00-0fh)共16種顏色. int 10h inc dx cmp dx,cy2 jnz bh2 endmup macro n,dx1 ;小方塊上升的宏 local upa,upb ; 定義標號 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,dxupa: heng 485,dz,04h,515 ;畫小方塊 inc dz mov ax,dx1 cmp dz,ax j

12、nz upa add dx,11 mov dz,dx add dx,20 mov dx1,dxupb: heng 485,dz,00h,515 ;畫小方塊 inc dz mov ax,dx1 cmp dz,ax jnz upb endmdown macro n,dx1 ;小方塊下降的宏local dna,dnb ; 定義標號 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,dxdna: heng 485,dz,04h,5

13、15 ;畫小方塊 inc dz mov ax,dx1 cmp dz,ax jnz dna sub dx,49 mov dz,dx add dx,20 mov dx1,dxdnb: heng 485,dz,00h,515 ;畫小方塊 inc dz mov ax,dx1 cmp dz,ax jnz dnb endminit macro n,dx1 ;畫初始小方塊的宏local beg ; 定義標號 mov al,n ;小方塊最初停在第n層,表示電梯最初停第n層 mov ch,30 mul ch mov dx,430 sub dx,ax mov dz,dx add dx,20 mov dx1,dxb

14、eg: heng 485,dz,04h,515 ;畫小方塊 inc dz mov ax,dx1 cmp dz,ax jnz beg endmclose macro ;畫電梯關(guān)門狀態(tài)的宏local cc ; 定義標號 mov dz,220cc: heng 210,dz,09h,370 ;電梯關(guān)門 inc dz cmp dz,420 jnz cc shu 291,220,02h,420 ;電梯大門縫隙 shu 290,220,02h,420 shu 289,220,02h,420 endmhalf macro ;畫電梯半開門狀態(tài)的宏local ha ; 定義標號 mov dz,221ha: hen

15、g 210,dz,09h,250 ;電梯半開門 heng 252,dz,07h,328 heng 330,dz,09h,370 inc dz cmp dz,420 jnz ha shu 251,220,02h,420 ;電梯大門縫隙 shu 329,220,02h,420 endmfull macro ;畫電梯全開門狀態(tài)的宏local f ; 定義標號 mov dz,221f: heng 210,dz,09h,215 ;電梯全開門 heng 217,dz,07h,363 heng 365,dz,09h,370 inc dz cmp dz,420 jnz f shu 216,220,02h,42

16、0 ;電梯大門縫隙 shu 364,220,02h,420 endm data segment mess db lift model ,0ah,0dh,$ me1 db press any key to reture dos.,0ah,0dh,$ ;當使用者進行非正常操作時,提示使用者手動返回dos me2 db now the floor is:,0ah,0dh,$ ;提示當前樓層 me3 db direction : ,0ah,0dh,$ me4 db input the order(1-8f)(such as1-2-5-2): $ me5 db author is: xia zhi lo

17、ng ,0ah,0dh,xuehao:201204134013$ ; 輸出多個空格鍵是為了清空上一次的輸入 me6 db *data: 2014-12-20*,0ah,0dh,$ me7 db to:,0ah,0dh,$ ;提示電梯下一站要停的樓層 me8 db up or down:,0ah,0dh,$ ;提示使用者用上、下鍵不連續(xù)控制電梯 me9 db only vailable when lift,0ah,0dh,$ me10 db stop(use w or s ),0ah,0dh,$ me11 db now vailable,0ah,0dh,$ me12 db ,0ah,0dh,$

18、ibuff db 0ffh,0,255 dup(0) didas equ 18 dz dw 0 times dw 0,0 num db 0 num1 db 0 count db 0 count1 db 0 dx1 dw 3 dx2 dw 6 data ends stac segment sta dw 100 dup(0) ; 堆棧段 top dw ? stac endscode segmentassume cs:code,ds:data,es:data,ss:datadelay1s proc near ;延時1s的子函數(shù) push dx ;壓棧 push cx xor ax,ax int 1a

19、h mov times,dx mov times2,cxread_time:xor ax,ax int 1ah sub dx,times sbb cx,times2 cmp dx,didas jb read_time pop cx ;出棧 pop dx retdelay1s endp start proc far mov ax,data ; 主程序 mov ds,ax mov ax,stac mov ss,ax mov ax,data mov es,ax push ax push bx push cx push dx push si push di mov cx,0 mov dx,2479h

20、mov bh,7 ;黑底白字 mov ax,0601h int 10h mov ax,0012h ; 置圖形顯示方式 int 10h ; 640列*480行,16色. mov dx,0421h ;顯示mess gb mov dx,offset mess ;9號顯示調(diào)用 mov ah,9 int 21h mov dx,1c32h ;顯示me5 gb mov dx,offset me5 mov ah,9 int 21h mov dx,1b32h ;顯示me6 gb mov dx,offset me6 mov ah,9 int 21h mov dx,0 gb mov dz,100 sb: heng

21、220,dz,03,420 ;顯示欄 inc dz cmp dz,150 jnz sb heng 220,99,0ah,420 ;顯示欄邊框 heng 220,151,0ah,420 shu 220,99,0ah,151 shu 420,99,0ah,151 close ;電梯大門處于關(guān)閉狀態(tài) 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,0

22、2h,420 mov dz,219 mov dx1,210 mov dx2,370 sb1: heng dx1,dz,03h,dx2 ;三維電梯上側(cè)面 dec dz inc dx1 inc dx2 cmp dz,180 jnz sb1 mov dz,371 mov dx1,220 mov dx2,420 sb2: shu dz,dx1,03h,dx2 ;三維電梯右側(cè)面 inc dz dec dx1 dec dx2 cmp dz,410 jnz sb2 mov dz,420sb3: heng 70,dz,06h,480;畫地平線 inc dz cmp dz,425 jnz sb3 mov dz,

23、421sb4: heng 480,dz,04h,520 ;小方塊運行在框架內(nèi) sub dz,30 cmp dz,151 jnz sb4 shu 480,180,04h,420 shu 520,180,04h,420 mov dx,071dh gb mov dx,offset me2 ;顯示me2 mov ah,9 int 21h mov dx,081dh gb mov dx,offset me3 ;顯示me3 mov ah,9 int 21h mov dx,082dh gb mov dx,offset me7 ;顯示me7 mov ah,9 int 21h sa1s: mov dx,0202h

24、 ;顯示me4 gb mov dx,offset me4 mov ah,9 int 21h mov dx,0229h gb mov dx,offset ibuff ;輸入并顯示字符串 mov ah,10 int 21h mov dx,0402h ;提示使用者用上、下鍵不連續(xù)控制電梯 gb mov dx,offset me8 ;顯示me8 mov ah,9 int 21h mov dx,0502h gb mov dx,offset me9 ;顯示me9 mov ah,9 int 21h mov dx,0602h gb mov dx,offset me10 ;顯示me10 mov ah,9 int

25、 21h sa1: mov al,ibuff+1 mov count,al ;記錄輸入的字符個數(shù) mov bp,2 mov al,ibuffbp cmp al,30h ;將首字符與1bh(esc ascii碼)比較,若相等則返回dos,這里由于匯編軟件的原因改為與0的ascii碼比較 jz wa1a1 jmp wa1a2 wa1a1: jmp wa1 wa1a2: cmp al,30h ;避免當使用者出入其它鍵是程序進入死循環(huán) jb wa0a1 jmp wa0a2 wa0a1: jmp wa0 wa0a2: cmp al,38h ja wa0a1 and al,0fh mov num,al i

26、nit num,dx1 mov dx,072fh gb mov dl,num ;顯示電梯第一站樓層數(shù) or dl,30h ;將數(shù)字轉(zhuǎn)換為字符 mov ah,2 int 21h call delay1s sa1a: add bp,2 mov al,ibuffbp and al,0fh ;將字符轉(zhuǎn)換為數(shù)字 mov num1,al mov dx,0830h gb mov dl,ibuffbp ;顯示電梯下一站要停的樓層數(shù) mov ah,2 int 21h call delay1s sa1b: mov al,num1 ;下一站要去的樓層和當前所在樓層相比較 cmp al,num ;若下一站樓層大于當前

27、樓層,則小方塊上升 ja sa1ca1 ;若下一站樓層小于當前樓層,則小方塊下降 jmp sa1ca2 sa1ca1: jmp sa1c sa1ca2: mov al,num1 ;若下一站樓層等于當前樓層,則小方塊不動 cmp al,num ;這里有2次比較 jz sa1da1 ;到達所在樓層后停止運動 jmp sa1da2 sa1da1: jmp sa1d sa1da2: dec num down num,dx1 ;電梯下降 mov dx,0829h gb mov dl,19h ;顯示下箭頭 mov ah,2 int 21h mov dx,072fh gb mov dl,num ;顯示當前樓

28、層數(shù) or dl,30h ;將數(shù)字轉(zhuǎn)換為字符 mov ah,2 int 21h call delay1s ;小方塊在每一層停止1s可讓人更直觀地看清電梯運行狀況 jmp sa1b sa1c: inc num up num,dx1 ;電梯上升 mov dx,0829h gb mov dl,18h ;顯示上箭頭 mov ah,2 int 21h mov dx,072fh gb mov dl,num ;顯示當前樓層數(shù) or dl,30h ;將數(shù)字轉(zhuǎn)換為字符 mov ah,2 int 21h call delay1s jmp sa1bsa1d: half ;電梯在指定樓層停下,大門依次從閉合-半開門-

29、全開門-半開門-全開門 call delay1s full call delay1s half call delay1s close call delay1s mov dx,0702h gb mov dx,offset me11 ;顯示me11,表明現(xiàn)在可以進行不連續(xù)控制 mov ah,9 int 21h xor ax,ax int 1ah mov times,dx mov times2,cxread_time1: clc mov ah,1 ;輸入上、下鍵 int 16h jnz get xor ax,ax int 1ah sub dx,times sbb cx,times2 cmp dx,d

30、idas jb read_time1 jmp show1 get: cmp al,w jz ups1 cmp al,s jz downs1 jmp sa1eups1: inc num up num,dx1 ;電梯上升一層 jmp showdowns1: dec num down num,dx1 ;電梯下降show: mov dx,072fh gb mov dl,num ;顯示當前樓層數(shù) or dl,30h ;將數(shù)字轉(zhuǎn)換為字符 mov ah,2 int 21h mov ah,0ch int 21h ;清空鍵盤緩沖區(qū)show1: mov dx,0702h gb mov dx,offset me12 ;顯示me12,表明現(xiàn)在不可以進行不連續(xù)控制 mov ah,9 int 21h sa1e: mov al,count;電梯向下一站運行 cbw cmp bp,ax jb sa1aa1 jmp sa1aa2 sa1aa1: jmp sa1a sa1aa2: jmp sa1s ;電梯重新進行新的一輪的運行w

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論