

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 計算機科學與技術學院</p><p><b> 硬件課程設計報告</b></p><p> 成 員: </p><p> 專 業(yè): 計算機科學與技術專業(yè) </p>&l
2、t;p> 班 級: 計科09-4班 </p><p> 設計題目: 出租車計價器 </p><p> 指導教師: 職 稱: </p><p><b
3、> 2011年10月</b></p><p> 課程設計指導教師評閱書</p><p><b> 指導教師評語:</b></p><p> 成 績: 指導教師簽字:</p><p> 年 月 日</p><p
4、><b> 摘 要</b></p><p> 出 租車已經(jīng)是城市交通的重要組成部分,從加強行業(yè)管理以及減少司機與乘客的糾紛出發(fā),具有良好性能的計價器對出租車司機和乘客來說都是很必要的。而采用模擬電路和數(shù)字電路設計的計價器整體電路的規(guī)模較大,用到的器件多,造成故障率高,難調(diào)試。而采用單片機進行的設計,相對來說功能強大,用較少的硬件和適當?shù)能浖嗷ヅ浜峡梢院苋菀椎貙崿F(xiàn)設計要求,
5、且靈活性強,可以通過軟件編程來完成更多的附加功能。</p><p> 設計采用AT89C52單片機為主控器,附加U18949霍爾傳感器測距,實現(xiàn)對出租車計價統(tǒng)計輸出采用8段數(shù)碼顯示管。本電路設計的計價器不但能實現(xiàn)基本的計價,而且還能根據(jù)單程,雙程來調(diào)節(jié)單價。出租車計價器用于記錄里程與價格的關系,它能有效地避免司機與乘客的矛盾,保證雙方的利益。</p><p> 用單片機來完成設計要求。
6、單片機功能強大,用較少的硬件和適當?shù)能浖嗷ヅ浜峡梢院苋菀椎膶崿F(xiàn)設計要求,且靈活性強,可以通過軟件編程來完成更多的附加功能。針對計費模式的切換,通過軟件編程就可以輕容易的實現(xiàn)。避免了機械開關帶來的不穩(wěn)定因素。</p><p><b> 目錄</b></p><p><b> 1概述3</b></p><p><
7、b> 1.1功能簡述3</b></p><p> 1.2設計任務及要求3</p><p> 1.3方案論證及比較3</p><p> 2 系統(tǒng)總體方案及硬件設計3</p><p> 2.1單片機各引腳功能說明3</p><p> 2.2 單片機最小系統(tǒng)單元3</
8、p><p><b> 2.3按鍵電路3</b></p><p> 2.4 U18949霍爾傳感器檢測單元3</p><p><b> 3軟件設計3</b></p><p> 3.1 系統(tǒng)主程序3</p><p> 3.2 中斷程序3&l
9、t;/p><p> 3.3 計算程序3</p><p> 3.4 顯示程序3</p><p> 3.5 鍵盤程序3</p><p><b> 4 實驗仿真3</b></p><p> 4.1調(diào)試與測試3</p><p>
10、 4.2 里程計價測試3</p><p><b> 5課程設計體會3</b></p><p><b> 參考文獻3</b></p><p> 附1:源程序代碼3</p><p> 附2:系統(tǒng)原理圖3</p><p> 硬件課程設計報告-出租車計價器<
11、/p><p><b> 1.1、功能簡述</b></p><p> 出 出租車計價器用于記錄里程與價格的關系,它能有效地避免司機與乘客的矛盾,保證雙方的利益。計價器現(xiàn)實的營運金額是營運里程與價格函數(shù),出租車計價器通過傳感器與行駛車輛連接,出租車的實際里程通過傳感器的脈沖信號在計價器里折算成一定的計價營運里程。本設計采用AT89S52單片機為主控器,附加U1894
12、9霍爾傳感器測距,實現(xiàn)對出租車計價統(tǒng)計輸出采用8段數(shù)碼顯示管。本電路設計的計價器不但能實現(xiàn)基本的計價。具有數(shù)據(jù)的復位功能,數(shù)據(jù)(路程+總金額)輸出功能計時計價功能等。</p><p> 1.2、設計任務及要求</p><p> ?。?)能顯示里程,單位為公里。</p><p> 2)能顯示金額數(shù),單位為元;能顯示時間。</p><p>
13、 3)可設定單程價格,單程價格為3元/公里(往返價格為2公里/元)。</p><p> 4)起步公里數(shù)為3公里,價格為7元,若實際距離大于3公里,按規(guī)則3計算價格。</p><p> 5)按暫停鍵,計價器可暫停計價。</p><p> 6)按停止鍵,計價器可顯示總路程和總金額,并且有聲音提示。</p><p> 7)復位鍵,把顯示器清
14、零</p><p> 8)總共有四個按鍵,每一個按鍵對應一個顯示燈,當按鍵按下的時候等就會亮。</p><p> 我們的這次硬件課程設計,由于缺乏必需的硬件設備,所以我們采用的是在電腦上模擬的方法實現(xiàn)出租車的計算價格、顯示路程和時間等。</p><p> 我們采用MCU技術,通過單片機作為主控器,采用外部晶振作為時鐘脈沖,通過按鍵可以方便調(diào)節(jié),以下是方案的系統(tǒng)
15、流程圖,本方案主要是必須對于數(shù)字電路比較熟悉。方案圖如下圖所示:</p><p><b> 案</b></p><p> 2 系統(tǒng)總體方案及硬件設計</p><p> 2.1、AT89C52各引腳功能說明</p><p> AAT89C52電路圖如圖2-1所示:</p><p><b
16、> 圖</b></p><p><b> 2</b></p><p><b> -</b></p><p> 1 圖2-1 AT89C52電路圖</p><p><b> V</b></
17、p><p> AT89C52為8 位通用微處理器,采用工業(yè)標準的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的8xc52 相同,其主要用于會聚調(diào)整時的功能控制。功能包括對會聚主IC 內(nèi)部寄存器、數(shù)據(jù)RAM及外部接口等功能部件的初始化,會聚調(diào)整控制,會聚測試圖控制,紅外遙控信號IR的接收解碼及與主板CPU通信等。主要管腳有:XTAL1(19 腳)和XTAL2(18 腳)為振蕩器輸入輸出端口,外接12MHz 晶振。RST/
18、Vpd(9 腳)為復位輸入端口,外接電阻電容組成的復位電路。VCC(40 腳)和VSS(20 腳)為供電端口,分別接+5V電源的正負端。P0~P3 為可編程通用I/O 腳,其功能用途由軟件定義,在本設計中,P0 端口(32~39 腳)被定義為N1 功能控制端口,分別與N1的相應功能管腳相連接,13 腳定義為IR輸入端,10 腳和11腳定義為I2C總線控制端口,分別連接N1的SDAS(18腳)和SCLS(19腳)端口,12 腳、27 腳及
19、28 腳定義為握手信號功能端口,連接主板CPU 的相應功能端,用于當前制式的檢測及會聚調(diào)整狀態(tài)進入的控制功能。</p><p> CCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門流。P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0
20、輸出原碼,此時P0外部必須被拉高。 </p><p> P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。 P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和
21、校驗時,P1口作為第八位地址接收。 </p><p> P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢
22、,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。</p><p> P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89S52的一些特殊功能
23、口,P3口同時為閃爍編程和編程校驗接收一些控制信號。</p><p> RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。</p><p> ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作
24、對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p> /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)
25、存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。</p><p> /EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p> XTAL1:反向振蕩放大器的輸
26、入及內(nèi)部時鐘工作電路的輸入。</p><p> XTAL2:來自反向振蕩器的輸出。</p><p> 2.2 、單片機最小系統(tǒng)單元</p><p> 主 控機系統(tǒng)采用了Atmel 公司生產(chǎn)的 AT89C52單片機,它含有256 字節(jié)數(shù)據(jù)存儲器,內(nèi)置8K 的電可擦除FLASH ROM,可重復編程,大小滿足主控機軟件系統(tǒng)設計,所以不必再擴展程序存儲
27、器。復位電路和晶振電路是AT89C52 工作所需的最簡外圍電路。單片機最小系統(tǒng)電路圖如圖2-2所示。 </p><p> 圖2-2單片機最小系統(tǒng)圖</p><p> AT89C52 的復位端是一個史密特觸發(fā)輸入,高電平有效。RST端若由低電平上升到高電平并持續(xù)2個周期,系統(tǒng)將實現(xiàn)一次復位操作。在復位電路中,按一下復位開關就使在RST端出現(xiàn)一段時間的高電平,外接11.0592M
28、 晶振和兩個30pF 電容組成系統(tǒng)的內(nèi)部時鐘電路。</p><p><b> 2.3、按鍵電路</b></p><p> 按 鍵控制電路如圖2-3所示,清零按鍵接單片機的S0管腳,按下清零按鍵,S0為低電平,調(diào)用清零子程序,用于將顯示數(shù)據(jù)清零,在程序中給各位賦0代碼(0x3f),以達到清零的目的,方便下次計價。S1按鍵起到的是切換出租車走得路程的顯示和顯示時
29、間的切換。單片機的S1按鍵起到的作用是切換單雙程顯示的作用。單片機的S3管腳接啟動/停止按鍵,通過軟件編程,當按下按鍵計數(shù)器開始工作,開始計價;當彈起按鍵時,計數(shù)器停止工作,停止計價,啟動/停止按鍵帶自鎖功能。按下啟動按鍵,開關處于導通狀態(tài),這時給S3送低電平信號,這時TR0=1,計數(shù)器開始工作,調(diào)用計價子程序開始計價。另外為功能鍵,控制價格調(diào)整,這個按鍵是在沒有按下啟動/停止按鍵時有作用,計價過程中無效。這四個按鍵在程序中都有四個顯示
30、燈所對應,每個按鍵按下都會有一個顯示燈所對應亮或者熄滅。</p><p><b> 圖2-3按鈕電路</b></p><p> 2.4、 U18949霍爾傳感器檢測單元</p><p> U 18949屬于開關型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號符合TTL電平標準,可以直接接到單片機的IO 端口上,而且
31、其最高檢測頻率可達到1MHZ。</p><p> 圖2-4 U18949霍爾傳感器原理</p><p> U 18949集成霍耳開關由穩(wěn)壓器A、霍耳電勢發(fā)生器(即硅霍耳片)B、差分放大器C、施密特觸發(fā)器D和OC門輸出E五個基本部分組成。</p><p> 在 輸入端輸入電壓Vcc,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍爾電勢發(fā)生器的兩端,根據(jù)霍爾效應原理,當霍爾片處
32、在磁場中時,在垂直于磁場的方向通以電流,則與這二者相垂直的方向上將會產(chǎn)生霍爾電勢差VH輸出,該VH信號經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC門輸出。當施加的磁場達到工作點(即Bop)時,觸發(fā)器輸出高電壓(相對于地電位),使三極管導通,此時OC門輸出端輸出低電壓,三極管截止,使OC門輸出高電壓,這種狀態(tài)為關。這樣兩次電壓變換,使霍爾開關完成了一次開關動作。</p><p> 程計算是通過安裝在
33、車輪上的霍爾傳感器檢測到的脈沖信號,送到單片機產(chǎn)生中斷,單片機再根據(jù)程序設定,計算出里程。</p><p> 圖2-5 U18949傳感器測距示意圖</p><p><b> 3軟件設計</b></p><p> 3.1 、系統(tǒng)主程序</p><p> 計 主程序主要負責計算、循環(huán)等工作。另外,在
34、主程序模塊中還需要設置啟動/清除標志寄存器、里程寄存器和價格寄存器,并對它們進行初始化。然后,主程序?qū)⒏鶕?jù)各標志寄存器的內(nèi)容,分別完成啟動、清除、計程和計價等不同的操作。</p><p><b> 當 </b></p><p> 圖3-1 主程序流程圖</p><p> 汽車運行起來時,就啟動計價,根據(jù)里程寄存器中的內(nèi)容計算和判斷行駛里
35、程是否已超過起步價公里數(shù)。若已超過,則根據(jù)里程值、每公里的單價數(shù)和起步價數(shù)來計算出當前的總金額,并將結果存于總金額寄存器中;中途等待時,無脈沖輸入,不產(chǎn)生中斷,當時間超過等待設定值時,開始進行計時,并把等待價格加到總金額里,然后將總金額、里程和單價送數(shù)碼管顯示出來。程序流程如圖3-1所示。 </p><p>
36、;<b> 3.2 、中斷程序</b></p><p> 中途等待中斷程序中,每1ms產(chǎn)生一次中斷,將當前里程值送入某個緩存變量,每5分鐘將緩存變量中的值和當前里程值比較,當汽車停止,霍爾傳感器5分鐘沒有輸出信號,當前里程值和緩存變量內(nèi)的值相同,則進入等待計時,每5分鐘記一次價格。</p><p><b> 3.3 、計算程序<
37、;/b></p><p> 計算程序根據(jù)里程數(shù)分別進入不同的計算公式。如果里程大于3公里,則執(zhí)行公式:總金額=起步價+(里程-3)*單價+等待時間*等待單價;否則,執(zhí)行公式:總金額=起步價+等待時間*等待單價。程序流程圖如圖3-2所示。</p><p><b> No</b></p><p><b> Yes</b&
38、gt;</p><p> Dfda5551555555</p><p> 圖3-2 計算程序流程圖</p><p><b> 3.4 、顯示程序</b></p><p> 程 程序利用定時器每1ms產(chǎn)生一次中斷,相應變量置位,點亮一個數(shù)碼管,顯示一位數(shù)據(jù),利用主函數(shù)內(nèi)的循環(huán),實現(xiàn)動態(tài)掃描顯示,同時
39、根據(jù)數(shù)碼管余輝和人眼暫留現(xiàn)象,即可實現(xiàn)顯示。如圖3-3所示。</p><p><b> 圖3-3</b></p><p><b> 3.5 、鍵盤程序</b></p><p> 鍵盤采用查詢的方式,放在主程序中,當沒有按鍵按下的時候,單片機循環(huán)主程序,一旦右按鍵按下,便轉(zhuǎn)向相應的子程序處理,處理結束再返回。
40、 </p><p><b> 4 實驗仿真</b></p><p><b> 4.1、調(diào)試與測試</b></p><p> 首 先將數(shù)碼管安裝到事先焊好的插槽上,然后,對照電路圖確定好各芯片所在的位置,按照對應的引腳插到插槽上,最后接好合適的電源。</p><p>
41、 用編譯器進行源程序編譯及仿真調(diào)試,同時進行硬件電路板的設計制作。硬件電路制作完畢,用萬用表檢測有無短路開路等現(xiàn)象,確定硬件電路沒有問題后,用仿真頭與硬件電路相連,運行程序進行調(diào)試。</p><p> 調(diào)試不成功,則可再單獨調(diào)試程序和硬件電路。程序用軟件仿真運行,硬件電路再次檢查有無焊錯,或者元件與插座接觸不良等方面問題;確認均無問題后,再次把軟件和硬件聯(lián)機調(diào)試,直至功能正常。把程序燒錄進單片機AT89C52
42、結束調(diào)試。</p><p> 4.2、里程計價測試</p><p> 由 由于實驗條件的限制,我們采用信號發(fā)生器產(chǎn)生外部中斷,設定中斷間隔為100ms,假定車輪周長為1m,則此時車速為36km/h.整個系統(tǒng)以此為基礎,通過計費程序完成中金額的計算。 4-1的測試條件是:假設單程的單價是3元,起步價為7元(包含3公里),分別不公里程測試得數(shù)據(jù)如表:<
43、/p><p><b> 5課程設計體會</b></p><p> 經(jīng) 通過這些天有關于出租車計價器的課程設計,使我對單片機的應用有了更深的了解。在課程設計的過程中,還是碰到了許多的問題。比如,對于蜂鳴器的加入及使用;對于代碼的前后順序及調(diào)用掌握得還不夠好;對于一些相關的應用軟件沒能熟練掌握。通過這一段時間的苦想和反復調(diào)試,以及參考網(wǎng)上的程序,還有同學的熱心幫助,
44、最終還是把問題解決了。</p><p> 通過這次課程設計,我最大的收獲就是自己的動手能力和獨立解決問題的能力得到了很大的提高,也充分體會到了自己設計東西的樂趣、學會查閱資料和對別人的東西融會變通的重要性,也明白了很多知識光靠趴在書本上學是學不到其中的精髓的,必須親自去試著實踐,親自去經(jīng)歷才能對它們真正的掌握,凡事都要自己去動下手,去實踐一下,遇到困難,永遠不要沮喪氣餒。在動手的過程中,不僅能增強實踐能力,而且
45、在理論上可以有更深的認識;這次設計給了我極大的鼓舞和信心,相信在以后的學習中可以通過不斷的摸索和實踐來提高其他方面的知識。</p><p><b> 6參考文獻</b></p><p> [1] 賈宗璞,許合利,《C程序程序設計》. 北京:中國礦業(yè)大學出版社,2007.1</p><p> [2] 余發(fā)山,王福忠,《單片機原理及應用技術》
46、. 北京:中國礦業(yè)大學出版社, 2008.6</p><p><b> 附1:源程序代碼</b></p><p><b> 程序清單如下:</b></p><p> #include<reg52.h></p><p> #define uchar unsigned char<
47、;/p><p> #define uint unsigned int</p><p> uchar qianwei,baiwei,shiwei,gewei; //"顯示數(shù)據(jù)各個位置數(shù)字的臨時變量"</p><p><b> char </b></p><p> led_seg_code[
48、10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p><b> //段碼表示0-9</b></p><p> uint i,j,tt,aa,round,distance,cost,price,wait,flagg;</p><p> //定義路程、價錢、等
49、待時間及一些全局的變量等;</p><p> uchar dengdai,second,minute;</p><p> unsigned long wait_ten_ms;//記錄等待時間多少個10ms</p><p> //按鍵的定義,所有按鍵按下去為低電平</p><p> sbit key0=P1^0;
50、 //清零</p><p> sbit key1=P1^1; //切換路程與等待時間</p><p> sbit key2=P1^2; //單程還是往返設置</p><p> sbit key3=P1^3; //暫停按鈕</p><p&g
51、t; sbit led1=P1^6; // 雙程 </p><p> sbit led2=P1^7; // 暫停</p><p> sbit led3=P1^4; // 堵車</p><p> sbit led4=P1^5; // 切換</p><p> s
52、bit spk=P3^7;</p><p> bit key1_flag;//由于按鍵會自動復位,這個為標志位</p><p> bit key2_flag;</p><p> bit key3_flag;</p><p> bit flag; </p><p>&
53、lt;b> //初始化函數(shù)</b></p><p> void initial_data(void)</p><p><b> {</b></p><p> distance=0;</p><p><b> cost=0;</b></p><p>
54、<b> second=0;</b></p><p><b> minute=0;</b></p><p> wait_ten_ms=0;</p><p> key1_flag=1; </p><p> key2_flag=0; //單程or往返,接指示燈;</p>
55、<p> key3_flag=1; //暫停,接指示燈;</p><p><b> flag=0;</b></p><p><b> flagg=0;</b></p><p><b> round=0;</b></p><p> dengdai=0;
56、</p><p> led1=1; //雙程指示</p><p> led2=1; //暫停指示</p><p> led3=1; //堵車指示</p><p> led4=1; // 等待時間切換標志</p><p><b> spk=0;</b></p>
57、<p><b> j=3; </b></p><p><b> }</b></p><p><b> //暫停程序</b></p><p> void zanting(void)</p><p><b> {</b>
58、;</p><p> if(key3_flag) </p><p><b> {</b></p><p> EX0=0; //關閉中斷和定時器</p><p><b> TR0=0;</b></p><p><b> }</b><
59、/p><p><b> else</b></p><p><b> {</b></p><p><b> EX0=1;</b></p><p><b> TR0=1;</b></p><p><b> }</b
60、></p><p> key3_flag=!key3_flag;</p><p><b> }</b></p><p><b> //計算數(shù)據(jù)處理 </b></p><p> void jisuan()</p><p><b> {</b&
61、gt;</p><p> distance=round/60+wait_ten_ms/300;//車輪轉(zhuǎn)60圈為100m,等待時間3s/100m</p><p> if(distance<=30) </p><p> cost=70; </p><p> price
62、=30; //單程價格 </p><p> if(key2_flag)price=20; //往返價格 </p><p> if(distance>30)</p><p> cost=price*(distance-30)/10+70;</p><p> wait=minute*
63、100+second;</p><p><b> }</b></p><p> //顯示的輔助程序,分離一個數(shù)的各個數(shù)字</p><p> void fenli(uint temp) //數(shù)據(jù)的分離處理 </p><p><b> {</b></p><p>
64、if(temp>9999) temp=9999;</p><p> qianwei=temp/1000;</p><p> baiwei=temp/100%10;</p><p> shiwei=temp%100/10;</p><p> gewei=temp%10; </p><p><b&
65、gt; }</b></p><p> //延時約1ms,數(shù)碼管顯示時使用</p><p> void diplay_delay(void) </p><p><b> {</b></p><p><b> uint i;</b></p>&
66、lt;p> for(i=0;i<30;i++);</p><p><b> }</b></p><p><b> //顯示程序;</b></p><p> void led_show()</p><p><b> {</b></p><
67、p> //-----顯示路程或者等待時間----</p><p> if(key1_flag) fenli(distance);</p><p> else fenli(wait);</p><p> P2=0xfe; </p><p> P0=led_seg_code[gewei];</p><
68、;p> diplay_delay();</p><p><b> P2=0xfd;</b></p><p> if(key1_flag) P0=led_seg_code[shiwei]|0x80; </p><p> //如果是路程,點亮小數(shù)點兒</p><p> else P0=led_seg_
69、code[shiwei]; </p><p> //如果是時間,不需要點亮小數(shù)點兒</p><p> diplay_delay();</p><p><b> P2=0xfb;</b></p><p> if(key1_flag) P0=led_seg_code[baiwei];</
70、p><p> else P0=led_seg_code[baiwei]|0x80; </p><p> diplay_delay();</p><p><b> P2=0xf7;</b></p><p> P0=led_seg_code[qianwei];</p><p&g
71、t; diplay_delay();</p><p> //-----顯示價格----</p><p> fenli(cost);</p><p><b> P2=0xef;</b></p><p> P0=led_seg_code[gewei];</p><p> diplay_de
72、lay();</p><p><b> P2=0xdf;</b></p><p> P0=led_seg_code[shiwei]|0x80;</p><p> diplay_delay();</p><p><b> P2=0xbf;</b></p><p> P
73、0=led_seg_code[baiwei];</p><p> diplay_delay();</p><p><b> P2=0x7f;</b></p><p> P0=led_seg_code[qianwei];</p><p> diplay_delay();</p><p>
74、<b> P2=0xff;</b></p><p><b> }</b></p><p> //延時時基為1ms</p><p> void delay(uint x) </p><p><b> {</b></p&g
75、t;<p><b> int i,j;</b></p><p> for(i=x;i>0;i--)</p><p> for(j=340;j>0;j--);</p><p><b> }</b></p><p><b> //鍵盤的掃描</b>
76、;</p><p> void keyscan()</p><p> { if(key1==0) // 按鍵消抖并判斷按下去的次數(shù)為基數(shù)還是偶數(shù) </p><p> { delay(5);</p><p> if(key1==0)</p><p>
77、; key1_flag=!key1_flag;</p><p> while(!key1)led_show();</p><p><b> delay(5);</b></p><p> while(!key1)led_show(); </p><p><b> }</b></p&
78、gt;<p> if(key0==0) // 清零 </p><p> { delay(5);</p><p> if(key0==0)</p><p> initial_data();</p><p><b> }</b></p
79、><p> if(key3==0) // 暫停 </p><p> { delay(5);</p><p> if(key3==0)</p><p> zanting();</p><p> while(!key3)led_show();</p&
80、gt;<p><b> delay(5);</b></p><p> while(!key3)led_show();</p><p> for(j=3;j>0;j--)</p><p> for(i=0;i<50;i++)</p><p><b> {</b>&l
81、t;/p><p><b> spk=~spk;</b></p><p> led_show(); </p><p><b> } </b></p><p><b> }</b></p><p> if(key2==0) // 單程還是往
82、返 </p><p> { delay(5);</p><p> if(key2==0) </p><p> key2_flag=!key2_flag;</p><p> while(!key2)led_show();</p><p><b>
83、 delay(5);</b></p><p> while(!key2)led_show();</p><p><b> }</b></p><p><b> //指示燈掃描</b></p><p> led1=!key2_flag; // 指示,單程還是往返,燈低電平點亮;
84、 往返亮;</p><p> led2=key3_flag; // 指示,暫停時亮;</p><p> led3=flag; // 指示是否等待;</p><p> led4=key1_flag; //切換指示,顯示路程還是等待時間;</p><p> diplay_delay(); </p>
85、;<p> } </p><p> //中斷及定時器初始化 </p><p> void initial_time() </p><p><b> {</b></p><p> TMOD=0x01; //工作在模式1</p><p> TH0
86、=(65536-10000)/256;</p><p> TL0=(65536-10000)%256;</p><p><b> IE=0x83;</b></p><p> IT0=1; //外部邊沿觸發(fā)方式 </p><p><b> TR0=1;</b></p><
87、;p><b> }</b></p><p> // 中斷記錄脈沖數(shù)</p><p> void zd() interrupt 0 //中斷0</p><p><b> {</b></p><p><b> aa++;</b></p><
88、p> if(flag)round++; </p><p><b> }</b></p><p> //********* 定時器 ********</p><p> void time0() interrupt 1 //定時0</p><p><b> {</b><
89、/p><p> TH0=(65536-10000)/256; //10ms</p><p> TL0=(65536-10000)%256;</p><p><b> tt++;</b></p><p> if(tt>=100) //1s采樣</p><p><b>
90、; {</b></p><p><b> tt=0;</b></p><p> aa=aa/5; //速度(n*圈/s)</p><p> if(aa<=5) flag=0;</p><p> else flag=1; </p><
91、;p><b> aa=0;</b></p><p><b> }</b></p><p><b> if(!flag)</b></p><p><b> { </b></p><p> wait_ten_ms++;</p>&
92、lt;p> dengdai++;</p><p> if(dengdai==100)</p><p> { dengdai=0;</p><p><b> second++;</b></p><p> if(second==60)</p><p><b> { <
93、/b></p><p><b> minute++;</b></p><p><b> second=0;</b></p><p><b> }</b></p><p><b> } </b></p><p>
94、;<b> }</b></p><p><b> } </b></p><p> //主程序 </p><p> void main(void)</p><p><b> {</b></p><p&
95、gt; initial_data(); //初始化數(shù)據(jù)</p><p> initial_time(); //初始化定時器</p><p><b> while(1)</b></p><p><b> { </b></p><p> keysca
96、n();</p><p><b> jisuan();</b></p><p> led_show();</p><p><b> }</b></p><p><b> }</b></p><p><b> 附2:系統(tǒng)原理圖</
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 硬件課程設計----出租車計價器
- 硬件課程設計--出租車計價器系統(tǒng)
- 出租車計價器課程設計報告
- 出租車計價器課程設計
- 出租車計價器課程設計
- 出租車計價器課程設計
- 出租車計價器課程設計
- eda課程設計報告--出租車計價器
- eda課程設計報告---出租車計價器
- 課程設計--出租車計價器設計
- 出租車計價器設計課程設計
- 課程設計---出租車計價器設計
- 課程設計---出租車計價器設計
- eda課程設計--出租車計價器
- eda課程設計--出租車計價器
- 接口課程設計---出租車計價器
- 出租車計價器課程設計論文
- 課程設計---出租車計價器的設計
- 課程設計--出租車計價器的設計
- arm出租車計價器系統(tǒng)課程設計
評論
0/150
提交評論