版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 計算機硬件技術基礎課程設計</p><p><b> 計程車計價器設計</b></p><p> (用計算機系統(tǒng)的輸入輸出設備完成)</p><p><b> 引言</b></p><p> 現(xiàn)今,不管是在那些大城市,還是小縣城。出租車早已經(jīng)成為了一種重要的交通工具。不
2、但解決了公交車較慢的煩惱,也解決了自己開車沒停車位的弊端??傊鲎廛囋缫讶谌肓诉@個城市的生活。</p><p> 既然如此,我們不得不考慮下出租車收費的問題。擁有良好性能的計價器無論是對廣大出租車司機朋友還是乘客來說都是很必要的。所以我們下面就用匯編語言來設計出租車計價系統(tǒng)。</p><p> 設計的重要內(nèi)容和方案</p><p> 1.1 設計的主要內(nèi)容&
3、lt;/p><p> 設計一個計程車計價器,能用計算機系統(tǒng)的輸入輸出設備完成計程車計價器的基本功能,并在此基礎上自行完善和優(yōu)化系統(tǒng)功能?;竟δ芫唧w要求如下:</p><p> 以計算機系統(tǒng)的輸入輸出設備為基礎,一鍵盤作為輸入設備,顯示器作為輸出設備,完成設計;(允許使用PC機的揚聲器作為發(fā)生設備)</p><p> 按鍵啟動計程車和停車,可以在行進過程中按鍵調整
4、車速。</p><p> 按鍵開始計價和停止計價。開始計價后,3公里內(nèi)幾家結果為起步價,3公里后,根據(jù)車速和行進時間計算所行距離,所行距離每達到1公里時,計價結果增加1次單價,要求精確到角。若在計價過程中停車,則每隔一段時間(具體時間間隔自行設置),計價結果增加1次單價。晚上10點到次日早上7點,按晚間起步價和晚間每公里單價計算。</p><p> 屏幕上要求顯示當前車速,當前計價結果
5、,本次計價時間。停止計價后,本次計價結果保持一段時間后清為0.</p><p> 顯示當前燃料量,車輛行進過程中反映燃料的消耗,當燃料量低于警戒值時報警。</p><p><b> 1.2 設計方案</b></p><p> 我們經(jīng)過組內(nèi)激烈的討論,將基本功能分為了幾個小模塊。如下:</p><p> 速度、時間
6、差、油量模塊,計算里程計價模塊。</p><p> 等待計價模塊,總油量、每公里耗油模塊。</p><p> 顯示車速、計價結果、時間模塊。</p><p> 設置起步價、單價,并判斷是否白天晚上,并將輸入的元,轉化為角模塊。</p><p> 我們小組四人分別將這四個子模塊分別編輯。然后共同構想了主程序模塊,以上各個模塊的思路請看流
7、程圖。</p><p><b> 任務分工</b></p><p> 袁云軍:設置起步價、單價,并判斷是否白天晚上模塊;輸入的起步價和單價的單位元,化為角模塊,并共同完成論文。</p><p> 周桂鋒:編寫取第一次系統(tǒng)時間程序,取系統(tǒng)時間通用程序,計算相鄰時間差子程序,計算總里程及總價格子程序,共同完成論文。</p>&l
8、t;p> 劉 亞:編寫子程序每次計程車運行的總時間的提取,換算稱實際的時分秒格式并顯示;每次運行的總價格的計算,及顯示;聲音模塊的寫入及調用;及有關論文的撰寫。</p><p> 實驗中運用的一些實驗原理</p><p> 2.1 鍵盤按鍵中斷</p><p> 程序中用到的中斷:引發(fā)9號中斷,鍵盤的輸入到達60h端口時,相關的芯片就會向CPU發(fā)出中
9、斷類型碼為9的可屏蔽終端信息。CPU檢測到該中斷信息后,如果IF=1,則響應中斷,引發(fā)中斷過程,轉去執(zhí)行int 9中斷例程。</p><p> 編寫int 9中斷例程:①鍵盤產(chǎn)生掃描碼;②掃描碼送入60h端口;③引發(fā)9號中斷;④CPU執(zhí)行int 9中斷例程處理鍵盤輸入。</p><p><b> 2.2 取系統(tǒng)時間</b></p><p>
10、 取當前系統(tǒng)時間采用int 21h中斷的2ch號功能,分別將當前時刻的時、分、秒和百分之一秒存入對應的寄存器:ch、cl、dh、dl。</p><p> 2.3 揚聲器驅動系統(tǒng)原理</p><p> 在PC中,8254的通道2與計算機的揚聲器相連,由通道2工作于方式3產(chǎn)生一定頻率的方波信號去驅動揚聲器按一定頻率發(fā)聲。其原理如圖1所示。從圖中可見,系統(tǒng)使用并行I/O接口8255A中PB
11、端口的最低兩位來控制該發(fā)聲驅動系統(tǒng):PB0作為8254通道2的門控信號GATE2,控制通道2定時計數(shù)啟停;PB1與通道2的OUT2信號相與后去控制揚聲</p><p> 器的接通和斷開。PC中8255A的端口地址為60H~63H,8254的端口地址為40H~43H。</p><p> 可見,要使揚聲器發(fā)聲,PB0置1,通道2才能工作;PB1置1,OUT2上產(chǎn)生的一定頻率的方波信號才能通
12、過與門送到驅動器,從而使揚聲器發(fā)聲。</p><p> 圖1 揚聲器驅動電路原理圖</p><p><b> 3.操作說明</b></p><p> 在程序開始運行后,系統(tǒng)的初始狀態(tài)是出租車停止,具體操作方式如下:</p><p> 1、按任意“s”鍵啟動系統(tǒng);</p><p> 2、設
13、置白天的起步價和單價;</p><p> 3、設置晚上的起步價和單價;</p><p> 4、按鍵選擇白天或晚上;</p><p> 5、按加速鍵“+”調速啟動出租車,即速度由0變?yōu)檎?,計價器開始里程計價;</p><p> 6、在計價過程中通過“+”,“-”鍵實現(xiàn)車速的調節(jié);</p><p> 7、按減速鍵
14、“-”使車速重新回到0,進入等待計價;</p><p> 8、等待計價時,如果按加速鍵“+”使速度變?yōu)檎?,則重新進入里程計價</p><p> 9、等待計價時 按“q”鍵,出租車停車,停止計價。</p><p> 4.主程序及子模塊流程圖</p><p><b> 主程序流程圖</b></p>&l
15、t;p><b> 按鍵中斷服務程序</b></p><p><b> 計算當前油量子模塊</b></p><p><b> 等待計價子模塊</b></p><p> 輸入白天和晚上的起步價和單價模塊</p><p><b> 元轉化成角模塊</b
16、></p><p><b> N </b></p><p><b> Y</b></p><p> 計算時間差子程序流程圖</p><p><b> Y</b></p><p><b> N</b></p>
17、;<p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p> 里程計價子程序流程圖</p><p><
18、;b> N</b></p><p><b> Y</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> N</b></p><p><b>
19、; Y</b></p><p> 5.每個人的心得體會</p><p><b> 1、課程設計的目的</b></p><p> 本次設計的題目分為兩大類,5個題目,只是一種是涉及硬件的題目,一種是純軟件寫出的題目。我們小組有4個同學,分別是郭洋成,袁云軍,周桂峰,我一起商量以后選擇了:計程車計價器設計(用計算機系統(tǒng)的輸入輸出
20、設備完成),這個題目。</p><p> 選取這個題目大家有這樣幾點考慮:</p><p> 第一,怎樣設計總體方案(思路清晰)</p><p> 第二,分成幾個子模塊且每個模塊怎么融合(連接簡單)</p><p> 第三,總程序的調試及功能的實現(xiàn)(顯示清晰)</p><p><b> 2、課程設計
21、的任務</b></p><p> 拿到題目后,4個同學集思廣益,都紛紛開動腦筋,思想的火花一下子全都迸發(fā)出來了,最后經(jīng)過綜合后,留下了大家覺得比較合適的、好的、容易實現(xiàn)的思想后,完成了總體方案的設計和定稿。</p><p> 我們的任務是實現(xiàn)計價器的一些基本功能,設置不同時段(白天、黑夜)的起步價、單價;用按鍵的方式實現(xiàn)計程車的起動和停止以及行進過程中調整車速;用按鍵實現(xiàn)起
22、動車時計價,停車時結束計價;3公里內(nèi)記為起步價,超過3公里距離每超過1公里計價一次,要求精確到角;若在計價過程中有停車等待,超過某一個時間設定值單價增加1次;整個過程分時段計價(晚上10點到次日早上7點)。</p><p> 設計的顯示效果分為兩部分,一是實時的車速,計價結果,油量(油量低于某個設定值報警提示);二是本次總里程,計價總時間,總價格,且在停止計價后一段時間所有計數(shù)清零。</p>&l
23、t;p><b> 3、課程設計的內(nèi)容</b></p><p> 在明確設計任務后,大家按照設計要求明確地分了工。我的部分是顯示計價總時間,總價格,并在其他同學需要的時候做一些輔助工作。</p><p> 我的設計程序段比較簡單,因此比較容易實現(xiàn),基本思想是,取出起動計程車時的時間后停止計程車時的時間,然后按照時間顯示的格式,時:分:秒,分段計算時差,加到后
24、一時間的分作差,計算出分差,再加到秒上作差,最后計算出總秒數(shù),再分別按時,分,秒,除以3600,60,得出時分秒的具體值。注意的是時分秒的數(shù)學格式為 “ 0:00: 00 ",而匯編語言是基礎語言,只能是一位一位的顯示,并且只有1~9才有ASC||碼,所以在計算分和秒的時候有可能除出來的數(shù)是大于9的數(shù),這時需要將分數(shù)在除以10,并將商數(shù)加上30h輸出ASC||碼放到第一個分位,余數(shù)加上30h輸出ASC||碼放到第二位,類似秒位
25、也如此。具體的程序段 見程序附錄。</p><p><b> 4、課程設計的總結</b></p><p> 這次設計基本上實現(xiàn)了任務書上的要求,可以設置不同時段的起步價、單價;按鍵可以起停車并變速;滿足在相應的公里數(shù)下計價加價,如是停車等待也可以按設定值來加價;可以在行進途中實現(xiàn)實時顯示價錢,油量,車速。</p><p> 本次設計總共歷
26、時9天(含中秋放假),我的程序差不多總時間累計起來有3天左右??偨Y起來,自己的匯編語言基本上沒怎么學懂,同學們在討論的一些東西基本上算不知道,嘆息自己的學習能力了,很多東西沒學過干,對自己說聲‘’仍需努力,加油吧”。不過值得高興的是,和同學們相處的這一周多時間里面還是了解了很多東西,像我的程序段的顯示,原來我是每個字位用一個 mov ah,09h;int 21h,而郭洋成同學的指導僅用了一個 定義數(shù)據(jù)段中的格式“ ‘ 0: 00 :00
27、 ’”,然后地址每加1位,很簡潔的就解決了(詳細的程序見程序附錄)。并且也體會到了團隊工作的相互配合,相互協(xié)作重要性,明確自己什么時候去配合他人,也要知道什么時候讓他人幫助自己,有時候單靠自己是費力不討好的事,凝聚產(chǎn)生力量,所以集體的力量是無窮的的。</p><p> 期待,下一次的團隊合作!</p><p> 非常感謝有這樣一個機會讓我獲益匪淺!</p><p&g
28、t;<b> 6.參考文獻</b></p><p> [1].楊天怡主編.計算機硬件基礎(A).重慶大學出版社</p><p> [2].黃勤主編.計算機硬件技術基礎實驗教程.重慶大學出版社</p><p> [3].王爽主編.匯編語言(第二版).清華大學出版社 </p><p> [4].匯編語言指令
29、大全(詳解版)</p><p><b> 7.附錄</b></p><p><b> .486</b></p><p> data segment</p><p> disp_start db 'please press the "s" key to start
30、the taxi!',0ah,0dh,'$' ;開、停車提示語</p><p> xwtz0 db ' ',0ah,0dh,'$' </p><p> xwtz db 'pleas press on the key &q
31、uot;q" to stop the car ?',0ah,0dh,'$'</p><p> pricing db ? ;定義兩個內(nèi)存空間,存入需要用的起步價和單價</p><p> ppm db ?</p><p> pricing1 db ? ;定義兩個內(nèi)存空間,臨時存入白天的起步價和單價</p&g
32、t;<p> ppm1 db ?</p><p> pricing2 db ? ;定義兩個內(nèi)存空間,臨時存入晚上的起步價和單價</p><p><b> ppm2 db ?</b></p><p> keybuf db 10 ;定義一個存字符串的數(shù)組</p><p> count
33、 db ?</p><p> keynum db 10 dup(?)</p><p> mess0 db 'please set the prices (0.0-9.9 yuan)',0ah,0dh,'$'</p><p> mes1 db 'the start price of day: ','$
34、39;</p><p> mes2 db 0ah,0dh,'the pice per kilometer of day: ','$'</p><p> mes3 db 0ah,0dh,'the the start price of night: ','$'</p><p> mes4 db 0ah
35、,0dh,'he pice per kilometer of night: ','$'</p><p> mes5 db 0ah,0dh,'press "d" or "n" to judge the day or night',0ah,0dh,'$'</p><p> tt db &
36、#39;totaltime:',0ah,0dh,'$' ;實時顯示字符串緩沖區(qū)</p><p> tt1 db 'wait time:',0ah,0dh,'$' </p><p> tp db 'totalprice:',0ah,0dh,'$'</p>&
37、lt;p> ttd db '0:00:00',0ah,0dh,'$'</p><p> ttd1 db '0:00:00',0ah,0dh,'$'</p><p> tpd db '000.0 yuan',0ah,0dh,'$'</p><p> disp1
38、 db 'speed: 000 km/h',0dh,0ah,'$'</p><p> disp2 db 'current oil: 000 L',0ah,0dh,'$'</p><p> disp3 db 'total distance: 000 km',0ah,0dh,'$'</p&
39、gt;<p> ttd0 db '0:00:00',0ah,0dh,'$' ;初始化顯示字符串,清零</p><p> ttd10 db '0:00:00',0ah,0dh,'$'</p><p> tpd0 db '000.0 yuan',0ah,0dh,&
40、#39;$'</p><p> disp10 db 'speed: 000 km/h',0dh,0ah,'$'</p><p> disp20 db 'current oil: 000 L',0ah,0dh,'$'</p><p> disp30 db 'total distanc
41、e: 000 km',0ah,0dh,'$'</p><p> minite db ?</p><p> second db ?</p><p> msecond dw ?</p><p> daytime db ?</p><p><b> mile dd 0</b&
42、gt;</p><p> p dw 0 ;計價的總價格</p><p> miletest dd 3000</p><p> miletest1 dd 1000</p><p> priceflag db 0</p><p> timea dw ? ;
43、開始計價時刻的時和分</p><p> timeb dw ? ;停止計價時刻的秒</p><p> timec dw ? ;停止計價時刻的時和分</p><p> timed db ? ;停止計價時刻的秒</p><p> time1 dw ?</p>
44、<p> time2 dw ?</p><p> time3 dw ?</p><p> time4 dw ?</p><p><b> t1 dw ?</b></p><p><b> t2 dw ?</b></p><p><b> t
45、3 dw ?</b></p><p><b> t4 dw ?</b></p><p> flagtime db 0 ;為0表示與初始時間做時間差chesu db ?</p><p> time_lag dw 10 ;設置等待計價的時間間隔</p><p> tota
46、llag dw 10 ;定義總時間間隔標志位,等待計價</p><p> time5_1 dw ? ;時</p><p> time5_2 dw ? ;分</p><p> time6_1 dw ? ;時</p><p> time6_2 dw ?
47、 ;分</p><p> time_flag db 0</p><p> time_wait dw 0</p><p> msecond1 dw 0</p><p> msecond0 dw 0</p><p> wait1 dw 100</p><p> freq dw 2
48、61 ;設置警報聲的頻率和時間長度</p><p> slong dw 01ffh</p><p> speed db 00h ;出租車車速0~255km</p><p> chesu db 00h ;折算速度,一小時按以分鐘計算,模擬運行</p><p> keep_es d
49、w ?</p><p> keep_bx dw ?</p><p><b> disp dw ?</b></p><p> oil_total dw 100 ;設置本次運行的總油量</p><p> oil_current dw ? ;當前油量</p><p> oi
50、l_pm db 1 ;每公里耗油量</p><p> oil_warn dw 20 ;設置油量警戒值</p><p> oil_flag db 0 ;油量報警標志位</p><p> gongli db 0 ;總里程整數(shù)公里數(shù)</p><p> hang db ?
51、 ;光標顯示初始行位置</p><p> lie db ? ;光標顯示初始列位置</p><p><b> data ends</b></p><p> code segment</p><p> main proc far</p><p>
52、 assume cs:code,ds:data</p><p> start:mov ax,data</p><p><b> mov ds,ax</b></p><p> lea dx,disp_start ;啟動車提示語</p><p> mov ah,09h</p><p>
53、;<b> int 21h</b></p><p> jxx1:mov ah,01h ;繼續(xù)等待時間,檢測按鍵和車速</p><p><b> int 16h</b></p><p> jz jxx1 ;無鍵按下,跳轉jxx1,繼續(xù)等待按鍵</p>
54、<p><b> mov ah,0</b></p><p><b> int 16h</b></p><p> cmp al,'s' ;有開始鍵按下,跳轉</p><p><b> jz kaishi</b></p><p&
55、gt; jmp jxx1 ;無開始鍵按下,跳轉,繼續(xù)等待</p><p> kaishi:lea dx,mess0 ;設置起步價,單價提示語</p><p> mov ah,09h</p><p> int 21h </p><p> call srdq
56、;設置白天,晚上的起步價和單價子程序</p><p> ;設置按鍵中斷,并開中斷</p><p> cli ;清中斷標志位</p><p> mov ah,35h ;讀取原中斷向量 </p><p> mov al,09h</p>
57、;<p><b> int 21h</b></p><p> mov keep_es,es</p><p> mov keep_bx,bx</p><p><b> push ds</b></p><p> mov dx,offset jsd ;裝入自編鍵盤中斷
58、程序的中斷矢量</p><p> mov ax,seg jsd</p><p><b> mov ds,ax</b></p><p> mov ah,25h</p><p> mov al,09h</p><p><b> int 21h</b></p>
59、<p><b> pop ds</b></p><p> in al,21h ;允許鍵盤中斷</p><p> and al,0fdh</p><p> out 21h,al</p><p> sti ;開中斷</p
60、><p> mov bh,00h ;記錄須顯示的初始光標的位置</p><p> mov ah,03h </p><p><b> int 10h</b></p><p> mov hang,dh</p><p> mov lie,dl</p>
61、<p> call xscsh ;顯示初始化</p><p> again:cmp speed,0 ;檢測速度是否為零</p><p><b> jz again</b></p><p> call getsystime1 ;調用取開始時間子程序&l
62、t;/p><p><b> jmp lllp1</b></p><p> qushi:mov dh,hang ;等待計時結束后,即速度重新由零變?yōu)檎?,跳轉到的位置</p><p> mov dl,lie</p><p><b> add dh,9</b></p&
63、gt;<p> mov bh,00h</p><p> mov ah,02h</p><p> int 10h ;置光標位置</p><p> lea dx,xwtz0</p><p> mov ah,09h</p><p> int 21h
64、 ;清楚屏幕停車提示語</p><p> mov dh,hang ;置光標回到初始位置</p><p> mov dl,lie</p><p> mov bh,00h</p><p> mov ah,02h</p><p><b> int 10
65、h</b></p><p> call systime ;調用取當前時刻時間子程序</p><p> lllp1:mov ecx,00ffffffh ;延時,可調時長</p><p> xh0:loopd xh0</p><p> lllp0:call systime
66、 ;再次調用取當前時刻時間子程序</p><p> call duration ;計算相鄰兩次調用時間的時間差</p><p> mov cl,speed </p><p> cmp cl, 240</p><p><b> jbe lllp</b>
67、;</p><p> mov speed,240</p><p> lllp:call jichesu ;折算車速</p><p> call price ;計算總里程和總價格</p><p> call youhao ;計算當前油量</p><
68、;p> call show_zcx ;時間,總價,車速,油量,總里程顯示子程序</p><p> cmp speed,0 ;判斷速度是否為零</p><p> jz jjdd ;速度為零跳轉到等待計價模塊</p><p> mov ecx,00ffffffh
69、;延時,可調</p><p> xh1:loopd xh1</p><p><b> jmp lllp0</b></p><p> jjdd:call ddjj ;跳到等待計價子程序模塊</p><p> tuichu:call show_zcx ;顯示子程序&
70、lt;/p><p> mov ecx,0bfffffffh</p><p> yanshi10:loopd yanshi10 ;顯示一段時間 清零</p><p> call xscsh ;顯示初始化,清零</p><p> mov dh,hang </p
71、><p> mov dl,lie</p><p> add dh,10 ;光標跳到新的一行顯示結束,返回dos</p><p> mov bh,00h</p><p> mov ah,02h</p><p><b> int 10h</b></p&g
72、t;<p> mov ah,4ch ;按任意鍵返回Dos</p><p><b> int 21h</b></p><p><b> main endp</b></p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
73、;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;;;;;;屏幕時間,總價,速度,油量和總里程顯示子程序 ;;;;;;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> show_zcx p
74、roc near</p><p><b> pusha</b></p><p> call getsystime2 </p><p> call totaltime</p><p> call totalprice</p><p><b> call ddjs
75、</b></p><p> call speed_disp</p><p> call oil_disp</p><p> call distance_disp</p><p> mov dh,hang</p><p> mov dl,lie</p><p> mov b
76、h,00h</p><p> mov ah,02h</p><p><b> int 10h</b></p><p><b> popa</b></p><p><b> ret</b></p><p> show_zcx endp</p
77、><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;;;;;;;;;設置白天或者晚上起步價和單價子程序;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;通過鍵盤輸入判斷白天黑夜,分別設置不同的起步價和單價;;;;;;;;&l
78、t;/p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; </p><p> srdq proc near</p><p><b> pusha</b></p><p> ;;分別輸入白天晚上的起步價和單價</p
79、><p> lea dx,mes1</p><p> mov ah,09h</p><p><b> int 21h</b></p><p> lea dx,keybuf</p><p> mov ah,0ah</p><p><b> int 21h&l
80、t;/b></p><p> call erjzzh</p><p> mov pricing1,bl</p><p> lea dx,mes2</p><p> mov ah,09h</p><p><b> int 21h</b></p><p> l
81、ea dx,keybuf</p><p> mov ah,0ah</p><p><b> int 21h</b></p><p> call erjzzh</p><p> mov ppm1,bl</p><p> lea dx,mes3</p><p> m
82、ov ah,09h</p><p><b> int 21h</b></p><p> lea dx,keybuf</p><p> mov ah,0ah</p><p><b> int 21h</b></p><p> call erjzzh</p>
83、<p> mov pricing2,bl</p><p> lea dx,mes4</p><p> mov ah,09h</p><p><b> int 21h</b></p><p> lea dx,keybuf</p><p> mov ah,0ah</p&
84、gt;<p><b> int 21h</b></p><p> call erjzzh</p><p> mov ppm2,bl</p><p> lea dx,mes5</p><p> mov ah,09h</p><p><b> int 21h<
85、/b></p><p> l: mov ah,01h ;檢測是否有鍵按下。</p><p> int 16h </p><p><b> jz l</b></p><p> mov ah,0 ;有,就讀入這個鍵,分別和d和n的ascii比較,</p&
86、gt;<p> int 16h ;讀入是d就講轉換的白天值存入內(nèi)存,反之則存入晚上的內(nèi)存</p><p> cmp al,'d'</p><p><b> jz day</b></p><p> cmp al,'n'</p><p><
87、;b> jz night</b></p><p><b> jmp l</b></p><p> day: mov dl,pricing1</p><p> mov pricing,dl</p><p> mov dl,ppm1</p><p> mov ppm
88、,dl</p><p><b> jmp l1</b></p><p> night: mov dl,pricing2</p><p> mov pricing,dl</p><p> mov dl,ppm2</p><p> mov ppm,dl </p><
89、p> l1: popa</p><p><b> ret</b></p><p> srdq endp </p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;;;;;將白天
90、和晚上的單價和起步價分別轉換為整數(shù)角;;;;;;;;;;</p><p> ;;;;;;;;;;;;;輸入的單價和起步價在0.1~9.9之間;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> erjzzh proc
91、 near</p><p><b> push ax</b></p><p><b> push cx</b></p><p><b> push di </b></p><p> lp: mov bl,0</p><p><b&
92、gt; mov di,0</b></p><p> mov al,keynum[di]</p><p> sub al,30h ;轉換輸入的第一位</p><p><b> mov cl,10</b></p><p><b> mul cl</b></p>
93、<p><b> mov bl,al</b></p><p><b> inc di </b></p><p> mov al,keynum[di]</p><p> cmp al,2eh ;判斷是整數(shù)還是小數(shù),是整數(shù)就直接跳出,是小數(shù)就繼續(xù)運算十分位。</p><p
94、><b> jnz llp0</b></p><p> inc di ;跳過小數(shù)點</p><p> mov al,keynum[di]</p><p> sub al,30h</p><p> add bl,al ;將得到的結果存入寄存器bl</p>
95、<p> llp0:pop di</p><p><b> pop cx</b></p><p><b> pop ax </b></p><p><b> ret</b></p><p> erjzzh endp</p>&l
96、t;p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;等待計價子程序;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
97、</p><p> ddjj proc neat</p><p><b> pusha</b></p><p> mov dh,hang ;置光標位置</p><p> mov dl,lie</p><p><b> add dh,9</b></
98、p><p> mov bh,00h</p><p> mov ah,02h</p><p><b> int 10h</b></p><p> lea dx,xwtz</p><p> mov ah,09h</p><p> int 21h
99、;顯示提示語 是否按鍵停止計價停車,q鍵</p><p> mov dh,hang ;置光標初始位置</p><p> mov dl,lie</p><p> mov bh,00h</p><p> mov ah,02h</p><p><b> int 10h</b>&
100、lt;/p><p> jxdd: mov ah,2ch ;dos 2c號功能調用,獲取系統(tǒng)時間,ch,cl,dh分別存放小時,分鐘,秒.</p><p> int 21h </p><p> mov time5_1,cx</p><p> mov time5_2,dx
101、</p><p> in al,60h ;開按鍵中斷int 21h的09h號功能,讀鍵的掃描碼</p><p> push ax ;不能使用int 16h的01h和00h號功能</p><p><b> in al,61h</b></p><p><b> or
102、 al,80h</b></p><p> out 61h,al</p><p> and al,7eh</p><p> out 61h,al</p><p><b> pop ax</b></p><p> cmp al,10h ;10h為q鍵的掃描碼
103、</p><p> jz tuichu ;按下q鍵跳到退出程序段</p><p> jxx:cmp speed,0</p><p> jnz qushi ;車速不為0,跳出,并開始計時,到計算里程計價</p><p> mov ecx,00ffffffh ;延時,可調<
104、;/p><p> xh111:loopd xh111 </p><p> mov ah,2ch ;dos 2c號功能調用,獲取系統(tǒng)時間,ch,cl,dh分別存放小時,分鐘,秒.</p><p> int 21h </p><p> m
105、ov time6_1,cx</p><p> mov time6_2,dx</p><p> mov second,0</p><p> mov ax,time5_1</p><p><b> mov t1,ax</b></p><p> mov ax,time5_2</p>
106、<p><b> mov t2,ax</b></p><p> mov ax,time6_1</p><p><b> mov t3,ax</b></p><p> mov ax,time6_2</p><p><b> mov t4,ax</b><
107、;/p><p><b> mov ax,t3</b></p><p><b> mov bx,t1</b></p><p><b> mov cl,al</b></p><p> sub ah,bh ;差,ah中存小時之差</p><p&
108、gt; jz next10 ;若小時數(shù)相等,則無需處理</p><p> mov al,ah ;al存小時之差</p><p><b> mov ah,0</b></p><p><b> mov bh,60</b></p><p> mul bh
109、 ;將小時之差化為分鐘</p><p><b> add al,cl</b></p><p> mov minite,al ;小時化為分鐘數(shù)加上最近一次的分鐘數(shù)存于minite中</p><p> jmp then10</p><p> next10: mov ax,t3</p>
110、<p><b> mov bx,t1</b></p><p><b> sub al,bl</b></p><p> jmp then20</p><p> then10:mov bx,t1</p><p> mov al,minite</p><p>
111、 sub al,bl ;差,al中存分鐘之差</p><p> then20: jz next20</p><p><b> mov dl,60</b></p><p><b> mov ah,0</b></p><p><b> mul dl</b>
112、;</p><p> mov second,al ;分鐘之差化為秒,存于second</p><p> next20: mov ax,t4</p><p> mov bx,t2;ax為最近一次秒和1%秒</p><p> cmp al,bl </p><p> jb next3
113、0 ;若最近一次的1%秒數(shù)小于上一次,不夠減</p><p> sub al,bl ;1%秒數(shù)差存于al中</p><p><b> and cx,0</b></p><p><b> mov cl,al</b></p><p> mov msecond1
114、,cx ;夠減情況下,1%秒之差存于msecond</p><p> jmp next40</p><p> next30: dec ah ;借位</p><p> add al,100</p><p> sub al,bl ;1%秒數(shù)之差存于al</p><p
115、><b> and cx,0</b></p><p><b> mov cl,al</b></p><p> mov msecond1,cx ;不夠減情況下,1%秒存于msecond</p><p> next40: mov dh,second</p><p> add a
116、h,dh </p><p> sub ah,bh ;秒數(shù)之差</p><p> mov al,ah ;秒數(shù)差存于al</p><p><b> mov ah,0</b></p><p> mov bl,100</p><p> m
117、ul bl ;此時由秒數(shù)求得的1%秒存于ax中</p><p> add msecond1,ax ;此時msecond1中存總的間隔時間</p><p> mov ax,msecond1</p><p> add msecond0,ax</p><p> mov ax,wait1</p>
118、<p> cmp msecond0,ax</p><p><b> jb jxdd</b></p><p> add wait1,100</p><p> inc time_wait </p><p> mov cx,totallag</p><p> cmp time_
119、wait,cx ;比較間隔時間,每比較一次間隔時間變化一次time_lag</p><p> jae tjyc ;跳轉到調價一次tjyc</p><p> call show_zcx</p><p> mov ecx,00ffffffh ;延時,可調</p><p> xh1
120、1:loopd xh11 ;取系統(tǒng)時間int 21h中斷要影響按鍵中斷</p><p> jmp jxdd ;所以這里加一個延時可以讓鍵盤中斷加減速鍵靈敏,尤其是當速度為零是按加速鍵</p><p> tjyc:mov ax,time_lag</p><p> add totallag,ax</
121、p><p> mov bl,ppm</p><p><b> mov bh,0</b></p><p><b> add p,bx</b></p><p> call show_zcx</p><p><b> jmp jxdd</b></
122、p><p><b> popa</b></p><p><b> ret</b></p><p><b> ddjj endp</b></p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</
123、p><p> ;;;;;;;;;;;;;;;;;調節(jié)車速中斷服務程序;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> jsd proc near</p><p><b> pusha</b
124、></p><p> in al,60h ;讀取按鍵的掃描碼</p><p><b> push ax</b></p><p><b> in al,61h</b></p><p><b> or al,80h</b></p><
125、;p> out 61h,al</p><p> and al,7eh</p><p> out 61h,al</p><p><b> pop ax</b></p><p> mov bl,speed</p><p> cmp al,0dh</p><p>
126、; je jia ;‘+’鍵按下,跳到加速度段</p><p> cmp al,0ch</p><p> je jian ;'-'鍵按下,跳到減速度段</p><p> jmp exit ;其它按鍵直接跳出</p><p> jia:cmp bl,240&l
127、t;/p><p> jae exit ;大于等于240轉移</p><p> add bl,06h ;車速每加一次6公里</p><p><b> jmp exit</b></p><p> jian:cmp bl,00h</p><p> jbe exit
128、 </p><p> sub bl,06h ;車速每次減6公里</p><p><b> jmp exit</b></p><p> exit:mov speed,bl</p><p> mov al,20h ;發(fā)中斷結束命令</p><p> out 20h
129、,al</p><p><b> popa</b></p><p><b> iret</b></p><p><b> jsd endp</b></p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p&
130、gt;<p> ;;;;;;;;;速度顯示子程序;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> speed_disp proc near</p><p><b> pusha</b></p&g
131、t;<p> lea di,disp1</p><p><b> add di,6</b></p><p> mov al,speed</p><p> mov ah,00h</p><p> mov cl,100</p><p><b> div cl<
132、/b></p><p> add al,30h</p><p><b> inc di</b></p><p> mov [di],al</p><p><b> mov al,ah</b></p><p> mov ah,00h</p><
133、;p><b> mov cl,10</b></p><p><b> div cl</b></p><p> add al,30h</p><p><b> inc di</b></p><p> mov [di],al</p><p>
134、<b> mov al,ah</b></p><p> add al,30h</p><p><b> inc di</b></p><p> mov [di],al</p><p> lea dx,disp1</p><p> mov ah,09h</p&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機硬件技術基礎課程設計----出租車計價器的設計
- 計算機硬件課程設計---出租車計價器設計
- 論文計程車計價器設計
- 計程車計價器設計畢業(yè)設計論文
- 計算機硬件系統(tǒng)設計課程設計
- 計算機硬件課程設計報告---簡單計算機的設計
- 計算機硬件課程設計 電子琴
- 計算機技術基礎課程設計
- 計算機硬件課程設計指導——cpld部分
- 計算機硬件課程設計---電梯監(jiān)控系統(tǒng)
- 計算機硬件復雜模型機課程設計
- 計算機硬件課程設計報告——復雜模型機設計
- 計算機硬件課程設計簡單模型機設計
- 計算機硬件課程設計--復雜模型機設計報告
- 計算機文化基礎課程設計
- 畢業(yè)論文 基于vhdl的計程車計價器設計(含外文翻譯)
- 計算機應用基礎課程設計
- 計算機科學基礎課程設計
- 計算機科學基礎課程設計
- 計算機軟件技術基礎課程設計報告-計算器課程設計
評論
0/150
提交評論