畢業(yè)設(shè)計(jì)(論文)基于51單片機(jī)的計(jì)程車計(jì)價器_第1頁
畢業(yè)設(shè)計(jì)(論文)基于51單片機(jī)的計(jì)程車計(jì)價器_第2頁
畢業(yè)設(shè)計(jì)(論文)基于51單片機(jī)的計(jì)程車計(jì)價器_第3頁
畢業(yè)設(shè)計(jì)(論文)基于51單片機(jī)的計(jì)程車計(jì)價器_第4頁
畢業(yè)設(shè)計(jì)(論文)基于51單片機(jī)的計(jì)程車計(jì)價器_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1.緒論1.1課題背景及意義隨著出租車行業(yè)的發(fā)展,出租車已經(jīng)是城市交通的重要組成部分,從加強(qiáng)行業(yè)管理以及減少司機(jī)與乘客的糾紛出發(fā),具有良好性能的計(jì)價器對出租車司機(jī)和乘客來說都是很必要的。我們知道,只要乘坐的出租車啟動,隨著行駛里程的增加,就會看到司機(jī)旁邊的計(jì)價器里程數(shù)字顯示的讀數(shù)從零逐漸增大,而當(dāng)行駛到某一值時(如2km)計(jì)費(fèi)數(shù)字顯示開始從起步價(如4元)增加。當(dāng)乘客到站時,按下停止按鍵,計(jì)費(fèi)數(shù)字顯示總里程和總金額,它可以很直觀的反映用戶使用情況。出租車是城市交通的重要組成部分,行業(yè)健康和發(fā)展也獲得越來越多的關(guān)注。汽車計(jì)價器是乘客與司機(jī)雙方的交易準(zhǔn)則,它是出租車行業(yè)發(fā)展的重要標(biāo)志,是出租車中最

2、重要的工具。它關(guān)系著交易雙方的利益。具有良好性能的計(jì)價器無論是對廣大出租車司機(jī)朋友還是乘客來說都是很必要的,因此,汽車計(jì)價器的研究也是十分有一個應(yīng)用價值的。通過本次設(shè)計(jì),可以增進(jìn)對單片機(jī)的感性認(rèn)識,加深對其理論方面的理解,掌握單片機(jī)的內(nèi)部功能模塊的應(yīng)用,了解掌握單片機(jī)的軟硬件設(shè)計(jì)過程、方法及實(shí)現(xiàn)。1.2 計(jì)價器的現(xiàn)狀出租車計(jì)價器是出租車營運(yùn)收費(fèi)的專用智能儀表,目前市面所使用的計(jì)價器大都功能較少。隨著人們生活水平的不斷提高,出租車的使用頻率也越來越高,出租車行業(yè)也以高質(zhì)量的服務(wù)給人們帶來了出行的享受。但是由于行業(yè)的特殊性,出租車行業(yè)總存在著買糾紛,困擾著行業(yè)的發(fā)展。給服務(wù)質(zhì)量及管理帶來一定影響。

3、隨著電子技術(shù)的發(fā)展,出租車計(jì)價器技術(shù)也在不斷進(jìn)步和提高。國內(nèi)出租車計(jì)價器已經(jīng)經(jīng)歷了4個階段的發(fā)展。從傳統(tǒng)的全部由機(jī)械元器件組成的機(jī)械式到半電子式,即用電子線路代替部分機(jī)械元器件的出租車計(jì)價器。而功能齊全的計(jì)價器大都采用雙cpu結(jié)構(gòu),這就提高了計(jì)價器的生產(chǎn)成本。在考慮成本和使用的基礎(chǔ)上,本設(shè)計(jì)介紹了一種以at89c51單片機(jī)為核心的,具有計(jì)時、計(jì)價、性能可靠、電路簡單、成本低等特點(diǎn)的多功能出租車計(jì)價器,能夠很好的滿足市場對出租車計(jì)價器的要求。本設(shè)計(jì)的目的就是通過對現(xiàn)有計(jì)價器的分析,解決計(jì)價器的問題,同時完成具有單價輸出、單價調(diào)整、速度調(diào)整,路程輸出等功能的新型計(jì)價器的硬件和軟件設(shè)計(jì)。2 出租車計(jì)

4、價系統(tǒng)的設(shè)計(jì)要求與設(shè)計(jì)方案2.1 出租車計(jì)價器概述計(jì)價器顯示的營運(yùn)金額是營運(yùn)里程與價格。出租車計(jì)價器通過傳感器與行駛車輛連接,但在此次課程設(shè)計(jì)中,因沒有傳感器,用頻率發(fā)生器替代,由此通過記一秒的脈沖數(shù)算得速度從而得到里程。該課程設(shè)計(jì)的出租車計(jì)價器功能主要有具有數(shù)據(jù)的復(fù)位功能、數(shù)據(jù)輸出功能、計(jì)價功能等。2.2 系統(tǒng)主要功能本課程設(shè)計(jì)所設(shè)計(jì)的出租車計(jì)價器的主要功能有:數(shù)據(jù)的復(fù)位、數(shù)據(jù)輸出、里程輸出及顯示,通過起步價和每公里單價進(jìn)行計(jì)價以及當(dāng)車速低于限定值或停車時按等待時間計(jì)時,當(dāng)?shù)却龝r間累計(jì)超過一定時間后按時間計(jì)費(fèi)等功能。其中,顯示輸出采用8段數(shù)碼顯示管。2.3 方案論證與比較方案一:采用數(shù)字電路

5、控制采用傳感器件,輸出脈沖信號,經(jīng)過放大整形作為移位寄存器的脈沖,實(shí)現(xiàn)計(jì)價,但是考慮到這種電路過于簡單,性能不夠穩(wěn)定,而且不能調(diào)節(jié)單價,也不能根據(jù)天氣調(diào)節(jié)計(jì)費(fèi)標(biāo)準(zhǔn),電路不夠?qū)嵱谩7桨付翰捎脝纹瑱C(jī)控制利用單片機(jī)豐富的i/o端口,及其控制的靈活性,實(shí)現(xiàn)基本的里程計(jì)價功能和價格調(diào)節(jié)、時鐘顯示功能。通過比較以上兩種方案,單片機(jī)方案有較大的活動空間,不但能實(shí)現(xiàn)所要求的功能,而且能在很大的程度上擴(kuò)展功能,而且還可以方便的對系統(tǒng)進(jìn)行升級,所以采用后一種方案更好些。3 系統(tǒng)硬件設(shè)計(jì)3.1 設(shè)計(jì)方案與硬件說明采用單片機(jī)進(jìn)行的設(shè)計(jì),相對來說功能強(qiáng)大,用較少的硬件和適當(dāng)?shù)能浖嗷ヅ浜峡梢院苋菀椎貙?shí)現(xiàn)設(shè)計(jì)要求,且靈

6、活性強(qiáng),可以通過軟件編程來完成更多的附加功能。設(shè)計(jì)采用at89c51單片機(jī)為主控器,以a44e霍爾傳感器測距(頻率發(fā)生器替代),實(shí)現(xiàn)對出租車的基本的計(jì)價設(shè)計(jì),并采用主電源和備用電源相互結(jié)合來實(shí)現(xiàn)在系統(tǒng)掉電的時候保存單價等信息,輸出采用8段數(shù)碼顯示管。利用單片機(jī)豐富的i/o端口,及其控制的靈活性,實(shí)現(xiàn)基本的計(jì)價功能。其系統(tǒng)結(jié)構(gòu)圖如圖3.1所示:按鍵控制 89c51單片機(jī)復(fù)位電路掉電保護(hù)時鐘電路顯示模塊顯示總里程、金額和速度圖3.1 系統(tǒng)結(jié)構(gòu)圖本電路設(shè)計(jì)的計(jì)價器能實(shí)現(xiàn)基本的計(jì)價功能。at89c51作為一個單片微型計(jì)算系統(tǒng),靈活性高,其強(qiáng)大的控制處理功能和可擴(kuò)展功能設(shè)計(jì)電路提供了很好的選擇。3.2

7、硬件設(shè)計(jì)說明單片機(jī)是單片微型計(jì)算機(jī)的簡稱,單片機(jī)以其卓越的性能,得到廣泛的應(yīng)用,已經(jīng)深入到各個領(lǐng)域。在這次設(shè)計(jì)中,我們用到p0口和p2口,p0口為8位三態(tài)i/o口,此口為地址總線及數(shù)據(jù)總線分時復(fù)用;p2口為8位準(zhǔn)雙向口,與地址總線高八位復(fù)用;p0口和p2口都有一定的驅(qū)動能力,p0口的驅(qū)動能力較強(qiáng)。 設(shè)計(jì)中,考慮到顯示電路的負(fù)載不大,本設(shè)計(jì)直接采用單片機(jī)i/o口驅(qū)動顯示電路。設(shè)計(jì)電路時,考慮到用里程(霍爾)傳感器價格昂貴,且不便于試驗(yàn)檢測,在設(shè)計(jì)中采用一個波形發(fā)生器來代替。模擬開關(guān)一端接在p3.4口,另一端接地,通過來回高低電平的變化,可以測得速度。通過在程序中設(shè)置的里程和金額的信息,在加上顯示

8、電路的設(shè)計(jì),就可以在數(shù)碼管上分別顯示總金額和總里程。在顯示方面,可以用液晶顯示,也可以用數(shù)碼管進(jìn)行顯示。由于在這次設(shè)計(jì)中只需要顯示里程和金額信息,我們采用數(shù)碼管進(jìn)行顯示。這樣既節(jié)約了成本,又可以達(dá)到顯示的目的。同時為了減少硬件的復(fù)雜度,我們采用了動態(tài)顯示方式,選用了共陰極數(shù)碼管。為了焊接方便,我們選用了集成在一起的數(shù)碼管。我們還設(shè)計(jì)了控制按鍵,能夠很好的對出租車計(jì)價器控制,如啟動/停止按鍵,清零按鍵等。at89c51單片機(jī)簡介:at89c51是美國atmel公司生產(chǎn)的低功耗,高性能cmos 8位單片機(jī),片內(nèi)含4kb的可系統(tǒng)編程的flash只讀程序存儲器,器件采用atmel公司的高密度、非易失性

9、存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)8051指令系統(tǒng)及引腳。它集flash程序存儲器既可在線編程(isp)也可用傳統(tǒng)方法進(jìn)行編程及通用 8位微處理器于單片芯片中,具有高性價比,其引腳配置如圖3.2所示。圖3.2 at89c51引腳配置at89c51芯片的40個引腳功能為:vcc 電源電壓。gnd 接地。rst 復(fù)位輸入。當(dāng)rst變?yōu)楦唠娖讲⒈3?個機(jī)器周期時,將使單片機(jī)復(fù)位。wdt溢出將使該引腳輸出高電平,設(shè)置sfr auxr的disrto位(地址8eh)可打開或關(guān)閉該功能。diskrto位缺省為reset輸出高電平打開狀態(tài)。xtal1 反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。xtal2 來自反向振蕩

10、放大器的輸出。p0口 一組8位漏極開路型雙向i/o口。也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能驅(qū)動8個ttl邏輯門電路,對端口寫“1”可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻。在flash編程時,p0口接收指令字節(jié),而在程序校驗(yàn)時,輸出指令字節(jié),校驗(yàn)時,要求外接上拉電阻。p1口 一個帶內(nèi)部上拉電阻的8位雙向i/o口,p1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個ttl邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因?yàn)閮?nèi)部存在上拉電阻,某個引腳被外部信

11、號拉低時會輸出一個電流(iil)。flash編程和程序校驗(yàn)期間,p1接收低8位地址。p1口部分端口引腳及功能如表3.1所示。表3.1 p1口特殊功能p1口引腳特殊功能p1.5mosi(用于isp編程)p1.6mosi(用于isp編程)p1.7sck(用于isp編程)p2口 一個帶內(nèi)部上拉電阻的8位雙向i/o口。p1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個ttl邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因?yàn)閮?nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(iil)。在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器時,p2口送出高8位地

12、址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲器時,p2口線上的內(nèi)容在整個訪問期間不改變。flash編程和程序校驗(yàn)期間,p2亦接收低8位地址。p3口 一個帶內(nèi)部上拉電阻的8位雙向i/o口。p3的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個ttl邏輯門電路。對p3口寫“1”時,它們被內(nèi)部的上拉電阻把拉到高電并可作輸入端口。作輸入端口使用時,被外部拉低的p3口將用上拉電阻輸出電流(iil)。p3口除了作為一般的i/o口線外,更重要的用途是它的第二功能,如表3.2所示。p3口還接收一些用于flash閃速存儲器編程和程序校驗(yàn)期間的控制信號。ale/prog:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位

13、字節(jié)。在flash編程期間,此引腳用于輸入編程脈沖。在平時,ale端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于/psen:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機(jī)器周期兩次/psen有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/psen信號將不出現(xiàn)。表3.2 p3口特殊功能p3口引腳特殊功能p3.0rxd(串行輸入口)p3.1txd(串行輸出口)p3.2(外部中斷0)p3.3(外部中斷1)p3.4t0(定時器0外部輸入)p3.5t1(定時器1外部輸入)p3.6(外部數(shù)據(jù)存儲器寫選通)p3.7(外部數(shù)據(jù)存儲器讀選通)硬件系統(tǒng)

14、設(shè)計(jì)說明: 按下計(jì)價按鍵時,顯示起步價和起步里程范圍,這些在程序中設(shè)置;當(dāng)?shù)扔诨虺^兩公里后,按計(jì)算總價的公式為:總價=起步價+單價*(總里程-起步里程)+1進(jìn)行計(jì)價。本設(shè)計(jì)中,起步價為4元,起步里程為2公里,當(dāng)然這些數(shù)據(jù)可以在程序中改寫,以滿足不同時期價格調(diào)整的需要。 3.3硬件電路組成硬件組成主要包括:顯示電路、復(fù)位電路、掉電保護(hù)電路、時鐘電路、按鍵電路和測速電路。本設(shè)計(jì)以 89s52 單片機(jī)為中心,利用波形發(fā)生器模擬代替霍爾傳感器測距,實(shí)現(xiàn)對出租車計(jì)價統(tǒng)計(jì),輸出采用兩個4位共陰7段數(shù)碼管。本電路設(shè)計(jì)的計(jì)價器不但能實(shí)現(xiàn)基本的計(jì)價。通過單片機(jī)上的鍵盤上的按鍵來執(zhí)行開始、暫停、復(fù)位等功能。步驟

15、如下:首先,程序開始做一些必要的初始化工作,等待鍵盤輸入。然后,啟動鍵s1按下后單片機(jī)開始計(jì)數(shù)傳感器傳來的計(jì)數(shù)脈沖,顯示電路顯示路程和總費(fèi)用。最后,當(dāng)需要停止是可松開鍵s1對路程計(jì)數(shù)器進(jìn)行停止。而且松開s1之后可以按下s2對顯示電路進(jìn)行清零,清零功能與復(fù)位功能的區(qū)別就是清零功能不會使單片機(jī)重新啟動,會節(jié)約時間,并且當(dāng)復(fù)位電路出現(xiàn)故障時,單片機(jī)依然能夠正確重置。其整體電路圖3.3所示:圖3.3 計(jì)價器整體電路圖3.3.1 顯示電路多數(shù)的應(yīng)用系統(tǒng)都要配輸入和輸出,外設(shè)led顯示器和lcd顯示器,現(xiàn)在lcd已經(jīng)成為了一種發(fā)展趨勢,但為了節(jié)約成本,我們選用了led顯示器,見圖3.5。圖3.5 集成數(shù)碼

16、管在顯示方面,我們選用了動態(tài)顯示。使用動態(tài)顯示,通過對數(shù)碼管不斷地快速掃描,使數(shù)碼管看起來一直在閃爍。通過程序進(jìn)行選段與選位。p2口為選位,p0口為選段,通過三個數(shù)組zxscode8,xscode8 與codetab協(xié)同作用,實(shí)現(xiàn)了對數(shù)碼管的動態(tài)顯示。靜態(tài)顯示雖然亮度較高,接口編程容易,但是每位的段碼線分別與一個8位的鎖存器輸出相連。占用的i/o口線比較多,在顯示位數(shù)較多的情況下,一般都采用動態(tài)顯示方式。利用動態(tài)顯示的方法,由于led顯示器的余輝和人眼的視覺暫留現(xiàn)象,只要每位顯示的時間間隔足夠短,就仍能感覺到所有的數(shù)碼管都在顯示。為了簡化硬件,通常將所有位的段碼線相應(yīng)段并聯(lián)在一起,由一個8位i

17、/o口控制,在同一時刻,只讓一位選通,如此循環(huán),就可以使各位顯示出將要顯示的字符。led數(shù)碼有共陽和共陰兩種,把這些led發(fā)光二極管的正極接到一塊(一般是拼成一個8字加一個小數(shù)點(diǎn))而作為一個引腳,就叫共陽的,相反的,就叫共陰的,那么應(yīng)用時這個腳就分別的接vcc和gnd。再把多個這樣的8字裝在一起就成了多位的數(shù)碼管了。在本設(shè)計(jì)仿真中使用的是4個兩組組的共陰8段數(shù)碼管,見圖3.6。圖3.6 led數(shù)碼管找公共共陰和公共共陽的方法:首先找個電源穩(wěn)壓器(3到5伏)和1個1k(幾百歐的也行)的電阻,vcc串接1個電阻后和gnd接在任意2個腳上,組合有很多,但總有一個led會發(fā)光的,找到一個就夠了,然后用

18、gnd不動,vcc(串電阻)逐個碰剩下的腳,如果有多個led(一般是8個),則可以判斷此管為共陰。共陰極數(shù)碼管,陰極接地,當(dāng)某個發(fā)光二極管的陽極為高電平時,發(fā)光二極管點(diǎn)亮,對應(yīng)的段就顯示。3.3.2復(fù)位電路單片機(jī)的復(fù)位是由外部的復(fù)位電路實(shí)現(xiàn)的,復(fù)位電路通常采用上電自動復(fù)位和按鈕復(fù)位兩種方式。上電自動復(fù)位是通過外部復(fù)位電路的電容充電來實(shí)現(xiàn)的。除了上電復(fù)位外還需要按鍵手動復(fù)位,見圖3.7。圖3.7 復(fù)位電路 按鍵手動復(fù)位有電平方式和脈沖方式兩種。其中電平復(fù)位是通過rst端經(jīng)電阻與電源vcc接通而實(shí)現(xiàn)的。單片機(jī)的復(fù)位速度比外圍i/o接口電路快,為能夠保證系統(tǒng)可靠的復(fù)位,在初始化程序中應(yīng)安排一定的復(fù)位

19、延遲時間。3.3.3 掉電保護(hù)電路本設(shè)計(jì)采用兩個電源對單片機(jī)進(jìn)行掉電保護(hù)。一個為主電源,接5v電壓經(jīng)肖特基二極管接單片機(jī)vcc口,另一個為備用電源,用3個5號電池并聯(lián)組合成4.5v電壓。肖特基二極管的壓降非常低,所以5v主電源能夠滿足對單片機(jī)的供電要求。當(dāng)主電源失去過后,因?yàn)橛袀溆秒娫?.5v的作用,滿足單片機(jī)正常運(yùn)行電壓4.5v5.5v,單片機(jī)不會停止工作,實(shí)現(xiàn)了掉電保護(hù)功能。本設(shè)計(jì)采用掉電保護(hù)存儲電路圖如圖3.8:圖3.8 掉電存儲電路3.3.4 時鐘電路mcs-51單片機(jī)的各功能部件都是以時鐘控制信號為基準(zhǔn),內(nèi)部電路在時鐘信號的控制下,嚴(yán)格地按時序執(zhí)行指令進(jìn)行工作,單片機(jī)本身如同一個復(fù)雜

20、的同步時序電路,為了保證其各個部分同步工作,電路要在唯一的時鐘信號控制下,嚴(yán)格地按照時序進(jìn)行工作。其實(shí)只需在時鐘引腳連接上外圍的定時控制元件,就可以構(gòu)成一個穩(wěn)定的自激振蕩器。為更好地保證振蕩器穩(wěn)定可靠地工作,諧振器和電容應(yīng)盡可能安裝得與單片機(jī)芯片靠近。單片機(jī)內(nèi)部有一個高增益、反相放大器,其輸入端為芯片引腳xtal1,其輸出端為引腳xtal2。通過這兩個引腳在芯片外并接石英晶體振蕩器和兩只電容(電容和一般取30pf)。這樣就構(gòu)成一個穩(wěn)定的自激振蕩器。本設(shè)計(jì)中使用的振蕩電路,由12mhz晶體振蕩器和兩個約30pf的電容組成,在xtal1和xtal2兩端跨接晶體,電容的大小不會影響振蕩頻率的高低。在

21、整個系統(tǒng)中為系統(tǒng)各個部分提供基準(zhǔn)頻率,以防因其工作頻率不穩(wěn)定而造成相關(guān)設(shè)備的工作頻率不穩(wěn)定,晶振可以在電路中產(chǎn)生振蕩電流,發(fā)出時鐘信號。見圖3.9。圖3.9 時鐘電路3.3.5 按鍵電路按鍵控制電路中,單片機(jī)的p1.0管腳接啟動/停止按鍵,通過軟件編程,當(dāng)按下按鍵計(jì)數(shù)器開始工作,開始計(jì)價;當(dāng)彈起按鍵時,計(jì)數(shù)器停止工作,停止計(jì)價,啟動/停止按鍵帶自鎖功能。按下啟動按鍵,開關(guān)處于導(dǎo)通狀態(tài),這時給p1.0送低電平信號,這時tr0=1,計(jì)數(shù)器開始工作,調(diào)用計(jì)價子程序開始計(jì)價。清零按鍵接單片機(jī)的p1.3管腳,按下清零按鍵,p1.3為低電平,調(diào)用清零子程序,用于將顯示數(shù)據(jù)清零,在程序中給各位賦0代碼(0x

22、3f),以達(dá)到清零的目的,方便下次計(jì)價。另外為功能鍵,控制價格調(diào)整,這個按鍵是在沒有按下啟動/停止按鍵時有作用,計(jì)價過程中無效,按鍵電路如圖3.10所示。p1.0接口接按鍵1,為啟動按鈕,p1.3接按鍵2,位清零按鈕。當(dāng)按鍵1按下后,定時器開中斷,計(jì)價器開始數(shù)從int0口輸入的脈沖,從而計(jì)算成速度,得到里程與價格。當(dāng)按鍵1松開,按鍵2按下時,調(diào)用清零子程序,對數(shù)碼管每一位清零,并且對各個與數(shù)碼管顯示有關(guān)的整型數(shù)據(jù)清零。圖3.10 按鍵電路3.3.6 測速電路本設(shè)計(jì)采用外部中斷int0口和定時器0的協(xié)同工作實(shí)現(xiàn)了測速。使定時器0工作在方式2,對定時器0裝入初值計(jì)時,計(jì)時時間為0.25ms,通過4

23、000次定時器0的中斷計(jì)為1s。此時,數(shù)通過int0的中斷數(shù),即可得到,一秒的脈沖數(shù),則能夠算出車輪的速度。然后通過計(jì)價子程序以及顯示程序顯示在了數(shù)碼管上,測速電路見圖3.11。計(jì)價方式1,通過數(shù)得每秒通過的int0脈沖獲得速度,然后通過計(jì)價方式1的公式算的里程,最終用里程得到價格,再通過顯示子程序顯示在數(shù)碼管上。計(jì)價方式2,當(dāng)速度小于4m/s大于0m/s時,每當(dāng)定時器計(jì)滿4000次中斷時,整型數(shù)據(jù)time_sum+1,當(dāng)time_sum=10的時候,儲存價格的整型數(shù)據(jù)timemoney+1,然后通過計(jì)價子程序與顯示子程序算出價格,實(shí)現(xiàn)了當(dāng)速度小于一定值時,計(jì)價器按時間計(jì)價。計(jì)價方式3,當(dāng)速度

24、等于0m/s時,當(dāng)time_sum=10的時候,整型數(shù)據(jù)wait_sum+1,當(dāng)wait_sum=3時,即計(jì)程車停車等待了30s,儲存價格的整型數(shù)據(jù)waitmoney+1,然后通過計(jì)價子程序與顯示程序算出價格,實(shí)現(xiàn)了當(dāng)停車等待超過一定時間時,計(jì)價器按時間計(jì)價。具體計(jì)算方法為:時,,;,,;,圖3.11測速電路4 系統(tǒng)軟件設(shè)計(jì)4.1 軟件總體設(shè)計(jì)51單片機(jī)的程序設(shè)計(jì)語言主要有兩種:一是匯編程序設(shè)計(jì);二是c語言編程設(shè)計(jì),兩種程序設(shè)計(jì)語言都有各自的優(yōu)點(diǎn)。用匯編語言編寫和高級語言(c語言)比較起來節(jié)省空間,這樣對于存儲空間僅4kb的芯片來說是極之有利的,51單片機(jī)能更高速的運(yùn)行。c語言編寫的程序,雖然

25、不象匯編那樣速度快、但程序簡單易行、并且需要較小的存儲空間。c語言作為一種編譯型程序設(shè)計(jì)語言,它兼顧了多種高級語言的特點(diǎn),并具備匯編語言的功能。此外,c語言程序還具有完善的模塊程序結(jié)構(gòu),從而為軟件開發(fā)中采用模塊化程序設(shè)計(jì)方法提供了有力的保障。因此,使用c語言進(jìn)行程序設(shè)計(jì)已成為軟件開發(fā)的主流。本設(shè)計(jì)就是采用c語言編寫的,由于采用模塊化操作,使得程序在修改,執(zhí)行的時候顯得方便易行。4.2 系統(tǒng)程序設(shè)計(jì)本設(shè)計(jì)中,軟件設(shè)計(jì)采用模塊化操作,利用各個模塊之間的相互聯(lián)系,在設(shè)計(jì)中采用主程序調(diào)用各個子程序的方法,使程序通俗易懂,我們設(shè)計(jì)了整體程序流程圖:在main函數(shù)編寫開始,要進(jìn)行初始化,包括對系統(tǒng)初始化和

26、對存儲器初始化,要對硬件設(shè)備進(jìn)行初始化,并使硬件處于就緒狀態(tài)。通過判斷是否計(jì)費(fèi),清零等狀態(tài),來分別調(diào)用不同的子程序,使程序在設(shè)計(jì)之前,就有了很強(qiáng)的邏輯關(guān)系。本程序的子程序包括顯示子程序,計(jì)價子程序,延時子程序。并且,通過調(diào)用外部中斷和定時器0中斷實(shí)現(xiàn)了對計(jì)程車計(jì)價器基本功能的實(shí)現(xiàn)。在主程序模塊中,需要完成對各參量和接口的初始化、出租車起價和單價的初始化等工作。另外,在主程序模塊中還需要設(shè)置修改單價的程序。當(dāng)汽車運(yùn)行起來時,就啟動計(jì)價,根據(jù)里程寄存器中的內(nèi)容計(jì)算和判斷行駛里程是否已超過起步價公里數(shù)。若已超過,則根據(jù)里程值、每公里的單價數(shù)和起步價數(shù)來計(jì)算出當(dāng)前的總金額,并將結(jié)果輸出在顯示屏上。中途

27、等待時,產(chǎn)生計(jì)時,當(dāng)時間超過等待設(shè)定值時,開始進(jìn)行計(jì)價,并把等待價格加到總金額里。這些對應(yīng)于硬件就是通過按下各個控制開關(guān),來分別進(jìn)行不同的動作,最后數(shù)碼管根據(jù)輸入的信息,來顯示不同的數(shù)據(jù)信息,這就達(dá)到了軟件控制硬件,同時輸入信息控制輸出信息的目的。整個程序的流程圖如圖4.1所示:初始化開始顯示是否開始計(jì)費(fèi)速度44速度0速度=0計(jì)價程序1計(jì)價程序2計(jì)價程序3判斷是否停止鍵按下結(jié)果顯示清零單價復(fù)位yyn圖4.1 程序框圖5 系統(tǒng)調(diào)試系統(tǒng)調(diào)試包括軟件調(diào)試和硬件調(diào)試。硬件調(diào)試的任務(wù)是排除所焊接電路故障。軟件調(diào)試是利用開發(fā)工具進(jìn)行在線仿真調(diào)試。調(diào)試的一般過程如圖5.1所示:系統(tǒng)調(diào)試硬件調(diào)試軟件調(diào)試系統(tǒng)聯(lián)

28、調(diào)現(xiàn)場調(diào)試調(diào)試結(jié)束圖5.1 系統(tǒng)調(diào)試流程圖系統(tǒng)調(diào)試的一般過程是上電運(yùn)行后觀察其運(yùn)行狀態(tài),數(shù)碼管是否點(diǎn)亮等。軟件調(diào)試先是各個模塊、各個子程序分別調(diào)試,最后進(jìn)行系統(tǒng)聯(lián)機(jī)調(diào)試。5.1軟件調(diào)試5.1.1 編程工具c51語言8051單片機(jī)的應(yīng)用程序設(shè)計(jì),使用c51語言進(jìn)行程序設(shè)計(jì)雖然相對于匯編語言代碼效率有所下降,但可以方便地實(shí)現(xiàn)程序設(shè)計(jì)模塊化,代碼結(jié)構(gòu)清晰、可讀性強(qiáng),易于維護(hù)、更新和移植,適合較大規(guī)模的單片機(jī)程序設(shè)計(jì)。近年來,隨著c51語言的編譯器性能的不斷提高,在絕大多數(shù)應(yīng)用環(huán)境下,c51程序的執(zhí)行效率已經(jīng)非常接近匯編語言,因此,使用c51進(jìn)行單片機(jī)程序設(shè)計(jì)已經(jīng)成為單片機(jī)程序設(shè)計(jì)的主流選擇之一。5.

29、1.2 程序調(diào)試軟件keil本設(shè)計(jì)的軟件都是在keil u vision 7.5上進(jìn)行編寫,編譯,調(diào)試以及運(yùn)行操作。5.1.3 系統(tǒng)仿真軟件調(diào)試proteus1.打開proteus軟件。2.選擇file菜單下的 open design選項(xiàng),找到所需的元器件,元器件上單擊右鍵選中,再單擊左鍵對其進(jìn)行命名和賦值,接著在編輯器左邊的一欄中,找出并繪制設(shè)計(jì)所要的各種元器件,按照電路圖連接后并保存。3.將用keil編譯產(chǎn)生的hex文件下載到單片機(jī)中:雙擊51單片機(jī),在對話框中把保存過的hex文件打開,再單擊確定。 4.單擊左下角運(yùn)行按鈕,進(jìn)行軟件仿真調(diào)試,直到出現(xiàn)正確的結(jié)果。圖5.2為軟件的仿真窗口圖:

30、圖5.2 proteus仿真圖5.2系統(tǒng)仿真下圖是通過在keil c中編譯通過,并生成hex文件,在proteus中的單片機(jī)里拷入程序,正常運(yùn)行的情況下,數(shù)碼管的第一位和第二位顯示里程數(shù),第三位至第五位顯示價格,第六位至第八位顯示速度。當(dāng)按鍵1按下之后,單片機(jī)開中斷,數(shù)碼管才能正常顯示里程數(shù),價格,以及速度。當(dāng)按鍵1松開,按鍵2按下的時候,單片機(jī)所連接的兩個7段四位共陰極數(shù)碼管的每一位都會被清零。松開按鍵2,再按下按鍵1,單片機(jī)又會開中斷,開始正常工作。系統(tǒng)仿真圖如圖5.3所示:圖5.3 仿真結(jié)果圖中兩個按鍵的作用key1:按下時系統(tǒng)開始計(jì)價,抬起后系統(tǒng)計(jì)價暫停;key2:按下時,計(jì)價器顯示清

31、零,單價恢復(fù)到初始狀態(tài);5.3 硬件調(diào)試5.3.1測速電路部分按下開始鍵,輸入頻率為100hz,速度為200,起始價格為4元,里程數(shù)在10s過后為1公里,見圖5.4圖5.4 起始時改變輸入脈沖,速度變?yōu)?98m/s,里程為3公里時,價格為5元,見圖5.5圖5.5 改變脈沖改變輸入頻率使速度變?yōu)?,經(jīng)過20s等待,價格變?yōu)?4元,采用計(jì)價方式2,見圖5.6圖5.6 計(jì)價方式2的實(shí)現(xiàn)撤去輸入脈沖,速度變?yōu)?,經(jīng)過90秒,價格變?yōu)?4元,采用計(jì)價方式3,見圖5.7圖5.7 計(jì)價方式3的實(shí)現(xiàn)5.3.2 掉電保護(hù)部分采用雙電源供電,此時兩個電源都在供電,單片機(jī)正常運(yùn)行,見圖5.8圖5.8 兩端供電撤去主

32、電源,只剩下備用電源,單片機(jī)依然可以正常工作,實(shí)現(xiàn)掉電保護(hù)功能,見圖5.9圖5.9 備用電源供電5.3.3 復(fù)位電路部分單片機(jī)正常工作,按下復(fù)位鍵后,單片機(jī)復(fù)位成功,見圖5.9和圖5.10圖5.9 復(fù)位前圖5.10 復(fù)位后5.3.4清零電路部分單片機(jī)正常工作時,按下清零鍵,數(shù)碼管能夠正確清零,實(shí)現(xiàn)清零功能,見圖5.11和圖5.125.11 清零前圖5.12 清零后6 結(jié)論在本次設(shè)計(jì)中,我們采用at89c51芯片為核心器件,設(shè)計(jì)出了簡單的出租車計(jì)價器,能夠?qū)崿F(xiàn)顯示總金額和總里程,按鍵控制清零、調(diào)價。選題后,我便開始復(fù)習(xí)單片機(jī)方面的知識,也查閱、搜索了很多相關(guān)資料,進(jìn)行總體設(shè)計(jì)與具體設(shè)計(jì),同時也學(xué)

33、習(xí)仿真軟件protues和編程軟件keilc。由于以前都采用匯編語言實(shí)現(xiàn)編程,對用c語言來實(shí)現(xiàn)單片機(jī)的編程不太習(xí)慣,花費(fèi)了一些時間來熟悉c語言的編程。在設(shè)計(jì)開始,要形成流程圖,它可以使設(shè)計(jì)有一定的邏輯性與嚴(yán)密性,使得設(shè)計(jì)思路明確。采用模塊化的設(shè)計(jì)思想很重要,它方便編寫、修改與調(diào)試,另外加上必要的注釋,便于交流與理解。這次應(yīng)用系統(tǒng)設(shè)計(jì)完成后,體會頗多,在學(xué)與做的過程中,取長補(bǔ)短,不斷學(xué)習(xí)新的知識,吸取經(jīng)驗(yàn),達(dá)到進(jìn)步的目的。通過自身的努力以及相關(guān)圖書資料的幫助,逐漸熟悉了keil、proteus和c語言等軟件的使用以及硬件檢測過程中的一些小技巧。本次設(shè)計(jì)我學(xué)習(xí)到不少單片機(jī)的知識,但由于自己的理論知

34、識水平有限,實(shí)踐知識和設(shè)計(jì)經(jīng)驗(yàn)不足,在設(shè)計(jì)過程中難免存在一些問題。懇請各位老師批評指正,以使我在以后的學(xué)習(xí)和實(shí)踐中加以改進(jìn)和提高。7 總結(jié)與體會 經(jīng)過這些天有關(guān)于出租車計(jì)價器的課程設(shè)計(jì),使我對單片機(jī)的應(yīng)用有了更深的了解。在課程設(shè)計(jì)的過程中,還是碰到了許多的問題。比如,對于數(shù)碼管動態(tài)掃描顯示和鍵盤的延時防抖的綜合編程不能較好地解決;對于代碼的前后順序及調(diào)用掌握得還不夠好;對于一些相關(guān)的應(yīng)用軟件沒能熟練掌握。通過這幾天晚上的苦想和反復(fù)調(diào)試,以及參考網(wǎng)上的程序,最終還是把問題解決了。通過這次應(yīng)用系統(tǒng)設(shè)計(jì),我最大的收獲就是自己的動手能力和獨(dú)立解決問題的能力得到了很大的提高,也充分體會到了自己設(shè)計(jì)東西的

35、樂趣、學(xué)會查閱資料和對別人的東西融會變通的重要性,也明白了很多知識光靠趴在書本上學(xué)是學(xué)不到其中的精髓的,必須親自去試著實(shí)踐,親自去經(jīng)歷才能對它們真正的掌握,凡事都要自己去動下手,去實(shí)踐一下,遇到困難,永遠(yuǎn)不要沮喪氣餒。在動手的過程中,不僅能增強(qiáng)實(shí)踐能力,而且在理論上可以有更深的認(rèn)識;這次設(shè)計(jì)給了我極大的鼓舞和信心,相信在以后的學(xué)習(xí)中可以通過不斷的摸索和實(shí)踐來提高其他方面的知識。通過本次課程設(shè)計(jì),又使我學(xué)到了許多書本上無法學(xué)到的知識,也使也深該體會到單片機(jī)技術(shù)應(yīng)用領(lǐng)域的廣泛,不僅使我對學(xué)過的單片機(jī)知識有了很多的鞏固,同時也對單片機(jī)這一門課程產(chǎn)生了更大的興趣。8 參考文獻(xiàn)1胡泉,謝芳.c語言程序設(shè)

36、計(jì)m.華中科技大學(xué)出版社,2009:17-18.2戴佳.51單片機(jī)c語言應(yīng)用程序設(shè)計(jì)實(shí)例精講m.電子工業(yè)出版社,2007:104-105.3馬忠梅.單片機(jī)的c語言應(yīng)用程序設(shè)計(jì)(第三版)m.北京航空航天大學(xué)出版社,2004:30-32.4潘永雄.新編單片機(jī)原理與應(yīng)用m.西安電子科技大學(xué)出版社,2010:160-163.5肖玲妮,袁增貴.protel 99 se印刷電路板設(shè)計(jì)教程m.清華大學(xué)出版社,2003:26-28.6何立民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)m.北京:北京航空航天大學(xué)出版社,2000:13-14.7陳明熒.8051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教材m.北京:清華大學(xué)出版社,2004:303-304.8王

37、衛(wèi)平.電子工藝技術(shù)基礎(chǔ)m.電子工業(yè)出版社,2004:99-100.9張靖武.單片機(jī)原理應(yīng)用與proteus仿真m.電子工業(yè)出版社,2009:130-132.10楊恢先,黃輝先.單片機(jī)原理及應(yīng)用m.長沙:國防科技大學(xué)出版社,2003:92-93.11何小艇.電子系統(tǒng)設(shè)計(jì)j.浙江:浙江大學(xué)出版社,2006:89-90.12華成英.模擬電子技術(shù)基礎(chǔ)m.北京:高等教育出版社,2006202-203附錄1 系統(tǒng)原理圖附錄2 元件清單元件清單開關(guān)3個肖特基二級管1個10uf電容1個排阻a103g 1個30pf電容2個備用電源1個12mhz晶振1個10k電阻1個at89c51單片機(jī)1個導(dǎo)線若干附錄3 程序#

38、include #include #include #define uchar unsigned char#define uint unsigned intint zxscode8=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;int xscode8=0x00,0x01,0x03,0x04,0x05,0x06,0x07,0x08;int codetab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;int i,j,flag;int time_count=0;int count=0;int sum=0;int time_sum=0;int timemoney=0;int wait_time=0;int waitmoney=0;int v=0;int kk=0;int jkk=0;int jflag=0;int vflag=0;int kflag=0;int kilo=0;int dj=1; sbit key1=p10;sbit key4=p13;void delay() ;void delay1 (xms) uint i,j; for

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論