出租車自動計費eda設(shè)計畢業(yè)論文_第1頁
已閱讀1頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  出租車自動計費EDA設(shè)計</p><p>  學(xué)生姓名: </p><p>  學(xué) 號: </p><p>  班 級: </p><p>  專 業(yè)

2、: </p><p>  系 部: 計算機應(yīng)用技術(shù) </p><p>  指導(dǎo)教師: </p><p><b>  2012年12月</b></p><p><b>  【摘要】<

3、/b></p><p>  出租車是城市中的主要交通工具之一,隨著出租車行業(yè)的發(fā)展,對于出租車計算器的要求越來越高,最近幾年出租車行業(yè)發(fā)展迅速,在全國有幾千家出租車公司,因此出租車計費器的市場是龐大的。合理的解決出租車的交通管理問題是解決城市交通管理問題的重要方面。根據(jù)交通需求理論,對出租車實行不同區(qū)域不同的計價標(biāo)準(zhǔn),將城市中心地區(qū)價格上浮,在遠(yuǎn)離城市的中心地區(qū)價格下浮,通過經(jīng)濟杠桿的作用來調(diào)節(jié)人們的出行方

4、式,達(dá)到抑制出租車在城市中心地區(qū)的數(shù)量的目的,從而解決交通擁擠的狀況,而油價對其的影響,是使各城市都推出了運價油價聯(lián)動機制,所以出租車計費器計價標(biāo)準(zhǔn)的靈活設(shè)定成為未來計費器不可缺少的一部分。現(xiàn)在的計費器都沒有把靈活設(shè)定計價標(biāo)準(zhǔn)的功能加入其中,可靠統(tǒng)計每臺計費器更換標(biāo)準(zhǔn)及調(diào)試所需時間為1小時?,F(xiàn)在計費器大多數(shù)以單片機為平臺的,但是單片機程序是不通用的,不同的片有不同的指令集,因此設(shè)計研發(fā)比較困難。而FPGA等數(shù)字可編程器件的出現(xiàn)徹底解決了

5、這個問題,而且性能更穩(wěn)定、設(shè)計更靈活、能實現(xiàn)較復(fù)雜的功能,運用EDA軟件方便的在電腦上實現(xiàn)設(shè)計與仿真。</p><p>  關(guān)鍵詞:單片機;出租車計價器;存儲器</p><p>  【Abstract】</p><p>  Taxis are the main transportation of city, with the taxi industry develo

6、pment, the calculator for taxis are increasingly demanding, in recent years, the rapid development in a country has thousands of taxi company, therefore, the market is huge taxi devices. Reasonable solution to the proble

7、ms is the taxi transportation management to solve problems of the urban traffic management is an important aspect. According to the theory of traffic demand of different regions, different taxi valuation stan</p>

8、<p>  Keywords:singlechip taximeters memorizer</p><p><b>  目錄</b></p><p><b>  緒論1</b></p><p><b>  1系統(tǒng)工作原理2</b></p><p>  1.1 功

9、能說明2</p><p><b>  1.2基本原理2</b></p><p><b>  2 設(shè)計4</b></p><p>  2.1 單片機最小系統(tǒng)單元4</p><p>  2.2 A44E霍爾傳感器檢測單元5</p><p>  2.3 AT24C01存儲

10、單元6</p><p>  2.4 鍵盤調(diào)整單元7</p><p>  2.5  顯示單元8</p><p><b>  3 軟件設(shè)計9</b></p><p>  3.1 系統(tǒng)主程序9</p><p>  3.2 中斷程序10</p><p>  3

11、.2.1 里程計數(shù)中斷程序10</p><p>  3.2.2  中途等待中斷程序10</p><p>  3.3 計算程序10</p><p>  3.4 顯示程序11</p><p>  3.5 鍵盤程序11</p><p><b>  4 結(jié)論12</b></p&

12、gt;<p><b>  參考文獻13</b></p><p><b>  致謝14</b></p><p>  附錄A 源程序15</p><p>  附錄B 系統(tǒng)原理圖27</p><p><b>  緒論 </b></p><p

13、>  出租車行業(yè)在我國是八十年代初興起的一項新興行業(yè),隨著出租車的產(chǎn)生,計價器也就應(yīng)運而生。但當(dāng)時在全國還沒有一家企業(yè)能夠生產(chǎn),因此早期的計價器是由臺灣引進的。臺灣是計價器的主要生產(chǎn)場地,目前全世界的計價器中有90%為臺灣所生產(chǎn)?,F(xiàn)今我國生產(chǎn)計價器的企業(yè)有上百家,重慶市有兩家企業(yè)在生產(chǎn)。但由于技術(shù)原因,大部分廠家的產(chǎn)品都不能達(dá)標(biāo)。因此生產(chǎn)廠家主要還是集中在北京、上海、沈陽和廣州。 我國第一家生產(chǎn)計價器的企業(yè)是重慶市起重機廠

14、,最早的計價器全部采用機械齒輪結(jié)構(gòu),只能完成簡單的計程功能,可以說,早期的計價器就是個里程表。隨著科學(xué)技術(shù)的發(fā)展,產(chǎn)生了第二代計價器。它采用了手搖計算機與機械結(jié)構(gòu)相結(jié)合的方式,實現(xiàn)了半機械半電子化。此時它在計程的同時還可完成計價的工作。大規(guī)模集成電路的發(fā)展又產(chǎn)生了第三代計價器,也就是全電子化的計價器。它的功能也在不斷完善,當(dāng)單片機出現(xiàn)并應(yīng)用于計價器后,現(xiàn)代出租車計價器的模型也就基本具備了,它可以完成計程、計價、顯示等基本工作。單片機以及

15、外圍芯片的不斷發(fā)展促進了計價器的發(fā)展,出租車計價器在最初使用時具備的主要功能是根據(jù)行駛里程計價,要求精度高,可靠性好。隨著電子技術(shù)的</p><p><b>  1系統(tǒng)工作原理</b></p><p><b>  1.1 功能說明</b></p><p>  全面熟悉、掌握EDA基本知識,掌握利用EDA對常用的的組合邏輯電

16、路和時序邏輯電路編程,把編程和實際結(jié)合起來,熟悉編制和調(diào)試程序的技巧,掌握分析結(jié)果的若干有效方法,進一步提高上機動手能力,培養(yǎng)使用設(shè)計綜合電路的能力,養(yǎng)成提供文檔資料的習(xí)慣和規(guī)范編程的思想。由于采用了CPLD/FPGA大規(guī)??删幊踢壿嬈骷麢C功耗小、抗干擾能力強、系統(tǒng)穩(wěn)定、工作可靠、升級方便。另外,根據(jù)實際需要,系統(tǒng)可方便地增加以下功能:①通過芯片內(nèi)部編程增加時鐘功能(器件內(nèi)部資源足夠),既可為司機和乘客提供方便,又能為夜間行車自動調(diào)

17、整收費標(biāo)準(zhǔn)提供參考;②用CPLD/FPGA的輸出引線控制語音芯片,可向乘客發(fā)出問候語、提醒乘客告訴司機所要到達(dá)的地點、報出應(yīng)收繳的費用等。從起步價開始,當(dāng)汽車程行駛未滿3公里時,均按起步價計算。過3公里后,實現(xiàn)每1公里單價收費,中間遇暫停時,計程數(shù)不再增加,開始計時收費,測距收費和測時收費的和便構(gòu)成了一位乘客的車費。同時,白天和夜晚價格不同,可以進行切換。白天單價、夜晚單價、等待單價和起步價格都可通過獨立鍵盤進行調(diào)節(jié)。(默認(rèn)起步價為5元

18、/3公里,里程單價白天為1.5元/公里,夜晚為1.8元/</p><p><b>  1.2基本原理</b></p><p>  計數(shù)器系統(tǒng)主要由五部分組成:A44E霍爾傳感器、AT89S52單片機、獨立鍵盤、EEPROM AT24C01和顯示數(shù)碼管。</p><p>  霍爾傳感器安裝在車輪上,主要檢測汽車行進的公里數(shù),并產(chǎn)生一系列相應(yīng)的脈沖

19、輸出,脈沖送到單片機進行處理,單片機根據(jù)程序設(shè)定通過計算脈沖數(shù)換算出行駛公里數(shù),再根據(jù)從EEPROM中讀取的價格等相關(guān)數(shù)據(jù)進行金額的計算,計算好的金額、里程和單價都實時地顯示在數(shù)碼管上。獨立鍵盤可以調(diào)節(jié)價格等相關(guān)數(shù)據(jù),按下相應(yīng)的按鈕,產(chǎn)生信號交由單片機處理并實時顯示出來,調(diào)節(jié)好的數(shù)據(jù)存儲到EEPROM中,掉電后可以使調(diào)好的數(shù)據(jù)不丟失,下次得電后直接從EEPROM讀到單片機,系統(tǒng)結(jié)構(gòu)圖如圖1。</p><p>&l

20、t;b>  圖1 系統(tǒng)結(jié)構(gòu)圖</b></p><p><b>  2 設(shè)計</b></p><p>  2.1 單片機最小系統(tǒng)單元</p><p>  主控機系統(tǒng)采用了Atmel 公司生產(chǎn)的 AT89S52單片機,它含有256 字節(jié)數(shù)據(jù)存儲器,內(nèi)置8K 的電可擦除FLASH ROM,可重復(fù)編程,大小滿足主控機軟件系統(tǒng)設(shè)計,所以

21、不必再擴展程序存儲器。復(fù)位電路和晶振電路是AT89S52 工作所需的最簡外圍電路。單片機最小系統(tǒng)電路圖如圖2所示。</p><p>  圖2單片機最小系統(tǒng)電路圖</p><p>  AT89S52 的復(fù)位端是一個史密特觸發(fā)輸入,高電平有效。RST端若由低電平上升到高電平并持續(xù)2個周期,系統(tǒng)將實現(xiàn)一次復(fù)位操作。在復(fù)位電路中,按一下復(fù)位開關(guān)就使在RST端出現(xiàn)一段時間的高電平,外接11.0592

22、M 晶振和兩個30pF 電容組成系統(tǒng)的內(nèi)部時鐘電路。</p><p>  2.2 A44E霍爾傳感器檢測單元</p><p>  A44E屬于開關(guān)型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號符合TTL電平標(biāo)準(zhǔn),可以直接接到單片機的IO端口上,而且其最高檢測頻率可以達(dá)到1MHZ。A44E集成霍爾開關(guān)由穩(wěn)壓器A,霍爾電勢發(fā)生器B,差分放大器C,施密特觸發(fā)器D及OC門輸出E

23、五個基本部分組成。</p><p>  在輸入端輸入電壓Vcc,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍爾電勢發(fā)生器的兩端,根據(jù)霍爾效應(yīng)原理,當(dāng)霍爾片處在磁場中時,在垂直于磁場的方向通以電流,則與這二者相垂直的方向上將會產(chǎn)生霍爾電勢差VH輸出,該VH信號經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC門輸出。當(dāng)施加的磁場達(dá)到工作點(即Bop)時,觸發(fā)器輸出高電壓(相對于地電位),使三極管導(dǎo)通,此時OC門輸出端輸出低電壓,三

24、極管截止,使OC門輸出高電壓,這種狀態(tài)為關(guān)。這樣兩次電壓變換,使霍爾開關(guān)完成了一次開關(guān)動作。A44E霍爾傳感器原理如圖3所示。</p><p>  圖3A44E霍爾傳感器原</p><p>  里程計算是通過安裝在車輪上的霍爾傳感器檢測到的脈沖信號,送到單片機產(chǎn)生中斷,單片機再根據(jù)程序設(shè)定,計算出里程。其原理如圖4所示。</p><p>  圖4計算出里程原理圖&l

25、t;/p><p>  本系統(tǒng)選擇了將A44E的脈沖輸出口接到P3.3口外部中斷1作為信號的輸入端(這樣可以減少程序設(shè)計的麻煩),車輪每轉(zhuǎn)一圈(設(shè)車輪的周長是1米),霍爾開關(guān)就檢測并輸出信號,引起單片機的中斷,對脈沖計數(shù),當(dāng)計數(shù)達(dá)到1000次時,即1公里,單片機就控制將金額自動增加,如圖5。</p><p>  圖5單片機就控制將金額自動增加</p><p>  2.3

26、AT24C01存儲單元</p><p>  存儲單元的作用是在電源斷開的時候,存儲當(dāng)前設(shè)定的單價信息。AT24C01 是Ateml公司的1KB的電可擦除存儲芯片,采用兩線串行的總線和單片機通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10uA(5.5V),芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8 腳的DIP 封裝,使用方便。</p><p>  AT24C02芯片

27、引腳配置如圖6所示。</p><p>  圖6 AT24C02芯片引腳配置</p><p>  儲存單元電路連接如圖7所示。</p><p>  圖7 儲存單元電路連接</p><p>  圖中R4、R5 是上拉電阻,其作用是減少AT24C01 的靜態(tài)功耗。由于AT24C01的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線SC

28、L(時鐘脈沖)和SDA(數(shù)據(jù)/地址)與單片機P2.2和P2.3口連接,進行傳送數(shù)據(jù)。每當(dāng)設(shè)定一次單價,系統(tǒng)就自動調(diào)用存儲程序,將單價信息保存在芯片內(nèi);當(dāng)系統(tǒng)重新上電的時候,自動調(diào)用讀存儲器程序,將存儲器內(nèi)的單價等信息,讀到緩存單元中,供主程序使用。</p><p>  2.4 鍵盤調(diào)整單元</p><p>  當(dāng)單價等信息需要進行修改時,就要用到鍵盤進行修改。由于調(diào)節(jié)信息不多,故采用4個獨

29、立鍵盤即可,分別實現(xiàn)清零、切換、增大、減小和功能等作用。電路原理如圖8所示。 </p><p><b>  圖8 電路原理</b></p><p>  S1:接P1.0口,對上一次的計費進行清零,為下次載客準(zhǔn)備</p><p>  S2:接P1.1口,實現(xiàn)白天和夜晚單價的切換;當(dāng)功能鍵S4按下時,S2可對數(shù)據(jù)進行增大。</p&g

30、t;<p>  S3:接P1.2口,當(dāng)功能鍵S4按下時,S3可對數(shù)據(jù)進行減小。</p><p>  S4:接P1.3口,按1次,進入調(diào)整白天單價;按2次,進入調(diào)整夜晚單價;按3次,進入調(diào)整等待單價;按4次,進入調(diào)整起步價;按5次,返回。</p><p><b>  2.5  顯示單元</b></p><p>  顯示單元

31、由7個8段共陽數(shù)碼管組成,采用動態(tài)掃描進行顯示。前三個數(shù)碼管分別接P3.0、P3.1和P3.2,用于顯示總金額;中間兩個分別接P3.4和P3.5,用于顯示里程;后邊兩個分別接P3.6和P3.7,用于顯示單價。電路如圖9所示。</p><p><b>  圖9 顯示單價</b></p><p><b>  3 軟件設(shè)計</b></p>

32、<p><b>  3.1 系統(tǒng)主程序</b></p><p>  在主程序模塊中,需要完成對各參量和接口的初始化、出租車起價和單價的初始化以及中斷、計算、循環(huán)等工作。另外,在主程序模塊中還需要設(shè)置啟動/清除標(biāo)志寄存器、里程寄存器和價格寄存器,并對它們進行初始化。然后,主程序?qū)⒏鶕?jù)各標(biāo)志寄存器的內(nèi)容,分別完成啟動、清除、計程和計價等不同的操作。</p><p&

33、gt;  當(dāng)汽車運行起來時,就啟動計價,根據(jù)里程寄存器中的內(nèi)容計算和判斷行駛里程是否已超過起步價公里數(shù)。若已超過,則根據(jù)里程值、每公里的單價數(shù)和起步價數(shù)來計算出當(dāng)前的總金額,并將結(jié)果存于總金額寄存器中;中途等待時,無脈沖輸入,不產(chǎn)生中斷,當(dāng)時間超過等待設(shè)定值時,開始進行計時,并把等待價格加到總金額里,然后將總金額、里程和單價送數(shù)碼管顯示出來。程序流程如圖10所示。</p><p><b>  圖10 程

34、序流程</b></p><p><b>  3.2 中斷程序</b></p><p>  3.2.1 里程計數(shù)中斷程序</p><p>  每當(dāng)霍爾傳感器輸出一個低電平信號就使單片機中斷一次,當(dāng)里程計數(shù)器對里程脈沖計滿1000次時,進入里程計數(shù)中斷服務(wù)程序中,里程變量加一。主函數(shù)中總金額也相應(yīng)地變化。</p><

35、p>  3.2.2  中途等待中斷程序</p><p>  在中途等待中斷程序中,每1ms產(chǎn)生一次中斷,將當(dāng)前里程值送入某個緩存變量,每5分鐘將緩存變量中的值和當(dāng)前里程值比較,當(dāng)汽車停止,霍爾傳感器5分鐘沒有輸出信號,當(dāng)前里程值和緩存變量內(nèi)的值相同,則進入等待計時,每5分鐘記一次價格。</p><p><b>  3.3 計算程序</b></p&

36、gt;<p>  計算程序根據(jù)里程數(shù)分別進入不同的計算公式。如果里程大于3公里,則執(zhí)行公式:總金額=起步價+(里程-3)*單價+等待時間*等待單價;否則,執(zhí)行公式:總金額=起步價+等待時間*等待單價。程序流程圖如圖11所示。</p><p><b>  圖11 程序流程圖</b></p><p><b>  3.4 顯示程序</b>

37、</p><p>  顯示程序利用定時器每1ms產(chǎn)生一次中斷,相應(yīng)變量置位,點亮一個數(shù)碼管,顯示一位數(shù)據(jù),利用主函數(shù)內(nèi)的循環(huán),實現(xiàn)動態(tài)掃描顯示,同時根據(jù)數(shù)碼管余輝和人眼暫留現(xiàn)象,即可實現(xiàn)顯示。</p><p><b>  3.5 鍵盤程序</b></p><p>  鍵盤采用查詢的方式,放在主程序中,當(dāng)沒有按鍵按下的時候,單片機循環(huán)主程序,一旦

38、右按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。流程圖如圖12。</p><p><b>  圖12 流程圖</b></p><p><b>  4 結(jié)論</b></p><p>  經(jīng)過近6個月的時間做了關(guān)于“出租車自動計費EDA設(shè)計”的畢業(yè)設(shè)計。因我用單片機來完成的整個畢業(yè)設(shè)計,所以對單片機的應(yīng)用有了更深的了解。當(dāng)

39、然在整個的畢業(yè)設(shè)計中并不是一帆風(fēng)順的,過程中還是遇到了很多的問題,比如,共陰共陽接法的區(qū)別,通過上網(wǎng)查資料發(fā)現(xiàn)共陰共陽接法完全相同,不同的是在于數(shù)碼管譯碼表不同,互相取反了,解決了此問題(共陽數(shù)碼管譯碼表:DB0C0h0F9h0A4h0B0h099h092h082h0F8h080h90h;共陰數(shù)碼管譯碼表:DB 3FH06H5BH4FH66H6DH7DH07H7FH6FH);中途停車計費的問題,加入單刀雙擲開關(guān),當(dāng)中途停車時把打到接地端

40、,這樣可以實現(xiàn)途中等待(>30秒開始收費) 1元/30秒。使得計價器更具普遍性;而對于數(shù)碼管動態(tài)掃描顯示和鍵盤的延時防抖的綜合編程不能較好地解決;對于代碼的前后順序及調(diào)用掌握得還不夠好;通過這幾個月的反復(fù)修改及調(diào)試,以及參考網(wǎng)上,書本上的程序,并在知道教師的幫助下最終還是把問題解決了。通過這次課程設(shè)計,我最大的收獲就是自己的動手能力和獨立解決問題的能力得到了很大的提高,也充分體會到了自己設(shè)計東西的樂趣、學(xué)會查閱資料和對別</

41、p><p><b>  參考文獻</b></p><p>  [1] 曹昕燕,周鳳臣,聶春燕.EDA技術(shù)實驗與課程設(shè)計[M].北京:清華大學(xué)出版社,2006:331~345.</p><p>  [2] 譚會生,張昌凡.EDA技術(shù)及應(yīng)用[M].第2版.西安:西安電子科技大學(xué)出版社,2004:12~125.</p><p>

42、  [3] 高有堂. EDA技術(shù)及應(yīng)用實踐 [M].北京:高有堂清華大學(xué)出版社, 2006:156~158.</p><p>  [4] 編著不詳.EDA技術(shù)與CPLD/FPGA開發(fā)應(yīng)用簡明教程 [M].北京:清華大學(xué), 2007:156~178.</p><p>  [5] 周立功.EDA實驗與實踐 [M].北京:航空航天大學(xué)出版社, 2007:112~199. </p>

43、<p>  [6] 唐俊英.EDA技術(shù)應(yīng)用實例教程 [M].北京:電子工業(yè)出版社,2008:145~165. </p><p>  [7] 臧春華. 電子線路設(shè)計與應(yīng)用[M] . 高等教育出版社, 2004年6月.</p><p>  [8] 何小艇. 電子系統(tǒng)設(shè)計[M]. 浙江大學(xué)出版社,2000年5月.</p><p>  [9] 高吉祥. 電子技術(shù)基

44、礎(chǔ)實驗與課程設(shè)計[M]. 電子工業(yè)出版社,2004年11月.</p><p>  [10] 大連理工大學(xué)電工電子實驗中心組編.數(shù)字電子技術(shù)基礎(chǔ)與設(shè)計[M].2004:148~165.</p><p>  [11] 盧寶良.單片機系統(tǒng)的可靠性措施.微型機與應(yīng)用[M].1996:111~235.</p><p>  [12] 張家良,董秀蓮. 單片機控制系統(tǒng)的設(shè)計與調(diào)試

45、方法[J]. 現(xiàn)代電子技術(shù). 2002,9(7):12~19.</p><p>  [13] 馬崇良.單片微型計算機原理及應(yīng)用[M].北京:中國紡織出版社.1996:189~192.</p><p>  [14] 周慈航.單片機應(yīng)用程序設(shè)計技術(shù)[M].北京:北京航空航天大學(xué)出版社.1991:123~152.</p><p>  [15] Yang. Y., Yi.

46、J., Woo, Y.Y., and Kim. B.: ‘Optimum design for linearityand efficiency of microwave Doherty amplifier using a new loadmatching technique’, Microw. J., 2001, 44, (12), pp. 20–36</p><p>  [16] Vizimuller, P.:

47、 ‘RF design guide-systems, circuits, and equations’ (ArtechHouse, Boston, MA, 1995)[6]R. Dye, “Visual Object-Orientated Programming,” Dr. Dobbs MacintoshJournal, Sept. 1st ( 1991). </p><p><b>  致謝</

48、b></p><p>  經(jīng)歷了近六個月的時間,畢業(yè)論文暫告收尾,這也意味著我在北京城市學(xué)院的四年的學(xué)習(xí)生活既將結(jié)束。回首既往,自己一生最寶貴的時光能于這樣的校園之中,能在眾多學(xué)富五車、才華橫溢的老師們的熏陶下度過,實是榮幸之極。在這四年的時間里,我在學(xué)習(xí)上和思想上都受益非淺。這除了自身努力外,與各位老師、同學(xué)和朋友的關(guān)心、支持和鼓勵是分不開的</p><p>  論文的寫作是枯燥艱

49、辛而又富有挑戰(zhàn)的。出租車計價器是一個軟件與硬件相結(jié)合的課題,在指導(dǎo)老師的諄諄誘導(dǎo)、同學(xué)的出謀劃策及家長的支持鼓勵,是我堅持完成論文的動力源泉。在此,我特別要感謝我的導(dǎo)師王良老師。從論文的選題、文獻的采集、框架的設(shè)計、結(jié)構(gòu)的布局到最終的論文定稿,從內(nèi)容到格式,從標(biāo)題到標(biāo)點,他都費盡心血。沒有王良老師的辛勤栽培、孜孜教誨,就沒有我論文的順利完成。</p><p>  感謝電子與信息工程院系的各位同學(xué),與他們的交流使我

50、受益頗多。最后要感謝我的家人以及我的朋友們對我的理解、支持、鼓勵和幫助,正是因為有了他們,我所做的一切才更有意義;也正是因為有了他們,我才有了追求進步的勇氣和信心。</p><p>  時間的倉促及自身專業(yè)水平的不足,整篇論文肯定存在尚未發(fā)現(xiàn)的缺點和錯誤。懇請閱讀此篇論文的老師、同學(xué),多予指正,不勝感激!</p><p>  隨著畢業(yè)設(shè)計的結(jié)束,大學(xué)生活也即將結(jié)束,我也要馬上就步入工作崗位

51、,走進社會,在整個畢業(yè)設(shè)計的過程中所學(xué)到的獨立閱讀,查閱資料,遇到問題通過理論結(jié)合實踐解決問題,與人溝通研討的能力是我受益匪淺,會為我以后的踏入社會,參加工作打下堅實的基礎(chǔ),我也會在日后學(xué)習(xí)和工作中不斷的充實和完善自己,以優(yōu)秀的業(yè)績向母校匯報!</p><p><b>  附錄A 源程序</b></p><p>  #include<reg52.h>&l

52、t;/p><p>  #include <intrins.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  #define delayNOP(); {_nop_();_nop_();_nop_();_nop_()

53、;_nop_();};</p><p>  Ucharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};</p><p>  sbit exter=P3^3; /外部中斷/</p><p>  sbit key0=P1^0;

54、 /清零/</p><p>  sbit key1=P1^1; /切換/</p><p>  sbit key2=P1^2; </p><p>  sbit key3=P1^3; /功能鍵/</p><p>

55、;  sbit p30=P3^0; /數(shù)碼管各位控制/</p><p>  sbit p31=P3^1;</p><p>  sbit p32=P3^2;</p><p>  sbit p34=P3^4;</p><p>  sbit p35=P3^5;</p><p>  

56、sbit p36=P3^6;</p><p>  sbit p37=P3^7;</p><p>  sbit SDA=P2^3; /IIC引腳/</p><p>  sbit SCL=P2^2;</p><p>  uint inter,aa,bb,temp,temp1;</p>

57、<p>  uint zongjine,licheng,dengdai;</p><p>  uint key3num,qiehuantemp,delaytemp;</p><p>  uchar danjia1,danjia2,danjia3,danjia,qibu;</p><p>  void delay(uint x)

58、 /延時時基為1ms/</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  for(i=x;i>0;i--)</p><p>  for(j=340;j>0;j--);</p><p>&

59、lt;b>  }</b></p><p>  void start() /IIC開始位/</p><p><b>  {</b></p><p><b>  SDA = 1;</b></p><p><b>  SCL

60、 = 1;</b></p><p>  delayNOP();</p><p><b>  SDA = 0;</b></p><p>  delayNOP();</p><p><b>  SCL = 0;</b></p><p><b>  }<

61、/b></p><p>  void stop() / IIC停止位/</p><p><b>  {</b></p><p><b>  SDA = 0;</b></p><p>  delayNOP();</p><

62、;p><b>  SCL = 1;</b></p><p>  delayNOP();</p><p><b>  SDA = 1;</b></p><p><b>  }</b></p><p>  void respons()

63、 /IIC應(yīng)答位/</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p><b>  SCL=1;</b></p><p>  delayNOP();</p><p>  while((S

64、DA==1)&&(i<250))</p><p><b>  i++;</b></p><p><b>  SCL=0;</b></p><p>  delayNOP();</p><p><b>  }</b></p><p> 

65、 uchar read_byte() / 從EEPROM讀到MCU/</p><p><b>  {</b></p><p>  uchar i,j;</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p&

66、gt;<p><b>  SCL=1;</b></p><p><b>  j<<=1;</b></p><p><b>  j|=SDA;</b></p><p><b>  SCL=0;</b></p><p><b&g

67、t;  }</b></p><p>  return(j);</p><p><b>  }</b></p><p>  void write_byte(uchar date) / 從MCU寫到EEPROM/</p><p><b>  {</b></p>

68、;<p>  uchar i,temp;</p><p>  temp=date;</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  temp=temp<<1;</p><p><b>  S

69、CL=0;</b></p><p>  delayNOP();</p><p><b>  SDA=CY;</b></p><p>  delayNOP();</p><p><b>  SCL=1;</b></p><p>  delayNOP();</p

70、><p><b>  }</b></p><p><b>  SCL=0;</b></p><p>  delayNOP();</p><p><b>  SDA=1;</b></p><p>  delayNOP();</p><p&g

71、t;<b>  }</b></p><p>  void write_data(uchar addr, uchar date) / 在指定地址addr處寫入數(shù)據(jù)date/</p><p><b>  {</b></p><p><b>  start();</b></p>&l

72、t;p>  write_byte(0xa0);</p><p>  respons();</p><p>  write_byte(addr);</p><p>  respons();</p><p>  write_byte(date);</p><p>  respons();</p><

73、;p><b>  stop();</b></p><p><b>  }</b></p><p>  uchar read_data(uchar addr) / 在指定地址addr讀取數(shù)據(jù)/</p><p><b>  {</b></p><p> 

74、 uchar date;</p><p><b>  start();</b></p><p>  write_byte(0xa0);</p><p>  respons();</p><p>  write_byte(addr);</p><p>  respons();</p>

75、<p><b>  start();</b></p><p>  write_byte(0xa1);</p><p>  respons();</p><p>  date=read_byte();</p><p><b>  stop();</b></p><p>

76、;  return date;</p><p><b>  }</b></p><p>  void display(uint zongjine0,uint licheng0,uint danjia0) /數(shù)碼管顯示/</p><p><b>  {</b></p><p&g

77、t;  uint jbai,jshi,jge,lshi,lge,dshi,dge;</p><p>  uint numwei,numshu; /數(shù)碼管位置分配/</p><p>  jbai=zongjine0/100;</p><p>  jshi=zongjine0%100/10;</p><

78、p>  jge=zongjine0%100%10;</p><p>  lshi=licheng0/10;</p><p>  lge=licheng0%10;</p><p>  dshi=danjia0/10;</p><p>  dge=danjia0%10; /數(shù)碼管動態(tài)顯

79、示/</p><p><b>  if(aa)</b></p><p><b>  {</b></p><p><b>  aa=0;</b></p><p><b>  numshu++;</b></p><p>  if(num

80、shu==7)</p><p><b>  numshu=0;</b></p><p><b>  P3=0xff;</b></p><p>  switch(numwei)</p><p><b>  {</b></p><p>  case 0:p3

81、0=0;P0=table[jbai];break;</p><p>  case 1:p31=0;P0=table[jshi]&0x7f;break;</p><p>  case 2:p32=0;P0=table[jge];break;</p><p>  case 3:p34=0;P0=table[lshi];break;</p><

82、p>  case 4:p35=0;P0=table[lge];break;</p><p>  case 5:p36=0;P0=table[dshi]&0x7f;break;</p><p>  case 6:p37=0;P0=table[dge];break; </p><p><b>  }</b></p&

83、gt;<p><b>  numwei++;</b></p><p>  if(numwei==7)</p><p><b>  numwei=0;</b></p><p><b>  }</b></p><p><b>  }</b><

84、;/p><p>  void keyscan() /鍵盤掃描/</p><p><b>  {</b></p><p>  if(key3==0) /功能鍵調(diào)節(jié)/</p><p><b>  

85、{</b></p><p><b>  delay(5);</b></p><p>  if(key3==0)</p><p><b>  {</b></p><p>  key3num=1;</p><p>  while(!key3);</p>

86、<p><b>  delay(5);</b></p><p>  while(!key3);</p><p>  while(key3num)</p><p><b>  {</b></p><p>  if(key3num==1)

87、 /調(diào)白天單價/</p><p><b>  {</b></p><p>  if(key1==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(key1==0)</p

88、><p><b>  {</b></p><p>  danjia1++;</p><p>  if(danjia1==100)</p><p>  danjia1=0;</p><p>  while(!key1);</p><p><b>  delay(5);&

89、lt;/b></p><p>  while(!key1); </p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key2==0)</p><p><b>  {</b></p>

90、;<p><b>  delay(5);</b></p><p>  if(key2==0)</p><p><b>  {</b></p><p>  danjia1--;</p><p>  if(danjia1==-1)</p><p>  danjia1

91、=99;</p><p>  while(!key2);</p><p><b>  delay(5);</b></p><p>  while(!key2);</p><p><b>  }</b></p><p><b>  }</b></p&

92、gt;<p>  display(1,0,danjia1);</p><p><b>  }</b></p><p>  if(key3num==2) /調(diào)夜晚單/</p><p><b>  {</b></p><p> 

93、 write_data(1,danjia1);</p><p>  if(key1==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(key1==0)</p><p><b>  {&l

94、t;/b></p><p>  danjia2++;</p><p>  if(danjia2==100)</p><p>  danjia2=0;</p><p>  while(!key1);</p><p><b>  delay(5);</b></p><p>

95、;  while(!key1);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key2==0)</p><p><b>  {</b></p><p><b>  delay(5);

96、</b></p><p>  if(key2==0)</p><p><b>  {</b></p><p>  danjia2--;</p><p>  if(danjia2==-1)</p><p>  danjia2=99;</p><p>  while

97、(!key2);</p><p><b>  delay(5);</b></p><p>  while(!key2); </p><p><b>  }</b></p><p><b>  }</b></p><p>  display(2,0

98、,danjia2);</p><p><b>  }</b></p><p>  if(key3num==3) /調(diào)等待單價/</p><p><b>  {</b></p><p>  write_data(2,danjia2);</p

99、><p>  if(key1==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(key1==0)</p><p><b>  {</b></p><p>

100、  danjia3++;</p><p>  if(danjia3==100)</p><p>  danjia3=0;</p><p>  while(!key1);</p><p><b>  delay(5);</b></p><p>  while(!key1);</p>&

101、lt;p><b>  }</b></p><p><b>  }</b></p><p>  if(key2==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p&g

102、t;  if(key2==0)</p><p><b>  {</b></p><p>  danjia3--;</p><p>  if(danjia3==-1)</p><p>  danjia3=99;</p><p>  while(!key2);</p><p>

103、<b>  delay(5);</b></p><p>  while(!key2);</p><p><b>  }</b></p><p>  } </p><p>  display(3,0,danjia3);</p>

104、<p><b>  }</b></p><p>  if(key3num==4) /調(diào)起步價/</p><p><b>  {</b></p><p>  write_data(3,danjia3);</p><p>  if(key1

105、==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(key1==0)</p><p><b>  {</b></p><p><b>  qibu++;</b

106、></p><p>  if(qibu==100)</p><p><b>  qibu=0;</b></p><p>  while(!key1);</p><p><b>  delay(5);</b></p><p>  while(!key1);</p&g

107、t;<p><b>  }</b></p><p><b>  }</b></p><p>  if(key2==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p>&l

108、t;p>  if(key2==0)</p><p><b>  {</b></p><p><b>  qibu--;</b></p><p>  if(qibu==-1)</p><p><b>  qibu=99;</b></p><p>  

109、while(!key2);</p><p><b>  delay(5);</b></p><p>  while(!key2);</p><p><b>  }</b></p><p>  }

110、 </p><p>  display(4,0,qibu);</p><p><b>  }</b></p><p>  if(key3num==5) /退出功能鍵/</p><p><b>  {</b></p>

111、<p>  write_data(4,qibu);</p><p>  key3num=0;</p><p>  } </p><p>  if(key3==0)</p><p><b>  {</b></p><p><b>

112、  delay(5);</b></p><p>  if(key3==0)</p><p><b>  {</b></p><p>  key3num++;</p><p>  while(!key3);</p><p><b>  delay(5);</b>&l

113、t;/p><p>  while(!key3);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>&l

114、t;p><b>  }</b></p><p><b>  }</b></p><p>  void init()</p><p><b>  {</b></p><p><b>  SDA=1;</b></p><p>&l

115、t;b>  SCL=1;</b></p><p>  zongjine=0;</p><p>  licheng=0;</p><p>  dengdai=0;</p><p>  danjia1=read_data(1);</p><p>  danjia2=read_data(2);</p&

116、gt;<p>  danjia3=read_data(3);</p><p>  qibu=read_data(4);</p><p>  aa=0;              /數(shù)碼管動態(tài)掃描的定時器時基個數(shù)/</p>&

117、lt;p>  bb=0;              /判斷是否等待的時基個數(shù)/</p><p><b>  inter=0;</b></p><p>  EA=1;      

118、0;   /開總中斷/</p><p>  EX1=1;          /開外部中斷1/</p><p>  IT1=1;         

119、  /觸發(fā)方式下降沿/</p><p>  TMOD=0x01;</p><p>  TH0=(65536-1000)/256;</p><p>  TL0=(65536-1000)%256;</p><p>  ET0=1;       &

120、#160; /開定時器T0中斷/</p><p>  TR0=1;        /開定時器T0 /</p><p><b>  P3=0x08;</b></p><p>  P0=table[0];</p><p

121、><b>  }</b></p><p>  void jisuan()</p><p><b>  {</b></p><p>  if(licheng>3)</p><p>  zongjine=qibu+(licheng-3)*danjia+dengdai*danjia3;

122、0;/金額計算/</p><p><b>  else</b></p><p>  ongjine=qibu+dengdai*danjia3;      /起步公里內(nèi)金額計算/</p><p><b>  }</b></p><p>  v

123、oid qiehuan()</p><p><b>  {</b></p><p>  if(key1==0)             /白天夜晚切換/</p><p><b>  {</b>&

124、lt;/p><p>  delay(5);           /鍵盤防抖/</p><p>  if(key1==0)</p><p>  qiehuantemp=!qiehuantemp;</p><p>  while(!key1);&l

125、t;/p><p><b>  delay(5);</b></p><p>  while(!key1);</p><p><b>  }</b></p><p>  if(qiehuantemp==0)</p><p>  danjia=danjia2;</p>&

126、lt;p>  if(qiehuantemp==1)</p><p>  danjia=danjia1;</p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p><b>  in

127、it();</b></p><p>  qiehuantemp=1;</p><p>  key3num=0;</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  qiehuan(); 

128、60;              /切換白天夜晚單價/</p><p>  jisuan();               &

129、#160;/計算總金額/</p><p>  display(zongjine,licheng,danjia);                   keyscan();    

130、0;                           if(key0==0)       

131、60;    /清零鍵/</p><p>  init();                          }&

132、#160;               </p><p><b>  }</b></p><p>  void inter1() interrupt 2      

133、60;     /脈沖中斷/</p><p><b>  {</b></p><p>  delay(5);                 

134、0;             if(exter==0)                     &l

135、t;/p><p>  {                                 

136、     T1=1;</p><p><b>  inter++;</b></p><p>  if(inter==5)</p><p><b>  {</b></p><p><b>  inter=0;</b></p&

137、gt;<p>  licheng++;</p><p><b>  }</b></p><p>  }                     &

138、#160;             while(!exter);                    

139、60;        delay(5);                           

140、60;  while(!exter);                         </p><p><b>  }</b></p>&

141、lt;p>  void timer0() interrupt 1</p><p><b>  {</b></p><p>  TH0=(65536-1000)/256;</p><p>  TL0=(65536-1000)%256;</p><p><b>  aa++;</b></p&

142、gt;<p><b>  bb++;</b></p><p>  temp1=licheng;           /測試是否進入等待/</p><p>  if(bb==10000)     &

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論