出租車自動計(jì)費(fèi)器_第1頁
出租車自動計(jì)費(fèi)器_第2頁
出租車自動計(jì)費(fèi)器_第3頁
出租車自動計(jì)費(fèi)器_第4頁
出租車自動計(jì)費(fèi)器_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

..目錄摘要11概述21.1基本要求21.2功能介紹22設(shè)計(jì)方案32.1設(shè)計(jì)原理33硬件電路43.1單片機(jī)最小系統(tǒng)43.2按鍵電路53.3數(shù)碼管顯示電路53.4LCD1602顯示電路64軟件設(shè)計(jì)74.1單片機(jī)I/O資源使用74.2單片機(jī)軟件模塊設(shè)計(jì)74.3程序框圖85PROTEUS仿真105.1總仿真電路圖105.2不調(diào)價(jià)仿真105.3調(diào)價(jià)仿真116心得體會13參考文獻(xiàn)14附錄1原件清單15附錄2程序16附錄3原理圖29..出租車自動計(jì)費(fèi)器設(shè)計(jì)摘要近些年來,出租車成為了人們出行重要的交通工具之一,出租車以低價(jià)高質(zhì)的服務(wù)給人們帶來了不少方便。基于單片機(jī)系統(tǒng)設(shè)計(jì)的出租車計(jì)費(fèi)器以單片機(jī)作為核心的控制元件,具有功能強(qiáng),性能可靠,電路簡單,成本低的特點(diǎn),加上經(jīng)過優(yōu)化的程序,使其具有很高的智能化水平。本次設(shè)計(jì)中,硬件設(shè)計(jì)主電路以AT89S51單片機(jī)為核心控制元件,輸出采用LCD1602液晶屏和四位一體數(shù)碼管,顯示起價(jià)、每公里單價(jià)、等待價(jià)格、行駛總里程和總金額,并配有多個(gè)按鍵,以供手動調(diào)節(jié)乘車價(jià)格。關(guān)鍵詞:計(jì)費(fèi)器51單片機(jī)LCD1602數(shù)碼管..1概述1.1基本要求①以MCS-51系列單片機(jī)為核心,設(shè)計(jì)出租車自動計(jì)費(fèi)器。②設(shè)計(jì)一個(gè)出租車自動計(jì)費(fèi)器,具有行車?yán)锍逃?jì)費(fèi)、等候時(shí)間計(jì)費(fèi)、及起價(jià)三部分,用四位數(shù)碼管顯示總金額,最大值為99.99元。③行車?yán)锍虇蝺r(jià)1元/公里,等候時(shí)間單價(jià)0.5元/10分鐘,起價(jià)3元〔3公里起價(jià)均能通過人工輸入。④行車?yán)锍痰挠?jì)費(fèi)以一個(gè)脈沖模擬汽車前進(jìn)十米,⑤用LED顯示行駛公里數(shù)和收費(fèi)金額。一、計(jì)費(fèi)功能費(fèi)用按行駛里程計(jì)費(fèi),起步價(jià)為3元。1、當(dāng)行駛里程小于或等于3公里,按起步價(jià)計(jì)費(fèi)2、當(dāng)行駛里程大于3公里,每公里收費(fèi)1元,不足1公里不計(jì)3、等待時(shí)間為每10分鐘收費(fèi)0.5元,不足10分鐘不計(jì)二、顯示功能1、顯示行駛里程:用LCD1602液晶屏顯示,顯示方式為"XX",單位為Km,范圍0-99Km2、顯示等候時(shí)間:用LCD1602液晶屏顯示,顯示方式為"XX",單位Min,范圍0-99Min3、顯示總費(fèi)用:用四位數(shù)碼管顯示,顯示方式為"XX.X",單位元,范圍3-99.9元1.2功能介紹本出租車自動計(jì)費(fèi),上電后顯示默認(rèn)的起步價(jià),每公里計(jì)費(fèi)單價(jià),等待時(shí)間計(jì)費(fèi)單價(jià),可通過按鍵調(diào)整起步價(jià),里程計(jì)費(fèi)單價(jià),等待時(shí)間計(jì)費(fèi)單價(jià)。具有運(yùn)行、暫停、停止?fàn)顟B(tài),可以顯示行駛的里程、等待的時(shí)間和出租車行駛的總費(fèi)用。2設(shè)計(jì)方案2.1設(shè)計(jì)原理利用單片機(jī)的強(qiáng)大功能,可用AT89S51單片機(jī)作主控芯片,用來處理計(jì)費(fèi)器的各種數(shù)據(jù)并控制LCD1602和數(shù)碼管顯示模塊,實(shí)現(xiàn)基本的里程計(jì)費(fèi)和價(jià)格調(diào)整。為模擬汽車行駛,用單片機(jī)的T0定時(shí)器進(jìn)行16位定時(shí),每0.05S發(fā)射一個(gè)信號進(jìn)入定時(shí)中斷,20個(gè)中斷為1S,每秒向單片機(jī)發(fā)送信號表示前進(jìn)10米。2.2設(shè)計(jì)方案復(fù)位電路里程傳輸按鍵電路數(shù)碼管顯示總費(fèi)用鎖存器LCD1602顯示行駛里程和等待時(shí)間等AT89S51單片機(jī)復(fù)位電路里程傳輸按鍵電路數(shù)碼管顯示總費(fèi)用鎖存器LCD1602顯示行駛里程和等待時(shí)間等AT89S51單片機(jī)圖2-1總體設(shè)計(jì)框圖3硬件電路3.1單片機(jī)最小系統(tǒng)該電路單片機(jī)最小系統(tǒng)由四個(gè)部分組成:電源、地、復(fù)位電路、時(shí)鐘電路。電源電路中,電源接單片機(jī),同時(shí)連接一個(gè)電容接地用于去耦合,穩(wěn)定電源電壓。復(fù)位電路如圖3-1所示,共有兩種基本形式:上電復(fù)位和按鍵復(fù)位。單片機(jī)上電瞬間會對C1進(jìn)行充電,此過程C1相當(dāng)于短路,RST引腳電平升高單片機(jī)復(fù)位;若要手動復(fù)位,則按下RSTK復(fù)位按鍵,RST引腳直接接高電平,單片機(jī)復(fù)位。圖3-1復(fù)位電路圖3-2為單片機(jī)時(shí)鐘電路,AT89S51內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,它的輸入端為芯片引腳XTAL1,輸出端為XTAL2,。這兩個(gè)引腳跨接石英晶體和微調(diào)電容,構(gòu)成一個(gè)穩(wěn)定的自激振蕩器,微調(diào)電容的典型值通常為30pF。圖3-2時(shí)鐘電路3.2按鍵電路本設(shè)計(jì)共有6個(gè)獨(dú)立按鍵:復(fù)位按鍵RSTK,進(jìn)入退出設(shè)置鍵K1,光標(biāo)移動鍵K2,數(shù)值增加鍵K3,等待計(jì)時(shí)鍵K4,開始暫停計(jì)費(fèi)鍵K5。1.復(fù)位或者程序跑飛,可用RSTK鍵進(jìn)行復(fù)位;2.調(diào)整計(jì)費(fèi)單價(jià),按K1進(jìn)如設(shè)置狀態(tài),設(shè)置完后再按下K1退出設(shè)置狀態(tài);3.按K2可移動光標(biāo),分別調(diào)整各收費(fèi)單價(jià);4.按K5鍵開始計(jì)費(fèi),中間需要停車等待,可直接按K4進(jìn)行等待計(jì)時(shí)計(jì)費(fèi),等待完畢直接按K5繼續(xù)行駛計(jì)費(fèi)。按鍵電路如圖3-3所示。圖3-3按鍵電路3.3數(shù)碼管顯示電路數(shù)碼管用于顯示計(jì)費(fèi)總價(jià),顯示方式為"XX.X",單位元,顯示范圍為3-99.9元。為保證數(shù)碼管顯示的穩(wěn)定性,在段選端前接鎖存器74HC573,數(shù)碼管電路如圖3-4所示。圖3-4數(shù)碼管顯示電路由于單片機(jī)P0口沒有上拉能力,所以數(shù)碼管的段選口高電平由鎖存器提供。3.4LCD1602顯示電路LCD1602液晶屏是字符型液晶屏,并且?guī)ё址麕斓?不需要查找代碼,英文字符可直接輸入顯示。液晶電路使用時(shí),如果發(fā)現(xiàn)液晶不亮可以調(diào)節(jié)連接液晶的變阻器,改變液晶的亮度。每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形。LCD1602顯示電路如圖3-5所示。圖3-5LCD顯示電路另外,系統(tǒng)供電由P1口外接的5V電源供電,如圖3-6。圖3-6電源接口4軟件設(shè)計(jì)4.1單片機(jī)I/O資源使用此設(shè)計(jì)中P10到P13口和P32口連接按鍵控制輸入,P0口和P14、P15、P16、P17口用于控制數(shù)碼管,P2口和P34、P35、P36口用于控制LCD1602液晶屏。4.2單片機(jī)軟件模塊設(shè)計(jì)一、LCD1602顯示模塊由于LCD1602程序比較復(fù)雜,所以專門創(chuàng)建一個(gè)1602的頭文件,將1602的使用程序存放于頭文件中,在主程序中只要聲明了1602頭文件,即可調(diào)用1602子程序。頭文件下包含的子程序有:延時(shí)程序、LCD1602初始化程序、寫命令程序和寫數(shù)據(jù)程序。由于只是使用LCD1602進(jìn)行顯示,所以不需要讀命令數(shù)據(jù)程序。二、中斷程序模塊程序共使用三個(gè)中斷:INT0、T0、T1中斷。INT0中斷用于進(jìn)入或退出調(diào)價(jià)模式,打開計(jì)費(fèi)器后進(jìn)行計(jì)費(fèi)之前,隨時(shí)可以利用INT0中斷進(jìn)行調(diào)價(jià),開始計(jì)費(fèi)之后則關(guān)閉INT0中斷,不能調(diào)價(jià)。T0定時(shí)中斷形成行車脈沖,模擬汽車行駛,每0.05s產(chǎn)生一次中斷,每20次中斷為1s,每秒行駛10米距離。程序中設(shè)置一個(gè)變量flag2用來表示按下的是K4還是K5,按下K5鍵T0中斷中的t1開始計(jì)時(shí),模擬汽車行駛,再次按下則暫停計(jì)時(shí),即停止行駛;按下K4,T0中的t2開始計(jì)時(shí),計(jì)算等待的時(shí)間。T1中斷用于數(shù)碼管顯示,由于數(shù)碼管是動態(tài)顯示,所以在此較為復(fù)雜的主程序中運(yùn)行會產(chǎn)生閃爍,將數(shù)碼管顯示程序置于T1中斷程序中,就不會再閃爍。三、其它程序模塊其它程序模塊主要包括數(shù)碼管顯示模塊、數(shù)據(jù)計(jì)算模塊、調(diào)價(jià)模塊、按鍵掃描模塊等。數(shù)碼管顯示模塊用于顯示總費(fèi)用,使用四位一體數(shù)碼管顯示,但只用其中后三位,顯示0到99.9。數(shù)據(jù)計(jì)算模塊主要計(jì)算行車?yán)锍?、等待時(shí)間、等待收費(fèi)、總收費(fèi)。調(diào)價(jià)模塊用于調(diào)整起價(jià)、每公里單價(jià)和等待收費(fèi)單價(jià)。按鍵掃描模塊用于檢測用戶按下了哪些功能鍵。4.3程序框圖本設(shè)計(jì)中,軟件設(shè)計(jì)采用模塊化操作,利用各個(gè)模塊之間的相互聯(lián)系,在設(shè)計(jì)中采用主程序調(diào)用子程序的方法,使程序通俗易懂。在main函數(shù)開始,要對系統(tǒng)初始化,和對硬件設(shè)備進(jìn)行初始化,并使硬件處于就緒狀態(tài)。通過判斷是否計(jì)費(fèi),調(diào)價(jià),清零等狀態(tài),來分別調(diào)用不同的子程序,使程序在設(shè)計(jì)之前,就有了很強(qiáng)的邏輯關(guān)系。這些對應(yīng)于硬件就是通過按下各個(gè)控制開關(guān),來分別進(jìn)行不同的動作,最后顯示屏根據(jù)輸入的信息,來顯示不同的數(shù)據(jù)信息,這就達(dá)到了軟件控制硬件,同時(shí)輸入信息控制輸出信息的目的。整個(gè)程序的流程圖如下:開始開始TO、T1、INT0初始化TO、T1、INT0初始化LCD1602初始化LCD1602初始化LCD默認(rèn)顯示LCD默認(rèn)顯示是否按下S1鍵是否按下S1鍵否否調(diào)價(jià)程序是調(diào)價(jià)程序是是否按下S4或S5是否按下S4或S5數(shù)碼管、LCD顯示數(shù)據(jù)數(shù)碼管、LCD顯示數(shù)據(jù)圖4-1程序流程圖從圖中可以看出,程序開始就對LCD1602、T0T1計(jì)數(shù)器和INT0進(jìn)行了初始化,1602顯示器開始顯示計(jì)費(fèi)標(biāo)準(zhǔn),之后判斷是否進(jìn)行調(diào)整收費(fèi)標(biāo)準(zhǔn),如需調(diào)整則進(jìn)入調(diào)整程序進(jìn)行價(jià)格調(diào)整,若不需要調(diào)整則判斷是否開始計(jì)費(fèi)或者計(jì)時(shí),若開始則進(jìn)入數(shù)據(jù)處理程序進(jìn)行各數(shù)據(jù)計(jì)算,計(jì)算結(jié)果顯示在LCD1602和數(shù)碼管上,若不開始計(jì)價(jià)或者計(jì)時(shí),則只用LCD1602顯示收費(fèi)標(biāo)準(zhǔn)。5PROTEUS仿真5.1總仿真電路圖使用PROTEUS搭建好電路,下載程序進(jìn)行仿真。仿真電路包含AT89S51單片機(jī)、按鍵控制電路、74HC573鎖存器、四位共陰極數(shù)碼管和LCD1602液晶屏。總電路如圖5-1所示。圖5-1仿真電路圖5.2不調(diào)價(jià)仿真先使用默認(rèn)的價(jià)錢進(jìn)行仿真,即起步價(jià)3元,每公里1元,每等待10分鐘0.5元。通過計(jì)算,行駛10公里且不等待收費(fèi)10塊錢,對比仿真結(jié)果圖5-2發(fā)現(xiàn)電路運(yùn)行正常。圖5-2仿真一再仿真等待收費(fèi)。行駛7公里,等待10分鐘,通過計(jì)算應(yīng)收費(fèi)7.5元,對比仿真結(jié)果圖5-3,運(yùn)行結(jié)果也正確。圖5-3仿真二5.3調(diào)價(jià)仿真這次先進(jìn)行調(diào)價(jià),再開始計(jì)費(fèi),檢查調(diào)價(jià)程序是否能夠正常運(yùn)行。將起步價(jià)調(diào)為6元,每公里單價(jià)調(diào)為3元,按K5開始行駛計(jì)費(fèi),行駛10公里,計(jì)算得費(fèi)用為27元,對比仿真結(jié)果圖5-4,結(jié)果相同。圖5-4仿真三再將起步價(jià)調(diào)為5元,每公里單價(jià)調(diào)為2元,每10分鐘等待單價(jià)調(diào)為1.5元進(jìn)行仿真,等待10分鐘,顯示計(jì)費(fèi)12.5元,與計(jì)算結(jié)果圖5-5相同。圖5-5仿真四6心得體會出租車計(jì)費(fèi)器系統(tǒng)的設(shè)計(jì)已經(jīng)全部完成,能按預(yù)期的效果進(jìn)行模擬汽車啟動,停止,暫停等功能,并能夠通過LCD和數(shù)碼管顯示車費(fèi)數(shù)目。本款出租車計(jì)價(jià)器包括單價(jià)輸出、單價(jià)調(diào)整、顯示當(dāng)前總費(fèi)用等功能。另外,多功能出租車計(jì)價(jià)器還具有性能可靠、電路簡單、成本低、實(shí)用性強(qiáng)等特點(diǎn),加上經(jīng)過優(yōu)化的程序,使其有很高的智能化水平。經(jīng)過自己努力,基本上完成了設(shè)計(jì)要求的內(nèi)容,在系統(tǒng)可行性分析、原理圖設(shè)計(jì)等方面都作了許多實(shí)際工作,取得了一些成績,同時(shí)也遇到了一些問題,存在一些不足。經(jīng)過這幾天的學(xué)習(xí)和工作,我覺得自己不論是在理論知識方面還是在動手能力方面都有了不小的進(jìn)步,自己從中受益匪淺。這次設(shè)計(jì)很好的把以前學(xué)到的理論知識應(yīng)用于實(shí)踐,使我認(rèn)識到理論知識與實(shí)踐之間有一定的差距,只有通過不斷的努力學(xué)習(xí)和實(shí)踐才能很好的把理論知識應(yīng)用到實(shí)踐當(dāng)中,也只有通過不斷的實(shí)踐才能對理論知識的理解。通過這次設(shè)計(jì)不僅學(xué)會了如何去查找相關(guān)資料,更重要的是通過查找資料和翻閱書籍學(xué)到了不少知識,擴(kuò)大了知識面,提高了知識水平。經(jīng)過單元設(shè)計(jì)和系統(tǒng)設(shè)計(jì)鞏固了以前所學(xué)的專業(yè)知識,自己真正認(rèn)識到理論聯(lián)系實(shí)際的重要性,為以后的學(xué)習(xí)和工作提供了很多有價(jià)值的經(jīng)驗(yàn)。通過這次設(shè)計(jì)不僅增強(qiáng)了自己的動腦能力和動手能力,也提高了我思考問題、分析問題、解決問題的能力,更重要的是學(xué)會用工程化的思想來解決問題。這在以前的學(xué)習(xí)過程中是不曾學(xué)到的。在短短的三個(gè)月時(shí)間內(nèi)完成設(shè)計(jì)內(nèi)容,在很大程度上得益于老師的幫助。這次設(shè)計(jì)是我認(rèn)真認(rèn)識到完整、嚴(yán)謹(jǐn)、科學(xué)分析問題、解決問題的思想是多么的重要,只有擁有了科學(xué)的態(tài)度才能設(shè)計(jì)出有用的產(chǎn)品。另外通過本次設(shè)計(jì),使我認(rèn)識到自己理論知識的應(yīng)用能力有很大的欠缺,需要在以后的學(xué)習(xí)中進(jìn)一步提高。參考文獻(xiàn)[1]張毅坤等.單片微型計(jì)算機(jī)原理及應(yīng)用.XX電子科技大學(xué)出版社[2]李建忠.單片機(jī)原理及應(yīng)用.XX電子科技大學(xué)出版社[3]張毅剛,彭喜元,彭宇.單片機(jī)原理及應(yīng)用.高等教育出版社[4]康華光.電子技術(shù)基礎(chǔ)數(shù)字部分.高等教育出版社[5]劉坤,趙紅波,張憲棟.51單片機(jī)開發(fā)技術(shù)大全.人民郵電出版社[6]李廣弟,朱月秀,冷祖祁.單片機(jī)基礎(chǔ).北京航空航天大學(xué)出版社附錄1原件清單名稱規(guī)格數(shù)量電阻10K1個(gè)排阻1K1排可變電阻1個(gè)極性電容10uF1個(gè)非極性電容33pF2個(gè)0.1uF2個(gè)晶振12MHz1個(gè)LCD16021個(gè)數(shù)碼管1個(gè)芯片AT89S511個(gè)74HC5731個(gè)附錄2程序主程序:#include<reg52.h>#include"1602.h"#defineuintunsignedint#defineucharunsignedcharuchartable[3]={3,1,5}; //起步價(jià),單價(jià),等待單價(jià)uchartable1[3];ucharcodetable2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9ucharcodetable3[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //0~9帶小數(shù)點(diǎn)ucharSetPlace,SetState=0;//設(shè)置位置,設(shè)置狀態(tài)uchartime1,time2;//用于定時(shí)器計(jì)時(shí)ucharkilometre;//行走里程doublemin;doublewaitm=0.0,money=0.0; //等待計(jì)費(fèi)、總計(jì)費(fèi)ucharflag1=0,flag2;//用于K4和K5按鍵狀態(tài)ucharnum=0;uintx; uintt1,t2; //t1為T0定時(shí),表示汽車行走了t1秒 //t2為T1定時(shí),表示等待了t2秒sbitK1=P3^2;//設(shè)置sbitK2=P1^2;//移動光標(biāo)sbitK3=P1^3;//循環(huán)增加sbitK4=P1^0;//打開關(guān)閉等待計(jì)時(shí)器sbitK5=P1^1;//打開關(guān)閉計(jì)價(jià)器sbitLSA=P1^4; //數(shù)碼管位選sbitLSB=P1^5;sbitLSC=P1^6;sbitLSD=P1^7;voidKey<>; //按鍵選擇計(jì)費(fèi)或計(jì)時(shí)voidSMG<>; //數(shù)碼管顯示voidData<>; //計(jì)算行走里程、等待收費(fèi)、總收費(fèi)voidtiaojia<>; //按K1K2K3調(diào)整收費(fèi)標(biāo)準(zhǔn)voidLcdDisplay<>;//1602顯示voiddelay<uintc>;//延時(shí)c毫秒voidInt0Configuration<>;//外部0中斷初始化voidT_0Config<>; //定時(shí)器0中斷初始化voidT_1Config<>; //定時(shí)器1中斷初始化/*********************主程序*********************/voidmain<>{ LCD1602init<>; T_0Config<>; T_1Config<>; Int0Configuration<>; while<1> { if<SetState==1> { tiaojia<>; //按下K1則調(diào)整價(jià)格,不按則跳過 } else { Key<>; //按鍵選擇計(jì)費(fèi)或計(jì)時(shí) } Data<>; //數(shù)據(jù)處理 LcdDisplay<>; //1602顯示 }}/******************數(shù)碼管顯示程序*******************/voidSMG<> //共陰極數(shù)碼管{ for<num=0;num<3;num++> { switch<num> //table1[]存放的是總金額數(shù) { case<0>:LSA=1;LSB=0;LSC=1;LSD=1; P0=table2[table1[num]];delay<1>;P0=0; break; case<1>:LSA=1;LSB=1;LSC=0;LSD=1; P0=table3[table1[num]];delay<1>;P0=0; break; case<2>:LSA=1;LSB=1;LSC=1;LSD=0; P0=table2[table1[num]];delay<1>;P0=0; break; } } } /******************調(diào)價(jià)程序*******************/voidtiaojia<> //調(diào)整價(jià)格程序{ uchari; if<K2==0> //檢測按鍵K2按下光標(biāo)移動 { delay<10>; if<K2==0> { SetPlace++; //光標(biāo)向前移一位 if<SetPlace>2> SetPlace=0; } while<<i<50>&&<K2==0>>//檢測按鍵是否松開 { delay<10>; i++; } i=0; } if<K3==0> //檢測按鍵K3按下調(diào)節(jié)價(jià)格 { delay<10>; //消除抖動 if<K3==0> { if<SetPlace<2> { table[SetPlace]=table[SetPlace]+1; if<<table[SetPlace]&&0x0f>>9> //換成BCD碼。 { table[SetPlace]=table[SetPlace]+6;//轉(zhuǎn)換為BCD碼之后,就相當(dāng)于十進(jìn)制數(shù)了 } if<<table[SetPlace]>0x9>&&<SetPlace==0>> //起步價(jià) { table[SetPlace]=0; } if<<table[SetPlace]>0x9>&&<SetPlace==1>> //單價(jià) { table[SetPlace]=0; } } else { table[SetPlace]=table[SetPlace]+5; if<<table[SetPlace]&&0x0f>>9> //換成BCD碼。 { table[SetPlace]=table[SetPlace]+6;//轉(zhuǎn)換為BCD碼之后,就相當(dāng)于十進(jìn)制數(shù)了 } if<<table[SetPlace]>0x99>&&<SetPlace==2>> //等待單價(jià)的10倍 { table[SetPlace]=0; } } } while<<i<10>&&<K3==0>> //檢測按鍵是否松開 { delay<10>; i++; } i=0; } } /******************數(shù)據(jù)處理計(jì)算程序*******************/voidData<> //計(jì)算行走里程、等待收費(fèi)、總收費(fèi){ kilometre=<10*t1>/100; //1000!!!!!!!!! min=t2/600; //t2/600是等待了多少個(gè)10分鐘 waitm=min*table[2];//不/10,在money處也不*10,正好抵消 if<kilometre<=3> { money=10*table[0]+waitm; } else { money=10*table[0]+10*<kilometre-3>*table[1]+waitm; } x=money; table1[0]=x/100; table1[1]=x%100/10; table1[2]=x%10;}/*******************按鍵程序*******************/voidKey<> //按鍵選擇計(jì)費(fèi)或計(jì)時(shí){ if<K5==0> //按K5退出計(jì)時(shí)并進(jìn)入計(jì)費(fèi)模式 { //再按下則退出計(jì)費(fèi)模式 delay<10>; if<K5==0> ET0=1; //開T0中斷 TR0=1; //啟動定時(shí)器 flag1=!flag1; if<flag1==1> { flag2=1; } else { flag2=0; } } if<K4==0> //按K4進(jìn)入等待計(jì)時(shí)模式 { delay<10>; if<K4==0> ET0=1; TR0=1; flag2=2; }}/*****************LCD1602顯示程序*******************/voidLcdDisplay<> //1602顯示{ LcdWriteCom<0x80>; LcdWriteData<'S'>; LcdWriteData<':'>; LcdWriteData<'0'+table[0]>; //起步價(jià) LcdWriteCom<0x80+0x05>; LcdWriteData<'P'>; LcdWriteData<':'>; LcdWriteData<'0'+table[1]>; //每公里單價(jià)1 LcdWriteCom<0x80+0x0a>; LcdWriteData<'W'>; LcdWriteData<':'>; LcdWriteData<'0'+<table[2]/10>>;//等待每10分鐘單價(jià)0.5元 LcdWriteData<'.'>; LcdWriteData<'0'+<table[2]%10>>; LcdWriteCom<0x80+0x40>; LcdWriteData<'T'>; LcdWriteData<'I'>; LcdWriteData<'M'>; LcdWriteData<'E'>; LcdWriteData<':'>; LcdWriteData<'0'+<<t2/60>/10>>; //等待時(shí)間<t2/60>0~99 LcdWriteData<'0'+<<t2/60>%10>>; LcdWriteCom<0x80+0x48>; LcdWriteData<'L'>; LcdWriteData<'O'>; LcdWriteData<'N'>; LcdWriteData<'T'>; LcdWriteData<'H'>; LcdWriteData<':'>; LcdWriteData<'0'+kilometre/10>; //行走里程 LcdWriteData<'0'+kilometre%10>;}/**************定時(shí)器T0及T0中斷**************/voidT_0Config<>{ TMOD=0x01; PT0=1; //T0設(shè)置為高優(yōu)先級 TH0=<65535-50000>/256;//0.05S TL0=<65535-50000>%256;//給定時(shí)器裝初值,程序啟動之后定時(shí)器開始計(jì)時(shí) EA=1;}voidT_0<>interrupt1{ TH0=<65535-50000>/256;//重裝初值 TL0=<65535-50000>%256; time1++; if<time1>=20> //1S { time1=0; switch<flag2> //按K5則t1++,按K4則t2++ { //原因是兩個(gè)程序公用一個(gè)定時(shí)器 case<1>:t1++;break; case<2>:t2++;break; } }}/*****************定時(shí)器T1及T1中斷*****************/voidT_1Config<>{ TMOD=0x10; TH1=<65535-10000>/256;//0.05S TL1=<65535-10000>%256;//給定時(shí)器裝初值,程序啟動之后定時(shí)器開始計(jì)時(shí) EA=1; TR1=1; ET1=1;}voidT_1<>interrupt3{ TH1=<65535-10000>/256;//重裝初值 TL1=<65535-10000>%256; SMG<>; //數(shù)碼管顯示在中斷中,這樣就不會閃了}/******************外部中斷0及中斷*******************/voidInt0Configuration<>//設(shè)置INT0{ IT0=1;//跳變沿觸發(fā)方式〔下降沿 EX0=1;//打開INT0的中斷允許。 EA=1;//打開總中斷 }voidInt0<>interrupt0

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論