




已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
出租車計價器摘要: 隨著社會進步,出租車已經(jīng)越來越貼近生活,成為我們重要的交通工具,現(xiàn)在的生活中,出租文化已成為一種顯著的文化,成為社會生活的組成部分,而其中,出租車計價器成了必不可少的工具。隨著生活水平的提高,人們已不再滿足于衣食住的享受,出行的舒適已受到越來越多人的關(guān)注。于是,出租車行業(yè)以低價高質(zhì)的服務(wù)給人們帶來了出行的享受。但是總存在著買賣糾紛困擾著行業(yè)的發(fā)展。而在出租車行業(yè)中解決這一矛盾的最好方法就是改良計價器。用更加精良的計價器來為乘客提供更加方便快捷的服務(wù)。這次的課程設(shè)計采用單片機作為控制系統(tǒng),按照傳統(tǒng)的模式,在整個項目設(shè)計開發(fā)過程中,先根據(jù)控制系統(tǒng)要求設(shè)計原理圖,pcb電路圖繪制,電路板制作,元器件的焊接,然后進行軟件編程,通過仿真器對系統(tǒng)硬件和軟件調(diào)試,最后將調(diào)試成功的程序固化到單片機中。本設(shè)計利用單片機豐富的i/o端口,及其控制的靈活性實現(xiàn)基本的里程計價功能和價格調(diào)整、時鐘顯示功能。 隨著改革開放日益深入,出租車行業(yè)的發(fā)展勢頭已十分突出,國內(nèi)各機械廠家紛紛推出國產(chǎn)計價器。出租車計價器的功能從剛開始的只顯示路程(需要司機自己定價,計算后四舍五入),到能夠自主計費,以及現(xiàn)在的能夠打發(fā)票和語音提示、按時間自主變動單價等功能。隨著城市旅游業(yè)的發(fā)展,出租車行業(yè)已成為城市的窗口,象征著一個城市的文明程度。關(guān)鍵詞:出租車計價器 電子線路 單片機 第一章 引言1.1本課題研究的意義 出租汽車是一種流動、分散、獨立經(jīng)營的行業(yè),歷來采用手工開票的交易方式,交管部門及其所屬單位對其實際應(yīng)運情況不易掌握,難以管理。多收費、亂開票、拒開票的宰客舞弊現(xiàn)象時有發(fā)生。而計價器在出租車收費中的應(yīng)用則可以改人為影響因素較大的不公平現(xiàn)象。消費者的權(quán)益也得到了很好的保障,也便于交通部門和所屬行業(yè)對出租車和司機的情況進行管。計價器作為出租車的一個重要組成部分,關(guān)系著出租車司機和乘客雙方利益,起著重要的作用,因此,具有良好性能的計價器對廣大出租車司機朋友來說是很必要的。采用了單片機進行設(shè)計,相對來說功能強大,用較少的硬件和適當(dāng)?shù)能浖嗷ヅ浜峡梢院苋菀椎膶崿F(xiàn)設(shè)計要求,且靈活性強,可以通過軟件編程來完成更多的附加功能。針對計費模式的切換,通過軟件編程就可以輕易而舉的實現(xiàn)。避免了機械開關(guān)帶來的不穩(wěn)定因素。1.2本論文的目的、內(nèi)容 凡坐過出租車的人都知道,只要汽車一開動,隨著行駛里程的增加,就會看到汽車前面的計價器里程數(shù)字顯示的讀數(shù)從零逐漸增大,而當(dāng)行駛到某一值時(如5km)計費數(shù)字顯示開始從起步價(如10元)增加。當(dāng)出租車到達(dá)某地需要在那里等候時,司機只要按一下“計時”鍵,每等候一定時間,計費顯示就增加一個該收的等候費用。汽車?yán)^續(xù)行駛時,停止計算等候費,繼續(xù)增加里程計費。消費者到達(dá)目的地后,便可按顯示的數(shù)字收費。在單片機性能不斷提高而價格卻不斷下降的情況下, 本論文以at89s51單片機為中心,附加a44e霍爾傳感器測距,實現(xiàn)對出租車計價統(tǒng)計,采用at24c02實現(xiàn)對系統(tǒng)的掉電保護,而且能夠?qū)Π滋臁⑼砩?、中途等待采取不同的收費標(biāo)準(zhǔn),操作簡單方便。構(gòu)成:里程傳感器,單片機,顯示器這三個零部件,再通過線路連接.簡單原理:采集車速信號,(也可以自己做車速傳感器,采用霍爾效應(yīng)做),車速信號為脈沖信號,采集脈沖信號的頻率就可以得到車速,可以用到單片機的定時器捕獲。應(yīng)用單片機計算其公里數(shù) 計算時間可以用到定時器確定時間,或者用rtc中斷采集到更精確的時間、用數(shù)碼管或液晶顯示公里數(shù)、時間、以及價格。第二章研究現(xiàn)狀及設(shè)計目標(biāo)2.1現(xiàn)行研究存在的問題我國在70年代開始出現(xiàn)出租車,但那時的計費系統(tǒng)大都是國外進口不但不夠準(zhǔn)確,價格還十分昂貴。最早投入市場的計價器是2型機(1型機是試驗機),兩個顯示屏,4個按鍵,數(shù)據(jù)存儲器和程序存儲器都較小,沒有時鐘,功能僅僅是計程和計價。其集成電路組成:cpu80c39:eprom27c64;srom6264,其它有i0擴展、邏輯運算、光偶隔離、電源芯片是單片機進入單片機的初級階段。2.2本課題要達(dá)到的設(shè)計目標(biāo)本課題屬3、4型機屬過渡產(chǎn)品,因為一方面用戶和管理部門對計價器提出了新的要求,另一方面,市場推出了89s51,功能更強、使用方便,所以就用89s51取代了epu8039,顯示屏由原先的2屏發(fā)展為3屏或4屏,顯示內(nèi)容為:單價、計程、計時、金額;車次數(shù)據(jù)存儲由原先的幾十車次發(fā)展到100 300車次;增加實時時鐘; 能輸入較多參數(shù)。外形也有了變化,集成電路配置:cpu89s51;eprom27c64;srom6264;timerl46818;其它芯片也作了相應(yīng)改進。一、為了滿足客戶的更高的要求,目前5型機的面世,加了打印機,是其顯著標(biāo)志。顯示屏增加為5屏,新增時鐘顯示,數(shù)據(jù)存儲器和程序存儲器都得到有效增加,行業(yè)標(biāo)準(zhǔn)的 臺提高了計價器的產(chǎn)品質(zhì)量和設(shè)計精度,新的計量檢定停機功能保證了計價器的良好受控狀態(tài)和公平交易質(zhì)量。其集成電路配置為:cdu80e31;eprom27c128;srom62256;timer8583;數(shù)據(jù)通訊接151:語言提示開始進入;其它io接口作了相應(yīng)改進。二、稅控計價器的推廣,1998年為了規(guī)范出租汽車行業(yè)管理加快稅收監(jiān)控、保障乘客的合法權(quán)益,國家三部局決定在大中城市出租汽車行業(yè)逐步推廣使用稅控計價器。1999年國家技術(shù)監(jiān)督局和國稅總局又出臺了出租汽車稅控計價器定型鑒定大綱,給出租車計價器的設(shè)計和制造提供了法律依據(jù)和技術(shù)平臺,稅控計價器電路由計量組件、稅控組件、ic卡接口及稅控計價器的硬件配置lepu78e586:riles51內(nèi)核;skcpu稅控芯片廠家訂置;數(shù)據(jù)存儲器24c256:ize; 總線32kezprom:timer per8583?,F(xiàn)在各大中城市出租車行業(yè)都已普及自動計價器,所以計價器技術(shù)的發(fā)展已成定局。而部分小城市尚未普及,但隨著城市建設(shè)日益加快,象征著城市面貌的出租車行業(yè)也將加速發(fā)展,計價器的普及也是毫無疑問的,所以未來汽車計價器的市場還是十分有潛力的。出租車進入了大多數(shù)人們的生活之中,為了更加完善現(xiàn)階段出租車的計費系統(tǒng)功能,我們采用單片微型計算機系統(tǒng)(micro control unit 簡寫為mcu)設(shè)計了一款符合大眾化的計算系統(tǒng)。 第三章 要解決的幾個關(guān)鍵問題本電路以89s51 單片機為中心、附加a44e 霍爾傳感器測距,實現(xiàn)對出租車計價統(tǒng)計,采用at24c02 實現(xiàn)在系統(tǒng)掉電的時候保存單價和系統(tǒng)時間等信息,輸出采用8 段數(shù)碼顯示管。本電路設(shè)計的計價器不但能實現(xiàn)基本的計價,而且還能根據(jù)白天、黑夜、中途等待來調(diào)節(jié)單價,同時在不計價的時候還能作為時鐘為司機同志提供方便。第四章 系統(tǒng)結(jié)構(gòu)與模型系統(tǒng)總體結(jié)構(gòu)4.1 設(shè)計思路出租車計價器是利用單片機計算總價并送顯示端顯示的智能儀器。89s51作為一個單片微型計算系統(tǒng),靈活性高,其強大的控制處理功能和可擴展功能為設(shè)計電路提供了很好的選擇。此設(shè)計可分為五部分考慮,顯示用驅(qū)動后的數(shù)碼管,主控制用單片機芯片,掉電保護用e2prom24c02,外加復(fù)位電路,霍爾感應(yīng)電路即可完成功能的分配。在對顯示的控制上,我采取的是按鈕掃描控制,不同的按鈕對應(yīng)不同的顯示模式,分別顯示時間、單價、里程以及總金額。4.2 總體設(shè)計框圖出租車計價器的工作原理圖如圖1所示。89s51顯示電路單價里程總金額時間掉電保護電路復(fù)位電路功能按鍵里程測量電路圖1 工作原理圖模塊劃分幾功能說明4.3 顯示電路顯示電路采用的是傳統(tǒng)的7段8位數(shù)碼管,用74ls245以及74ls244作為驅(qū)動芯片以便于數(shù)碼管達(dá)到足夠的亮度,顯示電路利用并行接口以及動態(tài)掃描完成4個數(shù)碼管依次顯示里程,單價,總金額。4.4 掉電存儲電路存儲電路用來保存數(shù)據(jù),一般的存儲芯片在掉電以后,內(nèi)部數(shù)據(jù)全部丟失,我們要采用一種能夠在突然掉電情況下,把內(nèi)部的數(shù)據(jù)保存起來,等到重新接通電源時候恢復(fù)正常的顯示。這就意味著此種存儲器必須是可擦寫的,并且對數(shù)據(jù)的存儲不需要外加電源就能完成。這樣以來,我們會考慮到使用e2prom(electrically erasable programmable read only memory)等類似的芯片,例如at24c02芯片,其電路接線如圖2所示。應(yīng)用時,每設(shè)定一次單價,系統(tǒng)就自動調(diào)用存儲程序,將信息保存在芯片內(nèi);當(dāng)重新上電時,自動調(diào)用存儲器程序,供主程序使用。圖2中兩個電阻是上拉電阻,可以減少at24c02的靜態(tài)功耗,由于at24co2的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù)。 2 掉電保護電路4.5里程測量電路對于行駛路程,我們采用霍爾器件來檢測。把磁性物質(zhì)固定于車輪的某個位置,通過計數(shù)器來測量出車輪轉(zhuǎn)過的圈數(shù),根據(jù)車輪的周長來計算行駛過的路程。此處采用a44e集成開關(guān)型霍爾傳感器。圖3 霍爾器件內(nèi)部結(jié)構(gòu)圖a44e集成霍爾開關(guān)由穩(wěn)壓器a、霍爾電勢發(fā)生器b、差分放大器c、施密特觸發(fā)器d和oc門輸出e五個基本部分組成,如圖3所示。由于a44e是開關(guān)型霍爾器件,其工作電壓范圍比較寬(4.5v18v),其輸出信號符合ttl電平標(biāo)準(zhǔn),可以直接接到單片機的i/o端口上,其外型及接線如圖4所示。圖4 霍爾器件外部構(gòu)造接線圖4.6 復(fù)位電路rst引腳是復(fù)位信號的輸入端,復(fù)位信號是高電平有效,其有效時間應(yīng)持續(xù)24個振蕩周期以上。在系統(tǒng)電路中,設(shè)計一個復(fù)位按鈕,用來作為清除里程計數(shù)的開關(guān)。將該按鈕開關(guān)接到單片機的復(fù)位端口上,當(dāng)開關(guān)被按下一次時就作為系統(tǒng)的計程清0處理。復(fù)位電路的基本功能是:系統(tǒng)上電時提供復(fù)位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號。為可靠起見,電源穩(wěn)定后還要經(jīng)一定的延時才撤銷復(fù)位信號,以防電源開關(guān)或電源插頭分-合過程中引起的抖動而影響復(fù)位。圖1所示的rc復(fù)位電路可以實現(xiàn)上述基本功能,圖3為其輸入-輸出特性。但解決不了電源毛刺(a 點)和電源緩慢下降(電池電壓不足)等問題 而且調(diào)整 rc 常數(shù)改變延時會令驅(qū)動能力變差。左邊的電路為高電平復(fù)位有效 右邊為低電平 sm為手動復(fù)位開關(guān) ch可避免高頻諧波對電路的干擾 調(diào)頻fm發(fā)射話筒制作套件4.7 功能按鍵當(dāng)有客人乘坐時,司機可以手動點擊一下啟動鍵,系統(tǒng)開始工作,數(shù)碼管顯示系統(tǒng)時間,并且進入正常計費狀態(tài)。當(dāng)時鐘的時間顯示是:6:00:0020:59:59時間段時候,計費模式按照白天的標(biāo)準(zhǔn)計費;當(dāng)時間顯示是:21:00:005:59:59時間段時候,計費模式自動轉(zhuǎn)換成晚上的計費標(biāo)準(zhǔn)。單價顯示部分顯示的是當(dāng)前的單價,這個模式是在系統(tǒng)時間的控制下自動轉(zhuǎn)換的。路程顯示部分是當(dāng)前汽車行駛過的路程具體顯示,路程是通過霍爾開關(guān)檢測出來車輪的轉(zhuǎn)動周數(shù)(獲得到的脈沖個數(shù)),然后根據(jù)車輪的設(shè)定周長,通過單片機來計算出實際的路程??偨痤~顯示部分顯示的是當(dāng)前應(yīng)付的金額總數(shù),同樣通過霍爾開關(guān)來實現(xiàn)數(shù)值的增加。4個功能按鍵分別調(diào)用不同的顯示程序,同時也實現(xiàn)時間設(shè)置的加一、減一功能以及返回功能。4.8單片機系統(tǒng)單片微型計算機(mcu),我們采用的是低功耗、高性能的at89s51。內(nèi)含有4kb的快閃可編程/擦除只讀存儲器的8 位cmos微控制器,使用高密度、非易失存儲技術(shù)制造,可與80c51引腳和指令系統(tǒng)完全兼容。主要性能包括:與mcs-51微控制器產(chǎn)品系列兼容;片內(nèi)有4kb的可在線重復(fù)編程的flash閃存;存儲器可循環(huán)寫入/擦除1000次;存儲數(shù)據(jù)可保存10年;工作電壓可以從2.76v;全靜態(tài)工作可從0hz16mhz;程序存儲器具有3級加密保護;1288位內(nèi)部ram;32條可編程i/o線;兩個16位定時器/計數(shù)器;5個中斷源和2個優(yōu)先級;可編程全雙工串行通道;空閑狀態(tài)維持低功耗和掉電狀態(tài)保存存儲內(nèi)。第五章 系統(tǒng)實現(xiàn)5.1 里程計算、計價單元的設(shè)計里程計算是通過安裝在車輪上的霍爾傳感器a44e檢測到的信號,送到單片機,經(jīng)處理計算,送給顯示單元的。其原理如圖51所示。圖5 1 傳感器測距示意圖由于a44e 屬于開關(guān)型的霍爾器件,其工作電壓范圍比較寬(4.518v),其輸出的信號符合ttl 電平標(biāo)準(zhǔn),可以直接接到單片機的io 端口上,而且其最高檢測頻率可達(dá)到1mhz。圖52 集成開關(guān)型霍耳傳感器原理圖a44e 集成霍耳開關(guān)由穩(wěn)壓器a、霍耳電勢發(fā)生器(即硅霍耳片)b、差分放大器c、施密特觸發(fā)器d 和oc 門輸出e 五個基本部分組成。在輸入端輸入電壓cc v ,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍耳電勢發(fā)生器的兩端,根據(jù)霍耳效應(yīng)原理,當(dāng)霍耳片處在磁場中時,在垂直于磁場的方向通以電流,則與這二者相垂直的方向上將會產(chǎn)生霍耳電勢差h v 輸出,該h v 信號經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到oc 門輸出。當(dāng)施加的磁場達(dá)到工作點(即op b )時,觸發(fā)器輸出高電壓(相對于地電位),使三極管導(dǎo)通,此時oc 門輸出端輸出低電壓,通常稱這種狀態(tài)為開。當(dāng)施加的磁場達(dá)到釋放點(即rp b )時,觸發(fā)器輸出低電壓,三極管截止,使oc 門輸出高電壓,這種狀態(tài)為關(guān)。這樣兩次電壓變換,使霍耳開關(guān)完成了一次開關(guān)動作。其集成霍耳開關(guān)外形及接線如圖53 所示。圖53 集成霍耳開關(guān)外形及接線我們選擇了p3.2 口作為信號的輸入端,內(nèi)部采用外部中斷0(這樣可以減少程序設(shè)計的麻煩),車輪每轉(zhuǎn)一圈(我們設(shè)車輪的周長是1 米),霍爾開關(guān)就檢測并輸出信號,引起單片機的中斷,對脈計數(shù),當(dāng)計數(shù)達(dá)到1000 次時,也就是1 公里,單片機就控制將金額自動的加增加,其計算公式:當(dāng)前單價 公里數(shù)=金額。5.2 數(shù)據(jù)顯示單元的設(shè)計由于設(shè)計要求有單價(2 位)、路程(2 位)、總金額(3 位)顯示輸出,加上我們另外擴展了時鐘顯示(包含時分秒的顯示),采用lcd 液晶段碼顯示,在距離屏幕1 米之外就無法看清數(shù)據(jù),不能滿足要求,而且在白天其對比度也不能夠滿足要求,因此我們采用6 位led數(shù)碼管的分屏顯示,如圖5-4 ad 所示:圖54 a 單價調(diào)整顯示(圖中顯示為右起白天單價4 .6 元/晚上7.8 /中途等待1.2 元)數(shù)據(jù)的分屏的顯示是通過按鍵s1 來實現(xiàn)切換的,如圖55 所示。圖5 5 s1 切換顯示屏在出租車不走的時候,按下s1,可以實現(xiàn)數(shù)據(jù)的分屏顯示;車在行走的時候只有總金額和單價顯示屏在顯示,當(dāng)?shù)竭_(dá)目的地的時候,客戶要求查看總的里程的時候,就可以按下s1 切換到里程和單價顯示屏,供客戶查詢。顯示電路的電路原理圖如圖56所示。圖56 顯示器原理圖從單片機串口輸出的信號先送到左邊的移位寄存器(74hc164),由于移位脈沖的作用,使數(shù)據(jù)向右移,達(dá)到顯示的目的。移位寄存器74hc164還兼作數(shù)碼管的驅(qū)動,插頭1(header1)接電源,插頭2(header2)接數(shù)據(jù)和脈沖輸出端。電路中的三個整流管d1d3 的作用是降低數(shù)碼管的工作電壓,增加其使用壽命。5.3 at24c02 掉電存儲單元的設(shè)計掉電存儲單元的作用是在電源斷開的時候,存儲當(dāng)前設(shè)定的單價信息。at24c02 是atmel 公司的2kb 字節(jié)的電可擦除存儲芯片,采用兩線串行的總線和單片機通訊,電壓最低可以到2.5v,額定電流為1ma,靜態(tài)電流10ua(5.5v),芯片內(nèi)的資料可以在斷電的情況下保存40 年以上,而且采用8 腳的dip 封裝,使用方便。其電路如圖57 所示。圖57 掉電存儲電路原理圖圖中r8、r10 是上拉電阻,其作用是減少at24c02 的靜態(tài)功耗,由于at24c02 的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線scl(移位脈沖)和sda(數(shù)據(jù)/地址)與單片機傳送數(shù)據(jù)。每當(dāng)設(shè)定一次單價,系統(tǒng)就自動調(diào)用存儲程序,將單價信息保存在芯片內(nèi);當(dāng)系統(tǒng)重新上電的時候,自動調(diào)用讀存儲器程序,將存儲器內(nèi)的單價等信息,讀到緩存單元中,供主程序使用。5.4 按鍵單元的設(shè)計電路共采用了四個按鍵,s1、s2、s3、s4,其功能分別是:s1 分屏顯示切換按鍵,s2功能設(shè)定按鍵,s3 /白天晚上切換按鍵,s4 /中途等待開關(guān)。5.5 設(shè)計總框圖圖58總體設(shè)計框圖5.6 設(shè)計總體電路圖圖59 總體電路圖5.7 程序模塊分析5.7.1 主程序模塊在主程序模塊中,需要定義各個寄存器,完成對各接口芯片的初始化,出租車起步價和單價(白天、晚上和中途等待)的初始化,中斷向量的設(shè)計以及開中斷、循環(huán)等待等工作,然后主程序?qū)佣〞r器以及循環(huán)鍵盤掃描程序,主程序流程圖見附錄一,總程序見附錄二。當(dāng)上電時就啟動計價,將根據(jù)里程寄存器中的內(nèi)容計算和判斷出行駛里程是否超出起價公里,若已經(jīng)超出,則根據(jù)里程值、單價、起步價來計算當(dāng)前累計金額,將結(jié)果存于價格寄存器內(nèi),然后通過顯示電路顯示出。當(dāng)達(dá)到目的地,霍爾開關(guān)器件沒有送來脈沖信號時就停止計價,可以調(diào)用當(dāng)前的總金額,到下次啟動計價時,系統(tǒng)自動重新初始化。主程序開始控制芯片初始化對出租車起價和每公里單價付初值,并用顯示器顯示各操作寄存器初始化設(shè)置中斷向量開中斷,等待有“啟動中斷”標(biāo)志嗎? n y里程已超過起步價公里數(shù)嗎 n y計算當(dāng)前已行駛公里數(shù)和累計價格并送顯示器顯示有“清零中斷”標(biāo)志 n y將當(dāng)前里程和累計價顯示清0圖510 主程序流程圖5.7.2 中途等待中斷程序在計數(shù)狀態(tài)下,當(dāng)需要停車時,手動按鍵進行中途等待的開啟,片內(nèi)t1定時器啟動,一旦達(dá)到5min,便開始中途等待計費程序,在當(dāng)前金額上累加中途等待單價。5.7.3 顯示子程序由于是分別顯示里程、單價、總金額以及時間,所以需要4個子程序,分別是時間顯示子程序,里程顯示子程序,單價顯示子程序,總金額顯示子程序。5.7.4 定時中斷程序在定時中斷程序中,每100ms產(chǎn)生一次中斷,當(dāng)產(chǎn)生10次中斷時,也就是1s,送數(shù)據(jù)到相應(yīng)的顯示緩沖單元,并調(diào)用相應(yīng)的顯示子程序?qū)崟r顯示。5.7.5 里程計數(shù)中斷程序每當(dāng)霍爾開關(guān)器件輸出一個低電平脈沖信號就使單片機中斷一次,設(shè)定車輪周長是1米,當(dāng)里程計數(shù)器計滿1000次時,就將當(dāng)前的里程數(shù)和金額存入相應(yīng)的寄存器中。5.7.6 按鍵程序按鍵采用查詢的方式放在主程序中,在循環(huán)主程序的同時,一旦按鍵按下便轉(zhuǎn)向相應(yīng)的子程序處理,其流程圖如圖5-11所示。鍵盤掃描noyesyesyesyesnonono鍵盤掃描s1s2s3s1s2s3s4總金額顯示路程顯示單價顯示調(diào)整/等待時調(diào)整分調(diào)整中途等待圖5-11 按鍵掃描流程圖計價器源程序day_priceequ 6fh26 night_priceequ 6ehmidway_priceequ 6dhstart_priceequ 6chcountl equ 6bhcounth equ 6ahm100 equ 69h ;外部中斷次數(shù)distance equ 68h ;行車距離ms100 equ 67hsec equ 66hmin equ 65hhour equ 64hledsl equ 63h ;時分鈔顯示緩沖區(qū)ledsh equ 62hledml equ 61hledmh equ 60hledhl equ 5fhledhh equ 5ehleddanjial equ 5dh ;總額,單價顯示緩沖區(qū)leddanjiah equ 5chline_ equ 5bhledcount1 equ 5ahledcount2 equ 59hledcount3 equ 58hleddanjia2l equ 57h ;路程,單價顯示緩沖區(qū)leddanjia2h equ 56hline_ equ 55hline_ equ 54hleddistancel equ 53hleddistanceh equ 52hledday_pl equ 51h ;中途,晚上,白天顯示緩沖區(qū)ledday_ph equ 50hlednig_pl equ 4fhlednig_ph equ 4ehledw_pl equ 4dhledw_ph equ 4chs1 bit p1.0s2 bit p1.1s3 bit p1.2s4 bit p1.3s11 equ 4bhs22 equ 4ahs33 equ 49hs44 equ 48hm1 equ 47hh1 equ 46hm2 equ 45hh2 equ 44hprice equ 43h計價器源程序org 0000hajmpmainorg 0003hajmptoorg 000bhajmptotimeorg 001bhajmptostartorg 0030hmain: mov sp,#70hmov tmod, #11hmov th0, #3chmov tl0, #0b0hmov th1, #3chmov tl1, #0b0hmov 22h, #0ahsetbeasetbtr0setbex0setbit0setbet0setbet1; -ram單元初始化mov r7,#34mov r0,#69hloopl:mov r0,#0dec r0djnzr7,looplmov countl, #00h ;起步價mov counth, #05hmov day_price,#25h ;白天價格初始化mov night_price,#30h ;晚上價格初始化mov midway_price,#10h ;中途等待初始化mov start_price, #50h ;起步價初始化mov s11, #0mov s22, #0mov s33, #0mov s44, #0mov distance, #02hmov hour, #12h; 鍵盤第一層掃描程序; (鍵盤掃描主程序);*key_main: setb tr0acall hms_disacall t100msdacall t100msdacall t100msdjb s1, key_mainacall t10msdjb s1, key_mainjnb s1,$sjmp wai1wa1: jb s1, k1acall t10msdjb s1, k1wait1: jnb s1, wait1wai1: ;inc s11;mov a, s11;cjne a, #1, n1; mov m1, min; mov h1, hourmov r0, #leddanjialmov r2, #6clr amov countl,amov counth,amov m100, amov distance,abk1: mov r0, adec r0djnz r2, bk1;起動初始化mov price,day_pricemov countl, #00h;起步價mov counth, #05h;mov distance,#02hlcall cp_dis;總金額和單價顯示k1: jb s2, k2acall t10msdjb s2, k2wait2: jnb s2, wait2inc s22mov a, s22cjne a, #1, next1lcall pa_disljmp key_djnext1: cjne a, #2, next2clr tr0lcall hms_disljmp key_sjnext2: cjne a, #3, k2mov s22, #0k2: jb s3, k3acall t10msdjb s3, k3wait3: jnb s3, wait3inc s33mov a, s33cjne a, #1, nxt1lcall dp_disnxt1: cjne a, #2, nxt2clr cmov a, m2subb a, m1mov m1, amov a, h2subb a, h1mov h1, a;lcall xcsj_disnxt2: cjne a, #3, k3mov s33, #0lcall cp_disk3: jb s4, bk_key_mainacall t10msdjb s4, bk_key_mainwait4: jnb s4, wait4inc s44mov a, s44cjne a, #1, nt1mov price,day_pricelcall cp_disnt1: cjne a, #2, nt2mov price,night_pricelcall cp_dislcall t100msd;lcall t100msd;lcall t100msd;mov ledday_pl, #0ahmov ledday_ph, #0ahlcall pa_dis1; lcall t100msd;lcall t100msd;lcall t100msd; lcall t100msd; mov a, day_price; mov b, #10; div ab; da a; mov ledday_pl, b; mov ledday_ph, alcall pa_dis; ajmp lp1lp1: jb s3, key11; lcall t10msd; jb s3, key11; wait9: jnb s3, wait9; inc day_pricemov a, #1add a, day_priceda amov day_price,amov a, day_pricecjne a, #99h, key11mov day_price, #0key11: jb s4, key12lcall t10msdjb s4, key12mov a,day_priceadd a, #99hda amov day_price,acjne a, #00h, key12mov a, #99hkey12: jb s1, key13acall t10msdjb s1, key13wait11: jnb s1, wait11inc s11mov a, s11cjne a, #1,next31lcall day_pnext31: cjne a, #2,next32lcall nig_pnext32: cjne a, #3,next33lcall mid_pnext33: cjne a, #4, key13mov s11, #0key13: jb s2, key14lcall t10msdjb s2, key14wait12:jnb s2, wait12ljmp key_mainkey14: ajmp day_p; nig_p: setb f0 ;調(diào)用定時延時標(biāo)志位lcall t100msdlcall t100msd; lcall t100msd; lcall t100msd; lcall t100msdmov lednig_pl, #0ahmov lednig_ph, #0ahlcall pa_dis1lcall t100msdlcall t100msd; lcall t100msd; lcall t100msd; lcall t100msdlcall pa_disjb s3, key21lcall t10msdjb s3, key21; wait13: jnb s3, wait13; mov a, #1add a, night_priceda amov night_price,acjne a, #99h,key21mov night_price,#0key21: jb s4, key22lcall t10msdjb s4, key22; wait14: jnb s4, wait14; mov a, night_priceadd a, #99hda amov night_price,acjne a, #00h, key22mov night_price,#99hkey22: jb s1, key23acall t10msdjb s1, key23wait15: jnb s1, wait15inc s11mov a, s11cjne a, #1,next41lcall day_pnext41: cjne a, #2,next42lcall nig_pnext42: cjne a, #3,next43lcall mid_pnext43: cjne a, #4, key23mov s11, #0ljmp key_djkey23: jb s2, key24lcall t10msdjb s2, key24wait30:jnb s2, wait30ljmp key_mainkey24: ajmp nig_p; mid_p: setb f0 ;調(diào)用定時延時標(biāo)志位lcall t100msd; lcall t100msd; lcall t100msd; lcall t100msdmov ledw_pl, #0ahmov ledw_ph, #0ahlcall pa_dis1lcall t100msd; lcall t100msd; lcall t100msd; lcall t100msdlcall pa_disjb s3, key31lcall t10msdjb s3, key31; wait16: jnb s3, wait16; inc midway_pricemov a, midway_priceadd a, #1da amov midway_price,acjne a, #99h, key31mov midway_price, #00h; cjne a, #100, key31mov midway_price, #0key31: jb s4, key32lcall t10msdjb s4, key32;wait17: jnb s4, wait17mov a, midway_priceadd a, #99hda amov midway_price,acjne a, #00h, key32mov night_price,#99hkey32: jb s1, key33acall t10msdjb s1, key33wait18: jnb s1, wait18inc s11mov a, s11cjne a, #1,next51lcall day_pnext51: cjne a, #2,next52lcall nig_pnext52: cjne a, #3,next53lcall mid_pnext53: cjne a, #4, key33mov s11, #0ljmp key_djkey33: jb s2, key34lcall t10msdjb s2, key34wait31:jnb s2, wait31ljmp key_mainkey34: ajmp mid_p; hou_t: setb f0 ;調(diào)用定時延時標(biāo)志位lcall t100msdlcall t100msdmov ledhl, #0ahmov ledhh, #0ahlcall hms_dis1;直接調(diào)用顯示,不經(jīng)過拆分程序lcall t100msdlcall t100msdmov sec, #0lcall hms_disjb s3, key41; lcall t10msd; jb s3, key41; wait19: jnb s3, wait19mov a, houradd a, #1da amov hour,acjne a, #24h, key41mov hour, #0key41: jb s4, key42; lcall t10msd; jb s4, key42; wait20: jnb s4, wait20mov a, houradd a, #99hda amov hour,acjne a, #99h, key42mov hour, #23hkey42: jb s1, key43acall t10msdjb s1, key43wait21: jnb s1, wait21inc s11mov a, s11cjne a, #1,next61ljmp hou_tnext61: cjne a, #2,next62ljmp min_tnext62: cjne a, #3,key43mov s11, #0ljmp key_sjkey43: jb s2, key44lcall t10msdjb s2, key44wait32: jnb s2, wait32ljmp key_mainkey44: ajmp hou_t; min_t: setb f0 ;調(diào)用定時延時標(biāo)志位lcall t100msdlcall t100msdmov ledml, #0ahmov ledmh, #0ahlcall hms_dis1;直接調(diào)用顯示,不經(jīng)過拆分程序lcall t100msdlcall t100msdmov sec, #0lcall hms_disjb s3, key51; lcall t10msd; jb s3, key41; wait22: jnb s3, wait22mov a, minadd a, #1da amov min, acjne a, #60h, key51mov min, #0key51: jb s4, key52; lcall t10msd; jb s4, key52; wait23: jnb s4, wait23mov a, minadd a, #99hda amov min, acjne a, #99h, key52mov min, #59hkey52: jb s1, key53acall t10msdjb s1, key53wait24: jnb s1, wait24inc s11mov a, s11cjne a, #1,next71lcall hou_tnext71: cjne a, #2,next72lcall min_tnext72: cjne a, #3,key53setb tr0mov s11, #0ljmp key_sjkey53: jb s2, key54lcall t10msdjb s2, key54wait33: jnb s2, wait33ljmp key_mainkey54: ajmp min_t; -; 時鐘中斷totime: push pswpush accmov th0, #3chmov tl0, #0b0hinc ms100mov a, ms100cjne a, #10,returnmov ms100,#0mov a, secadd a, #1da amov sec,acjne a,#60h,returnmov sec,#0mov a, #1hadd a, minda amov min,acjne a,#60h, returnmov min,#0mov a, #1hadd a, hourda amov hour,acjne a, #24h,returnmov hour,#0return: pop accpop pswreti; 外部霍兒中斷to: push pswpush acc; mov a, r0; mov b, #10; div ab;mov 20h,a ;算出當(dāng)前價格轉(zhuǎn)100次的錢數(shù),并給20h單元mov a,#1add a,m100mov m100,amov a, m100cjne a, #100,return1mov m100,#0inc 21hmov a,21hcjne a, #0ah, return1 ;已經(jīng)到了1公里mov 21h,#0mov a, #1add a, distanceda amov distance,a;acalldp_dismov a, priceadd a, countlda amov countl,acjne a, #10h,return1mov countl,#0mov a, #1add a, counthda amov counth,acjne a, #99h, return1mov counth,#0; acall cp_disreturn1: pop accpop pswretitostart: push pswpush accmov th1, #3chmov tl1, #0b0hdjnz 22h, return2 ;1s未到返回mov 22h, #0ahmov a, #1add a, 23h; 23h,存放秒,24h存放分da amov 23h, acjne a, #60h, return2mov 23h, #0mov a, #1add a, 24hda amov 24h,acjne a, #10h, return2mov 24h, #0mov a, start_priceadd a, countlda amov countl,acjne a, #10h, return2mov countl, #0mov a, #1add a, counthda amov counth,acjne a, #99h,return2mov counth,#0return2: pop accpop pswreti; * 顯示子程序*;功能:分四屏幕顯示數(shù)據(jù),時分秒(hms_dis)總額單價(cp_dis)路程單價(dp_dis)單價調(diào)整(pa_dis); 使用資源:使用第三組寄存器r7,r6,r1,r0; 時鐘顯示(包括時分秒調(diào)整)hms_dis:pushacc ;(hourminutesseconddisplay)pushpswsetbrs1mov r0,#sec ;時分秒的拆分(三個字節(jié))mov r1,#ledslmov r6,#03hloop1:mov a, r0mov b, aanl a, #0fhmov r1,adec r1mov a, bswapaanl a, #0fhmov r1,adec r1dec r0djnzr6,loop1pop pswpop acchms_dis1: push accpush pswmov r7,#06hmov r0,#ledslloop: mova, r0movdptr,#tabmovca,a+dptrmov sbuf,abk: jbcti,nextsjmpbknext: decr0djnzr7,loopclrrs1poppswpopaccret;總金額和單價顯示cp_dis:push acc ;(countpricedisplay)push pswsetb rs1mov r0,#counth ;mov r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆武漢市新洲區(qū)三年級數(shù)學(xué)第一學(xué)期期末綜合測試模擬試題含解析
- 兒童手繪服裝設(shè)計基礎(chǔ)
- 2025年備考市政工程考試的注意事項與試題及答案
- 古代樂器美術(shù)課件
- 眼鏡專業(yè)知識培訓(xùn)課件
- 2025年工程項目管理案例分析與解答試題及答案
- 項目管理的信息交流試題及答案
- 水利水電工程非技術(shù)風(fēng)險試題及答案
- 小學(xué)生反詐宣傳教育
- 綜合性水利水電工程試題與答案介紹
- 貴州國企招聘2025貴州省水利投資(集團)有限責(zé)任公司招聘84人筆試參考題庫附帶答案詳解
- 【8生 會考】2022-2024年安徽省初中(八年級)中考初二會考生物試卷(3年真題)
- 2025年網(wǎng)絡(luò)與信息安全專業(yè)考試試卷及答案
- 《俗世奇人》閱讀考級試題含答案
- 本科畢業(yè)生實習(xí)總結(jié)模版
- 2025年高考英語復(fù)習(xí)難題速遞之說明文閱讀理解(2025年4月)
- 理解市場營銷英語術(shù)語試題及答案
- 購買廢舊電纜合同協(xié)議
- 2024年河北承德辰飛供電服務(wù)有限公司招聘真題
- 焊接工程師理論基礎(chǔ)考核試題及答案
- 電氣設(shè)備知識培訓(xùn)課件
評論
0/150
提交評論