版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 計(jì)算機(jī)硬件技術(shù)基礎(chǔ)課程設(shè)計(jì)</p><p><b> 計(jì)程車計(jì)價(jià)器設(shè)計(jì)</b></p><p> ?。ㄓ糜?jì)算機(jī)系統(tǒng)的輸入輸出設(shè)備完成)</p><p><b> 引言</b></p><p> 現(xiàn)今,不管是在那些大城市,還是小縣城。出租車早已經(jīng)成為了一種重要的交通工具。不
2、但解決了公交車較慢的煩惱,也解決了自己開車沒停車位的弊端??傊?,出租車早已融入了這個(gè)城市的生活。</p><p> 既然如此,我們不得不考慮下出租車收費(fèi)的問題。擁有良好性能的計(jì)價(jià)器無論是對(duì)廣大出租車司機(jī)朋友還是乘客來說都是很必要的。所以我們下面就用匯編語(yǔ)言來設(shè)計(jì)出租車計(jì)價(jià)系統(tǒng)。</p><p> 設(shè)計(jì)的重要內(nèi)容和方案</p><p> 1.1 設(shè)計(jì)的主要內(nèi)容&
3、lt;/p><p> 設(shè)計(jì)一個(gè)計(jì)程車計(jì)價(jià)器,能用計(jì)算機(jī)系統(tǒng)的輸入輸出設(shè)備完成計(jì)程車計(jì)價(jià)器的基本功能,并在此基礎(chǔ)上自行完善和優(yōu)化系統(tǒng)功能?;竟δ芫唧w要求如下:</p><p> 以計(jì)算機(jī)系統(tǒng)的輸入輸出設(shè)備為基礎(chǔ),一鍵盤作為輸入設(shè)備,顯示器作為輸出設(shè)備,完成設(shè)計(jì);(允許使用PC機(jī)的揚(yáng)聲器作為發(fā)生設(shè)備)</p><p> 按鍵啟動(dòng)計(jì)程車和停車,可以在行進(jìn)過程中按鍵調(diào)整
4、車速。</p><p> 按鍵開始計(jì)價(jià)和停止計(jì)價(jià)。開始計(jì)價(jià)后,3公里內(nèi)幾家結(jié)果為起步價(jià),3公里后,根據(jù)車速和行進(jìn)時(shí)間計(jì)算所行距離,所行距離每達(dá)到1公里時(shí),計(jì)價(jià)結(jié)果增加1次單價(jià),要求精確到角。若在計(jì)價(jià)過程中停車,則每隔一段時(shí)間(具體時(shí)間間隔自行設(shè)置),計(jì)價(jià)結(jié)果增加1次單價(jià)。晚上10點(diǎn)到次日早上7點(diǎn),按晚間起步價(jià)和晚間每公里單價(jià)計(jì)算。</p><p> 屏幕上要求顯示當(dāng)前車速,當(dāng)前計(jì)價(jià)結(jié)果
5、,本次計(jì)價(jià)時(shí)間。停止計(jì)價(jià)后,本次計(jì)價(jià)結(jié)果保持一段時(shí)間后清為0.</p><p> 顯示當(dāng)前燃料量,車輛行進(jìn)過程中反映燃料的消耗,當(dāng)燃料量低于警戒值時(shí)報(bào)警。</p><p><b> 1.2 設(shè)計(jì)方案</b></p><p> 我們經(jīng)過組內(nèi)激烈的討論,將基本功能分為了幾個(gè)小模塊。如下:</p><p> 速度、時(shí)間
6、差、油量模塊,計(jì)算里程計(jì)價(jià)模塊。</p><p> 等待計(jì)價(jià)模塊,總油量、每公里耗油模塊。</p><p> 顯示車速、計(jì)價(jià)結(jié)果、時(shí)間模塊。</p><p> 設(shè)置起步價(jià)、單價(jià),并判斷是否白天晚上,并將輸入的元,轉(zhuǎn)化為角模塊。</p><p> 我們小組四人分別將這四個(gè)子模塊分別編輯。然后共同構(gòu)想了主程序模塊,以上各個(gè)模塊的思路請(qǐng)看流
7、程圖。</p><p><b> 任務(wù)分工</b></p><p> 袁云軍:設(shè)置起步價(jià)、單價(jià),并判斷是否白天晚上模塊;輸入的起步價(jià)和單價(jià)的單位元,化為角模塊,并共同完成論文。</p><p> 周桂鋒:編寫取第一次系統(tǒng)時(shí)間程序,取系統(tǒng)時(shí)間通用程序,計(jì)算相鄰時(shí)間差子程序,計(jì)算總里程及總價(jià)格子程序,共同完成論文。</p>&l
8、t;p> 劉 亞:編寫子程序每次計(jì)程車運(yùn)行的總時(shí)間的提取,換算稱實(shí)際的時(shí)分秒格式并顯示;每次運(yùn)行的總價(jià)格的計(jì)算,及顯示;聲音模塊的寫入及調(diào)用;及有關(guān)論文的撰寫。</p><p> 實(shí)驗(yàn)中運(yùn)用的一些實(shí)驗(yàn)原理</p><p> 2.1 鍵盤按鍵中斷</p><p> 程序中用到的中斷:引發(fā)9號(hào)中斷,鍵盤的輸入到達(dá)60h端口時(shí),相關(guān)的芯片就會(huì)向CPU發(fā)出中
9、斷類型碼為9的可屏蔽終端信息。CPU檢測(cè)到該中斷信息后,如果IF=1,則響應(yīng)中斷,引發(fā)中斷過程,轉(zhuǎn)去執(zhí)行int 9中斷例程。</p><p> 編寫int 9中斷例程:①鍵盤產(chǎn)生掃描碼;②掃描碼送入60h端口;③引發(fā)9號(hào)中斷;④CPU執(zhí)行int 9中斷例程處理鍵盤輸入。</p><p><b> 2.2 取系統(tǒng)時(shí)間</b></p><p>
10、 取當(dāng)前系統(tǒng)時(shí)間采用int 21h中斷的2ch號(hào)功能,分別將當(dāng)前時(shí)刻的時(shí)、分、秒和百分之一秒存入對(duì)應(yīng)的寄存器:ch、cl、dh、dl。</p><p> 2.3 揚(yáng)聲器驅(qū)動(dòng)系統(tǒng)原理</p><p> 在PC中,8254的通道2與計(jì)算機(jī)的揚(yáng)聲器相連,由通道2工作于方式3產(chǎn)生一定頻率的方波信號(hào)去驅(qū)動(dòng)揚(yáng)聲器按一定頻率發(fā)聲。其原理如圖1所示。從圖中可見,系統(tǒng)使用并行I/O接口8255A中PB
11、端口的最低兩位來控制該發(fā)聲驅(qū)動(dòng)系統(tǒng):PB0作為8254通道2的門控信號(hào)GATE2,控制通道2定時(shí)計(jì)數(shù)啟停;PB1與通道2的OUT2信號(hào)相與后去控制揚(yáng)聲</p><p> 器的接通和斷開。PC中8255A的端口地址為60H~63H,8254的端口地址為40H~43H。</p><p> 可見,要使揚(yáng)聲器發(fā)聲,PB0置1,通道2才能工作;PB1置1,OUT2上產(chǎn)生的一定頻率的方波信號(hào)才能通
12、過與門送到驅(qū)動(dòng)器,從而使揚(yáng)聲器發(fā)聲。</p><p> 圖1 揚(yáng)聲器驅(qū)動(dòng)電路原理圖</p><p><b> 3.操作說明</b></p><p> 在程序開始運(yùn)行后,系統(tǒng)的初始狀態(tài)是出租車停止,具體操作方式如下:</p><p> 1、按任意“s”鍵啟動(dòng)系統(tǒng);</p><p> 2、設(shè)
13、置白天的起步價(jià)和單價(jià);</p><p> 3、設(shè)置晚上的起步價(jià)和單價(jià);</p><p> 4、按鍵選擇白天或晚上;</p><p> 5、按加速鍵“+”調(diào)速啟動(dòng)出租車,即速度由0變?yōu)檎?,?jì)價(jià)器開始里程計(jì)價(jià);</p><p> 6、在計(jì)價(jià)過程中通過“+”,“-”鍵實(shí)現(xiàn)車速的調(diào)節(jié);</p><p> 7、按減速鍵
14、“-”使車速重新回到0,進(jìn)入等待計(jì)價(jià);</p><p> 8、等待計(jì)價(jià)時(shí),如果按加速鍵“+”使速度變?yōu)檎?,則重新進(jìn)入里程計(jì)價(jià)</p><p> 9、等待計(jì)價(jià)時(shí) 按“q”鍵,出租車停車,停止計(jì)價(jià)。</p><p> 4.主程序及子模塊流程圖</p><p><b> 主程序流程圖</b></p>&l
15、t;p><b> 按鍵中斷服務(wù)程序</b></p><p><b> 計(jì)算當(dāng)前油量子模塊</b></p><p><b> 等待計(jì)價(jià)子模塊</b></p><p> 輸入白天和晚上的起步價(jià)和單價(jià)模塊</p><p><b> 元轉(zhuǎn)化成角模塊</b
16、></p><p><b> N </b></p><p><b> Y</b></p><p> 計(jì)算時(shí)間差子程序流程圖</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> 里程計(jì)價(jià)子程序流程圖</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.每個(gè)人的心得體會(huì)</p><p><b> 1、課程設(shè)計(jì)的目的</b></p><p> 本次設(shè)計(jì)的題目分為兩大類,5個(gè)題目,只是一種是涉及硬件的題目,一種是純軟件寫出的題目。我們小組有4個(gè)同學(xué),分別是郭洋成,袁云軍,周桂峰,我一起商量以后選擇了:計(jì)程車計(jì)價(jià)器設(shè)計(jì)(用計(jì)算機(jī)系統(tǒng)的輸入輸出
20、設(shè)備完成),這個(gè)題目。</p><p> 選取這個(gè)題目大家有這樣幾點(diǎn)考慮:</p><p> 第一,怎樣設(shè)計(jì)總體方案(思路清晰)</p><p> 第二,分成幾個(gè)子模塊且每個(gè)模塊怎么融合(連接簡(jiǎn)單)</p><p> 第三,總程序的調(diào)試及功能的實(shí)現(xiàn)(顯示清晰)</p><p><b> 2、課程設(shè)計(jì)
21、的任務(wù)</b></p><p> 拿到題目后,4個(gè)同學(xué)集思廣益,都紛紛開動(dòng)腦筋,思想的火花一下子全都迸發(fā)出來了,最后經(jīng)過綜合后,留下了大家覺得比較合適的、好的、容易實(shí)現(xiàn)的思想后,完成了總體方案的設(shè)計(jì)和定稿。</p><p> 我們的任務(wù)是實(shí)現(xiàn)計(jì)價(jià)器的一些基本功能,設(shè)置不同時(shí)段(白天、黑夜)的起步價(jià)、單價(jià);用按鍵的方式實(shí)現(xiàn)計(jì)程車的起動(dòng)和停止以及行進(jìn)過程中調(diào)整車速;用按鍵實(shí)現(xiàn)起
22、動(dòng)車時(shí)計(jì)價(jià),停車時(shí)結(jié)束計(jì)價(jià);3公里內(nèi)記為起步價(jià),超過3公里距離每超過1公里計(jì)價(jià)一次,要求精確到角;若在計(jì)價(jià)過程中有停車等待,超過某一個(gè)時(shí)間設(shè)定值單價(jià)增加1次;整個(gè)過程分時(shí)段計(jì)價(jià)(晚上10點(diǎn)到次日早上7點(diǎn))。</p><p> 設(shè)計(jì)的顯示效果分為兩部分,一是實(shí)時(shí)的車速,計(jì)價(jià)結(jié)果,油量(油量低于某個(gè)設(shè)定值報(bào)警提示);二是本次總里程,計(jì)價(jià)總時(shí)間,總價(jià)格,且在停止計(jì)價(jià)后一段時(shí)間所有計(jì)數(shù)清零。</p>&l
23、t;p><b> 3、課程設(shè)計(jì)的內(nèi)容</b></p><p> 在明確設(shè)計(jì)任務(wù)后,大家按照設(shè)計(jì)要求明確地分了工。我的部分是顯示計(jì)價(jià)總時(shí)間,總價(jià)格,并在其他同學(xué)需要的時(shí)候做一些輔助工作。</p><p> 我的設(shè)計(jì)程序段比較簡(jiǎn)單,因此比較容易實(shí)現(xiàn),基本思想是,取出起動(dòng)計(jì)程車時(shí)的時(shí)間后停止計(jì)程車時(shí)的時(shí)間,然后按照時(shí)間顯示的格式,時(shí):分:秒,分段計(jì)算時(shí)差,加到后
24、一時(shí)間的分作差,計(jì)算出分差,再加到秒上作差,最后計(jì)算出總秒數(shù),再分別按時(shí),分,秒,除以3600,60,得出時(shí)分秒的具體值。注意的是時(shí)分秒的數(shù)學(xué)格式為 “ 0:00: 00 ",而匯編語(yǔ)言是基礎(chǔ)語(yǔ)言,只能是一位一位的顯示,并且只有1~9才有ASC||碼,所以在計(jì)算分和秒的時(shí)候有可能除出來的數(shù)是大于9的數(shù),這時(shí)需要將分?jǐn)?shù)在除以10,并將商數(shù)加上30h輸出ASC||碼放到第一個(gè)分位,余數(shù)加上30h輸出ASC||碼放到第二位,類似秒位
25、也如此。具體的程序段 見程序附錄。</p><p><b> 4、課程設(shè)計(jì)的總結(jié)</b></p><p> 這次設(shè)計(jì)基本上實(shí)現(xiàn)了任務(wù)書上的要求,可以設(shè)置不同時(shí)段的起步價(jià)、單價(jià);按鍵可以起停車并變速;滿足在相應(yīng)的公里數(shù)下計(jì)價(jià)加價(jià),如是停車等待也可以按設(shè)定值來加價(jià);可以在行進(jìn)途中實(shí)現(xiàn)實(shí)時(shí)顯示價(jià)錢,油量,車速。</p><p> 本次設(shè)計(jì)總共歷
26、時(shí)9天(含中秋放假),我的程序差不多總時(shí)間累計(jì)起來有3天左右。總結(jié)起來,自己的匯編語(yǔ)言基本上沒怎么學(xué)懂,同學(xué)們?cè)谟懻摰囊恍〇|西基本上算不知道,嘆息自己的學(xué)習(xí)能力了,很多東西沒學(xué)過干,對(duì)自己說聲‘’仍需努力,加油吧”。不過值得高興的是,和同學(xué)們相處的這一周多時(shí)間里面還是了解了很多東西,像我的程序段的顯示,原來我是每個(gè)字位用一個(gè) mov ah,09h;int 21h,而郭洋成同學(xué)的指導(dǎo)僅用了一個(gè) 定義數(shù)據(jù)段中的格式“ ‘ 0: 00 :00
27、 ’”,然后地址每加1位,很簡(jiǎn)潔的就解決了(詳細(xì)的程序見程序附錄)。并且也體會(huì)到了團(tuán)隊(duì)工作的相互配合,相互協(xié)作重要性,明確自己什么時(shí)候去配合他人,也要知道什么時(shí)候讓他人幫助自己,有時(shí)候單靠自己是費(fèi)力不討好的事,凝聚產(chǎn)生力量,所以集體的力量是無窮的的。</p><p> 期待,下一次的團(tuán)隊(duì)合作!</p><p> 非常感謝有這樣一個(gè)機(jī)會(huì)讓我獲益匪淺!</p><p&g
28、t;<b> 6.參考文獻(xiàn)</b></p><p> [1].楊天怡主編.計(jì)算機(jī)硬件基礎(chǔ)(A).重慶大學(xué)出版社</p><p> [2].黃勤主編.計(jì)算機(jī)硬件技術(shù)基礎(chǔ)實(shí)驗(yàn)教程.重慶大學(xué)出版社</p><p> [3].王爽主編.匯編語(yǔ)言(第二版).清華大學(xué)出版社 </p><p> [4].匯編語(yǔ)言指令
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,'$' ;開、停車提示語(yǔ)</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 ? ;定義兩個(gè)內(nèi)存空間,存入需要用的起步價(jià)和單價(jià)</p><p> ppm db ?</p><p> pricing1 db ? ;定義兩個(gè)內(nèi)存空間,臨時(shí)存入白天的起步價(jià)和單價(jià)</p&g
32、t;<p> ppm1 db ?</p><p> pricing2 db ? ;定義兩個(gè)內(nèi)存空間,臨時(shí)存入晚上的起步價(jià)和單價(jià)</p><p><b> ppm2 db ?</b></p><p> keybuf db 10 ;定義一個(gè)存字符串的數(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,'$' ;實(shí)時(shí)顯示字符串緩沖區(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 ;計(jì)價(jià)的總價(jià)格</p><p> miletest dd 3000</p><p> miletest1 dd 1000</p><p> priceflag db 0</p><p> timea dw ? ;
43、開始計(jì)價(jià)時(shí)刻的時(shí)和分</p><p> timeb dw ? ;停止計(jì)價(jià)時(shí)刻的秒</p><p> timec dw ? ;停止計(jì)價(jià)時(shí)刻的時(shí)和分</p><p> timed db ? ;停止計(jì)價(jià)時(shí)刻的秒</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表示與初始時(shí)間做時(shí)間差chesu db ?</p><p> time_lag dw 10 ;設(shè)置等待計(jì)價(jià)的時(shí)間間隔</p><p> tota
46、llag dw 10 ;定義總時(shí)間間隔標(biāo)志位,等待計(jì)價(jià)</p><p> time5_1 dw ? ;時(shí)</p><p> time5_2 dw ? ;分</p><p> time6_1 dw ? ;時(shí)</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 ;設(shè)置警報(bào)聲的頻率和時(shí)間長(zhǎng)度</p><p> slong dw 01ffh</p><p> speed db 00h ;出租車車速0~255km</p><p> chesu db 00h ;折算速度,一小時(shí)按以分鐘計(jì)算,模擬運(yùn)行</p><p> keep_es d
49、w ?</p><p> keep_bx dw ?</p><p><b> disp dw ?</b></p><p> oil_total dw 100 ;設(shè)置本次運(yùn)行的總油量</p><p> oil_current dw ? ;當(dāng)前油量</p><p> oi
50、l_pm db 1 ;每公里耗油量</p><p> oil_warn dw 20 ;設(shè)置油量警戒值</p><p> oil_flag db 0 ;油量報(bào)警標(biāo)志位</p><p> gongli db 0 ;總里程整數(shù)公里數(shù)</p><p> hang db ?
51、 ;光標(biāo)顯示初始行位置</p><p> lie db ? ;光標(biāo)顯示初始列位置</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 ;啟動(dòng)車提示語(yǔ)</p><p> mov ah,09h</p><p>
53、;<b> int 21h</b></p><p> jxx1:mov ah,01h ;繼續(xù)等待時(shí)間,檢測(cè)按鍵和車速</p><p><b> int 16h</b></p><p> jz jxx1 ;無鍵按下,跳轉(zhuǎn)jxx1,繼續(xù)等待按鍵</p>
54、<p><b> mov ah,0</b></p><p><b> int 16h</b></p><p> cmp al,'s' ;有開始鍵按下,跳轉(zhuǎn)</p><p><b> jz kaishi</b></p><p&
55、gt; jmp jxx1 ;無開始鍵按下,跳轉(zhuǎn),繼續(xù)等待</p><p> kaishi:lea dx,mess0 ;設(shè)置起步價(jià),單價(jià)提示語(yǔ)</p><p> mov ah,09h</p><p> int 21h </p><p> call srdq
56、;設(shè)置白天,晚上的起步價(jià)和單價(jià)子程序</p><p> ;設(shè)置按鍵中斷,并開中斷</p><p> cli ;清中斷標(biāo)志位</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 ;記錄須顯示的初始光標(biāo)的位置</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 ;檢測(cè)速度是否為零</p><p><b> jz again</b></p><p> call getsystime1 ;調(diào)用取開始時(shí)間子程序&l
62、t;/p><p><b> jmp lllp1</b></p><p> qushi:mov dh,hang ;等待計(jì)時(shí)結(jié)束后,即速度重新由零變?yōu)檎?,跳轉(zhuǎn)到的位置</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 ;置光標(biāo)位置</p><p> lea dx,xwtz0</p><p> mov ah,09h</p><p> int 21h
64、 ;清楚屏幕停車提示語(yǔ)</p><p> mov dh,hang ;置光標(biāo)回到初始位置</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 ;調(diào)用取當(dāng)前時(shí)刻時(shí)間子程序</p><p> lllp1:mov ecx,00ffffffh ;延時(shí),可調(diào)時(shí)長(zhǎng)</p><p> xh0:loopd xh0</p><p> lllp0:call systime
66、 ;再次調(diào)用取當(dāng)前時(shí)刻時(shí)間子程序</p><p> call duration ;計(jì)算相鄰兩次調(diào)用時(shí)間的時(shí)間差</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 ;計(jì)算總里程和總價(jià)格</p><p> call youhao ;計(jì)算當(dāng)前油量</p><
68、;p> call show_zcx ;時(shí)間,總價(jià),車速,油量,總里程顯示子程序</p><p> cmp speed,0 ;判斷速度是否為零</p><p> jz jjdd ;速度為零跳轉(zhuǎn)到等待計(jì)價(jià)模塊</p><p> mov ecx,00ffffffh
69、;延時(shí),可調(diào)</p><p> xh1:loopd xh1</p><p><b> jmp lllp0</b></p><p> jjdd:call ddjj ;跳到等待計(jì)價(jià)子程序模塊</p><p> tuichu:call show_zcx ;顯示子程序&
70、lt;/p><p> mov ecx,0bfffffffh</p><p> yanshi10:loopd yanshi10 ;顯示一段時(shí)間 清零</p><p> call xscsh ;顯示初始化,清零</p><p> mov dh,hang </p
71、><p> mov dl,lie</p><p> add dh,10 ;光標(biāo)跳到新的一行顯示結(jié)束,返回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> ;;;;;;;;;;;屏幕時(shí)間,總價(jià),速度,油量和總里程顯示子程序 ;;;;;;;;;;;;;</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> ;;;;;;;;;;;;;;設(shè)置白天或者晚上起步價(jià)和單價(jià)子程序;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;通過鍵盤輸入判斷白天黑夜,分別設(shè)置不同的起步價(jià)和單價(jià);;;;;;;;&l
78、t;/p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; </p><p> srdq proc near</p><p><b> pusha</b></p><p> ;;分別輸入白天晚上的起步價(jià)和單價(jià)</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 ;檢測(cè)是否有鍵按下。</p><p> int 16h </p><p><b> jz l</b></p><p> mov ah,0 ;有,就讀入這個(gè)鍵,分別和d和n的ascii比較,</p&
86、gt;<p> int 16h ;讀入是d就講轉(zhuǎn)換的白天值存入內(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、和晚上的單價(jià)和起步價(jià)分別轉(zhuǎn)換為整數(shù)角;;;;;;;;;;</p><p> ;;;;;;;;;;;;;輸入的單價(jià)和起步價(jià)在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 ;轉(zhuǎn)換輸入的第一位</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ù)運(yùn)算十分位。</p><p
94、><b> jnz llp0</b></p><p> inc di ;跳過小數(shù)點(diǎn)</p><p> mov al,keynum[di]</p><p> sub al,30h</p><p> add bl,al ;將得到的結(jié)果存入寄存器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> ;;;;;;;;;;;;;;;;;等待計(jì)價(jià)子程序;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
97、</p><p> ddjj proc neat</p><p><b> pusha</b></p><p> mov dh,hang ;置光標(biāo)位置</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、;顯示提示語(yǔ) 是否按鍵停止計(jì)價(jià)停車,q鍵</p><p> mov dh,hang ;置光標(biāo)初始位置</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號(hào)功能調(diào)用,獲取系統(tǒng)時(shí)間,ch,cl,dh分別存放小時(shí),分鐘,秒.</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號(hào)功能,讀鍵的掃描碼</p><p> push ax ;不能使用int 16h的01h和00h號(hào)功能</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,跳出,并開始計(jì)時(shí),到計(jì)算里程計(jì)價(jià)</p><p> mov ecx,00ffffffh ;延時(shí),可調(diào)<
104、;/p><p> xh111:loopd xh111 </p><p> mov ah,2ch ;dos 2c號(hào)功能調(diào)用,獲取系統(tǒng)時(shí)間,ch,cl,dh分別存放小時(shí),分鐘,秒.</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中存小時(shí)之差</p><p&
108、gt; jz next10 ;若小時(shí)數(shù)相等,則無需處理</p><p> mov al,ah ;al存小時(shí)之差</p><p><b> mov ah,0</b></p><p><b> mov bh,60</b></p><p> mul bh
109、 ;將小時(shí)之差化為分鐘</p><p><b> add al,cl</b></p><p> mov minite,al ;小時(shí)化為分鐘數(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í)由秒數(shù)求得的1%秒存于ax中</p><p> add msecond1,ax ;此時(shí)msecond1中存總的間隔時(shí)間</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 ;比較間隔時(shí)間,每比較一次間隔時(shí)間變化一次time_lag</p><p> jae tjyc ;跳轉(zhuǎn)到調(diào)價(jià)一次tjyc</p><p> call show_zcx</p><p> mov ecx,00ffffffh ;延時(shí),可調(diào)</p><p> xh1
120、1:loopd xh11 ;取系統(tǒng)時(shí)間int 21h中斷要影響按鍵中斷</p><p> jmp jxdd ;所以這里加一個(gè)延時(shí)可以讓鍵盤中斷加減速鍵靈敏,尤其是當(dāng)速度為零是按加速鍵</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> ;;;;;;;;;;;;;;;;;調(diào)節(jié)車速中斷服務(wù)程序;;;;;;;;;;;;;;;;;;</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轉(zhuǎn)移</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ā)中斷結(jié)束命令</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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)硬件技術(shù)基礎(chǔ)課程設(shè)計(jì)----出租車計(jì)價(jià)器的設(shè)計(jì)
- 計(jì)算機(jī)硬件課程設(shè)計(jì)---出租車計(jì)價(jià)器設(shè)計(jì)
- 論文計(jì)程車計(jì)價(jià)器設(shè)計(jì)
- 計(jì)程車計(jì)價(jià)器設(shè)計(jì)畢業(yè)設(shè)計(jì)論文
- 計(jì)算機(jī)硬件系統(tǒng)設(shè)計(jì)課程設(shè)計(jì)
- 計(jì)算機(jī)硬件課程設(shè)計(jì)報(bào)告---簡(jiǎn)單計(jì)算機(jī)的設(shè)計(jì)
- 計(jì)算機(jī)硬件課程設(shè)計(jì) 電子琴
- 計(jì)算機(jī)技術(shù)基礎(chǔ)課程設(shè)計(jì)
- 計(jì)算機(jī)硬件課程設(shè)計(jì)指導(dǎo)——cpld部分
- 計(jì)算機(jī)硬件課程設(shè)計(jì)---電梯監(jiān)控系統(tǒng)
- 計(jì)算機(jī)硬件復(fù)雜模型機(jī)課程設(shè)計(jì)
- 計(jì)算機(jī)硬件課程設(shè)計(jì)報(bào)告——復(fù)雜模型機(jī)設(shè)計(jì)
- 計(jì)算機(jī)硬件課程設(shè)計(jì)簡(jiǎn)單模型機(jī)設(shè)計(jì)
- 計(jì)算機(jī)硬件課程設(shè)計(jì)--復(fù)雜模型機(jī)設(shè)計(jì)報(bào)告
- 計(jì)算機(jī)文化基礎(chǔ)課程設(shè)計(jì)
- 畢業(yè)論文 基于vhdl的計(jì)程車計(jì)價(jià)器設(shè)計(jì)(含外文翻譯)
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)課程設(shè)計(jì)
- 計(jì)算機(jī)科學(xué)基礎(chǔ)課程設(shè)計(jì)
- 計(jì)算機(jī)科學(xué)基礎(chǔ)課程設(shè)計(jì)
- 計(jì)算機(jī)軟件技術(shù)基礎(chǔ)課程設(shè)計(jì)報(bào)告-計(jì)算器課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論