版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 河南理工大學(xué)</b></p><p> 《單片機(jī)應(yīng)用與仿真訓(xùn)練》設(shè)計報告</p><p><b> 出租車計價器</b></p><p> 姓 名: </p><p> 學(xué) 號:
2、 </p><p> 專業(yè)班級: 電氣09 </p><p> 指導(dǎo)老師: </p><p> 所在學(xué)院: 電氣工程與自動化學(xué)院 </p><p> 2012年5月10日</p><p&
3、gt;<b> 摘要</b></p><p> 本設(shè)計是以AT89S52單片機(jī)為核心,以A44E霍爾傳感器為信號采集傳感器,采用AT24C02作為存儲芯片,加上各種外圍電路構(gòu)成的出租車計價器。本設(shè)計采用霍爾傳感器對輪胎轉(zhuǎn)數(shù)進(jìn)行計數(shù),并將采集到的脈沖信號傳輸給單片機(jī),單片機(jī)通過內(nèi)部定時器對一定時間內(nèi)的轉(zhuǎn)動圈數(shù)進(jìn)行一次統(tǒng)計,經(jīng)計算實現(xiàn)對出租車速度、里程、應(yīng)付金額等狀態(tài)信息的測量。本設(shè)計采用了
4、寄存器芯片AT24C02,實現(xiàn)系統(tǒng)對單價、里程、等待時間等信息的存儲,采用時鐘芯片DS1302在正常及掉電的時候來顯示時間和在系統(tǒng)需要時進(jìn)行計時。本設(shè)計設(shè)置5個按鍵為輸入控制方式,分別控制查詢、功能、單雙成切換、暫停(結(jié)賬)以及清零,輸出顯示采用了兩個4段數(shù)碼管實現(xiàn)對時間、金額、里程的顯示,設(shè)置了四個LED燈,分別為空車指示燈、等待查詢指示燈、單雙程指示燈。</p><p> 關(guān)鍵詞單片機(jī)霍爾傳感器
5、出租車計價器時鐘</p><p><b> Abstract</b></p><p> This design use AT89S52 SCM as the core, with U18 Hall sensors for signal acquisition sensor, tire rotation to count, SCM calculation for
6、 a taxi speed, processing realizes such status information measurement mileage. This design used a register AT24C02 chip, and realize the system in unit price, mileage, waiting time information storage, the clock DS1302
7、chip in normal and power lost time to display the time and in the system needs to be carried out when the timer. The design for the input contr</p><p> KeywordsAT89S52 SCM Hall sensorsTaximeterClock<
8、/p><p><b> 目錄</b></p><p><b> 摘要1</b></p><p><b> 目錄2</b></p><p><b> 1概述3</b></p><p> 1.1 設(shè)計目的、意義3<
9、/p><p> 1.2 AT89S52單片機(jī)功能簡介3</p><p> 2系統(tǒng)總體方案設(shè)計4</p><p> 2.1 設(shè)計要求4</p><p> 2.1.1 基本要求4</p><p> 2.1.2 發(fā)揮部分5</p><p> 2.2 設(shè)計的主要功能5</p&
10、gt;<p> 2.3 方案的選取5</p><p> 2.3.1 硬件設(shè)計方案5</p><p> 2.3.2 軟件設(shè)計方案6</p><p><b> 3硬件設(shè)計6</b></p><p> 3.1 AT89S52單片機(jī)及最小系統(tǒng)6</p><p> 3.
11、1.1 AT89S52單片機(jī)6</p><p> 3.1.2 單片機(jī)最小系統(tǒng)8</p><p> 3.2 測距單元8</p><p> 3.3 按鍵單元10</p><p> 3.4 時鐘單元11</p><p> 3.5 顯示單元11</p><p> 3.6 儲存單元
12、14</p><p><b> 4軟件設(shè)計15</b></p><p> 4.1 系統(tǒng)主程序15</p><p> 4.2 數(shù)據(jù)處理子程序15</p><p> 4.3 等待時間計時子程序16</p><p> 4.4 鍵盤掃描子程序17</p><p&
13、gt; 5Proteus軟件仿真18</p><p> 6課程設(shè)計體會19</p><p><b> 參考文獻(xiàn)20</b></p><p> 附1:源程序代碼20</p><p> 附2:系統(tǒng)原理圖0</p><p><b> 概述</b></
14、p><p> 1.1 設(shè)計目的、意義</p><p> 隨著經(jīng)濟(jì)的不斷發(fā)展,人們的收入得到很大提高。人們便越來越追求生活的舒適與方便,而出行方式便是關(guān)切到人們生活質(zhì)量的一個重要方面。在物價上漲的今天,相對于自己購買私家車,更多的人傾向于乘坐出租車出行。雖然現(xiàn)在有部分小城市尚未普及出租車,但隨著城市建設(shè)日益加快,象征著城市面貌的出租車行業(yè)也將加速發(fā)展。汽車計價器作為乘客與司機(jī)雙方的交易準(zhǔn)則,
15、它是出租車行業(yè)發(fā)展的重要標(biāo)志,是出租車中最重要的工具。它關(guān)系著交易雙方的利益。具有良好性能的計價器無論是對廣大出租車司機(jī)朋友還是乘客來說都是很必要的。因此,汽車計價器的研究也是十分有一個應(yīng)用價值的。</p><p> 本次設(shè)計的目的在于現(xiàn)在各大中城市出租車行業(yè)都已普及自動計價器,所以計價器技術(shù)的發(fā)展已成定局。采用模擬電路和數(shù)字電路設(shè)計的計價器整體電路的規(guī)模較大,用到的器件多,造成故障率高,難調(diào)試。而采用單片機(jī)進(jìn)
16、行的設(shè)計,相對來說功能強(qiáng)大,是深化單片機(jī)應(yīng)用的良好途徑,用較少的硬件和適當(dāng)?shù)能浖嗷ヅ浜峡梢院苋菀椎貙崿F(xiàn)設(shè)計要求,且靈活性強(qiáng),可以通過軟件編程來完成更多的附加功能。</p><p> 1.2 AT89S52單片機(jī)功能簡介</p><p> 計算機(jī)系統(tǒng)已明顯地朝巨型化、單片化、網(wǎng)絡(luò)化三個方向發(fā)展。巨型化發(fā)展的目的在于不斷提高計算機(jī)的運算速度和處理能力,以解決復(fù)雜系統(tǒng)計算和高速數(shù)據(jù)處理,比
17、如系統(tǒng)仿真和模擬、實時運算和處理。單片化是把計算機(jī)系統(tǒng)盡可能集成在一塊半導(dǎo)體芯片上,其目的在于計算機(jī)微型化和提高系統(tǒng)的可靠性,這種單片計算簡稱單片機(jī)。單片機(jī)的內(nèi)部硬件結(jié)構(gòu)和指令系統(tǒng)主要是針對自動控制應(yīng)用而設(shè)計的,所以單片機(jī)又稱微控制器MCU(Micro Controller Unit)。用它可以很容易地將計算機(jī)嵌入到各種儀器和現(xiàn)場控制設(shè)備中,因此單片機(jī)又叫做嵌入式微控制器(Embedded MCU)。單片機(jī)自20世紀(jì)70年代問世以來,以
18、其鮮明的特點得到迅猛發(fā)展,已廣泛應(yīng)用于家用電器、智能玩具、智能儀器儀表、工業(yè)控制、航空航天等領(lǐng)域,經(jīng)過30多年的發(fā)展,性能不斷提高,品種不斷豐富,已經(jīng)形成自動控制的一支中堅力量。據(jù)統(tǒng)計,我國的單片機(jī)年容量已達(dá)1~3億片,且每年以大約16%的速度增長,但相對于國際市場我國的占有率還不到1%。這說明單片機(jī)應(yīng)用在我國有著廣闊的前景。對于從事自動控制的技術(shù)人員來講,掌握單片機(jī)原理及其應(yīng)用已經(jīng)成為必不可少的學(xué)習(xí)任務(wù)。</p><
19、;p> 單片機(jī)的應(yīng)用十分廣泛,在工業(yè)控制領(lǐng)域、家電產(chǎn)品、智能化儀器儀表、計算機(jī)外部設(shè)備,特別是機(jī)電一體化產(chǎn)品中,都有重要的用途。其主要的用途可以分為以下方面。</p><p> 顯示:通過單片機(jī)控制發(fā)光二極管或是液晶,顯示特定的圖形和字符。</p><p> 機(jī)電控制:用單片機(jī)控制機(jī)電產(chǎn)品做定時或定向的動作。</p><p> 檢測:通過單片機(jī)和傳感器
20、的聯(lián)合使用,用來檢測產(chǎn)品或者工況的意外發(fā)生。</p><p> 通信:通過RS-232串行通信或者是USB通信,傳輸數(shù)據(jù)和信號。</p><p> 科學(xué)計算:用來實現(xiàn)簡單的算法。</p><p> 那么單片機(jī)是不是解決上述應(yīng)用的唯一選擇呢?淡然不是!目前,在自動控制中,一般有三種選擇,分別是嵌入式微機(jī)、DSP和單片機(jī)。</p><p>
21、 單片機(jī)最明顯的優(yōu)點是價格便宜,從幾元人民幣到幾十元人民幣。這是因為這類芯片的生產(chǎn)量很大,技術(shù)也很成熟。</p><p> 其次,單片機(jī)的體積也遠(yuǎn)小于其他兩種方案。單片機(jī)本身一般用40引腳封裝,當(dāng)然功能多一些的單片機(jī)也有引腳比較多的,如68引腳,功能少的只有10多個或20多個引腳,有的甚至只有8只引腳。</p><p> 當(dāng)然,單片機(jī)無論在速度還是容量方面都小于其他兩種方案,但是在實
22、際工作中并不是任何需要計算機(jī)的場合都要求計算機(jī)有很高的性能。例如,控制電冰箱的控制器就不需要使用嵌入式系統(tǒng),用一片51就可以輕松實現(xiàn)。所以應(yīng)用的關(guān)鍵是看能否夠用,是否有很好的性能價格比。51系列的單片機(jī)已經(jīng)面世十多年,依然沒有被淘汰,還在不斷發(fā)展中,這就說明是他有廣闊的應(yīng)用前景。</p><p><b> 系統(tǒng)總體方案設(shè)計</b></p><p><b>
23、 2.1 設(shè)計要求</b></p><p> 2.1.1 基本要求</p><p> ?。?)能顯示里程,單位為公里,最后一位為小數(shù)位。</p><p> ?。?)能顯示金額數(shù),單位為元,最后一位為小數(shù)位。</p><p> ?。?)可設(shè)定單程價格和往返價格,單程價格為2元/公里,往返價格為1.5元/公里。</p>
24、<p> ?。?)車速<5公里/小時的時間累積為總等待時間,每5分鐘等待時間相當(dāng)于里程數(shù)增加1公里。</p><p> ?。?)起步公里數(shù)為3公里,價格為5元,若實際距離大于3公里,按規(guī)則3計算價格。</p><p> ?。?)按暫停鍵,計價器可暫停計價,按查詢鍵,可顯示總等待時間。</p><p> 2.1.2 發(fā)揮部分</p>
25、<p> ?。?)增加了空車指示功能,當(dāng)無客人時,按下功能切換按鍵,空車指示燈亮。</p><p> ?。?)增加實時時間顯示,無論計價器工作或者空車,都能顯示實時時間,便于時間提醒。</p><p> ?。?)增加信息儲存功能??梢詢Υ娴却龝r間,里程和金額。</p><p> 2.2 設(shè)計的主要功能</p><p> 本設(shè)計
26、所設(shè)計的出租車數(shù)字計價器的主要功能有:金額輸出、路程輸出、數(shù)據(jù)復(fù)位、計時計價、空車顯示等。輸出采用2個4位8段共陽數(shù)碼管,車輛行走時前4位顯示路程,后4位顯示金額。車輛候車時,前4位顯示等待時間,后4位顯示等待金額??哲嚂r顯示實時時間。儲存等待時間,里程和金額。</p><p><b> 2.3 方案的選取</b></p><p> 本設(shè)計是由軟件設(shè)計和硬件設(shè)計兩
27、部分組成的。軟件設(shè)計要進(jìn)行程序的編寫和軟件仿真;硬件設(shè)計要設(shè)計電路、硬件仿真和制作電路板。</p><p> 2.3.1 硬件設(shè)計方案</p><p> 本系統(tǒng)的硬件設(shè)計主要包括單片機(jī)AT89S52、數(shù)據(jù)顯示部件、U18霍爾傳感器電路、里程計算及計價單元的設(shè)計。在硬件設(shè)計過程中,充分利用各部件的功能,實現(xiàn)多功能的出租車計價器設(shè)計。</p><p> 計價器的單
28、片機(jī)系統(tǒng)框圖如圖1所示。它由以下幾個部件組成:霍爾傳感器單元、AT89C52單片機(jī)、金額顯示、里程顯示、電源。利用單片機(jī)豐富的IO端口,及其控制的靈活性,實現(xiàn)基本的里程和價格的計算及顯示功能。</p><p> 圖1 計價器系統(tǒng)框圖</p><p> 2.3.2 軟件設(shè)計方案</p><p> 本設(shè)計程序的采取C語言進(jìn)行編寫,使用Keil uVision4編譯
29、和Proteus7.4a仿真軟件進(jìn)行仿真調(diào)試。其中的里程計算和費用計算方案如下。</p><p><b> 1、里程計算</b></p><p> ?。?)霍爾傳感器對車輪進(jìn)行信號檢測,產(chǎn)生并輸出脈沖信號到單片機(jī);</p><p> ?。?)單片機(jī)對傳感器輸出的脈沖信號進(jìn)行計數(shù),并進(jìn)行km計算:每一個信號代表輪胎旋轉(zhuǎn)一周,設(shè)輪胎的周長為1.5
30、7m ;每km產(chǎn)生的信號數(shù)為N ,里程顯示為N × 1.57m = 1.57N(km)</p><p><b> 2、費用計算</b></p><p> ?。?)出租車的起步費為5元,并且3km內(nèi)不需額外計價;</p><p> ?。?)出租車行駛3km后,單程2元/km,雙程1.5元/km。</p><p>
31、; ?。?)等待收費的標(biāo)準(zhǔn)為5分鐘算一公里;</p><p> ?。?)暫停時計價器暫停計價,不收費用。</p><p><b> 硬件設(shè)計</b></p><p> 本設(shè)計的硬件設(shè)計包括單片機(jī)AT89S52單元、測距單元、顯示單元(數(shù)碼管顯示金額、等待時間和里程,指示燈對單雙程切換指示、空車指示、等待計時指示)、按鍵單元、時鐘單元和儲存單
32、元。</p><p> 3.1 AT89S52單片機(jī)及最小系統(tǒng)</p><p> 3.1.1 AT89S52單片機(jī)</p><p> AT89S52具有如下特點:40個引腳,4k Bytes Flash片內(nèi)程序存儲器, 128 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),32個外部雙向輸入/輸出(I/O)口,5個中斷優(yōu)先級2層中斷嵌套,2個16位可編程定時計數(shù)器
33、,2個全雙工串行通信口,看門狗(WDT)電路,片內(nèi)時鐘振蕩器。</p><p><b> P0口有二個功能:</b></p><p> 1、外部擴(kuò)展存儲器時,當(dāng)做數(shù)據(jù)/地址總線。</p><p> 2、不擴(kuò)展時,可做一般的I/O使用,但內(nèi)部無上拉電阻,作為輸入或輸出時應(yīng)在外部接上拉電阻。</p><p> P1口
34、只做I/O口使用:其內(nèi)部有上拉電阻。 </p><p> P2口有兩個功能: </p><p> 1、擴(kuò)展外部存儲器時,當(dāng)作地址總線使用。 2、做一般I/O口使用,其內(nèi)部有上拉電阻。 P3口有兩個功能:除了作為I/O使用外(其內(nèi)部有上拉電阻),還有一些特殊功能,由特殊寄存器來設(shè)置。</p><p> 圖
35、2 AT89S52引腳圖 圖3 AT89S52封裝圖</p><p> 設(shè)計中用到的單片機(jī)各管腳(圖2)功能以及與其他模塊連接介紹如下:</p><p> VCC:接+5V電源。VSS:接地。</p><p> 時鐘引腳:XTAL1和XTAL2兩端接晶振和30PF的電容,構(gòu)成時鐘電路。</p>
36、<p> 它可以使單片機(jī)穩(wěn)定可靠的運行。</p><p> RST:復(fù)位信號輸入端,高電平有效。當(dāng)在此引腳加兩個機(jī)器周期的高電平時,就可以完成復(fù)位操作。</p><p> P1.0:接功能按鍵。</p><p> P1.1:接切換鍵,表示單雙程切換。</p><p> P1.2:接查詢(上次金額)鍵。</p>
37、<p> P1.3:接清零鍵。</p><p> P1.4:接空車指示燈。</p><p> P1.5:接查詢指示燈。</p><p> P1.6:接開始計時指示燈。</p><p> P1.7:接雙程指示燈。</p><p> P3.0:接查詢/確認(rèn)鍵。</p><p>
38、; P0口接數(shù)碼管段選端,P2口接數(shù)碼管位選段。</p><p> P3.2:接霍爾傳感器的輸出口。</p><p> P3.3:接存儲器的SCL口。</p><p> P3.4:接儲存器的SDA口。</p><p> P3.5:接時鐘電路DS1302的RST口。</p><p> P3.6:接DS1302
39、的SCLK口。</p><p> P3.7:接DS1302的I/O口。</p><p> 3.1.2 單片機(jī)最小系統(tǒng)</p><p> 復(fù)位電路和晶振電路是AT89S52工作所需的最簡外圍電路。單片機(jī)最小系統(tǒng)電路圖如圖4所示。 </p><p> 圖4 單片機(jī)最小系統(tǒng)</p><p> AT89S5
40、2 的復(fù)位端是一個史密特觸發(fā)輸入,高電平有效。RST端若由低電平上升到高電平并持續(xù)2個周期,系統(tǒng)將實現(xiàn)一次復(fù)位操作。在復(fù)位電路中,按一下復(fù)位開關(guān)就使在RST端出現(xiàn)一段時間的高電平,外接11.0592M 晶振和兩個30pF 電容組成系統(tǒng)的內(nèi)部時鐘電路。</p><p><b> 3.2 測距單元</b></p><p> 本次設(shè)計我們選取了霍爾傳感器來進(jìn)行里程測量。
41、</p><p> 霍爾器件是一種磁傳感器。用它們可以檢測磁場及其變化,可在各種與磁場有關(guān)的場合中使用。霍爾器件以霍爾效應(yīng)為其工作基礎(chǔ)。</p><p> 霍爾器件具有許多優(yōu)點,它們的結(jié)構(gòu)牢固,體積小,重量輕,壽命長,安裝方便,功耗小,頻率高,耐震動,不怕灰塵、油污、水汽及鹽霧等的污染或腐蝕。</p><p> 霍爾器件分為:霍爾元件和霍爾集成電路兩大類,前者
42、是一個簡單的霍爾片,使用時常常需要將獲得的霍爾電壓進(jìn)行放大。后者將霍爾片和它的信號處理電路集成在同一個芯片上。本次設(shè)計選取了霍爾集成電路來測量里程。</p><p> 里程測量是通過將霍爾傳感器的集成電路安裝在車輪上方的鐵板上,將磁鐵安裝在車輪上,旋轉(zhuǎn)的車輪將磁鐵對準(zhǔn)集成電路時,霍爾傳感器會輸出一個脈沖信號,送到單片機(jī),經(jīng)過單片機(jī)的計算處理,將行駛的里程送到顯示單元并顯示出來。</p><p
43、><b> 其原理示意圖如下:</b></p><p> 圖5 傳感器測距示意圖</p><p> A44E是一種利用霍爾效應(yīng)做成的半導(dǎo)體集成電路器件,它被設(shè)計在交變磁場中運行,特別是能在低電源電壓和長時間運行溫度范圍可達(dá)到125℃。這種霍爾IC可用作各種類型的傳感器(速度傳感器、位移傳感器、轉(zhuǎn)速傳感器等等),接觸開關(guān)以及相類似的應(yīng)用場合。其工作電壓比較
44、寬(2.5~20V),可運行在較大的溫度范圍內(nèi)(-20℃~125℃), 其輸出的信號符合TTL電平標(biāo)準(zhǔn),可以直接接到單片機(jī)的IO 端口上,而且其最高檢測頻率可達(dá)到1MHZ。</p><p> 霍爾傳感器的特性如圖6所示,其中BOP為工作點“開”的磁感應(yīng)強(qiáng)度,BRP為釋放點“關(guān)”的磁感應(yīng)強(qiáng)度。當(dāng)外加的磁感應(yīng)強(qiáng)度超過動作點BOP時,傳感器輸出低電平,當(dāng)磁感應(yīng)強(qiáng)度降到動作點BOP以下時,傳感器輸出電平不變,一直要降到
45、釋放點BRP時,傳感器才由低電平躍變?yōu)楦唠娖健OP與BRP之間的滯后使開關(guān)動作更為可靠。</p><p> U18集成霍耳開關(guān)由穩(wěn)壓器A、霍耳電勢發(fā)生器(即硅霍耳片)B、差分放大器C、施密特觸發(fā)器D和OC門輸出E五個基本部分組成。</p><p> 在輸入端輸入電壓VCC,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍爾電勢發(fā)生器的兩端,根據(jù)霍爾效應(yīng)原理,當(dāng)霍爾片處在磁場中時,在垂直于磁場的方向通以電流,則與
46、這二者相垂直的方向上將會產(chǎn)生霍爾電勢差VH輸出,該VH信號經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC門輸出。當(dāng)施加的磁場達(dá)到工作點(即Bop)時,觸發(fā)器輸出高電壓(相對于地電位),使三極管導(dǎo)通,此時OC門輸出端輸出低電壓,三極管截止,使OC門輸出高電壓,這種狀態(tài)為關(guān)。這樣兩次電壓變換,使霍爾開關(guān)完成了一次開關(guān)動作。</p><p> 圖6 A44E霍爾傳感器和其輸出特性</p>
47、<p> A44E霍爾傳感器有3個外接口,2個是電源的正負(fù)極接口,最后一個是脈沖信號輸出口,只要將霍爾傳感器的信號輸出端接到單片機(jī)的端口上便可以實現(xiàn)距離檢測。</p><p> 其中,單片機(jī)的P3.2(INT0)引腳作為信號的輸入端,采用外部中斷0進(jìn)行計數(shù)。車輪每轉(zhuǎn)一圈,霍爾傳感器就產(chǎn)生一個脈沖信號,根據(jù)霍爾效應(yīng)原理,當(dāng)霍爾片處在磁場中時,霍爾傳感器的輸出端輸出低電平。當(dāng)車輪轉(zhuǎn)動一圈時小磁鐵提供一個
48、磁場,則霍爾傳感器輸出一次低電平完成一次數(shù)據(jù)采集,從而產(chǎn)生信號?;魻杺鞲衅鳈z測并輸出信號到單片機(jī)的INT0或INT1計算脈沖輸入端,引起單片機(jī)的中斷,對脈沖計數(shù),當(dāng)計數(shù)達(dá)到特定的次數(shù)時,里程就會增加,單片機(jī)對里程進(jìn)行計算后,通過接口電路將計算好的結(jié)果傳送到數(shù)碼管并顯示出來。</p><p><b> 3.3 按鍵單元</b></p><p> 本設(shè)計的按鍵單元電路
49、(如圖7)有5個按鍵,功能分別是:S1是空車時查詢上次金額和里程以及等待時間,結(jié)賬時查詢本次金額和里程以及等待時間;S2功能鍵,不按時空車指示燈亮而且數(shù)碼管顯示實時時間,按下時可設(shè)置單雙程,此時再按S3可進(jìn)行單程和雙程之間切換,再按S1可確認(rèn)單雙程,雙程時雙程指示燈亮并開始計價;按下S4可對本次金額、里程以及等待時間進(jìn)行查詢;S5為清零鍵,按下時清零之前數(shù)據(jù)消除以及存儲本次信息。</p><p><b>
50、; 圖7 按鍵單元電路</b></p><p><b> 3.4 時鐘單元</b></p><p> 本設(shè)計采用基于DS1302的時鐘電路(如圖8)對時間進(jìn)行實時顯示,單片機(jī)掉電對其沒有影響。用數(shù)碼管表現(xiàn)出來,當(dāng)出租車空車時就顯示時間,給人時間提示。</p><p><b> 圖8 時鐘電路單元</b>
51、</p><p><b> 3.5 顯示單元</b></p><p> 本設(shè)計顯示單元包括兩部分:數(shù)碼管顯示(圖11)和二極管指示顯示(圖12)。數(shù)碼管顯示部分使用兩個四位一體的LED數(shù)碼管,LED顯示器是由LED發(fā)光二極管發(fā)展過來的一種顯示器件,是發(fā)光二極管的改型。LED是發(fā)光二極管的簡稱,是一種將電能轉(zhuǎn)換成光能的設(shè)備。本身也是一種光源。LED顯示器是由發(fā)光二極
52、管排列組成的顯示器件。它采用低電壓掃描驅(qū)動,具有:耗電少、使用壽命長、成本低、故障少、視角大、可視距離遠(yuǎn)等特點。此外,它的響應(yīng)時間短(一般不超過0.1us),亮度也比較高。它的缺點是工作電流比較大,每一段的工作電流在10mA左右。</p><p> 其中每位數(shù)碼管是由8個發(fā)光二極管演變而來,其中7個發(fā)光二極管構(gòu)成7筆字形,另一個構(gòu)成小數(shù)點,稱為8段LED。8段LED數(shù)碼管是利用7個LED(發(fā)光二極管)外加一個小
53、數(shù)點的LED組合而成的顯示設(shè)備,可以顯示0~9等10個數(shù)字和小數(shù)點,使用非常廣泛,它的外觀如圖9所示:</p><p><b> 圖9 8段數(shù)碼管</b></p><p> 這類數(shù)碼管可以分為共陽極(8個發(fā)光二極管的陽極接在—起)與共陰極(8個發(fā)光二極管陰極連在一起)兩種,共陽極就是把所有LED的陽極連接到共同接點,而每個LED的陰極分別為a、b、c、d、e、f
54、、g及dp(小數(shù)點);共陰極則是把所有LED的陰極連接到共同接點,而每個LED的陽極分別為a、b、c、d、e、f、g及dp(小數(shù)點),如圖10所示。</p><p> 圖10 共陽和共陰數(shù)碼管結(jié)構(gòu)</p><p> 通過控制這個公共端,可使該位亮或暗。如共陰極端接地或共陽極接高電平,則該位顯示器有效,反之無效。本設(shè)計采用共陰LED數(shù)碼管。</p><p>
55、數(shù)碼管有靜態(tài)顯示和動態(tài)顯示兩種,這里采用動態(tài)顯示。它具有低功耗、接口少等特點。如圖11兩個四位一體數(shù)碼管接P0口作為段選,接P2口作為位選??哲嚂r顯示時間,開始計價時前四位顯示路程,后四位顯示價錢。當(dāng)查詢等待時間時顯示為等待時間。</p><p> 圖11 顯示單元(數(shù)碼管顯示部分)</p><p> 二極管指示部分包括空車指示燈、等待時間查詢指示、開始計時指示和雙程指示如圖12。這些
56、指示燈能對出租車的每一種狀態(tài)進(jìn)行指示,空車時空車指示燈亮,查詢等待時間時等待時間查詢指示燈亮,當(dāng)汽車速度小于5km/h時開始計時,計時指示燈亮。計價前如果按下雙程鍵雙程指示燈亮,表示為雙程。</p><p> 圖12 顯示單元(二極管指示部分)</p><p><b> 3.6 儲存單元</b></p><p> 存儲單元的作用是儲存上一
57、次的里程、金額和等待時間。AT24C02 是Atmel公司的1KB的電可擦除存儲芯片,采用兩線串行的總線和單片機(jī)通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10uA(5.5V),芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8 腳的DIP 封裝,使用方便。</p><p> 圖13 儲存單元電路</p><p> 圖中R3、R4 是上拉電阻,其作用是減少AT24C0
58、2 的靜態(tài)功耗。由于AT24C02的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線SCL(時鐘脈沖)和SDA(數(shù)據(jù)/地址)與單片機(jī)P3.3和P3.4口連接,進(jìn)行傳送數(shù)據(jù)。</p><p><b> 軟件設(shè)計</b></p><p> 本系統(tǒng)的軟件設(shè)計主要分為系統(tǒng)主程序、數(shù)據(jù)處理子程序、等待時間及時子程序和鍵盤掃描子程序五個模塊,下面對每一塊進(jìn)行介紹
59、。</p><p><b> 4.1 系統(tǒng)主程序</b></p><p> 本設(shè)計中,軟件設(shè)計采用模塊化操作,利用各個模塊之間的相互聯(lián)系,在設(shè)計中采用主程序調(diào)用各個子程序的方法,使程序通俗易懂,我們設(shè)計了整體程序流程圖。</p><p> 在main函數(shù)編寫開始,要進(jìn)行初始化,包括對系統(tǒng)初始化和對硬件設(shè)備進(jìn)行初始化,并使硬件處于就緒狀態(tài)。
60、</p><p> 在主程序模塊中,需要完成對各接口芯片的初始化、出租車起價和單價的初始化、中斷向量的設(shè)計以及開中斷、循環(huán)等待等工作。系統(tǒng)流程圖如下圖14。</p><p> 圖14 系統(tǒng)主程序流程圖</p><p> 4.2 數(shù)據(jù)處理子程序</p><p> 每當(dāng)霍爾傳感器輸出一個低電平信號就使單片機(jī)中斷一次,在計數(shù)中斷服務(wù)程序,里
61、程和金額都相應(yīng)變化,當(dāng)然等待時間也換算成里程(當(dāng)速度小于5km/h時5分鐘想當(dāng)于1公里)。計算程序根據(jù)里程數(shù)分別進(jìn)入不同的計算公式。如果里程大于3公里,則執(zhí)行公式:金額=(里程-3)*單價+5;否則,執(zhí)行公式:總金額=起步價。程序流程圖如圖15所示。</p><p> 圖15 數(shù)據(jù)處理子程序流程圖</p><p> 4.3 等待時間計時子程序</p><p>
62、 當(dāng)出租車的速度5km/h時等待時間開始計時,并被換算里程,進(jìn)行計算顯示等待時間和金額。當(dāng)結(jié)算時停止計時和計費并顯示金額,當(dāng)有查詢鍵按下時顯示等待時間,當(dāng)有清零鍵按下時存儲本次金額。如圖16:</p><p> 圖16 等待時間計時子程序</p><p> 4.4 鍵盤掃描子程序</p><p> 鍵盤采用查詢的方式,放在主程序中,當(dāng)沒有按鍵按下的時候,單片機(jī)
63、循環(huán)主程序,一旦右按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。流程圖如圖17。</p><p> 圖17 鍵盤掃描子程序</p><p> Proteus軟件仿真</p><p> 本設(shè)計需要用Keil uVision4對C51程序進(jìn)行編譯,生成“.hex”文件,如圖18 :</p><p> 圖18 Keil uVision
64、4編譯</p><p> 在Proteus軟件中畫出仿真電路(如圖19),把Keil uVision4編譯后生成的“.hex”導(dǎo)入到單片機(jī)中,按“運行仿真”鍵進(jìn)行仿真。</p><p> 圖19 Proteus仿真</p><p><b> 課程設(shè)計體會</b></p><p> 在本次單片機(jī)課程設(shè)計中,經(jīng)過討論
65、,我們選擇的設(shè)計內(nèi)容是以AT89S52芯片為核心的出租車計價器,計價器的功能是以按鍵為輸入控制方式,實現(xiàn)對汽車運行過程中狀態(tài)信息的測量,主要包括等待時間、金額和里程等,并實現(xiàn)對這些信息進(jìn)行存儲及顯示處理等功能。</p><p> 在完成整個課程設(shè)計的過程中,我們遇到了許多困難,但在解決困難的同時,我們也收獲了許多,現(xiàn)在就將在整個課程設(shè)計過程中的幾點收獲與體會總結(jié)如下:</p><p>
66、 1、鞏固了單片機(jī)使用、C語言編程等專業(yè)知識</p><p> 由于單片機(jī)課程是在上學(xué)期修的,之后的這段時間也沒有使用單片機(jī)實際的做一些設(shè)計,很多單片機(jī)的知識以及C語言的編程方法已經(jīng)不是能很熟練的應(yīng)用。因此,選題后我們便開始復(fù)習(xí)單片機(jī)方面的知識,同時也通過各種方式查閱、搜索了很多相關(guān)資料。從總體設(shè)計與具體設(shè)計,從電路焊接到調(diào)試完成,在整個過程中,我們學(xué)會了基本的單片機(jī)開發(fā)技能。</p><p
67、> 2、熟悉了Proteus、Keil uVision4、word2010、viso2010等軟件的操作</p><p> 從開始設(shè)計到最終完成設(shè)計,我們使用了仿真軟件Proteus和編程軟件Keil uVision4對電路及程序進(jìn)行調(diào)試。由于不熟練,開始時各種問題層出不窮,有時一個小問題便讓我們困惑半天,我們查閱相關(guān)資料,請教他人最終才得以解決。通過編寫程序,我們深刻意識到采用模塊化的設(shè)計思想的重要性
68、,它方便編寫、修改與調(diào)試,另外加上必要的注釋,便于交流與理解。通過后期的文檔整理,我們熟悉了為我們對word2010、viso2010辦公室軟件的操作,為我們今后的工作學(xué)習(xí)打下了良好基礎(chǔ)。</p><p> 3、鍛煉了團(tuán)隊協(xié)作能力</p><p> 在整個設(shè)計的過程中,我們兩人通力合作。本著以學(xué)習(xí)知識為重,完成課程設(shè)計內(nèi)容次之的原則,先是一人做硬件設(shè)計,一人做軟件設(shè)計。在對各自分工的內(nèi)
69、容有了較深的了解之后,我們便互相交流,將對各自所負(fù)責(zé)內(nèi)容的理解與遇到的問題告訴對方,然后共同尋找問題的解決方法。在對方遇到困難時,我們互相鼓勵,互相幫助,培養(yǎng)了對他人的耐心尊重與關(guān)懷。</p><p> 本次設(shè)計我們學(xué)習(xí)到不少專業(yè)內(nèi)外的知識,但由于自己的理論知識水平有限,實踐知識和設(shè)計經(jīng)驗不足,在設(shè)計過程中難免存在一些問題。所焊實物尚有許多不足,個別功能還不能很好的實現(xiàn),主要原因是考慮問題不周全,電路設(shè)計經(jīng)驗少
70、,實際動手能力不足。懇請各位老師批評指正,以使我們在以后的學(xué)習(xí)和實踐中加以改進(jìn)和提高。</p><p><b> 參考文獻(xiàn)</b></p><p> 戴佳,陳斌,苗龍.51單片機(jī)應(yīng)用系統(tǒng)開發(fā)典型實例.中國電力出版社,2005</p><p> 余發(fā)山,王福忠.單片機(jī)原理及應(yīng)用技術(shù).中國礦業(yè)大學(xué)出版社,2008.6</p>&
71、lt;p> 侯玉寶,陳忠平,李成群.基于Proteus的51系列單片機(jī)設(shè)計與仿真.電子工業(yè)出版社,2008</p><p> 李玉梅.基于MCS-51系列單片機(jī)原理的應(yīng)用設(shè)計.國防工業(yè)出版社,2006</p><p> 邊春元,李文濤,江杰.C51單片機(jī)典型模塊設(shè)計與應(yīng)用.機(jī)械工業(yè)出版社,2008</p><p> 樓然苗,胡佳文,李光飛等.單片機(jī)實驗
72、與課程設(shè)計.浙江大學(xué)出版社,2010.10</p><p> 段晨東.單片機(jī)實用技術(shù)教程.清華大學(xué)出版社,2008</p><p> 王曉明.單片機(jī)接口技術(shù).北京航空航天大學(xué)出版社,2007</p><p> 王曉敏.傳感器檢測技術(shù)及應(yīng)用.北京大學(xué)出版社,2010</p><p> 吳紅星.電機(jī)驅(qū)動與控制專用集成電路及應(yīng)用.中國電力出
73、版社,2006</p><p><b> 附1:源程序代碼</b></p><p> #include<reg52.h></p><p> #include<intrins.h></p><p> #define uint unsigned int</p><p>
74、 #define uchar unsigned char</p><p> #define DanJia_DanCheng 20</p><p> #define DanJia_WangFan 15</p><p> #define LunJing 5 /*車輪直徑0.5m*/</p><p> #define LunCha
75、ng 1.57//m 3.14*0.5</p><p> /*************************</p><p><b> 狀態(tài)碼定義</b></p><p> **************************/</p><p> #define KongChe_flag 0
76、</p><p> #define JinEr_LiCheng_flag 1</p><p> #define ShiJian_flag 2 </p><p> #define DanJia_flag 3</p><p> /********************************
77、*****</p><p> ds1302 地址定義</p><p> *****************************************/</p><p> #define WRITE_SECOND 0x80</p><p> #define WRITE_MINUTE 0
78、x82</p><p> #define WRITE_HOUR 0x84</p><p> #define READ_SECOND 0x81</p><p> #define READ_MINUTE 0x83</p><p> #defi
79、ne READ_HOUR 0x85</p><p> #define WRITE_PROTECT 0x8E</p><p> /***************************************</p><p><b> AT24C02</b></p>
80、<p> *****************************************/</p><p> #defineOP_READ0xa1// 器件地址以及讀取操作</p><p> #defineOP_WRITE 0xa0// 器件地址以及寫入操作</p><p> /************************
81、****</p><p><b> 引腳定義</b></p><p> *********************************/</p><p> sbit Function_Key=P1^0;</p><p> sbit QieHuan_Key=P1^1;</p><p>
82、 sbit ZanTing_Key=P1^2;</p><p> sbit Clear_Key=P1^3;</p><p> sbit ChaXun_QueRen_Key=P3^0;</p><p> sbit KongChe_Led=P1^4;</p><p> sbit ChaXun_Led=P1^5;</p>&l
83、t;p> sbit JiShi_Led=P1^6;</p><p> sbit DanShuang_Led=P1^7;</p><p> //位尋址寄存器定義</p><p> sbit ACC_7 = ACC^7;</p><p> sbit SCLK = P3^6; // DS1302時鐘信號
84、 7腳</p><p> sbit DIO= P3^7; // DS1302數(shù)據(jù)信號 6腳</p><p> sbit CE = P3^5; // DS1302片選 5腳</p><p> sbit SDA = P3^4;</p><p> sbit SCL
85、= P3^3;</p><p> uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};</p><p> uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; </p><p> uchar d
86、ata dis1[]={0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00}; //時分秒顯示緩沖區(qū)</p><p> uchar data chuzhi[]={0x00,0x00,0x00}; //時分秒初值</p><p> uchar data time1302[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};&
87、lt;/p><p> uint data Count=0;</p><p> uint data Count1=0,Count2=0;</p><p> uchar data DanJia=DanJia_DanCheng; //默認(rèn)單程價格</p><p> uint data LiCheng=0;</p><p
88、> uint data JinEr=0;</p><p> uchar data Second;</p><p> uint data Minute;</p><p> uint data Speed=0;</p><p> uint data Old_Count,New_Count;</p><p
89、> uchar i=0,j=0,k=0,n=0;</p><p> uint data_temp[];</p><p> bit KaiShiFlag=0;</p><p> bit JiShiFlag=0;</p><p> bit ChaXunFlag=0;</p><p> uint ZanTi
90、ngFlag=0;</p><p> bit JinErFlag=0;</p><p> void start();</p><p> void stop();</p><p> unsigned char shin();</p><p> bit shout(uchar write_data);</p
91、><p> unsigned char read_random(uchar random_addr);</p><p> void write_byte(uchar addr, uchar write_data);</p><p> void delayms(uchar ms);</p><p> void data_process();
92、</p><p> void fill_byte(uchar fill_data,uchar n);</p><p> void delay(uint x)</p><p><b> {</b></p><p><b> uint y;</b></p><p> w
93、hile(x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p> /************************************</p><p><b> at24c02程序</b></p>
94、<p> ***************************************/</p><p> void start()</p><p><b> // 開始位</b></p><p><b> {</b></p><p><b> SDA = 1;<
95、;/b></p><p><b> SCL = 1;</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> SDA = 0;</b></p>&
96、lt;p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> S
97、CL = 0;</b></p><p><b> }</b></p><p> void stop()</p><p><b> // 停止位</b></p><p><b> {</b></p><p><b> SDA
98、 = 0;</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> SCL = 1;</b></p><p><b> _nop_();</b></
99、p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> SDA = 1;</b></p><p><
100、b> }</b></p><p> uchar shin()</p><p> // 從AT24Cxx移入數(shù)據(jù)到MCU</p><p><b> {</b></p><p> unsigned char i,read_data;</p><p> for(i = 0;
101、 i < 8; i++)</p><p><b> {</b></p><p><b> SCL = 1;</b></p><p> read_data <<= 1;</p><p> read_data |= (unsigned char)SDA;</p>
102、<p><b> SCL = 0;</b></p><p><b> }</b></p><p> return(read_data);</p><p><b> }</b></p><p> bit shout(unsigned char write_da
103、ta)</p><p> // 從MCU移出數(shù)據(jù)到AT24Cxx</p><p><b> {</b></p><p> unsigned char i;</p><p> bit ack_bit;</p><p> for(i = 0; i < 8; i++)// 循環(huán)移入8
104、個位</p><p><b> {</b></p><p> SDA = (bit)(write_data & 0x80);</p><p><b> _nop_();</b></p><p><b> SCL = 1;</b></p><p
105、><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> SCL = 0;</b></p><p> write_data <<= 1;</p><p><b> }</b&g
106、t;</p><p> SDA = 1;// 讀取應(yīng)答</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> SCL = 1;</b></p><p><b&
107、gt; _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> ack_bit = SDA;</p>
108、<p><b> SCL = 0;</b></p><p> return ack_bit;// 返回AT24Cxx應(yīng)答位</p><p><b> }</b></p><p> void write_byte(uchar addr, uchar write_data)</p>&
109、lt;p> // 在指定地址addr處寫入數(shù)據(jù)write_data</p><p><b> {</b></p><p><b> start();</b></p><p> shout(OP_WRITE);</p><p> shout(addr);</p><
110、p> shout(write_data);</p><p><b> stop();</b></p><p> delayms(10);// 寫入周期</p><p><b> }</b></p><p> uchar read_current()</p><
111、p> // 在當(dāng)前地址讀取</p><p><b> {</b></p><p> uchar read_data;</p><p><b> start();</b></p><p> shout(OP_READ);</p><p> read_data
112、= shin();</p><p><b> stop();</b></p><p> return read_data;</p><p><b> }</b></p><p> uchar read_random(unsigned char random_addr)</p>
113、<p> // 在指定地址讀取</p><p><b> {</b></p><p><b> start();</b></p><p> shout(OP_WRITE);</p><p> shout(random_addr);</p><p> re
114、turn(read_current());</p><p><b> }</b></p><p> void fill_byte(uchar fill_data,uchar n) // 填充數(shù)據(jù)fill_data到EEPROM內(nèi)</p><p><b> {</b></p><p>&l
115、t;b> uchar i;</b></p><p> for(i = 0; i < n; i++)</p><p><b> {</b></p><p> write_byte(i, fill_data);</p><p><b> }</b></p>
116、<p><b> }</b></p><p> void delayms(uchar ms)</p><p><b> {</b></p><p> unsigned char i;</p><p> while(ms--)</p><p><b&
117、gt; {</b></p><p> for(i = 0; i < 120; i++); </p><p><b> }</b></p><p><b> }</b></p><p> /*************************************<
118、;/p><p><b> 數(shù)碼管顯示程序</b></p><p> *******************************************/</p><p> void seg_show(uchar w,uchar dat,uchar dp)</p><p><b> {</b>
119、</p><p><b> if(w==dp)</b></p><p><b> {</b></p><p> P2=wei[w];</p><p> P0=table[dat]|0x80;</p><p><b> delay(1);</b>
120、</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> P2=wei[w];</p><p> P0=table[dat];</p><p&
121、gt; delay(1);</p><p><b> }</b></p><p><b> }</b></p><p> void show_nint(uchar w,uint dat,uchar n,uchar dp)//顯示w位:從w位顯示;dat:顯示數(shù)據(jù);// n:要顯示數(shù)據(jù)的位數(shù);dp:小數(shù)點顯示位;最
122、多五位數(shù)字顯示</p><p><b> { </b></p><p><b> if(n==1)</b></p><p><b> {</b></p><p> seg_show(w,dat,dp);</p><p><b&g
123、t; }</b></p><p><b> if(n==2)</b></p><p><b> {</b></p><p> seg_show(w,dat/10,dp);</p><p> seg_show((w+1),dat%10,dp);</p><p
124、><b> }</b></p><p><b> if(n==3)</b></p><p><b> {</b></p><p> seg_show(w,dat/100,dp); </p><p> seg_show((w+1),dat/10%10,d
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 出租車計價器課程設(shè)計
- 出租車計價器課程設(shè)計
- 出租車計價器課程設(shè)計
- 課程設(shè)計---出租車計價器設(shè)計
- 課程設(shè)計--出租車計價器設(shè)計
- 出租車計價器設(shè)計課程設(shè)計
- 課程設(shè)計---出租車計價器設(shè)計
- 出租車計價器課程設(shè)計報告
- 出租車計價器課程設(shè)計論文
- 硬件課程設(shè)計----出租車計價器
- eda課程設(shè)計--出租車計價器
- eda課程設(shè)計--出租車計價器
- 接口課程設(shè)計---出租車計價器
- 課程設(shè)計---出租車計價器的設(shè)計
- 課程設(shè)計--出租車計價器的設(shè)計
- 硬件課程設(shè)計--出租車計價器系統(tǒng)
- eda課程設(shè)計報告---出租車計價器
- eda課程設(shè)計報告--出租車計價器
- arm出租車計價器系統(tǒng)課程設(shè)計
- 硬件課程設(shè)計報告--出租車計價器
評論
0/150
提交評論