版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> X X X X 大 學(xué)</p><p> 本 科 生 畢 業(yè) 論 文</p><p> 題目:出租車計(jì)費(fèi)系統(tǒng)設(shè)計(jì)</p><p> 姓 名: </p><p> 學(xué) 號(hào): </p><p> 專 業(yè):
2、 </p><p> 年 級(jí): </p><p> 學(xué) 院: </p><p> 完成日期: </p><p> 指導(dǎo)教師: </p><p><b> 目
3、 錄</b></p><p><b> 引言</b></p><p><b> 課題背景</b></p><p><b> 設(shè)計(jì)要求</b></p><p><b> 里程計(jì)費(fèi)</b></p><p><b
4、> 按鍵控制</b></p><p><b> 方案論證</b></p><p><b> 2.1整體方案優(yōu)選</b></p><p><b> 2.2 傳感器優(yōu)選</b></p><p> 3. 相關(guān)硬件資料的介紹</p><p
5、> 3.1 STC89C52單片機(jī)的介紹</p><p> 3.2霍爾傳感器A44E的介紹</p><p> 4.電路模塊設(shè)計(jì)與實(shí)現(xiàn)</p><p> 4.1電源模塊的電路設(shè)計(jì)與實(shí)現(xiàn)</p><p> 4.2霍爾傳感器A44E的電路設(shè)計(jì)與實(shí)現(xiàn)</p><p> 4.3掉電存儲(chǔ)數(shù)據(jù)電路設(shè)計(jì)與實(shí)現(xiàn)<
6、/p><p> 4.4顯示電路的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 5.系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)</p><p> 5.1里程計(jì)價(jià)中斷服務(wù)程序模塊</p><p> 5.2里程、計(jì)費(fèi)程序模塊設(shè)計(jì)</p><p> 5.3等待計(jì)費(fèi)程序模塊設(shè)計(jì)</p><p><b> 6.系統(tǒng)的模擬測(cè)試&l
7、t;/b></p><p><b> 參考文獻(xiàn):</b></p><p> 附錄A硬件電路實(shí)物圖</p><p><b> 附錄B 程序清單</b></p><p><b> 出租車計(jì)費(fèi)系統(tǒng)設(shè)計(jì)</b></p><p> 作者: 指導(dǎo)教
8、師: </p><p><b> ( , , )</b></p><p> 摘 要: 計(jì)費(fèi)器是出租車營(yíng)運(yùn)收費(fèi)的專用智能儀表,良好性能的出租車計(jì)費(fèi)器對(duì)加強(qiáng)行業(yè)管理以及減少司機(jī)與乘客的糾紛都是很有必要的。本設(shè)計(jì)采用STC89C52單片機(jī)進(jìn)行的設(shè)計(jì),相對(duì)來(lái)說(shuō)功能強(qiáng)大,只需用較少的硬件A44E、AT24C02和適當(dāng)?shù)能浖嗷ヅ浜峡梢院苋菀椎貙?shí)現(xiàn)很多附加功能。
9、 </p><p> 關(guān)鍵詞: STC89C52單片機(jī);A44E;AT24C02</p><p> Taxi Billing System Design</p><p> Abstract: The meter is the taxi operation fee
10、s of special intelligent, good performance of taxi meters in strengthening enterprise management and reduce the driver and passengers in the disputes are necessary. this design adopts stc89c52 monolithic integrated circu
11、its design of, powerful functions, only a relatively small hardware a44e, at24c02 and proper in the software can easily achieve a lot of additional features.</p><p> Keywords: STC89C52 monolithic integrated
12、 circuits; A44E ;AT24c02</p><p><b> 引言</b></p><p><b> 1.1 課題背景</b></p><p> 如今出租車在我國(guó)的交通運(yùn)輸中承擔(dān)著重要的角色,出租車計(jì)價(jià)器是出租車上必不可少的重要儀器,它是負(fù)責(zé)出租車營(yíng)運(yùn)收費(fèi)的專用智能化儀表。隨著城市旅游業(yè)的發(fā)展,出租車行
13、業(yè)已成為城市的窗口,象征著一個(gè)城市的文明程度。功能完備、簡(jiǎn)單易用、計(jì)費(fèi)準(zhǔn)確的出租車計(jì)費(fèi)器是加強(qiáng)出租車行業(yè)管理、提高服務(wù)質(zhì)量的必備品。隨著出租車行業(yè)的發(fā)展,對(duì)出租車計(jì)費(fèi)器的需要也越來(lái)越高,用戶不但需要計(jì)費(fèi)器性能穩(wěn)定,計(jì)費(fèi)準(zhǔn)確;同時(shí)還需要其具備應(yīng)對(duì)不同種情況的收費(fèi)計(jì)算功能等。本文,采用單片機(jī)和霍爾傳感器來(lái)來(lái)實(shí)現(xiàn)出租車?yán)锍逃?jì)量功能,使用AT24C02串行E2PROM實(shí)現(xiàn)掉電儲(chǔ)存功能,不僅設(shè)計(jì)簡(jiǎn)單,成本低,而且計(jì)算準(zhǔn)確,功能強(qiáng),實(shí)現(xiàn)了出租車的計(jì)
14、費(fèi)模擬。</p><p><b> 1.2 設(shè)計(jì)要求</b></p><p> 1.2.1 里程計(jì)費(fèi)</p><p> (1) 每一個(gè)脈沖代表輪胎旋轉(zhuǎn)一周,輪胎周長(zhǎng)是具體情況而定;</p><p> (2) 單片機(jī)對(duì)傳感器輸出脈沖進(jìn)行計(jì)數(shù),N脈沖為0.5公里;</p><p> (3)起
15、步價(jià)為10元三公里后每行駛0.5公里,計(jì)數(shù)count達(dá)到額定值,總金額Total_price加次單價(jià)Unit_price;停車等待時(shí)間消費(fèi)Wait_consume是等待分鐘數(shù)Wait_time_min*系數(shù);</p><p> 1.2.2 按鍵控制</p><p> (1) Start_k1(P1^0口)計(jì)費(fèi)關(guān)閉/開(kāi)啟控制鍵,未開(kāi)始計(jì)費(fèi)Start_k1=0 ;開(kāi)始計(jì)費(fèi)Start_k1=
16、1;</p><p> (2) Daytime_k2 ( P1^1口)模式白天/晚上控制鍵,白天Daytime_k2 = 0;晚上Daytime_k2 = 1;</p><p><b> 圖1.2.2-1</b></p><p> ?。?)Setting_k5 ( P1^4口)單價(jià)設(shè)置鍵,復(fù)位開(kāi)關(guān)在K1計(jì)費(fèi)關(guān)閉時(shí)按下一次進(jìn)入白天單價(jià)設(shè)置,按
17、下兩次進(jìn)入晚上單價(jià)設(shè)置,按下三次退出設(shè)置返回原界面;</p><p> ?。?)Add_k3 (P1^2口)單價(jià)調(diào)整鍵,復(fù)位開(kāi)關(guān)在(3)情況下單價(jià)從0到9遞增;</p><p> ?。?)Wait_time_k4 (P1^3口)停車等候計(jì)費(fèi)切換鍵,復(fù)位開(kāi)關(guān)按下一次進(jìn)入等候模式,按下兩次返回;</p><p><b> 圖1.2.2-2</b>
18、</p><p> (6)K6復(fù)位清零鍵</p><p><b> 2 方案設(shè)計(jì)論證</b></p><p> 2.1 整體方案優(yōu)選</p><p> 方案一:采用數(shù)字電路控制。其原理方框圖如圖 2-1所示。采用傳感器件,輸出脈沖信號(hào),經(jīng)過(guò)放大整形作為移位寄存器的脈沖,實(shí)現(xiàn)計(jì)價(jià),而考慮到這種電路過(guò)于簡(jiǎn)單,性能不夠
19、穩(wěn)定,也不能調(diào)整單價(jià),也不能根據(jù)外部因素調(diào)節(jié)計(jì)費(fèi)標(biāo)準(zhǔn),電路不夠?qū)嵱谩?lt;/p><p> 圖2-1 數(shù)字電路方案</p><p> 方案二:采用單片機(jī)控制。利用單片機(jī)豐富的 I O端口,分配簡(jiǎn)易,實(shí)現(xiàn)基本的里程計(jì)價(jià)功能和價(jià)格調(diào)節(jié)、白天晚上切換等功能。其原理如圖 2.2 所示。</p><p> 圖2-2 單片機(jī)控制方案圖</p><p>
20、 綜上分析,方案二有較大的活動(dòng)空間,不但能實(shí)現(xiàn)所要求的功能而且能在很大的程度上擴(kuò)展功能, 而且還可以方便的對(duì)程序進(jìn)行升級(jí), 所以我們采用第二種方案。</p><p><b> 2.2 傳感器優(yōu)選</b></p><p> 方案一:光電傳感器安裝在轉(zhuǎn)軸上,當(dāng)扇葉經(jīng)過(guò)時(shí) ,可產(chǎn)生脈沖信號(hào),但是光電傳感器 對(duì)灰塵、油污等比較敏感。</p><p&
21、gt; 方案二:霍爾傳感器不怕灰塵和油污 ,且廣泛應(yīng)用于工業(yè)現(xiàn)場(chǎng),霍爾傳感器 價(jià)格便宜且具有體積小、靈敏度高 、響應(yīng)速度快 、溫度性能好 、精確度高 、可靠性高等特點(diǎn) ,能很好地滿足車輪測(cè)速 系統(tǒng)設(shè)計(jì)的需要。</p><p> 基于以上分析,我們選擇方案二。</p><p> 3.相關(guān)硬件資料的介紹</p><p> 3.1 STC89C52單片機(jī)的介紹
22、</p><p> STC89C52是宏晶科技推出的一種帶8K字節(jié)閃爍可編程可檫除只讀存儲(chǔ)器(FPEROM-Flash Programable and Erasable Read Only Memory )的高速、高可靠、低功耗、超低價(jià)、強(qiáng)抗靜電、強(qiáng)抗干擾的單片機(jī)。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。其管腳圖如圖1所示。STC89C52單片機(jī)的主要
23、功能如表1所示。</p><p> 圖3-1 STC89C52單片機(jī)管腳圖</p><p> 表3-1 寄存器的復(fù)位狀態(tài)</p><p> 3.2 霍爾傳感器A44E的介紹</p><p> 霍爾器件是一種磁傳感器。用它們可以檢測(cè)磁場(chǎng)及其變化,可在各種與磁場(chǎng)有關(guān)的場(chǎng)合中使用?;魻柶骷曰魻栃?yīng)為其工作基礎(chǔ)。</p>&
24、lt;p> 霍爾器件具有許多優(yōu)點(diǎn),它們的結(jié)構(gòu)牢固,體積小,重量輕,壽命長(zhǎng),安裝方便,功耗小,頻率高(可達(dá)1MHZ),耐震動(dòng),不怕灰塵、油污、水汽及鹽霧等的污染或腐蝕。</p><p> 霍爾器件分為:霍爾元件和霍爾集成電路兩大類,前者是一個(gè)簡(jiǎn)單的霍爾片,使用時(shí)常常需要將獲得的霍爾電壓進(jìn)行放大。后者將霍爾片和它的信號(hào)處理電路集成在同一個(gè)芯片上。本次設(shè)計(jì)選取了霍爾集成電路來(lái)測(cè)量里程。</p>
25、<p> 里程測(cè)量是通過(guò)將霍爾傳感器的集成電路安裝在車輪上方的鐵板上,將磁鐵安裝在車輪上,旋轉(zhuǎn)的車輪將磁鐵對(duì)準(zhǔn)集成電路時(shí),霍爾傳感器會(huì)輸出一個(gè)脈沖信號(hào),送到單片機(jī),經(jīng)過(guò)單片機(jī)的計(jì)算處理,將行駛的里程送到顯示單元并顯示出來(lái)。</p><p><b> 其原理示意圖如下:</b></p><p> 圖3-2 傳感器測(cè)距示意圖</p><
26、;p> 由于A44E屬于開(kāi)關(guān)型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號(hào)符合TTL電平標(biāo)準(zhǔn),可以直接接到單片機(jī)的IO 端口上,而且其最高檢測(cè)頻率可達(dá)到1MHZ。</p><p> A44E集成霍耳開(kāi)關(guān)由穩(wěn)壓器A 、霍耳電勢(shì)發(fā)生器(即硅霍耳片)B 、差分放大器C 、施密特觸發(fā)器D 和OC 門輸出E 五個(gè)基本部分組成。</p><p> 在輸入端輸入電壓VCC
27、,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍耳電勢(shì)發(fā)生器的兩端,根據(jù)霍耳效應(yīng)原理,當(dāng)霍耳片處在磁場(chǎng)中時(shí),在垂直于磁場(chǎng)的方向通以電流,則與這二者相垂直的方向上將會(huì)產(chǎn)生霍耳電勢(shì)差VH 輸出,該VH 信號(hào)經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到 OC 門輸出。當(dāng)施加的磁場(chǎng)達(dá)到“工作點(diǎn)”(即 OPB )時(shí),觸發(fā)器輸出高電壓(相對(duì)于地電位),使三極管導(dǎo)通,此時(shí) OC 門輸出端輸出低電壓,通常稱這種狀態(tài)為“開(kāi)”。當(dāng)施加的磁場(chǎng)達(dá)到“釋放點(diǎn)”(即 rPB )時(shí)
28、,觸發(fā)器輸出低電壓,三極管截止,使OC 門輸出高電壓,這種狀態(tài)為“關(guān)”。這樣兩次電壓變換,使霍耳開(kāi)關(guān)完成了一次開(kāi)關(guān)動(dòng)作。</p><p> A44E 只對(duì)磁鐵的S 級(jí)有響應(yīng)而對(duì)N級(jí)沒(méi)有絲毫響應(yīng)。安裝時(shí)一定要讓磁鐵的S 級(jí)對(duì)準(zhǔn)A44E的反應(yīng)傳感區(qū),如圖</p><p> 圖3-3 A44E 判別磁鐵極性</p><p> 我們選取的A44E霍爾傳感器是一個(gè)霍爾
29、傳感器制品,里面有霍爾集成電路。我們選取的霍爾傳感器有3個(gè)外接口,2個(gè)是電源的正負(fù)極接口,最后一個(gè)是脈沖信號(hào)輸出口,只要將霍爾傳感器的信號(hào)輸出端接到單片機(jī)的端口上便可以實(shí)現(xiàn)距離檢測(cè)。</p><p> 其中,我們選取了單片機(jī)的P3.2(INT0)引腳作為信號(hào)的輸入端,采用外部中斷0進(jìn)行計(jì)數(shù)。車輪每轉(zhuǎn)一圈,霍爾傳感器就產(chǎn)生一個(gè)脈沖信號(hào),根據(jù)霍爾效應(yīng)原理,當(dāng)霍爾片處在磁場(chǎng)中時(shí),霍爾傳感器的輸出端輸出低電平。當(dāng)車輪轉(zhuǎn)
30、動(dòng)一圈時(shí)小磁鐵提供一個(gè)磁場(chǎng),則霍爾傳感器輸出一次低電平完成一次數(shù)據(jù)采集,從而產(chǎn)生信號(hào)?;魻杺鞲衅鳈z測(cè)并輸出信號(hào)到單片機(jī)的INT0或INT1計(jì)算脈沖輸入端,引起單片機(jī)的中斷,對(duì)脈沖計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到特定的次數(shù)時(shí),里程就會(huì)增加,單片機(jī)對(duì)里程進(jìn)行計(jì)算后,通過(guò)接口電路將計(jì)算好的結(jié)果傳送到數(shù)碼管并顯示出來(lái)。</p><p> 4.電路模塊設(shè)計(jì)與實(shí)現(xiàn)</p><p> 4.1電源模塊的電路設(shè)計(jì)與實(shí)現(xiàn)
31、</p><p> 由于計(jì)價(jià)器的工作環(huán)境比較差,它要求有抗振動(dòng)、抗高低溫、抗潮濕、抗電磁干擾等能力,特別是電源方面的干擾,如出租車啟動(dòng)時(shí),發(fā)動(dòng)機(jī)打火、電瓶充電等造成輸入計(jì)價(jià)器的+12 V 電源不穩(wěn)定。因此采用+l2 v電瓶電源經(jīng)過(guò)濾波和電源穩(wěn)壓管理芯片7805后得到+5 V的穩(wěn)定電壓輸出,保證整個(gè)系統(tǒng)能夠正常工作。如圖所示:</p><p> 圖4-1 7805電源電路</
32、p><p> 4.2霍爾傳感器A44E的電路設(shè)計(jì)與實(shí)現(xiàn)</p><p> 用霍爾傳感器集成芯片A44E檢測(cè)并輸出脈沖,其工作原理下圖所示,霍爾傳感器集成芯片A44E有信號(hào)轉(zhuǎn)換、電壓放大、整形輸出等功能,為增加其抗干擾的能力,在A44E轉(zhuǎn)換、放大、整形后再通過(guò)光偶送入P3.2引腳。</p><p> 圖4-2 A44E引腳及電路圖</p><
33、p> 4.3掉電存儲(chǔ)數(shù)據(jù)電路設(shè)計(jì)與實(shí)現(xiàn)</p><p> 采用掉電保護(hù)的E2PROM存儲(chǔ)器AT24C02。它是是ATMEL公司的2KB字節(jié)的電可擦除存儲(chǔ)芯片,采用兩線串行的總線和單片機(jī)通訊,工作電壓寬(2.5~5.5V),額定電流為1mA,靜態(tài)電流10Ua(5.5V),具有擦寫(xiě)次數(shù)多(大于1000次)、寫(xiě)入速度快(小于10ms)、高可靠性和低成本等特點(diǎn)。芯片內(nèi)的資料可以在斷電的情況下保存40 年以上,而
34、且采用8 腳的DIP封裝,其電路如圖所示。</p><p> 圖4-3 掉電存儲(chǔ)電路原理圖</p><p> 圖中 R8、R10 是上拉電阻,其作用是減少 AT24C02的靜態(tài)功耗,由于 AT24C02的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線 SCL(移位脈沖)和SDA(數(shù)據(jù)/地址)與單片機(jī)傳送數(shù)據(jù)。每當(dāng)設(shè)定一次單價(jià),系統(tǒng)就自動(dòng)調(diào)用存儲(chǔ)程序,將單價(jià)信息保存在芯片
35、內(nèi);當(dāng)系統(tǒng)重新上電的時(shí)候,自動(dòng)調(diào)用讀存儲(chǔ)器程序,將存儲(chǔ)器內(nèi)的單價(jià)等信息,讀到緩存單元中,供主程序使用。</p><p> 4.4顯示電路的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 本次設(shè)計(jì)的顯示單元是使用數(shù)碼管顯示數(shù)據(jù)。數(shù)碼管是一種半導(dǎo)體放光器件,其基本單元是發(fā)光二極管,常使用的是8段式LED數(shù)碼管顯示器,采用共陽(yáng)極數(shù)碼管,顯示電路如圖所示。</p><p> 圖4-4
36、 顯示電路</p><p> 從a~g管腳輸入不同的8位二進(jìn)制編碼,可顯示不同的數(shù)字或字符,共陰極和共陽(yáng)極的字段碼互為反碼。</p><p> 表4-4 顯示字符與共陽(yáng)共陰段碼</p><p> 5.系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)</p><p> 5.1里程計(jì)價(jià)中斷服務(wù)程序模塊</p><p> 本設(shè)計(jì)是用外部中斷IN
37、T0測(cè)量從A44E的3.0引腳輸出的負(fù)跳變信號(hào)累計(jì)數(shù),要使用外部中斷,必須對(duì)中斷允許控制寄存器IE和定時(shí)器/計(jì)數(shù)器控制寄存器TCON進(jìn)行如下設(shè)計(jì):</p><p> EA=1; //開(kāi)總中斷</p><p> EX0=1; //允許使用外部中斷</p><p> IT0=1;//選擇負(fù)跳變來(lái)觸發(fā)外部中斷(即為低電平觸發(fā)方式)</p
38、><p> 每當(dāng)車輪轉(zhuǎn)動(dòng)一圈,車輪的磁鐵與霍爾傳感器感相遇時(shí),霍爾傳感器就會(huì)產(chǎn)生一個(gè)下降沿的脈沖信號(hào)。脈沖信號(hào)傳到P3.2引腳,外部中斷請(qǐng)求源INT0,單片機(jī)就會(huì)產(chǎn)生一次中斷。根據(jù)源代碼:</p><p> void int0() interrupt 0 using 1</p><p> count++; //每觸發(fā)一次外中斷,計(jì)數(shù)變量累加1</p&g
39、t;<p> count為車輪轉(zhuǎn)動(dòng)圈數(shù),總路程等于圈數(shù)乘以車輪周長(zhǎng),把總路程的數(shù)據(jù)送到里程相識(shí)單元顯示。再按照里程收費(fèi)標(biāo)準(zhǔn),將價(jià)格數(shù)據(jù)送到計(jì)費(fèi)顯示單元。</p><p> 行車計(jì)費(fèi)的外部中斷流程圖如下:</p><p> 圖5-1 外部中斷流程圖</p><p> 5.2里程、計(jì)費(fèi)程序模塊設(shè)計(jì)</p><p> 里程
40、、計(jì)費(fèi)程序模塊源代碼如下:</p><p> void int0() interrupt 0 using 1</p><p><b> {</b></p><p> if(Guesttime_sign==1&&Waittime_sign==0) //有乘客并等客標(biāo)志位為0</p><p>&
41、lt;b> {</b></p><p> Total_run++; //總里程加1</p><p> if(Total_run>999)</p><p> Total_run=0; //超過(guò)最大范圍清零</p><p> if(Total_run>30) //判斷是否超過(guò)3公里</p
42、><p><b> {</b></p><p> count++; //每觸發(fā)一次外中斷,計(jì)數(shù)變量累加1</p><p> if(count==5) //0.5公里到</p><p><b> {</b></p><p> Total_price=Total_
43、price+Unit_price; //總金額加上單價(jià)</p><p><b> count=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> 5.3等待計(jì)費(fèi)程序模塊設(shè)計(jì)</p><p>
44、; 等待程序模塊源代碼如下:</p><p> void timer0() interrupt 1</p><p> // 定時(shí)器0中斷服務(wù)程序, 用于數(shù)碼管的動(dòng)態(tài)掃描</p><p> // dis_index --- 顯示索引, 用于標(biāo)識(shí)當(dāng)前顯示的數(shù)碼管和緩沖區(qū)的偏移量</p><p> // dis_digit --- 位選通
45、值, 傳送到P2口用于選通當(dāng)前數(shù)碼管的數(shù)值, 如等于0xfe時(shí),</p><p> //選通P2.0口數(shù)碼管</p><p> // dis_buf --- 顯于緩沖區(qū)基地址</p><p><b> {</b></p><p> TH0 = 0xFC;</p><p>
46、TL0 = 0x17;</p><p> P2 = 0xff;// 先關(guān)閉所有數(shù)碼管</p><p> P0 = dis_buf[dis_index];// 顯示代碼傳送到P0口</p><p> P2 = dis_digit;// </p><p> dis_digit = _crol_(dis_di
47、git,1);// 位選通值左移, 下次中斷時(shí)選通下一位數(shù)碼管</p><p> dis_index++;// </p><p> dis_index &= 0x07;// 8個(gè)數(shù)碼管全部掃描完一遍之后,再回到第一個(gè)開(kāi)始下一次掃描</p><p><b> } </b></p><p&
48、gt; void timer1() interrupt 3</p><p><b> {</b></p><p> TH1 = 0xdc; //定時(shí)器裝初值</p><p> if(Guesttime_sign==1&&Waittime_sign==1)</p><p><b&g
49、t; {</b></p><p><b> sec100++;</b></p><p> if(sec100 >= 100)</p><p><b> {</b></p><p> sec100 = 0;</p><p> inc_sec();&
50、lt;/p><p><b> }</b></p><p> Wait_consume=Wait_time_min; </p><p> dis_buf[0] = dis_code[Wait_consume/ 10];</p><p> dis_buf[1] = dis_code[Wait_c
51、onsume% 10]; //等待消費(fèi)金額</p><p><b> }</b></p><p> if(Guesttime_sign==0&&(Set_times==1||Set_times==2))</p><p><b> {</b></p><p> glimp
52、se_sign++;</p><p> if(glimpse_sign >= 30)</p><p><b> {</b></p><p> glimpse_sign=0;</p><p> proc_glimpse();</p><p><b> }</b>
53、</p><p><b> }</b></p><p><b> }</b></p><p><b> 6.系統(tǒng)的模擬測(cè)試</b></p><p> 第一步:模擬過(guò)程使用雙頭USB連接線,有筆記本供給系統(tǒng)穩(wěn)定的直流5V電源;</p><p>
54、第二步:置Start_k1(P1^0口)計(jì)費(fèi)關(guān)閉,按下Setting_k5 ( P1^4口)單價(jià)設(shè)置鍵,然后按下Add_k3 (P1^2口)單價(jià)調(diào)整鍵,設(shè)置好價(jià)格;</p><p> 第三步:假設(shè)有乘客上車,置Start_k1(P1^0口)計(jì)費(fèi)開(kāi)啟,傳感器模塊每接觸磁條一次向單片機(jī)發(fā)出一次中斷信號(hào)(即輪胎每周行駛距離,假定為 X Km)</p><p> 第四步:按下Wait_time
55、_k4 (P1^3口)停車等候計(jì)費(fèi)鍵,系統(tǒng)開(kāi)始計(jì)算停車N分鐘等待時(shí)間消費(fèi)。</p><p><b> 參考文獻(xiàn):</b></p><p> [1]霍爾傳感器A44E 在車輪測(cè)速中的應(yīng)用研究 楊繼生 劉芬編 電子測(cè)量技術(shù).2009.10</p><p> [2] MCS-51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì) 何立民 [M].北京航空航天大學(xué)出版社.
56、1988</p><p> [3]萬(wàn)頻.串行E2PROM與87C51單片機(jī)接口技術(shù)的實(shí)現(xiàn)[J].微小型機(jī)開(kāi)發(fā)與應(yīng)用.1998.1</p><p> [4]《電子技術(shù)基礎(chǔ)》模擬部分 康華光 高等教育出版社</p><p> [5] 《單片微機(jī)實(shí)題集與實(shí)驗(yàn)指導(dǎo)書(shū)》丁元杰、吳大偉.機(jī)械工業(yè)出版社.2004.</p><p> [6]、《
57、單片機(jī)典型外圍器件及應(yīng)用實(shí)例》 求是科技 人民郵電出版社</p><p> 附錄A硬件電路實(shí)物圖</p><p><b> 附錄B 程序清單</b></p><p> #include <reg51.h></p><p> #include <intrins.h></p>
58、<p> unsigned char data dis_digit;</p><p> unsigned char key_s, key_v;</p><p> unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0,// 0, 1, 2, 3</p><p> 0x99,0x92,0x82,0
59、xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off </p><p> unsigned char data dis_buf[8];</p><p> unsigned char data dis_index;</p><p> unsigned char Set_times,Total_price,Total_run,
60、Unit_price,Wait_time_min,Wait_time_sec,Wait_consume,Daytime_price,Nighttime_price;</p><p> //設(shè)置次數(shù)標(biāo)志,總價(jià)格,總里程,單價(jià),等待時(shí)間,等待消費(fèi),白天單價(jià),晚上單價(jià)</p><p> unsigned char sec100; </p><p> unsigned
61、 char glimpse_sign;</p><p> unsigned char LED_glimpse_day;</p><p> unsigned char LED_glimpse_night;</p><p> unsigned char count;</p><p> unsigned char Total;</p&
62、gt;<p> unsigned char i,j;</p><p> sbitStart_k1 = P1^0;</p><p> sbitDaytime_k2 = P1^1;</p><p> sbitAdd_k3 = P1^2;</p><p> sbitWait_time_k4 = P1^3;</p
63、><p> sbitSetting_k5 = P1^4;</p><p> sbit LED = P1^5;</p><p> #defineOP_READ0xa1// 器件地址以及讀取操作</p><p> #defineOP_WRITE 0xa0// 器件地址以及寫(xiě)入操作</p><p>
64、 #defineMAX_ADDR 0x7f// AT24C02最大地址</p><p> sbit SDA = P1^7;</p><p> sbit SCL = P1^6;</p><p> void start();</p><p> void stop();</p><p> unsigned
65、char shin();</p><p> bit shout(unsigned char write_data);</p><p> unsigned char read_random(unsigned char random_addr);</p><p> void write_byte( unsigned char addr, unsigned char
66、 write_data);</p><p> void fill_byte(unsigned char fill_data);</p><p> bit Guesttime_sign,Waittime_sign;</p><p> unsigned char scan_key();</p><p> void proc_glimpse
67、();</p><p> void proc_key();</p><p> void inc_sec();</p><p> void inc_min();</p><p> void inc_hour();</p><p> void display();</p><p> vo
68、id delayms(unsigned char ms);</p><p> void main(void)</p><p><b> {</b></p><p> P0 = 0xff;</p><p> P2 = 0xff;</p><p><b> SDA = 1;<
69、/b></p><p><b> SCL = 1;</b></p><p> TMOD = 0x11;// 定時(shí)器0, 1工作模式1, 16位定時(shí)方式</p><p> TH1 = 0xdc;</p><p><b> TL1 = 0;</b></p><p&g
70、t; TH0 = 0xFC;</p><p> TL0 = 0x17;</p><p> Total_price = 00;</p><p> Total_run = 000;</p><p> Wait_time_min =00 ;</p><p> Wait_time_sec =00 ;</p&g
71、t;<p> Wait_consume = 00 ;</p><p> Daytime_price=read_random(0); //讀取白天價(jià)格</p><p> Nighttime_price=read_random(1); //讀取晚上價(jià)格</p><p> Waittime_sign=0;</p><p
72、> Set_times=0;</p><p> Guesttime_sign=0;</p><p> glimpse_sign=0;</p><p> LED_glimpse_day=0;</p><p> LED_glimpse_night=0;</p><p><b> count=0;
73、</b></p><p><b> j=0;</b></p><p> sec100 = 0;</p><p> if(Daytime_k2==0) //判斷白天</p><p><b> {</b></p><p> Unit_price=
74、Daytime_price;</p><p><b> }</b></p><p> if(Daytime_k2==1) //判斷晚上</p><p><b> {</b></p><p> Unit_price=Nighttime_price;</p>&l
75、t;p><b> }</b></p><p> dis_buf[0] = dis_code[Total_price/ 10];</p><p> dis_buf[1] = dis_code[Total_price % 10];</p><p> dis_buf[2] = 0xff;</p><p> d
76、is_buf[3] = dis_code[Total_run/ 100];</p><p> dis_buf[4] = dis_code[(Total_run % 100)/10]& 0x7f;</p><p> dis_buf[5] = dis_code[(Total_run % 100)%10];</p><p> dis_buf[6] =
77、0xff;</p><p> dis_buf[7] = dis_code[Unit_price];</p><p> dis_digit = 0xfe;</p><p> dis_index = 0;</p><p> TCON = 0x01;</p><p> IE = 0x8b;
78、// 使能timer0,1 中斷</p><p><b> IT0=1;</b></p><p><b> TR0 = 1;</b></p><p><b> TR1 = 0;</b></p><p> key_v = 0x07;</p><p
79、><b> while(1)</b></p><p><b> {</b></p><p> if(Guesttime_sign!=1&&Set_times==0)</p><p><b> {</b></p><p> if(Daytime
80、_k2==0)</p><p><b> {</b></p><p> Unit_price=Daytime_price;</p><p><b> }</b></p><p> if(Daytime_k2==1)</p><p><b> {</b
81、></p><p> Unit_price=Nighttime_price;</p><p><b> }</b></p><p> dis_buf[7] = dis_code[Unit_price];</p><p><b> }</b></p><p>
82、 if(Start_k1==0)</p><p><b> {</b></p><p> if(Guesttime_sign==0&&Set_times==0)</p><p><b> {</b></p><p> Total_price=10;</p>&l
83、t;p> Guesttime_sign=1;</p><p><b> LED=0;</b></p><p> dis_buf[0] = dis_code[Total_price/ 10];</p><p><b> }</b></p><p><b> }</b&g
84、t;</p><p> if(Start_k1==1)</p><p><b> {</b></p><p> if(Guesttime_sign==1)</p><p><b> {</b></p><p><b> TR1=0;</b>&l
85、t;/p><p> Total=Total_price+Wait_consume;</p><p> dis_buf[0] = dis_code[Total/ 10];</p><p> dis_buf[1] = dis_code[Total % 10];</p><p> dis_buf[2] = 0xff;</p>&
86、lt;p> dis_buf[3] = dis_code[Total_run/ 100];</p><p> dis_buf[4] = dis_code[(Total_run % 100)/10]& 0x7f;</p><p> dis_buf[5] = dis_code[(Total_run % 100)%10];</p><p> di
87、s_buf[6] = 0xff;</p><p> dis_buf[7] = dis_code[Unit_price];</p><p> for(i=0;i<250;i++)</p><p><b> {</b></p><p> delayms(50000);</p><
88、p><b> j++;</b></p><p><b> if(j==5)</b></p><p><b> {</b></p><p><b> LED=~LED;</b></p><p><b> j=0;</b>
89、</p><p><b> }</b></p><p><b> }</b></p><p><b> LED=1;</b></p><p> Total_price=0;</p><p> Total_run=0;</p>&l
90、t;p> Waittime_sign=0;</p><p> Guesttime_sign=0;</p><p> Wait_time_min =00 ;</p><p> Wait_time_sec =00 ;</p><p> Wait_consume = 00 ;</p><p> dis_bu
91、f[0] = dis_code[Total_price/ 10];</p><p> dis_buf[1] = dis_code[Total_price % 10];</p><p> dis_buf[2] = 0xff;</p><p> dis_buf[3] = dis_code[Total_run/ 100];</p><p&g
92、t; dis_buf[4] = dis_code[(Total_run % 100)/10]& 0x7f;</p><p> dis_buf[5] = dis_code[(Total_run % 100)%10];</p><p> dis_buf[6] = 0xff;</p><p> dis_buf[7] = dis_code[U
93、nit_price];</p><p><b> }</b></p><p><b> }</b></p><p> key_s=scan_key();</p><p> if(key_s != key_v)</p><p><b> {</b>
94、;</p><p> delayms(10);</p><p> if(key_s != key_v)</p><p><b> {</b></p><p> key_v = key_s;</p><p> proc_key();</p><p><b>
95、; }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> unsigned char scan_key()</p><p><b>
96、 {</b></p><p> key_s = 0x00;</p><p> key_s |= Add_k3;</p><p> key_s <<= 1;</p><p> key_s |= Wait_time_k4;</p><p> key_s <<= 1;</
97、p><p> key_s |=Setting_k5;</p><p> return key_s ;</p><p><b> }</b></p><p> void proc_key()</p><p><b> {</b></p><p>
98、 if((key_v & 0x02) == 0)// K4</p><p><b> {</b></p><p> if(Guesttime_sign==1) //判斷有沒(méi)有乘客</p><p><b> {</b></p><p> Waittime_sign=~Wait
99、time_sign;//等客標(biāo)志位取反</p><p> if(Waittime_sign==1)</p><p><b> {</b></p><p> dis_buf[0] = dis_code[Wait_consume/ 10];</p><p> dis_buf[1] = dis_code[Wait_
100、consume% 10]; //等待消費(fèi)金額</p><p> dis_buf[2] = 0xff;</p><p> dis_buf[3] = dis_code[Wait_time_min/10];</p><p> dis_buf[4] = dis_code[Wait_time_min%10];</p><p> dis_
101、buf[5] = 0xbf;</p><p> dis_buf[6] = dis_code[Wait_time_sec/10];</p><p> dis_buf[7] = dis_code[Wait_time_sec%10]; //等客時(shí)間</p><p> TR1=1; //開(kāi)啟定時(shí)器1</p><p&g
102、t;<b> }</b></p><p> if(Waittime_sign==0)</p><p><b> {</b></p><p> dis_buf[0] = dis_code[Total_price/ 10];</p><p> dis_buf[1] = dis_code[To
103、tal_price % 10]; //總金額</p><p> dis_buf[2] = 0xff;</p><p> dis_buf[3] = dis_code[Total_run/ 100];</p><p> dis_buf[4] = dis_code[(Total_run % 100)/10]& 0x7f;</p><
104、p> dis_buf[5] = dis_code[(Total_run % 100)%10]; //總里程</p><p> dis_buf[6] = 0xff;</p><p> dis_buf[7] = dis_code[Unit_price]; //單價(jià)</p><p> TR1=0;//關(guān)閉定時(shí)器1</p&g
105、t;<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if((key_v & 0x04) == 0)// K3</p><p><b> {</b>
106、</p><p> if(Guesttime_sign==0) //判斷有沒(méi)有顧客</p><p><b> {</b></p><p> Set_times++; //調(diào)價(jià)計(jì)數(shù)器加1</p><p> if(Set_times==1||Set_times==2)</p><p&
107、gt; TR1=1; //開(kāi)啟定時(shí)器1</p><p> if(Set_times==3)</p><p><b> {</b></p><p> if(Daytime_k2==0) //判斷白天</p><p><b> {</b></p><p&g
108、t; Unit_price=Daytime_price; //白天,存白天單價(jià)</p><p><b> }</b></p><p> if(Daytime_k2==1) //判斷夜晚</p><p><b> {</b></p><p> Unit_price=Nighttim
109、e_price;//夜晚,存夜晚單價(jià)</p><p><b> }</b></p><p> dis_buf[0] = dis_code[Total_price/ 10];</p><p> dis_buf[1] = dis_code[Total_price % 10];//總金額</p><p> di
110、s_buf[2] = 0xff;</p><p> dis_buf[3] = dis_code[Total_run/ 100];</p><p> dis_buf[4] = dis_code[(Total_run % 100)/10]& 0x7f;</p><p> dis_buf[5] = dis_code[(Total_run % 100)%
111、10];//總里程</p><p> dis_buf[6] = 0xff;</p><p> dis_buf[7] = dis_code[Unit_price]; //單價(jià)</p><p> TR1=0; //關(guān)閉定時(shí)器1</p><p> write_byte(0, Daytime_price)
112、; //存儲(chǔ)白天單價(jià)</p><p> write_byte(1,Nighttime_price); //存儲(chǔ)晚上單價(jià)</p><p> Set_times=0; //退出調(diào)節(jié)狀態(tài)</p><p><b> }</b></p><p><b> }</b></p
113、><p><b> }</b></p><p> if((key_v & 0x01) == 0)// K5</p><p><b> {</b></p><p> if(Set_times==1)</p><p><b> {</b>&l
114、t;/p><p> Daytime_price++;//白天單價(jià)加1</p><p> if(Daytime_price>9)</p><p> Daytime_price=0;//單價(jià)超過(guò)范圍,清零</p><p> dis_buf[3] = dis_code[Daytime_price];//調(diào)整白天單價(jià)</p&
115、gt;<p><b> }</b></p><p> if(Set_times==2)</p><p><b> {</b></p><p> Nighttime_price++; //晚上單價(jià)加1</p><p> if(Nighttime_price>9)
116、 //單價(jià)超過(guò)范圍,清零</p><p> Nighttime_price=0;</p><p> dis_buf[7] = dis_code[Nighttime_price]; //調(diào)整晚上天單價(jià)</p><p><b> }</b></p><p><b> }</b></p
117、><p><b> }</b></p><p> void timer0() interrupt 1</p><p> // 定時(shí)器0中斷服務(wù)程序, 用于數(shù)碼管的動(dòng)態(tài)掃描</p><p> // dis_index --- 顯示索引, 用于標(biāo)識(shí)當(dāng)前顯示的數(shù)碼管和緩沖區(qū)的偏移量</p><p>
118、 // dis_digit --- 位選通值, 傳送到P2口用于選通當(dāng)前數(shù)碼管的數(shù)值, 如等于0xfe時(shí),</p><p> //選通P2.0口數(shù)碼管</p><p> // dis_buf --- 顯于緩沖區(qū)基地址</p><p><b> {</b></p><p> TH0 = 0xFC;&
119、lt;/p><p> TL0 = 0x17;</p><p> P2 = 0xff;// 先關(guān)閉所有數(shù)碼管</p><p> P0 = dis_buf[dis_index];// 顯示代碼傳送到P0口</p><p> P2 = dis_digit;// </p><p> dis
120、_digit = _crol_(dis_digit,1);// 位選通值左移, 下次中斷時(shí)選通下一位數(shù)碼管</p><p> dis_index++;// </p><p> dis_index &= 0x07;// 8個(gè)數(shù)碼管全部掃描完一遍之后,再回到第一個(gè)開(kāi)始下一次掃描</p><p><b> } </b
121、></p><p> void timer1() interrupt 3</p><p><b> {</b></p><p> TH1 = 0xdc; //定時(shí)器裝初值</p><p> if(Guesttime_sign==1&&Waittime_sign==1)</p
122、><p><b> {</b></p><p><b> sec100++;</b></p><p> if(sec100 >= 100)</p><p><b> {</b></p><p> sec100 = 0;</p>
123、<p> inc_sec();</p><p><b> }</b></p><p> Wait_consume=Wait_time_min; </p><p> dis_buf[0] = dis_code[Wait_consume/ 10];</p><p> dis_bu
124、f[1] = dis_code[Wait_consume% 10]; //等待消費(fèi)金額</p><p><b> }</b></p><p> if(Guesttime_sign==0&&(Set_times==1||Set_times==2))</p><p><b> {</b></p
125、><p> glimpse_sign++;</p><p> if(glimpse_sign >= 30)</p><p><b> {</b></p><p> glimpse_sign=0;</p><p> proc_glimpse();</p><p>
126、<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void inc_sec()</p><p><b> {</b></p><p> Wait_time
127、_sec++;</p><p> if(Wait_time_sec > 59)</p><p><b> {</b></p><p> Wait_time_sec = 0;</p><p> inc_min();</p><p><b> }</b></
128、p><p> dis_buf[6] = dis_code[Wait_time_sec/10];</p><p> dis_buf[7] = dis_code[Wait_time_sec%10];</p><p><b> }</b></p><p> void inc_min()</p>&
129、lt;p><b> {</b></p><p> Wait_time_min++;</p><p> if(Wait_time_min > 59)</p><p><b> {</b></p><p> Wait_time_min = 0;</p><p&g
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 出租車計(jì)費(fèi)系統(tǒng)的設(shè)計(jì)【畢業(yè)論文】
- 出租車計(jì)費(fèi)系統(tǒng)的設(shè)計(jì)畢業(yè)論文定
- 出租車計(jì)費(fèi)器設(shè)計(jì)畢業(yè)論文
- 出租車自動(dòng)計(jì)費(fèi)eda設(shè)計(jì)畢業(yè)論文
- 出租車計(jì)費(fèi)系統(tǒng)畢業(yè)設(shè)計(jì)
- 基于單片機(jī)出租車計(jì)費(fèi)系統(tǒng)畢業(yè)論文
- 出租車計(jì)費(fèi)系統(tǒng)設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 出租車計(jì)費(fèi)系統(tǒng)的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)----出租車計(jì)費(fèi)系統(tǒng)的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)----出租車計(jì)費(fèi)系統(tǒng)的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)論文基于fpga的出租車計(jì)費(fèi)系統(tǒng)設(shè)計(jì)
- 出租車計(jì)費(fèi)設(shè)計(jì).doc
- 出租車計(jì)費(fèi)設(shè)計(jì).doc
- 單片機(jī)出租車計(jì)費(fèi)器畢業(yè)論文
- 2017畢業(yè)論文-基于fpga的出租車計(jì)費(fèi)器系統(tǒng)的設(shè)計(jì)
- 基于fpga的出租車計(jì)費(fèi)器的設(shè)計(jì)畢業(yè)論文
- 畢業(yè)論文——出租車管理系統(tǒng)
- 出租車管理系統(tǒng)畢業(yè)論文
- 畢業(yè)論文——出租車管理系統(tǒng)
- 出租車管理系統(tǒng)畢業(yè)論文
評(píng)論
0/150
提交評(píng)論