隨著生活水平的提高,人們已不再滿足于衣食住的享受,出行的舒適已受到越來(lái)越多人的關(guān)注。于是,出租車行業(yè)以低價(jià)高質(zhì)的服務(wù)給人們帶來(lái)了出行的享受。但是總存在買賣糾紛困擾著行業(yè)的發(fā)展。然而解決這一矛盾的最好方法就是改良出租車的計(jì)價(jià)器,用更加精良的計(jì)價(jià)器來(lái)為乘客提供更加方便快捷的服務(wù)。我國(guó)的出租車始于20世紀(jì)70年代,隨著電子技術(shù)的發(fā)展,出租車計(jì)價(jià)器" title="出租車計(jì)價(jià)器">出租車計(jì)價(jià)器的設(shè)計(jì)技術(shù)也在不斷進(jìn)步和提高。國(guó)內(nèi)出租車計(jì)價(jià)器的發(fā)展已經(jīng)經(jīng)歷了4個(gè)階段,從傳統(tǒng)的全部由機(jī)械元器件組成的機(jī)械式到半電子式出租車計(jì)價(jià)器,再?gòu)募呻娐肥降侥壳暗幕趩纹瑱C(jī)系統(tǒng)設(shè)計(jì)的出租車計(jì)價(jià)器。
基于單片機(jī)系統(tǒng)設(shè)計(jì)的出租車計(jì)價(jià)器是以單片機(jī)作為核心的控制元件,采用靈敏的霍爾開(kāi)關(guān)型器件,具有功能強(qiáng),性能可靠,電路簡(jiǎn)單,成本低的特點(diǎn),加上經(jīng)過(guò)優(yōu)化的程序,使其具有很高的智能化水平。
1 系統(tǒng)硬件設(shè)計(jì)
出租車計(jì)價(jià)器系統(tǒng)以AT89S51" title="AT89S51">AT89S51單片機(jī)為核心,由按鍵電路、AT24C02掉電存儲(chǔ)電路、里程計(jì)算電路、數(shù)碼管顯示電路組成。利用單片機(jī)靈活的編程設(shè)計(jì)和豐富的I/O端口,及其控制的準(zhǔn)確性,不僅能實(shí)現(xiàn)基本的里程計(jì)價(jià)價(jià)格調(diào)節(jié)、時(shí)鐘顯示,而且能很大程度上實(shí)現(xiàn)擴(kuò)展功能,同時(shí)可方便日后對(duì)系統(tǒng)進(jìn)行升級(jí)。圖1給出計(jì)價(jià)器系統(tǒng)框圖。
1.1 里程計(jì)算、計(jì)價(jià)電路的設(shè)計(jì)
里程計(jì)算是通過(guò)安裝在車輪上的霍爾傳感器" title="霍爾傳感器">霍爾傳感器A44E檢測(cè)到的信號(hào),送到單片機(jī),經(jīng)處理計(jì)算,送給顯示單元的。A44E的檢測(cè)原理如圖2所示,P3.2口作為信號(hào)的輸入端,內(nèi)部采用外部中斷0,車輪每轉(zhuǎn)一圈(設(shè)車輪的周長(zhǎng)是1 m),霍爾開(kāi)關(guān)就檢測(cè)并輸出信號(hào),引起單片機(jī)的中斷,對(duì)脈沖計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到1 000次時(shí),也就是1 km,單片機(jī)就控制將金額自動(dòng)增加,其計(jì)算公式為:
當(dāng)前單價(jià)×公里數(shù)=金額
1.2 數(shù)據(jù)顯示電路的設(shè)計(jì)
設(shè)計(jì)使用一個(gè)定時(shí)/計(jì)數(shù)器每0.1 s向主機(jī)發(fā)1次中斷請(qǐng)求信號(hào),并利用并行接口電路完成對(duì)時(shí)鐘的實(shí)時(shí)顯示功能。同時(shí),利用動(dòng)態(tài)掃描電路完成對(duì)出租車的起價(jià)和當(dāng)前累計(jì)價(jià)的顯示。
由于設(shè)計(jì)要求有單價(jià)(2位)、路程(2位)、總金額(3位)顯示輸出,加上另外擴(kuò)展的時(shí)鐘顯示(包含時(shí)分秒的顯示),采用LCD液晶段碼顯示,在距離屏幕1 m之外就無(wú)法看清數(shù)據(jù),不能滿足要求,而且在白天其對(duì)比度也不能夠滿足要求,因此采用6位LED數(shù)碼管的分屏顯示。
在出租車不走的時(shí)候,按下S1,可以實(shí)現(xiàn)數(shù)據(jù)的分屏顯示;車在行走的時(shí)候只有總金額和單價(jià)顯示屏在顯示,當(dāng)?shù)竭_(dá)目的地的時(shí)候,客戶要求查看總里程時(shí),就可以按下S1切換到里程和單價(jià)顯示屏,供客戶查詢。
1.3 AT24C02掉電存儲(chǔ)電路的設(shè)計(jì)
存儲(chǔ)電路的作用是在電源斷開(kāi)的時(shí)候,存儲(chǔ)當(dāng)前設(shè)定的單價(jià)信息。存儲(chǔ)電路如圖3所示,采用Atmel公司推出的容量為2 KB的串行電可擦除、可編程存儲(chǔ)芯片AT24C02設(shè)計(jì),傳輸方式為I2C總線。該設(shè)計(jì)優(yōu)點(diǎn)在其簡(jiǎn)單性和處理的高效性上。一般地址輸入端A0,A1,A2,寫(xiě)保護(hù)WP接Vcc或GND;SCL,SDA接上拉電阻(上拉電阻的阻值可參考有關(guān)數(shù)據(jù)手冊(cè)選擇,通??蛇x用5~10kΩ的電阻,設(shè)計(jì)中選用的電阻阻值為5.1kΩ)后再接單片機(jī)的普通I/O口,這便可實(shí)現(xiàn)單片機(jī)對(duì)AT24C02的操作。上拉電阻的作用是減少AT24C02的靜態(tài)功耗。
1.4 啟動(dòng)及清除電路
在系統(tǒng)電路中,設(shè)計(jì)一個(gè)啟動(dòng)/清除按鈕,用來(lái)作為啟動(dòng)里程計(jì)數(shù)或清除里程數(shù)計(jì)數(shù)的開(kāi)關(guān)。將該按鈕開(kāi)關(guān)接到微機(jī)系統(tǒng)的某個(gè)中斷請(qǐng)求線上,當(dāng)開(kāi)關(guān)被按下1次時(shí)就作為計(jì)程啟動(dòng)中斷請(qǐng)求;再按下1次時(shí),就作為系統(tǒng)的計(jì)程清零中斷處理。
1.5 按鍵電路的設(shè)計(jì)
電路共采用4個(gè)按鍵,即S1,S2,S3,S4,其功能是:S1為分屏顯示切換按鍵;S2為功能設(shè)定按鍵;S3為‘+’/白天晚上切換按鍵;S4為‘-’/中途等待開(kāi)關(guān)。
2 系統(tǒng)軟件設(shè)計(jì)
2.1 主程序模塊
主程序流程圖如圖4所示,在主程序模塊中,需要完成對(duì)各接口芯片的初始化、出租車起價(jià)和單價(jià)的初始化、中斷向量的設(shè)計(jì)以及開(kāi)中斷、循環(huán)等待等工作。另外,在主程序模塊中還需要設(shè)置啟動(dòng)/清除標(biāo)志寄存器、里程寄存器和價(jià)格寄存器,并對(duì)它們進(jìn)行初始化。然后,主程序?qū)⒏鶕?jù)各標(biāo)志寄存器的內(nèi)容,分別完成啟動(dòng)、清除、計(jì)程和計(jì)價(jià)等不同的操作。
當(dāng)按下S1時(shí),就啟動(dòng)計(jì)價(jià),將根據(jù)里程寄存器中的內(nèi)容計(jì)算和判斷出行駛里程是否已超過(guò)起價(jià)公里數(shù)。若已超過(guò),則根據(jù)里程值、每公里的單價(jià)數(shù)和起價(jià)數(shù)來(lái)計(jì)算出當(dāng)前的累計(jì)價(jià)格,并將結(jié)果存于價(jià)格寄存器中,然后將時(shí)間和當(dāng)前累計(jì)價(jià)格送顯示電路顯示出來(lái)。
當(dāng)?shù)竭_(dá)目的地的時(shí)候,由于霍爾開(kāi)關(guān)沒(méi)有送來(lái)脈沖信號(hào),就停止計(jì)價(jià),顯示當(dāng)前所應(yīng)該付的金額和對(duì)應(yīng)的單價(jià)。到下次啟動(dòng)計(jì)價(jià)器時(shí),系統(tǒng)自動(dòng)對(duì)顯示清零,并重新進(jìn)行初始化過(guò)程。
2.2 定時(shí)中斷服務(wù)程序
在定時(shí)中斷服務(wù)程序中,每100 ms產(chǎn)生一次中斷,當(dāng)產(chǎn)生10次中斷的時(shí)候,也就到了1 s,送數(shù)據(jù)到相應(yīng)的顯示緩沖單元,并調(diào)用顯示子程序?qū)崟r(shí)顯示。
2.3 里程計(jì)數(shù)中斷服務(wù)程序
每當(dāng)霍爾傳感器輸出一個(gè)低電平信號(hào)就使單片機(jī)中斷一次,當(dāng)里程計(jì)數(shù)器對(duì)里程脈沖計(jì)滿1 000次時(shí),就有程序?qū)?dāng)前總額累加,使微機(jī)進(jìn)入里程計(jì)數(shù)中斷服務(wù)程序中。在該程序中,需要完成當(dāng)前行駛里程數(shù)和總額的累加操作,并將結(jié)果存入里程和總額寄存器中。
2.4 中途等待中斷服務(wù)程序
當(dāng)在計(jì)數(shù)狀態(tài)下霍爾開(kāi)關(guān)沒(méi)有輸出信號(hào),片內(nèi)的T1定時(shí)器便被啟動(dòng),每當(dāng)計(jì)時(shí)到達(dá)10 min,就對(duì)當(dāng)前金額加上中途等待的單價(jià),以后每10 min都自動(dòng)加上中途等待的單價(jià)。當(dāng)中途等待結(jié)束時(shí),就自動(dòng)切換到正常的計(jì)價(jià)。
2.5 啟動(dòng)/清除計(jì)程中斷服務(wù)程序
當(dāng)系統(tǒng)有啟動(dòng)/清除中斷請(qǐng)求產(chǎn)生時(shí),可以設(shè)定第一次中斷為啟動(dòng)中斷,第二次中斷為清除中斷,并在中斷服務(wù)程序中將標(biāo)志寄存器的內(nèi)容相應(yīng)置“1”或清“0”。其中,標(biāo)志為“1”時(shí)表示本次中斷是啟動(dòng)中斷;為“0”時(shí)表示是清除中斷。
2.6 顯示子程序服務(wù)程序
由于是分屏顯示數(shù)據(jù),所以就要用到4個(gè)顯示子程序,分別是:時(shí)分秒顯示子程序(HMS_DIS),金額單價(jià)顯示子程序(CP_DIS),路程單價(jià)顯示子程序(DP_DIS)和單價(jià)調(diào)節(jié)子程序(PA_DIS)。
2.7 鍵盤服務(wù)程序
鍵盤采用查詢的方式,放在主程序中,當(dāng)沒(méi)有按鍵按下的時(shí)候,單片機(jī)循環(huán)主程序,一旦右鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。
3 結(jié)語(yǔ)
由于本出租車計(jì)價(jià)器采用單片機(jī)作為核心控制元件,采用靈敏的霍爾傳感器器件作為檢測(cè),因此使其具有功能強(qiáng),性能可靠,電路簡(jiǎn)單,成本低的特點(diǎn),加上經(jīng)過(guò)優(yōu)化的程序,使其有很高的智能化水平,解決了以往出租車計(jì)價(jià)器計(jì)價(jià)不準(zhǔn)確,使用壽命短等缺點(diǎn)。