引言
在科學(xué)技術(shù)和經(jīng)濟(jì)水平快速發(fā)展的21世紀(jì),乘坐出租車和網(wǎng)約車出行已經(jīng)成為一種非常重要的交通出行方式。行業(yè)的轉(zhuǎn)型發(fā)展讓出租車行業(yè)迎來了一場新紀(jì)元。但是在出租車行業(yè)迅速發(fā)展的同時(shí),也出現(xiàn)了很多問題。經(jīng)營管理不善,司機(jī)服務(wù)不規(guī)范,隨意定價(jià)收款的現(xiàn)象也是層出不窮。為了根治這種現(xiàn)象,出租車計(jì)價(jià)器孕育而生。出租車計(jì)價(jià)器的問世不僅減少了行業(yè)的亂象,而且讓管理者和經(jīng)營者更加誠信的服務(wù)乘客,在很大程度上改善了行業(yè)風(fēng)氣。
但是目前國內(nèi)廣泛使用的出租車計(jì)價(jià)器功能單一,不能滿足人們的需求,人們更致力于一種功能齊全,生產(chǎn)成本低的出租車計(jì)價(jià)器。伴隨著科技水平的提高,出租車計(jì)價(jià)器也迎來了新的變革,這時(shí)第二代出租車計(jì)價(jià)器問世了。
設(shè)計(jì)選用宏晶公司生產(chǎn)的STC89C52單片機(jī),加上外圍芯片,設(shè)計(jì)出一個(gè)性能穩(wěn)定,實(shí)用性強(qiáng)的出租車計(jì)價(jià)器。電路主要由測速模塊、時(shí)鐘模塊、測溫模塊組成。設(shè)計(jì)出功能齊全、實(shí)用性強(qiáng)的出租車計(jì)價(jià)器。此設(shè)計(jì)能夠?qū)崿F(xiàn)計(jì)價(jià)器的各項(xiàng)功能要求,使用適當(dāng)?shù)慕涌谧鳛檩斎溯敵鐾ǖ?實(shí)現(xiàn)對電機(jī)驅(qū)動(dòng)模塊的運(yùn)行控制,以達(dá)到對出租車各項(xiàng)性能指標(biāo)的測量,具有很大的市場前景以及開發(fā)空間。
- 系統(tǒng)概述
- 設(shè)計(jì)要求
運(yùn)用所學(xué)的知識(shí)和專業(yè)技能,以STC89C52系列單片機(jī)為核心設(shè)計(jì)一個(gè)簡易的出租車計(jì)價(jià)器系統(tǒng),實(shí)現(xiàn)出租車計(jì)價(jià)器的穩(wěn)定運(yùn)行。用霍爾傳感器測速測量出租車的實(shí)時(shí)速度,用延時(shí)實(shí)現(xiàn)調(diào)速功能。設(shè)計(jì)的出租車計(jì)價(jià)器還需具有顯示時(shí)鐘和測量溫度的功能,并且能夠自動(dòng)計(jì)算費(fèi)用、設(shè)置起步價(jià)、設(shè)置每公里價(jià)格。設(shè)計(jì)選用STC89C52單片機(jī)作為控制器,自帶AD轉(zhuǎn)換,當(dāng)一邊有按鍵按下時(shí),另一邊以數(shù)字的形式在LCD12864顯示屏上顯示出相應(yīng)的車速、溫度、時(shí)間以及總價(jià)。
(1)能夠設(shè)置起步價(jià),每公里價(jià)格;
(2)能夠測量出出租車的速度并顯示;
(3)自動(dòng)計(jì)算總費(fèi)用;
(4)具有時(shí)鐘和溫度測量功能。
-
- 總體設(shè)計(jì)
總體設(shè)計(jì)框圖如圖1-1所示,設(shè)計(jì)主要由單片機(jī)模塊,按鍵控制模塊和LCD12864顯示模塊組成,它們的作用分別為:
單片機(jī)模塊:數(shù)據(jù)輸入輸出的處理。
按鍵模塊:通過按鍵處理,將相關(guān)操作指令傳送至單片機(jī)處理。
顯示模塊:用LCD12864顯示屏顯示出租車計(jì)價(jià)器的各項(xiàng)性能指標(biāo),顯示當(dāng)前車速、溫度、總費(fèi)用、起步價(jià)、每公里價(jià)格等功能。起步價(jià)和每公里價(jià)格也能通過按鍵進(jìn)行設(shè)置并且顯示過程。
其中單片機(jī)模塊包括測速模塊、RESET模塊、ds1302S時(shí)鐘模塊、測溫模塊。通過單片機(jī)內(nèi)部轉(zhuǎn)換后在LCD12864顯示屏上顯示出相關(guān)信息。再按下按鍵使電機(jī)開始轉(zhuǎn)動(dòng),通過延時(shí)進(jìn)行調(diào)速,再通過霍爾傳感器模塊進(jìn)行測速并通過顯示模塊在LCD12864上顯示出當(dāng)前的車速。設(shè)置了復(fù)位按鍵,按下復(fù)位按鍵時(shí)出租車計(jì)價(jià)器系統(tǒng)重置至初始狀態(tài)。設(shè)有時(shí)鐘模塊將時(shí)間通過LCD12864顯示屏顯示出來。
2?系統(tǒng)設(shè)計(jì)的整體方案
2.1主控芯片的方案論證
方案一:51系列單片機(jī)
采用STC89C52作為主控芯片,管腳圖如圖2-1所示。51單片機(jī)的系統(tǒng)指令,內(nèi)部結(jié)構(gòu)相對簡單。同時(shí)51單片機(jī)的I/O腳的設(shè)計(jì)和使用非常簡單,指令系統(tǒng)規(guī)范。
方案二:PIC系列單片機(jī)
采用PIC系列為核心控制器。PIC單片機(jī)將各種輸入輸出的接口都集成在一塊芯片上,它較適合應(yīng)用在功能單一的設(shè)計(jì)中。
綜上所述,根據(jù)在校所學(xué)以及掌握的理論知識(shí),對51系列單片機(jī)的掌握更為熟練,同時(shí)價(jià)格也更為便宜的。51系列的單片機(jī)適用于相對簡單較為容易實(shí)現(xiàn)的電路。51系列單片機(jī)比PIC系列單片機(jī)更容易實(shí)現(xiàn)設(shè)計(jì)要求,因此選擇使用方案一設(shè)計(jì)。
圖2-1 STC89C52管腳圖
2.2?顯示模塊的方案論證
方案一:LED數(shù)碼管
采用LED數(shù)碼管為顯示模塊。數(shù)碼管能夠顯示的內(nèi)容單一,受到一些產(chǎn)品品質(zhì)要求和影響,不能做很小和顯示內(nèi)容很多的產(chǎn)品。數(shù)碼管厚大笨重,占用產(chǎn)品結(jié)構(gòu)尺寸較大,同時(shí)數(shù)碼管的消耗電力大,數(shù)碼管不同于液晶產(chǎn)品,受到視角限制,數(shù)碼管屬于全視角的產(chǎn)品。
方案二:LCD12864顯示屏
采用LCD12864為顯示模塊。LCD12864顯示屏具有功耗低的特點(diǎn),液晶分子由電壓驅(qū)動(dòng),液晶屏基本不用耗電。但由于液晶分子的扭曲特性,導(dǎo)致液晶屏視角上有偏差,只能有一個(gè)方向的視角是非常清楚的。LCD液晶顯示屏在玻璃中間刻畫線路和灌注液晶,可以做到高精度的操作,顯示內(nèi)容多樣化,顯示顏色也多姿多彩。LCD12864管腳圖如圖2-2所示。
綜上所述,再結(jié)合出租車計(jì)價(jià)器的設(shè)計(jì)要求,選擇LCD顯示屏作為設(shè)計(jì)的顯示模塊。因?yàn)樵O(shè)計(jì)需要實(shí)現(xiàn)的功能較多,LED數(shù)碼管能夠顯示的的內(nèi)容單一,選用LED數(shù)碼管,無法滿足設(shè)計(jì)的顯示需要。相反LCD12864顯示屏具有顯示多樣化,可承載的內(nèi)容多,可以做到高精度的操作。綜上所述,顯示模塊采用方案二設(shè)計(jì)。
圖2-2 LCD12864管腳圖
2.3電動(dòng)機(jī)的方案論證
方案一:直流電機(jī)
采用直流電機(jī)為動(dòng)力元件。安裝較為簡單,價(jià)格較為便宜。在給定的負(fù)載條件下,可以根據(jù)設(shè)計(jì)需要人為改變電機(jī)轉(zhuǎn)速,更加有利于出租車計(jì)價(jià)器調(diào)速測速功能的實(shí)現(xiàn)。
方案二:步進(jìn)電機(jī)
采用步進(jìn)電機(jī)為動(dòng)力元件。步進(jìn)電機(jī)不會(huì)以連續(xù)的方式旋轉(zhuǎn),而是以離散的步長或增量移動(dòng),不適合模擬出租車的運(yùn)行速度。步進(jìn)電機(jī)適用于對精度要求大的設(shè)計(jì)。
綜上所述,由于本設(shè)計(jì)需要穩(wěn)定的改變速度,同時(shí)速度變化較大。另一方面直流電機(jī)較為便宜,因此設(shè)計(jì)選擇方案一,用直流電機(jī)作為電動(dòng)機(jī)。
2.4??電機(jī)驅(qū)動(dòng)模塊的方案論證
方案一:L298N驅(qū)動(dòng)
采用L298N電機(jī)驅(qū)動(dòng)為控制器。如果改變輸入,能夠?qū)崿F(xiàn)電機(jī)的轉(zhuǎn)向。更適用于模擬小車行駛。它擁有雙通道輸出,A輸出和B輸出,可以實(shí)現(xiàn)兩路電機(jī)進(jìn)行不同的控制與操作。
方案二:ULN2003驅(qū)動(dòng)
采用ULN2003芯片作為控制器。ULN2003能夠承受高壓,內(nèi)部是非門,輸入與輸出是相反的。它的電壓增益高,溫度范圍寬。在工作時(shí)電壓高。
綜上所述,電機(jī)選用5V直流電機(jī),設(shè)計(jì)只需要用電機(jī)模擬車輪轉(zhuǎn)動(dòng),對電機(jī)的控制與操作要求低。用ULN2003驅(qū)動(dòng)較為簡單,更容易實(shí)現(xiàn)要求,因此選用ULN2003驅(qū)動(dòng)作為本次設(shè)計(jì)的電機(jī)驅(qū)動(dòng)模塊。
3??測速模塊的方案論證
方案一:霍爾傳感器測速
采用霍爾傳感器測速?;魻杺鞲衅骶哂蝎@取信息準(zhǔn)確、體積小、測量范圍廣、精度高等優(yōu)點(diǎn)。霍爾傳感器對環(huán)境的要求低,同時(shí)結(jié)構(gòu)簡單。但是該方案利用線圈切割磁感線產(chǎn)生感應(yīng)電動(dòng)勢,易受到電磁波干擾。
方案二:采用光電式轉(zhuǎn)速傳感器,
采用光電式測速。主要原理是將光信號(hào)轉(zhuǎn)化為電信號(hào)。它獲取信息準(zhǔn)確,但對環(huán)境的要求較高,容易受到環(huán)境中的光干擾。
綜上所述,由于光電轉(zhuǎn)速傳感器對環(huán)境的要求較大同時(shí)需要光源才能進(jìn)行測速,相反霍爾傳感器測速對環(huán)境要求較低,結(jié)構(gòu)簡單,再加上學(xué)習(xí)過霍爾傳感器的相關(guān)理論知識(shí),對霍爾傳感器掌握程度遠(yuǎn)高于光電式轉(zhuǎn)速傳感器。因此選用霍爾傳感器作為設(shè)計(jì)的測速模塊。
- 系統(tǒng)硬件電路設(shè)計(jì)
- 單片機(jī)最小系統(tǒng)的電路設(shè)計(jì)
- STC89C52芯片模塊電路設(shè)計(jì)
- 單片機(jī)最小系統(tǒng)的電路設(shè)計(jì)
依據(jù)所選的方案,選用STC89C52作為出租車計(jì)價(jià)器的主控芯片,利用STC89C52的各個(gè)端口,實(shí)現(xiàn)設(shè)計(jì)所需要的各個(gè)功能。單片機(jī)端口可以控制顯示模塊、驅(qū)動(dòng)電機(jī)模塊、溫度傳感器模塊、霍爾傳感器模塊以及DS1302時(shí)鐘模塊,還能控制各個(gè)按鍵的功能。設(shè)計(jì)使用單片機(jī)的P10,P11接口和直流電機(jī)驅(qū)動(dòng)模塊相連。使用P37接口與溫度傳感器模塊相連。使用P12,P13,P14接口連接K1,K2,K3按鍵。用P32接口連接霍爾傳感器模塊。用P20,P21,P22接口連接DS1302時(shí)鐘芯片。P9接口連接復(fù)位電路。P18,P19接口連接晶振電路。電路設(shè)計(jì)簡單,STC89C52芯片模塊電路設(shè)計(jì)如圖3-1所示。
圖3-1 STC89C52電路設(shè)計(jì)圖
3.1.2?系統(tǒng)晶振電路設(shè)計(jì)
晶振電路能夠產(chǎn)生和時(shí)鐘一樣準(zhǔn)確的振蕩電路,產(chǎn)生時(shí)鐘脈沖信號(hào),用于控制單片機(jī)程序執(zhí)行的節(jié)拍和時(shí)序。Y1兩端接入單片機(jī)的XTAL1和XTAL2,接入兩個(gè)大小為30PF的電容。晶振電路設(shè)計(jì)如圖3-2所示。
圖3-2 晶振電路設(shè)計(jì)圖
3.1.3?復(fù)位電路設(shè)計(jì)
使用單片機(jī)的RST接口連接復(fù)位電路,設(shè)計(jì)的復(fù)位電路由10uF的電容和10k的電阻接入RESET按鍵組成復(fù)位電路,設(shè)計(jì)如圖3-3所示。
圖3-3 復(fù)位電路設(shè)計(jì)圖
???????3.1.4?電源電路設(shè)計(jì)
本設(shè)計(jì)采用經(jīng)典的5V電源供電,為單片機(jī)提供電源,保障單片機(jī)工作電壓的溫度。電源電路設(shè)計(jì)如圖3-4所示。
???????3.2?按鍵控制電路設(shè)計(jì)
根據(jù)設(shè)計(jì)功能要求,設(shè)置三個(gè)控制按鍵,分別命名K1、K2、K3。利用單片機(jī)的P12,P13,P14接口實(shí)現(xiàn)對出租車計(jì)價(jià)器設(shè)計(jì)的各個(gè)功能要求。通過編寫軟件代碼,當(dāng)通電時(shí),初始狀態(tài)為空車,初始狀態(tài)會(huì)顯示時(shí)鐘和溫度。按下K2按鍵可以驅(qū)動(dòng)直流電機(jī)轉(zhuǎn)動(dòng),通過延時(shí)實(shí)現(xiàn)調(diào)速,再長按K2實(shí)現(xiàn)加速,長按K3實(shí)現(xiàn)減速。在電機(jī)轉(zhuǎn)動(dòng)的同時(shí)可以利用霍爾傳感器測速,并且將速度顯示在LCD12864顯示屏上,這就實(shí)現(xiàn)了出租車計(jì)價(jià)器的測速并且顯示的功能。按下K1按鍵進(jìn)入乘客已上車界面,在電機(jī)轉(zhuǎn)動(dòng)的同時(shí)進(jìn)行測速,自動(dòng)計(jì)算總費(fèi)用并且將費(fèi)用顯示在LCD12864顯示屏上。再次按下K1按鍵進(jìn)入乘客已下車界面并且顯示總費(fèi)用。再按下K1將進(jìn)入設(shè)置起步價(jià)的界面按下K2起步價(jià)加1,按下K3起步價(jià)減1,設(shè)置完起步價(jià)后按下K1保存退出,這樣就實(shí)現(xiàn)了設(shè)置起步價(jià)的功能。繼續(xù)按下K1進(jìn)入設(shè)置每公里價(jià)格界面,按K2加一,按K3減一。設(shè)置完成后按下K1保存退出。按鍵控制電路設(shè)計(jì)如圖3-5所示。
圖3-5 按鍵控制電路設(shè)計(jì)
3.3 顯示電路設(shè)計(jì)
根據(jù)設(shè)計(jì)的性能要求,設(shè)計(jì)了顯示燈電路設(shè)計(jì),顯示燈電路由1K電阻R4和LED燈組成,當(dāng)出租車超速時(shí),紅燈亮起提示超速。顯示電路設(shè)計(jì)如圖3-6所示。
系統(tǒng)設(shè)計(jì)采用ULN2003模塊作為電機(jī)的驅(qū)動(dòng)模塊。ULN2003由七個(gè)NPN組成,如果直接用芯片的管腳驅(qū)動(dòng)直流電機(jī)的話會(huì)使直流電機(jī)燒壞或者無法驅(qū)動(dòng)。IN1-IN7是輸入接口,OUT1-OUT7是輸出接口。其內(nèi)部是一個(gè)非門,輸入與輸出相反,ULN2003芯片不能直接輸出高電平,需在外部接入上拉電阻,但是設(shè)計(jì)沒有采用接入上拉電阻的方案。因此設(shè)計(jì)的電機(jī)電路在COM公共端接高電平,IN1輸入通道連接單片機(jī)的P10接口接入高電平信號(hào),IN2輸入通道連接單片機(jī)P11接口,OUT1輸出通道輸出低電平,這樣就能完成對電機(jī)的驅(qū)動(dòng),設(shè)計(jì)的電路圖如圖3-7所示。
圖3-7 直流電機(jī)驅(qū)動(dòng)電路設(shè)計(jì)圖
4 系統(tǒng)軟件設(shè)計(jì)
4.1主函數(shù)軟件設(shè)計(jì)
系統(tǒng)需要使用到一下五種模式:無乘客、乘客以上車、乘客已下車、設(shè)置起步價(jià)、設(shè)置每公里價(jià)格。系統(tǒng)主函數(shù)程序設(shè)計(jì)流程如圖4-1所示。前三個(gè)模式下操作基本相同,模式一的基本參數(shù)比模式二和模式三少,因?yàn)楹竺鎯煞N模式涉及到計(jì)算公里數(shù)和總價(jià)等等參數(shù)?;緟?shù)包括溫度、時(shí)間、起步價(jià)、是否有乘客乘坐或乘客上下車狀態(tài)。以上所有模式按下K1都是切換到下一個(gè)模式,區(qū)別不同的是前三種模式下K2和K3是用于調(diào)速使用,后兩種模式是用于調(diào)節(jié)價(jià)格。初始化系統(tǒng)采集時(shí)鐘參數(shù)采集溫度參數(shù)顯示基本參數(shù),接到乘客開始計(jì)費(fèi),乘客下車設(shè)置下一次起步價(jià)和設(shè)置下一次每公里價(jià)格。
部分程序:
#include "lcd12864.h"
#include "pwm.h"
#include "ds1302.h"
#include "key.h"
#include "ds18b20.h"
sbit MOTER=P1^0;
sbit LED=P1^1;
u8 t=0;
u8 key_value=0;
u8 flag=0;
u8 Ttemp_value=0;
u8 PF=5;
u8 duty=0;
u8 time=0;
float zprice=0;
void show_base();
void flagzero();
void flagone();
void flagtwo();
void flagthree();
void getandshow();
void main()
{
lcd12864_init();
ds18b20_init();
PWM_Init();
Exter0_Init();
Timer1_Init();
//???? ds1302_init();
while(1)
{
if(flag==0)?? flagzero();
else if(flag==1)? flagone();
else if(flag==2)? flagtwo();
else if(flag==3)? flagthree();
}
}
void flagzero()
{
u8 flag0key=0;
zprice=0;
duty=0;
MOTER=0;
TR0=0;
show_base();
lcd12864_show_string(4,1,"乘客未上車!");
while(flag==0)
{
if(t==255)??? getandshow();
flag0key=key_scan(0);
if(flag0key==1)? flag++;
else if(flag0key==2&&duty<=90)
{
duty+=10;
}
else if(flag0key==3&&duty>=10)
{
duty-=10;
}
if(duty>=time)??? MOTER=1;
else MOTER=0;
if(duty>=80)
{
LED=1;
}
else
{
LED=0;
}
t++;
}
lcd12864_clear();
}
void flagone()
{
u8 flag1key=0;
MOTER=0;
duty=0;
TR0=0;
show_base();
lcd12864_show_string(4,1,"乘客已上車!");
while(flag==1)
{
if(t==255)??? getandshow();
flag1key=key_scan(0);
if(flag1key==1)? flag++;
else if(flag1key==2&&duty<=90)
{
duty+=10;
}
else if(flag1key==3&&duty>=10)
{
duty-=10;
}
if(duty>=time)??? MOTER=1;
else MOTER=0;
if(duty>=80)
{
LED=1;
}
else
{
LED=0;
}
t++;
}
lcd12864_clear();
}
void flagtwo()
{
u8 flag2key=0;
MOTER=0;
duty=0;
LED=0;
TR0=0;
show_base();
lcd12864_show_string(4,1,"乘客已到達(dá)!");
while(flag==2)
{
if(t==255)??? getandshow();
flag2key=key_scan(0);
if(flag2key==1)? flag++;
t++;
}
lcd12864_clear();
}
內(nèi)容包括:
需要完整的資料可在我的資源里下載,也可以加入我的紛傳圈子,里面有資源壓縮包的百度網(wǎng)盤下載地址及提取碼。
紛傳點(diǎn)擊用微信打開即可,過程有點(diǎn)繁瑣請見諒。