硬件課程設(shè)計(jì)報(bào)告--出租車計(jì)價(jià)器_第1頁(yè)
已閱讀1頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院</p><p><b>  硬件課程設(shè)計(jì)報(bào)告</b></p><p>  成 員: </p><p>  專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè) </p>&l

2、t;p>  班 級(jí): 計(jì)科09-4班   </p><p>  設(shè)計(jì)題目: 出租車計(jì)價(jià)器 </p><p>  指導(dǎo)教師: 職 稱: </p><p><b

3、>  2011年10月</b></p><p>  課程設(shè)計(jì)指導(dǎo)教師評(píng)閱書</p><p><b>  指導(dǎo)教師評(píng)語(yǔ):</b></p><p>  成 績(jī): 指導(dǎo)教師簽字:</p><p>  年 月 日</p><p

4、><b>  摘 要</b></p><p>  出 租車已經(jīng)是城市交通的重要組成部分,從加強(qiáng)行業(yè)管理以及減少司機(jī)與乘客的糾紛出發(fā),具有良好性能的計(jì)價(jià)器對(duì)出租車司機(jī)和乘客來(lái)說(shuō)都是很必要的。而采用模擬電路和數(shù)字電路設(shè)計(jì)的計(jì)價(jià)器整體電路的規(guī)模較大,用到的器件多,造成故障率高,難調(diào)試。而采用單片機(jī)進(jìn)行的設(shè)計(jì),相對(duì)來(lái)說(shuō)功能強(qiáng)大,用較少的硬件和適當(dāng)?shù)能浖嗷ヅ浜峡梢院苋菀椎貙?shí)現(xiàn)設(shè)計(jì)要求,

5、且靈活性強(qiáng),可以通過(guò)軟件編程來(lái)完成更多的附加功能。</p><p>  設(shè)計(jì)采用AT89C52單片機(jī)為主控器,附加U18949霍爾傳感器測(cè)距,實(shí)現(xiàn)對(duì)出租車計(jì)價(jià)統(tǒng)計(jì)輸出采用8段數(shù)碼顯示管。本電路設(shè)計(jì)的計(jì)價(jià)器不但能實(shí)現(xiàn)基本的計(jì)價(jià),而且還能根據(jù)單程,雙程來(lái)調(diào)節(jié)單價(jià)。出租車計(jì)價(jià)器用于記錄里程與價(jià)格的關(guān)系,它能有效地避免司機(jī)與乘客的矛盾,保證雙方的利益。</p><p>  用單片機(jī)來(lái)完成設(shè)計(jì)要求。

6、單片機(jī)功能強(qiáng)大,用較少的硬件和適當(dāng)?shù)能浖嗷ヅ浜峡梢院苋菀椎膶?shí)現(xiàn)設(shè)計(jì)要求,且靈活性強(qiáng),可以通過(guò)軟件編程來(lái)完成更多的附加功能。針對(duì)計(jì)費(fèi)模式的切換,通過(guò)軟件編程就可以輕容易的實(shí)現(xiàn)。避免了機(jī)械開關(guān)帶來(lái)的不穩(wěn)定因素。</p><p><b>  目錄</b></p><p><b>  1概述3</b></p><p><

7、b>  1.1功能簡(jiǎn)述3</b></p><p>  1.2設(shè)計(jì)任務(wù)及要求3</p><p>  1.3方案論證及比較3</p><p>  2 系統(tǒng)總體方案及硬件設(shè)計(jì)3</p><p>  2.1單片機(jī)各引腳功能說(shuō)明3</p><p>  2.2 單片機(jī)最小系統(tǒng)單元3</

8、p><p><b>  2.3按鍵電路3</b></p><p>  2.4 U18949霍爾傳感器檢測(cè)單元3</p><p><b>  3軟件設(shè)計(jì)3</b></p><p>  3.1  系統(tǒng)主程序3</p><p>  3.2  中斷程序3&l

9、t;/p><p>  3.3  計(jì)算程序3</p><p>  3.4  顯示程序3</p><p>  3.5  鍵盤程序3</p><p><b>  4 實(shí)驗(yàn)仿真3</b></p><p>  4.1調(diào)試與測(cè)試3</p><p> 

10、 4.2 里程計(jì)價(jià)測(cè)試3</p><p><b>  5課程設(shè)計(jì)體會(huì)3</b></p><p><b>  參考文獻(xiàn)3</b></p><p>  附1:源程序代碼3</p><p>  附2:系統(tǒng)原理圖3</p><p>  硬件課程設(shè)計(jì)報(bào)告-出租車計(jì)價(jià)器<

11、/p><p><b>  1.1、功能簡(jiǎn)述</b></p><p>  出 出租車計(jì)價(jià)器用于記錄里程與價(jià)格的關(guān)系,它能有效地避免司機(jī)與乘客的矛盾,保證雙方的利益。計(jì)價(jià)器現(xiàn)實(shí)的營(yíng)運(yùn)金額是營(yíng)運(yùn)里程與價(jià)格函數(shù),出租車計(jì)價(jià)器通過(guò)傳感器與行駛車輛連接,出租車的實(shí)際里程通過(guò)傳感器的脈沖信號(hào)在計(jì)價(jià)器里折算成一定的計(jì)價(jià)營(yíng)運(yùn)里程。本設(shè)計(jì)采用AT89S52單片機(jī)為主控器,附加U1894

12、9霍爾傳感器測(cè)距,實(shí)現(xiàn)對(duì)出租車計(jì)價(jià)統(tǒng)計(jì)輸出采用8段數(shù)碼顯示管。本電路設(shè)計(jì)的計(jì)價(jià)器不但能實(shí)現(xiàn)基本的計(jì)價(jià)。具有數(shù)據(jù)的復(fù)位功能,數(shù)據(jù)(路程+總金額)輸出功能計(jì)時(shí)計(jì)價(jià)功能等。</p><p>  1.2、設(shè)計(jì)任務(wù)及要求</p><p> ?。?)能顯示里程,單位為公里。</p><p>  2)能顯示金額數(shù),單位為元;能顯示時(shí)間。</p><p> 

13、 3)可設(shè)定單程價(jià)格,單程價(jià)格為3元/公里(往返價(jià)格為2公里/元)。</p><p>  4)起步公里數(shù)為3公里,價(jià)格為7元,若實(shí)際距離大于3公里,按規(guī)則3計(jì)算價(jià)格。</p><p>  5)按暫停鍵,計(jì)價(jià)器可暫停計(jì)價(jià)。</p><p>  6)按停止鍵,計(jì)價(jià)器可顯示總路程和總金額,并且有聲音提示。</p><p>  7)復(fù)位鍵,把顯示器清

14、零</p><p>  8)總共有四個(gè)按鍵,每一個(gè)按鍵對(duì)應(yīng)一個(gè)顯示燈,當(dāng)按鍵按下的時(shí)候等就會(huì)亮。</p><p>  我們的這次硬件課程設(shè)計(jì),由于缺乏必需的硬件設(shè)備,所以我們采用的是在電腦上模擬的方法實(shí)現(xiàn)出租車的計(jì)算價(jià)格、顯示路程和時(shí)間等。</p><p>  我們采用MCU技術(shù),通過(guò)單片機(jī)作為主控器,采用外部晶振作為時(shí)鐘脈沖,通過(guò)按鍵可以方便調(diào)節(jié),以下是方案的系統(tǒng)

15、流程圖,本方案主要是必須對(duì)于數(shù)字電路比較熟悉。方案圖如下圖所示:</p><p><b>  案</b></p><p>  2 系統(tǒng)總體方案及硬件設(shè)計(jì)</p><p>  2.1、AT89C52各引腳功能說(shuō)明</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è)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的8xc52 相同,其主要用于會(huì)聚調(diào)整時(shí)的功能控制。功能包括對(duì)會(huì)聚主IC 內(nèi)部寄存器、數(shù)據(jù)RAM及外部接口等功能部件的初始化,會(huì)聚調(diào)整控制,會(huì)聚測(cè)試圖控制,紅外遙控信號(hào)IR的接收解碼及與主板CPU通信等。主要管腳有:XTAL1(19 腳)和XTAL2(18 腳)為振蕩器輸入輸出端口,外接12MHz 晶振。RST/

18、Vpd(9 腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電路。VCC(40 腳)和VSS(20 腳)為供電端口,分別接+5V電源的正負(fù)端。P0~P3 為可編程通用I/O 腳,其功能用途由軟件定義,在本設(shè)計(jì)中,P0 端口(32~39 腳)被定義為N1 功能控制端口,分別與N1的相應(yīng)功能管腳相連接,13 腳定義為IR輸入端,10 腳和11腳定義為I2C總線控制端口,分別連接N1的SDAS(18腳)和SCLS(19腳)端口,12 腳、27 腳及

19、28 腳定義為握手信號(hào)功能端口,連接主板CPU 的相應(yīng)功能端,用于當(dāng)前制式的檢測(cè)及會(huì)聚調(diào)整狀態(tài)進(jìn)入的控制功能。</p><p>  CCC:供電電壓。GND:接地。P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每腳可吸收8TTL門流。P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0

20、輸出原碼,此時(shí)P0外部必須被拉高。 </p><p>  P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。 P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和

21、校驗(yàn)時(shí),P1口作為第八位地址接收。 </p><p>  P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì)

22、,當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。</p><p>  P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89S52的一些特殊功能

23、口,P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。</p><p>  RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。</p><p>  ALE/PROG:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作

24、對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無(wú)效。</p><p>  /PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(shù)據(jù)

25、存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。</p><p>  /EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p>  XTAL1:反向振蕩放大器的輸

26、入及內(nèi)部時(shí)鐘工作電路的輸入。</p><p>  XTAL2:來(lái)自反向振蕩器的輸出。</p><p>  2.2 、單片機(jī)最小系統(tǒng)單元</p><p>  主 控機(jī)系統(tǒng)采用了Atmel 公司生產(chǎn)的 AT89C52單片機(jī),它含有256 字節(jié)數(shù)據(jù)存儲(chǔ)器,內(nèi)置8K 的電可擦除FLASH ROM,可重復(fù)編程,大小滿足主控機(jī)軟件系統(tǒng)設(shè)計(jì),所以不必再擴(kuò)展程序存儲(chǔ)

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

28、 晶振和兩個(gè)30pF 電容組成系統(tǒng)的內(nèi)部時(shí)鐘電路。</p><p><b>  2.3、按鍵電路</b></p><p>  按 鍵控制電路如圖2-3所示,清零按鍵接單片機(jī)的S0管腳,按下清零按鍵,S0為低電平,調(diào)用清零子程序,用于將顯示數(shù)據(jù)清零,在程序中給各位賦0代碼(0x3f),以達(dá)到清零的目的,方便下次計(jì)價(jià)。S1按鍵起到的是切換出租車走得路程的顯示和顯示時(shí)

29、間的切換。單片機(jī)的S1按鍵起到的作用是切換單雙程顯示的作用。單片機(jī)的S3管腳接啟動(dòng)/停止按鍵,通過(guò)軟件編程,當(dāng)按下按鍵計(jì)數(shù)器開始工作,開始計(jì)價(jià);當(dāng)彈起按鍵時(shí),計(jì)數(shù)器停止工作,停止計(jì)價(jià),啟動(dòng)/停止按鍵帶自鎖功能。按下啟動(dòng)按鍵,開關(guān)處于導(dǎo)通狀態(tài),這時(shí)給S3送低電平信號(hào),這時(shí)TR0=1,計(jì)數(shù)器開始工作,調(diào)用計(jì)價(jià)子程序開始計(jì)價(jià)。另外為功能鍵,控制價(jià)格調(diào)整,這個(gè)按鍵是在沒有按下啟動(dòng)/停止按鍵時(shí)有作用,計(jì)價(jià)過(guò)程中無(wú)效。這四個(gè)按鍵在程序中都有四個(gè)顯示

30、燈所對(duì)應(yīng),每個(gè)按鍵按下都會(huì)有一個(gè)顯示燈所對(duì)應(yīng)亮或者熄滅。</p><p><b>  圖2-3按鈕電路</b></p><p>  2.4、 U18949霍爾傳感器檢測(cè)單元</p><p>  U 18949屬于開關(guān)型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號(hào)符合TTL電平標(biāo)準(zhǔn),可以直接接到單片機(jī)的IO 端口上,而且

31、其最高檢測(cè)頻率可達(dá)到1MHZ。</p><p>  圖2-4 U18949霍爾傳感器原理</p><p>  U 18949集成霍耳開關(guān)由穩(wěn)壓器A、霍耳電勢(shì)發(fā)生器(即硅霍耳片)B、差分放大器C、施密特觸發(fā)器D和OC門輸出E五個(gè)基本部分組成。</p><p>  在 輸入端輸入電壓Vcc,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍爾電勢(shì)發(fā)生器的兩端,根據(jù)霍爾效應(yīng)原理,當(dāng)霍爾片處

32、在磁場(chǎng)中時(shí),在垂直于磁場(chǎng)的方向通以電流,則與這二者相垂直的方向上將會(huì)產(chǎn)生霍爾電勢(shì)差VH輸出,該VH信號(hào)經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC門輸出。當(dāng)施加的磁場(chǎng)達(dá)到工作點(diǎn)(即Bop)時(shí),觸發(fā)器輸出高電壓(相對(duì)于地電位),使三極管導(dǎo)通,此時(shí)OC門輸出端輸出低電壓,三極管截止,使OC門輸出高電壓,這種狀態(tài)為關(guān)。這樣兩次電壓變換,使霍爾開關(guān)完成了一次開關(guān)動(dòng)作。</p><p>  程計(jì)算是通過(guò)安裝在

33、車輪上的霍爾傳感器檢測(cè)到的脈沖信號(hào),送到單片機(jī)產(chǎn)生中斷,單片機(jī)再根據(jù)程序設(shè)定,計(jì)算出里程。</p><p>  圖2-5 U18949傳感器測(cè)距示意圖</p><p><b>  3軟件設(shè)計(jì)</b></p><p>  3.1 、系統(tǒng)主程序</p><p>  計(jì) 主程序主要負(fù)責(zé)計(jì)算、循環(huán)等工作。另外,在

34、主程序模塊中還需要設(shè)置啟動(dòng)/清除標(biāo)志寄存器、里程寄存器和價(jià)格寄存器,并對(duì)它們進(jìn)行初始化。然后,主程序?qū)⒏鶕?jù)各標(biāo)志寄存器的內(nèi)容,分別完成啟動(dòng)、清除、計(jì)程和計(jì)價(jià)等不同的操作。</p><p><b>  當(dāng) </b></p><p>  圖3-1 主程序流程圖</p><p>  汽車運(yùn)行起來(lái)時(shí),就啟動(dòng)計(jì)價(jià),根據(jù)里程寄存器中的內(nèi)容計(jì)算和判斷行駛里

35、程是否已超過(guò)起步價(jià)公里數(shù)。若已超過(guò),則根據(jù)里程值、每公里的單價(jià)數(shù)和起步價(jià)數(shù)來(lái)計(jì)算出當(dāng)前的總金額,并將結(jié)果存于總金額寄存器中;中途等待時(shí),無(wú)脈沖輸入,不產(chǎn)生中斷,當(dāng)時(shí)間超過(guò)等待設(shè)定值時(shí),開始進(jìn)行計(jì)時(shí),并把等待價(jià)格加到總金額里,然后將總金額、里程和單價(jià)送數(shù)碼管顯示出來(lái)。程序流程如圖3-1所示。          </p><p>

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

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

38、gt;</p><p>  Dfda5551555555</p><p>  圖3-2 計(jì)算程序流程圖</p><p><b>  3.4 、顯示程序</b></p><p>  程 程序利用定時(shí)器每1ms產(chǎn)生一次中斷,相應(yīng)變量置位,點(diǎn)亮一個(gè)數(shù)碼管,顯示一位數(shù)據(jù),利用主函數(shù)內(nèi)的循環(huán),實(shí)現(xiàn)動(dòng)態(tài)掃描顯示,同時(shí)

39、根據(jù)數(shù)碼管余輝和人眼暫留現(xiàn)象,即可實(shí)現(xiàn)顯示。如圖3-3所示。</p><p><b>  圖3-3</b></p><p><b>  3.5 、鍵盤程序</b></p><p>  鍵盤采用查詢的方式,放在主程序中,當(dāng)沒有按鍵按下的時(shí)候,單片機(jī)循環(huán)主程序,一旦右按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。

40、  </p><p><b>  4 實(shí)驗(yàn)仿真</b></p><p><b>  4.1、調(diào)試與測(cè)試</b></p><p>  首 先將數(shù)碼管安裝到事先焊好的插槽上,然后,對(duì)照電路圖確定好各芯片所在的位置,按照對(duì)應(yīng)的引腳插到插槽上,最后接好合適的電源。</p><p>

41、  用編譯器進(jìn)行源程序編譯及仿真調(diào)試,同時(shí)進(jìn)行硬件電路板的設(shè)計(jì)制作。硬件電路制作完畢,用萬(wàn)用表檢測(cè)有無(wú)短路開路等現(xiàn)象,確定硬件電路沒有問(wèn)題后,用仿真頭與硬件電路相連,運(yùn)行程序進(jìn)行調(diào)試。</p><p>  調(diào)試不成功,則可再單獨(dú)調(diào)試程序和硬件電路。程序用軟件仿真運(yùn)行,硬件電路再次檢查有無(wú)焊錯(cuò),或者元件與插座接觸不良等方面問(wèn)題;確認(rèn)均無(wú)問(wèn)題后,再次把軟件和硬件聯(lián)機(jī)調(diào)試,直至功能正常。把程序燒錄進(jìn)單片機(jī)AT89C52

42、結(jié)束調(diào)試。</p><p>  4.2、里程計(jì)價(jià)測(cè)試</p><p>  由 由于實(shí)驗(yàn)條件的限制,我們采用信號(hào)發(fā)生器產(chǎn)生外部中斷,設(shè)定中斷間隔為100ms,假定車輪周長(zhǎng)為1m,則此時(shí)車速為36km/h.整個(gè)系統(tǒng)以此為基礎(chǔ),通過(guò)計(jì)費(fèi)程序完成中金額的計(jì)算。 4-1的測(cè)試條件是:假設(shè)單程的單價(jià)是3元,起步價(jià)為7元(包含3公里),分別不公里程測(cè)試得數(shù)據(jù)如表:<

43、/p><p><b>  5課程設(shè)計(jì)體會(huì)</b></p><p>  經(jīng) 通過(guò)這些天有關(guān)于出租車計(jì)價(jià)器的課程設(shè)計(jì),使我對(duì)單片機(jī)的應(yīng)用有了更深的了解。在課程設(shè)計(jì)的過(guò)程中,還是碰到了許多的問(wèn)題。比如,對(duì)于蜂鳴器的加入及使用;對(duì)于代碼的前后順序及調(diào)用掌握得還不夠好;對(duì)于一些相關(guān)的應(yīng)用軟件沒能熟練掌握。通過(guò)這一段時(shí)間的苦想和反復(fù)調(diào)試,以及參考網(wǎng)上的程序,還有同學(xué)的熱心幫助,

44、最終還是把問(wèn)題解決了。</p><p>  通過(guò)這次課程設(shè)計(jì),我最大的收獲就是自己的動(dòng)手能力和獨(dú)立解決問(wèn)題的能力得到了很大的提高,也充分體會(huì)到了自己設(shè)計(jì)東西的樂趣、學(xué)會(huì)查閱資料和對(duì)別人的東西融會(huì)變通的重要性,也明白了很多知識(shí)光靠趴在書本上學(xué)是學(xué)不到其中的精髓的,必須親自去試著實(shí)踐,親自去經(jīng)歷才能對(duì)它們真正的掌握,凡事都要自己去動(dòng)下手,去實(shí)踐一下,遇到困難,永遠(yuǎn)不要沮喪氣餒。在動(dòng)手的過(guò)程中,不僅能增強(qiáng)實(shí)踐能力,而且

45、在理論上可以有更深的認(rèn)識(shí);這次設(shè)計(jì)給了我極大的鼓舞和信心,相信在以后的學(xué)習(xí)中可以通過(guò)不斷的摸索和實(shí)踐來(lái)提高其他方面的知識(shí)。</p><p><b>  6參考文獻(xiàn)</b></p><p>  [1] 賈宗璞,許合利,《C程序程序設(shè)計(jì)》. 北京:中國(guó)礦業(yè)大學(xué)出版社,2007.1</p><p>  [2] 余發(fā)山,王福忠,《單片機(jī)原理及應(yīng)用技術(shù)》

46、. 北京:中國(guó)礦業(yè)大學(xué)出版社, 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ù)各個(gè)位置數(shù)字的臨時(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>  //定義路程、價(jià)錢、等

49、待時(shí)間及一些全局的變量等;</p><p>  uchar dengdai,second,minute;</p><p>  unsigned long wait_ten_ms;//記錄等待時(shí)間多少個(gè)10ms</p><p>  //按鍵的定義,所有按鍵按下去為低電平</p><p>  sbit key0=P1^0;

50、 //清零</p><p>  sbit key1=P1^1; //切換路程與等待時(shí)間</p><p>  sbit key2=P1^2; //單程還是往返設(shè)置</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;//由于按鍵會(huì)自動(dòng)復(fù)位,這個(gè)為標(biāo)志位</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; // 等待時(shí)間切換標(biāo)志</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; //關(guān)閉中斷和定時(shí)器</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>  //計(jì)算數(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,等待時(shí)間3s/100m</p><p>  if(distance<=30) </p><p>  cost=70; </p><p>  price

62、=30; //單程價(jià)格 </p><p>  if(key2_flag)price=20; //往返價(jià)格 </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>  //顯示的輔助程序,分離一個(gè)數(shù)的各個(gè)數(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>  //延時(shí)約1ms,數(shù)碼管顯示時(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>  //-----顯示路程或者等待時(shí)間----</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>  //如果是路程,點(diǎn)亮小數(shù)點(diǎn)兒</p><p>  else P0=led_seg_

69、code[shiwei]; </p><p>  //如果是時(shí)間,不需要點(diǎn)亮小數(shù)點(diǎn)兒</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>  //-----顯示價(jià)格----</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>  //延時(shí)時(shí)基為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; // 指示,單程還是往返,燈低電平點(diǎn)亮;

84、 往返亮;</p><p>  led2=key3_flag; // 指示,暫停時(shí)亮;</p><p>  led3=flag; // 指示是否等待;</p><p>  led4=key1_flag; //切換指示,顯示路程還是等待時(shí)間;</p><p>  diplay_delay(); </p>

85、;<p>  } </p><p>  //中斷及定時(shí)器初始化 </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>  //********* 定時(shí)器 ********</p><p>  void time0() interrupt 1 //定時(shí)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(); //初始化定時(shí)器</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. 本站所有資源如無(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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論