崔 凱
(營口職業技術學院電氣電子工程系,遼寧營口 115000)
具有拼車功能的出租車計價器算法探討
崔 凱
(營口職業技術學院電氣電子工程系,遼寧營口 115000)
本文探討設計了具有拼車功能的出租車計價器的算法。此計價器如果得到應用,在現有條件都不變的情況下可以提高運力,為乘客節省支出,為的哥節省燃油費用、增加收入,可在一定程度上解決打車難、空氣污染等問題,具有經濟效益、環境效益和社會效益。
出租車計價器;拼車;算法
近年來,越來越多的城市出現了交通擁堵、打車難等問題。在目前條件下,路網不可能迅速增加,出租車也不可能大批量增加,政府更不可能允許私家車參與運營,于是有的城市便提出了出租車拼車這一方案。但此方案面臨政策的瓶頸,現有出租車計價器也不具有這樣的功能。待制度允許后,拼車型出租車計價器一定會成為一種需要,具有巨大的市場空間。目前出現的個別拼車型計價器主要是給予拼車乘客少量優惠,乘客對此不太滿意;或者是計算方法太單一,比如只有70%這一種方案。本文充分考慮了乘車時可能出現的一人、兩人、三人、四人這四種情況,并給出了相應的比較合理的四種計費方式:100%、75%、60%、50%。并且,隨著乘坐人員數量的變化,會對計費方式做動態調整。
本設計以AT89C51單片機為核心[1],車輪脈沖采集模塊[2]、費用輸出模塊、乘客上車按鍵模塊、乘客結賬按鍵模塊構成(圖1)。

圖1 設計系統框圖
2.1 主程序模塊說明
程序首先進行初始化,包括相關變量的定義賦值、計數器工作模式/初始值給定、串口初始化、使P0口處于“讀”狀態等。當按下上車鍵K1、K2、K3、K4中的任意一個或者幾個的時候,程序啟動。同時啟動計數器T0,計算來自車輪的脈沖(公里數)。首先判斷有沒有人、有幾個人,之后根據人數選擇相應計費方式(100%、75%、60%、50%)。之后再次讀取P0口的值,直到P0口的值發生變化(有新人上車、或有人下車)。此時計數器停止計數,將對應的人的車費計算并存儲,同時將計數器清零。如果P0口的變化是由于新人上車引起的,則重新判斷人數,選擇新的計費方式;如果是有人下車,則將相應的車費輸出顯示,顯示后將相對應的費用存儲變量清零,并重新判斷是否有人,詳細流程如圖1所示。

圖1 主程序流程圖
2.2 計費方式處理
根據P0口狀態(低四位)確定乘客人數,再根據人數確定費率,具體見表1。

表1 乘客人數、費率、P0口狀態(低四位)及數值對應關系
(1)如果是一個人,則計費方式為全額;如果有兩個人,則每個人只需付正常車費的75%;如果三個人,則每個人只需付全額的60%;四個座位都坐滿,每個人只需付全額的50%。人數、費率、P0口狀態(低四位)及數值如圖3所示。之所以采取這種計費方式,是因為拼車要充分考慮到乘客(尤其是第一位乘客)和出租車司機雙方的利益。(2)兩位乘客費率需要考慮的是,如果兩個人的費率太高,如90%,則第一位乘客很可能拒絕第二人拼車;如果費率低于50%,則司機沒有收益。第一位乘客只能坐在前排或者后排,第二位乘客可以相應地坐在后排或前排,從而避免與其爭奪空間,同時司機也可也獲得1.5倍的收益,三方互惠互利,容易達成協議。(3)三位乘客費率需要考慮的是,四座的出租車坐三個人也不會太擁擠,同時可以獲得60%的折扣,而司機可以有1.8倍收益,也可以達成協議。(4)四位乘客費率需要考慮的是,相對擁擠,但每人只需付車費的50%,在早晚的交通高峰期,大部分人也會因為急于出行和相對較大的折扣同意拼車。而司機可以有2倍的收入,也樂于接受。
2.3 費用計算、存儲
當P0口的值發生變化,肯定是有人上車或下車,這時需要重新計算費率。所以計數器要停止計數,讀取數據并將其轉換成公里數,與此次費率相乘,計算費用(圖2),之后將公里數清零。

圖2 車費計算、存儲示意圖

圖3 相應費用輸出示意圖
2.4 費用輸出
當有人下車(J1、J2、J3、J4任意鍵按下),首先判斷是哪位乘客下車,然后將對應座位的乘客的車費輸出,之后將該乘客的費用存儲單元清零,對應鍵(K、J)清零(圖3)。由于本文只討論算法,數據輸出電路和程序已經很成熟,故數據輸出部分僅以輸出函數表示。
#include
#include
#define Uchar unsigned char
#define Uint unsigned int
sbit K1=P0^0;sbit K2=P0^1;sbit K3=P0^2;sbit K4=P0^3;//定義開始鍵k1、k2、k3、k4
sbit J1=P0^4;sbit J2=P0^5;sbit J3=P0^6;sbit J4=P0^7;//定義結賬鍵J1、J2、J3、J4
Uchar S,Z,Q,G,M;
Uint V1=0,V2=0,V3=0,V4=0;
Uint N=0,C=0;//C存放計數器的溢出數據,N存放最終公里數
Uint i=0;
void uart_init()
{
SCON=0X52;
TMOD|=0x20; //T1
TH1=0XF3;
TR1=1;
}
void shu_chu(i)
{
printf("車費:%d元 n",i);
}
void init(void)
{
TMOD=0X26;//8位計數器T0,初始值自動載入
TH0=0;
TL0=0;
EA=0;
ET0=0;//T0中斷允許
}
void state_read() //讀P1口狀態
{
P0=0xff;//P0口作為輸入口使用
S=P0;//讀P0口值
G=S&0X0F;//取P0低四位,如果G!=0,說明有人
}
void t0()interrupt 1 using 0//C/T0計來自車輪脈沖
{
C++;
}
Uchar xi_shu()//根據人數,選擇計費方式
{
Uchar M ;
TR0=1;
if (G==0x01||G==0x02||G==0x04||G==0x08) M=100; //1人
if (G==0x03||G==0x05||G==0x06||G==0x09||G==0X0A||G==0X0C) M=75;//2人
if (G==0x07|| G==0X0B||G==0X0D||G==0X0E) M=60; //3人
if (G==0X0F) M=50; //4人
return (M);
}
void jie_zhang(void) //結賬
{
TR0=0;//計數停止
Q=0Xff&TL0; //讀計數器的值
N=(255*C+Q); //算公里數,設一次為一公里,實際需根據車輪直徑乘適當系數
if((G&0x01)==1) {V1=V1+0.01*(N*M); TH0=0;TL0=0;}//K1結賬V1累加,計費方式換成小數
if((G&0x02)==2) {V2=V2+0.01*(N*M); TH0=0;TL0=0;}//K2同上
if((G&0x04)==4) {V3=V3+0.01*(N*M); TH0=0;TL0=0;}//K3同上
if((G&0x08)==8) {V4=V4+0.01*(N*M); TH0=0;TL0=0;}//K4同上
if((S&0x10)==0x10)
{shu_chu(V1); V1=0;K1=0;J1=0;}//J1結賬輸出,之后V1、K1、J1清零
if((S&0x20)==0x20)
{shu_chu(V2);V2=0;K2=0;J2=0;}//J2
if((S&0x40)==0x40)
{shu_chu(V3); V3=0;K3=0;J3=0;}//J3
if((S&0x80)==0x80)
{shu_chu(V4); V4=0;K4=0;J4=0;}//J4
TR0=1;
}
void main()
{
init();
uart_init();
state_read();//讀P1口狀態
while(G)
{
M=xi_shu();
P0=0xff;
S=P0;
if (S!=G)
jie_zhang();
state_read();//讀P1口狀態
}
}
本設計以AT89C51單片機為核心器件,采用C語言[3],對具有拼車功能的計價器的算法進行了探討,期待本算法及其體現的一些設計思路對相關設計人員有所幫助。但由于本設計只限于程序算法,故涉及數據顯示、輸出、打印部分只以輸出函數表示。本設計源程序通過Keil編譯,經功能仿真,其仿真結果與設計預期完全相符。
[1]張志良.單片機原理與控制技術[M].2版.北京:機械工業出版社,2009.
[2]舒濤,伍遠超.基于AT89S51單片機的出租車計價器系統設計[J].現代電子技術,2010(22):57-59.
[3]譚浩強.C程序設計[M].2版.北京:清華大學出版社,2003.
The Algorithm Discussion for Taximeters Applied to Carsharing
CUI Kai
(Electrical & Electronics Department ,Yingkou Vocational and Technical College, Yingkou Liaoning 115000,China)
In recent years, traffic jams occurred in more and more cities. But neither roads nor taxi numbers can increase quickly at present. The government could not allow the private car using for business either. So some cities suggest taxi sharing, but this scheme conflicts with the policy. The existing taximeters don’t have such function. Therefore, we designed a algorithm for carsharing taximeters. If this taximeter is applied, the transport capacity may increase rapidly under the existing conditions. It can save money for passengers, saving fuel and increasing incomes for drivers. This taximeter can also solve the problem of taxi hard taking and air pollution effectively, owning economic, environmental and social benefits.
carsharing; taximeter; algorithm discussion
2013-10-17
國家自然科學基金資助項目(11147132)。
崔 凱(1980- ),男,遼寧本溪人,營口職業技術學院電氣電子工程系講師,碩士研究生,從事單片機開發設計研究。
TP29
A
1008-178X(2014)01-0032-05