畢業(yè)論文(出租車(chē)計(jì)價(jià)器設(shè)計(jì))_第1頁(yè)
畢業(yè)論文(出租車(chē)計(jì)價(jià)器設(shè)計(jì))_第2頁(yè)
畢業(yè)論文(出租車(chē)計(jì)價(jià)器設(shè)計(jì))_第3頁(yè)
畢業(yè)論文(出租車(chē)計(jì)價(jià)器設(shè)計(jì))_第4頁(yè)
畢業(yè)論文(出租車(chē)計(jì)價(jià)器設(shè)計(jì))_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、河北機(jī)電職業(yè)技術(shù)學(xué)院畢業(yè)論文河北機(jī)電職業(yè)技術(shù)學(xué)院 姓名:陸大鵬 系別:電氣工程系 班級(jí):應(yīng)用電子技術(shù)基于51單片機(jī)設(shè)計(jì)的多功能出租車(chē)計(jì)價(jià)器河北機(jī)電職業(yè)技術(shù)學(xué)院畢業(yè)論文目 錄第1章 引 言·11. 1 出租車(chē)計(jì)價(jià)器概述11. 2 本設(shè)計(jì)任務(wù)11.2.1 設(shè)計(jì)任務(wù) 11.2.2 設(shè)計(jì)要求11. 3 系統(tǒng)主要功能2第2章 出租車(chē)計(jì)價(jià)器硬件設(shè)計(jì) 22.1 系統(tǒng)的硬件構(gòu)成及功能22. 2 AT89S51單片機(jī)及其引腳說(shuō)明22.3 AT24C02引腳圖及其引腳功能42. 4 AT24C02 掉電存儲(chǔ)單元的設(shè)計(jì)52.5 里程計(jì)算、計(jì)價(jià)單元的設(shè)計(jì)62.6 數(shù)據(jù)顯示單元設(shè)計(jì)·6第3章 系統(tǒng)軟

2、件設(shè)計(jì)83. 1 系統(tǒng)主程序設(shè)計(jì)83. 2 定時(shí)中斷程序設(shè)計(jì)· 103. 3 里程計(jì)數(shù)中斷服務(wù)程序設(shè)計(jì)103.4 中途等待中斷服務(wù)程序設(shè)計(jì)103. 5 鍵盤(pán)服務(wù)程序設(shè)計(jì)103. 6 顯示子程序服務(wù)程序設(shè)計(jì)10第4章系統(tǒng)調(diào)試與測(cè)試結(jié)果分析114. 1 使用的儀器儀表114.2 系統(tǒng)調(diào)試11結(jié) 束 語(yǔ)121、計(jì)價(jià)表使用說(shuō)明122、全部源程序12 第1章 引 言本次課程設(shè)計(jì)利用單片機(jī)技術(shù)來(lái)實(shí)現(xiàn)一臺(tái)多功能出租車(chē)計(jì)價(jià)器,具有性能可靠、電路簡(jiǎn)單、成本低等特點(diǎn)。1.1 出租車(chē)計(jì)價(jià)器概述計(jì)價(jià)器顯示的營(yíng)運(yùn)金額是營(yíng)運(yùn)里程與價(jià)格的函數(shù)(等候時(shí)間一般折算成一定比例的里程來(lái)計(jì)算)。出租車(chē)計(jì)價(jià)器通過(guò)傳感器與行駛

3、車(chē)輛連接。出租汽車(chē)的實(shí)際里程通過(guò)傳感器的脈沖信號(hào)在計(jì)價(jià)器里折算成一定的計(jì)價(jià)營(yíng)運(yùn)里程。目前市場(chǎng)上出租車(chē)計(jì)價(jià)器功能主要有具有數(shù)據(jù)的復(fù)位功能、白天/晚上轉(zhuǎn)換功能、數(shù)據(jù)輸出功能、計(jì)時(shí)計(jì)價(jià)功能等等,但能夠進(jìn)行語(yǔ)音播報(bào)數(shù)據(jù)信息的出租車(chē)計(jì)價(jià)器還是比較少見(jiàn)的,針對(duì)這一點(diǎn)我們來(lái)設(shè)計(jì)一款多功能出租車(chē)計(jì)價(jià)器,在原有功能的基礎(chǔ)上增加單價(jià)輸出、單價(jià)調(diào)整、路程輸出、顯示當(dāng)前的系統(tǒng)時(shí)間、語(yǔ)音播報(bào)數(shù)據(jù)信息等功能。1.2 本設(shè)計(jì)任務(wù)1.2.1 設(shè)計(jì)任務(wù)設(shè)計(jì)一款基于A(yíng)T89S51單片機(jī)的出租車(chē)計(jì)價(jià)器。1.2.2 設(shè)計(jì)要求1.基本要求(1)不同情況具有不同的收費(fèi)標(biāo)準(zhǔn)。l 白天l 晚上l 途中等待(>10min 開(kāi)始收費(fèi))(1

4、) 能進(jìn)行手動(dòng)修改單價(jià)。(2) 具有數(shù)據(jù)的復(fù)位功能。(3) IO 口分配的簡(jiǎn)易要求。l 距離檢測(cè)使用霍爾開(kāi)關(guān)A44El 白天/晚上收費(fèi)標(biāo)準(zhǔn)的轉(zhuǎn)換開(kāi)關(guān)l 數(shù)據(jù)的清零開(kāi)關(guān)l 單價(jià)的調(diào)整(最好使用和按鍵)(4) 數(shù)據(jù)輸出(采用LCM103)。l 單價(jià)輸出 2 位l 路程輸出 2 位l 總金額輸出 3 位(5) 按鍵。l 啟動(dòng)計(jì)時(shí)開(kāi)關(guān)l 數(shù)據(jù)復(fù)位(清零)l 白天/晚上轉(zhuǎn)換2.發(fā)揮部分(1) 能夠在掉電的情況下存儲(chǔ)單價(jià)等數(shù)據(jù)。(2) 能夠顯示當(dāng)前的系統(tǒng)時(shí)間。(3) 語(yǔ)音播報(bào)數(shù)據(jù)信息。1.3 系統(tǒng)主要功能 本課程設(shè)計(jì)所設(shè)計(jì)的出租車(chē)計(jì)價(jià)器的主要功能有:數(shù)據(jù)的復(fù)位、白天/晚上轉(zhuǎn)換、數(shù)據(jù)輸出、計(jì)時(shí)計(jì)價(jià)、單價(jià)輸出

5、及調(diào)整、路程輸出、語(yǔ)音播報(bào)數(shù)據(jù)信息、實(shí)現(xiàn)在系統(tǒng)掉電的時(shí)候保存單價(jià)和系統(tǒng)時(shí)間等信息等功能。輸出采用8 段數(shù)碼顯示管。本電路設(shè)計(jì)的計(jì)價(jià)器不但能實(shí)現(xiàn)基本的計(jì)價(jià),而且還能根據(jù)白天、黑夜、中途等待來(lái)調(diào)節(jié)單價(jià),同時(shí)在不計(jì)價(jià)的時(shí)候還能作為時(shí)鐘為司機(jī)同志提供方便。第2章 計(jì)價(jià)器硬件設(shè)計(jì)本系統(tǒng)的硬件設(shè)計(jì)主要包括單片機(jī)AT89S51、數(shù)據(jù)顯示部件、A44E霍爾傳感器電路、AT24C02 掉電存儲(chǔ)單元的設(shè)計(jì)、里程計(jì)算及計(jì)價(jià)單元的設(shè)計(jì)。在硬件設(shè)計(jì)過(guò)程中,充分利用各部件的功能,實(shí)現(xiàn)多功能的出租車(chē)計(jì)價(jià)器設(shè)計(jì)。2.1 系統(tǒng)的硬件構(gòu)成及功能計(jì)價(jià)器的單片機(jī)控制方案圖如圖1 單片機(jī)控制方案圖所示。它由以下幾個(gè)部件組成:?jiǎn)纹瑱C(jī)AT

6、89S51、總金額及單價(jià)顯示部件、鍵盤(pán)控制部件,AT24C02 掉電存儲(chǔ)控制、里程計(jì)算單元、串中顯示驅(qū)動(dòng)電路等。利用單片機(jī)豐富的IO端口,及其控制的靈活性,實(shí)現(xiàn)基本的里程計(jì)價(jià)功能和價(jià)格調(diào)節(jié)、時(shí)鐘顯示功能。不但能實(shí)現(xiàn)所要求的功能而且能在很大的程度上擴(kuò)展功能,而且還可以方便的對(duì)系統(tǒng)進(jìn)行升級(jí)。具體電路參見(jiàn)附錄中“多功能出租車(chē)計(jì)價(jià)器總體電路圖”如圖1 單片機(jī)控制方案圖。圖1 單片機(jī)控制方案圖2.2 AT89S51單片機(jī)及其引腳說(shuō)明AT89S51是美國(guó)ATMEL公司生產(chǎn)的低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4KB的可系統(tǒng)編程的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技

7、術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)8051指令系統(tǒng)及引腳。它集Flash程序存儲(chǔ)器既可在線(xiàn)編程(ISP)也可用傳統(tǒng)方法進(jìn)行編程及通用 8位微處理器于單片芯片中,具有高性?xún)r(jià)比。AT89S51是一個(gè)有40個(gè)引腳的芯片,引腳配置如圖2 AT89S51引腳配置所示。圖2 AT89S51引腳配置AT89S51芯片的40個(gè)引腳功能為:VCC 電源電壓。GND 接地。RST 復(fù)位輸入。當(dāng)RST變?yōu)楦唠娖讲⒈3?個(gè)機(jī)器周期時(shí),將使單片機(jī)復(fù)位。WDT溢出將使該引腳輸出高電平,設(shè)置SFR AUXR的DISRTO位(地址8EH)可打開(kāi)或關(guān)閉該功能。DISKRTO位缺省為RESET輸出高電平打開(kāi)狀態(tài)。XTAL1 反向振蕩放大器的輸入及

8、內(nèi)部時(shí)鐘工作電路的輸入。XTAL2 來(lái)自反向振蕩放大器的輸出。P0口 一組8位漏極開(kāi)路型雙向I/O口。也即地址/數(shù)據(jù)總線(xiàn)復(fù)用口。作為輸出口用時(shí),每位能驅(qū)動(dòng)8個(gè)TTL邏輯門(mén)電路,對(duì)端口寫(xiě)“1”可作為高阻抗輸入端用。在訪(fǎng)問(wèn)外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線(xiàn)分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線(xiàn)復(fù)用,在訪(fǎng)問(wèn)期間激活內(nèi)部上拉電阻。在Flash編程時(shí),P0口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求外接上拉電阻。P1口 一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)電路。對(duì)端口寫(xiě)“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入

9、口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。Flash編程和程序校驗(yàn)期間,P1接收低8位地址。P1口部分端口引腳及功能如表1 P1口特殊功能所示。表1 P1口特殊功能P1口引腳特殊功能P1.5MOSI(用于ISP編程)P1.6MOSI(用于ISP編程)P1.7SCK(用于ISP編程)P2口 一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口。P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)電路。對(duì)端口寫(xiě)“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。在訪(fǎng)問(wèn)外部程序

10、存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口送出高8位地址數(shù)據(jù)。在訪(fǎng)問(wèn)8位地址的外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口線(xiàn)上的內(nèi)容在整個(gè)訪(fǎng)問(wèn)期間不改變。Flash編程和程序校驗(yàn)期間,P2亦接收低8位地址。P3口 一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口。P3的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)電路。對(duì)P3口寫(xiě)“1”時(shí),它們被內(nèi)部的上拉電阻把拉到高電并可作輸入端口。作輸入端口使用時(shí),被外部拉低的P3口將用上拉電阻輸出電流(IIL)。P3口除了作為一般的I/O口線(xiàn)外,更重要的用途是它的第二功能,如表2 P3口特殊功能所示。P3口還接收一些用于Flash閃速存儲(chǔ)器編程和程序校驗(yàn)期間的控制信號(hào)。表2 P3

11、口特殊功能P3口引腳特殊功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2(外部中斷0)P3.3(外部中斷1)P3.4T0(定時(shí)器0外部輸入)P3.5T1(定時(shí)器1外部輸入)P3.6 (外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通)P3.7 (外部數(shù)據(jù)存儲(chǔ)器讀選通)PSEN/ 程序儲(chǔ)存允許輸出是外部程序存儲(chǔ)器的讀先通信號(hào),當(dāng)AT89S51由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN/有效,即輸出兩個(gè)脈沖。當(dāng)訪(fǎng)問(wèn)外部數(shù)據(jù)存儲(chǔ)器,沒(méi)有兩次有效的PSEN/信號(hào)。EA/VPP 外部訪(fǎng)問(wèn)允許。欲使CPU僅訪(fǎng)問(wèn)外部程序存儲(chǔ)器,EA端必須保持低電平,需注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)

12、鎖存EA端狀態(tài)。Flash存儲(chǔ)器編程時(shí),該引腳加上+12V的編程電壓VPP。2.3 AT24C02引腳圖及其引腳功能AT24C02芯片引腳配置如圖3 AT24C02引腳配置圖所示。圖3 AT24C02引腳配置圖AT24C02芯片DIP封裝,共有8個(gè)引腳,其中:A2A0 地址引腳;SDA、SCL I2C總線(xiàn)接口;WP 寫(xiě)保護(hù)引腳,WP接VSS時(shí),禁止寫(xiě)入高位地址,WP接VDD時(shí),允許寫(xiě)入任何地址;VCC 電源端GND 接地端2.4 AT24C02 掉電存儲(chǔ)單元的設(shè)計(jì)掉電存儲(chǔ)單元的作用是在電源斷開(kāi)的時(shí)候,存儲(chǔ)當(dāng)前設(shè)定的單價(jià)信息。AT24C02是ATMEL公司的2KB 字節(jié)的電可擦除存儲(chǔ)芯片,采用兩

13、線(xiàn)串行的總線(xiàn)和單片機(jī)通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10Ua(5.5V),芯片內(nèi)的資料可以在斷電的情況下保存40 年以上,而且采用8 腳的DIP 封裝,使用方便。其電路如圖 4 掉電存儲(chǔ)電路原理圖所示。圖 4 掉電存儲(chǔ)電路原理圖圖中R8、R10 是上拉電阻,其作用是減少AT24C02 的靜態(tài)功耗,由于A(yíng)T24C02 的數(shù)據(jù)線(xiàn)和地址線(xiàn)是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線(xiàn)SCL(移位脈沖)和SDA(數(shù)據(jù)/地址)與單片機(jī)傳送數(shù)據(jù)。每當(dāng)設(shè)定一次單價(jià),系統(tǒng)就自動(dòng)調(diào)用存儲(chǔ)程序,將單價(jià)信息保存在芯片內(nèi);當(dāng)系統(tǒng)重新上電的時(shí)候,自動(dòng)調(diào)用讀存儲(chǔ)器程序,將存儲(chǔ)器內(nèi)的單價(jià)等信息,讀

14、到緩存單元中,供主程序使用。2.5 里程計(jì)算、計(jì)價(jià)單元的設(shè)計(jì)里程計(jì)算是通過(guò)安裝在車(chē)輪上的霍爾傳感器A44E檢測(cè)到的信號(hào),送到單片機(jī),經(jīng)處理計(jì)算,送給顯示單元的。其原理如圖 5 傳感器測(cè)距示意圖所示。圖 5 傳感器測(cè)距示意圖由于A(yíng)44E 屬于開(kāi)關(guān)型的霍爾器件,其工作電壓范圍比較寬(4.518V),其輸出的信號(hào)符合TTL 電平標(biāo)準(zhǔn),可以直接接到單片機(jī)的IO 端口上,而且其最高檢測(cè)頻率可達(dá)到1MHZ。A44E 集成霍耳開(kāi)關(guān)由穩(wěn)壓器A、霍耳電勢(shì)發(fā)生器(即硅霍耳片)B、差分放大器C、施密特觸發(fā)器D 和OC 門(mén)輸出E 五個(gè)基本部分組成。在輸入端輸入電壓CC V ,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍耳電勢(shì)發(fā)生器的兩端,根

15、據(jù)霍耳效應(yīng)原理,當(dāng)霍耳片處在磁場(chǎng)中時(shí),在垂直于磁場(chǎng)的方向通以電流,則與這二者相垂直的方向上將會(huì)產(chǎn)生霍耳電勢(shì)差H V 輸出,該H V 信號(hào)經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC 門(mén)輸出。當(dāng)施加的磁場(chǎng)達(dá)到工作點(diǎn)(即OP B )時(shí),觸發(fā)器輸出高電壓(相對(duì)于地電位),使三極管導(dǎo)通,此時(shí)OC 門(mén)輸出端輸出低電壓,通常稱(chēng)這種狀態(tài)為開(kāi)。當(dāng)施加的磁場(chǎng)達(dá)到釋放點(diǎn)(即rP B )時(shí),觸發(fā)器輸出低電壓,三極管截止,使OC 門(mén)輸出高電壓,這種狀態(tài)為關(guān)。這樣兩次電壓變換,使霍耳開(kāi)關(guān)完成了一次開(kāi)關(guān)動(dòng)作。 我們選擇了P3.2 口作為信號(hào)的輸入端,內(nèi)部采用外部中斷0(這樣可以減少程序設(shè)計(jì)的麻煩),車(chē)輪每轉(zhuǎn)

16、一圈(我們?cè)O(shè)車(chē)輪的周長(zhǎng)是1 米),霍爾開(kāi)關(guān)就檢測(cè)并輸出信號(hào),引起單片機(jī)的中斷,對(duì)脈計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到1000 次時(shí),也就是1 公里,單片機(jī)就控制將金額自動(dòng)的加增加,其計(jì)算公式:當(dāng)前單價(jià)×公里數(shù)=金額。2.6 數(shù)據(jù)顯示單元設(shè)計(jì)由于設(shè)計(jì)要求有單價(jià)(2 位)、路程(2 位)、總金額(3 位)顯示輸出,加上我們另外擴(kuò)展了時(shí)鐘顯示(包含時(shí)分秒的顯示),采用LCD 液晶段碼顯示,在距離屏幕1 米之外就無(wú)法看清數(shù)據(jù),不能滿(mǎn)足要求,而且在白天其對(duì)比度也不能夠滿(mǎn)足要求,因此我們采用6 位LED數(shù)碼管的分屏顯示,如圖 6 采用6 位LED數(shù)碼管的分屏顯示所示:時(shí)鐘顯示(圖中顯示為12 點(diǎn)0 分46 秒)圖

17、 6 采用6 位LED數(shù)碼管的分屏顯示數(shù)據(jù)的分屏的顯示是通過(guò)按鍵S1 來(lái)實(shí)現(xiàn)切換的,如圖 7 S1切換顯示屏所示。圖 7 S1切換顯示屏在出租車(chē)不走的時(shí)候,按下S1,可以實(shí)現(xiàn)數(shù)據(jù)的分屏顯示;車(chē)在行走的時(shí)候只有總金額和單價(jià)顯示屏在顯示,當(dāng)?shù)竭_(dá)目的地的時(shí)候,客戶(hù)要求查看總的里程的時(shí)候,就可以按下S1 切換到里程和單價(jià)顯示屏,供客戶(hù)查詢(xún)。顯示電路的電路原理圖如圖 8 顯示器原理圖所示。圖 8 顯示器原理圖從單片機(jī)串口輸出的信號(hào)先送到左邊的移位寄存器(74HC164),由于移位脈沖的作用,使數(shù)據(jù)向右移,達(dá)到顯示的目的。移位寄存器74HC164還兼作數(shù)碼管的驅(qū)動(dòng),插頭1(header1)接電源,插頭2(

18、header2)接數(shù)據(jù)和脈沖輸出端。電路中的三個(gè)整流管D1D3 的作用是降低數(shù)碼管的工作電壓,增加其使用壽命。第3章 系統(tǒng)的軟件設(shè)計(jì)本系統(tǒng)的軟件設(shè)計(jì)主要可分為主程序模塊、定時(shí)計(jì)數(shù)中斷程序、里程計(jì)數(shù)中斷服務(wù)程序、中途等待中斷服務(wù)程序、顯示子程序服務(wù)程序、鍵盤(pán)服務(wù)程序六大模塊。下面對(duì)各部分模塊作介紹。3.1 系統(tǒng)主程序設(shè)計(jì)在主程序模塊中,需要完成對(duì)各接口芯片的初始化、出租車(chē)起價(jià)和單價(jià)的初始化、中斷向量的設(shè)計(jì)以及開(kāi)中斷、循環(huán)等待等工作。另外,在主程序模塊中還需要設(shè)置啟動(dòng)/清除標(biāo)志寄存器、里程寄存器和價(jià)格寄存器,并對(duì)它們進(jìn)行初始化。然后,主程序?qū)⒏鶕?jù)各標(biāo)志寄存器的內(nèi)容,分別完成啟動(dòng)、清除、計(jì)程和計(jì)價(jià)等

19、不同的操作。主程序流程圖如圖9 所示。當(dāng)按下S1時(shí),就啟動(dòng)計(jì)價(jià),將根據(jù)里程寄存器中的內(nèi)容計(jì)算和判斷出行駛里程是否已超過(guò)起價(jià)公里數(shù)。若已超過(guò),則根據(jù)里程值、每公里的單價(jià)數(shù)和起價(jià)數(shù)來(lái)計(jì)算出當(dāng)前的累計(jì)價(jià)格,并將結(jié)果存于價(jià)格寄存器中,然后將時(shí)間和當(dāng)前累計(jì)價(jià)格送顯示電路顯示出來(lái)。當(dāng)?shù)竭_(dá)目的地的時(shí)候,由于霍爾開(kāi)關(guān)沒(méi)有送來(lái)脈沖信號(hào),就停止計(jì)價(jià),顯示當(dāng)前所應(yīng)該付的金額和對(duì)應(yīng)的單價(jià),到下次啟動(dòng)計(jì)價(jià)時(shí),系統(tǒng)自動(dòng)對(duì)顯示清零,并重新進(jìn)行初始化過(guò)程。開(kāi)始初始化數(shù)據(jù)否S1按下?是S4按下?是否設(shè)定默認(rèn) 單價(jià)(白天)設(shè)定晚上單價(jià)否按下S4?是啟動(dòng)計(jì)價(jià)器設(shè)定中途等待單價(jià)圖9 主程序流程圖總路程加1總金額加1里程中斷?S4按下

20、?S3按下?到一公里?停止計(jì)價(jià)和里程計(jì)數(shù)S3按下?否是是否否是顯示金額及單價(jià)顯示路程和單價(jià)是是否返回時(shí)間顯示是否傳感有信號(hào)? 3.2 定時(shí)中斷服務(wù)程序在定時(shí)中斷服務(wù)程序中,每100ms 產(chǎn)生一次中斷,當(dāng)產(chǎn)生10 次中斷的時(shí)候,也就到了一秒,送數(shù)據(jù)到相應(yīng)的顯示緩沖單元,并調(diào)用顯示子程序?qū)崟r(shí)顯示。其程序流程如圖10 所示。3.3 里程計(jì)數(shù)中斷服務(wù)程序每當(dāng)霍爾傳感器輸出一個(gè)低電平信號(hào)就使單片機(jī)中斷一次,當(dāng)里程計(jì)數(shù)器對(duì)里程脈沖計(jì)滿(mǎn)1000 次時(shí),使微機(jī)進(jìn)入里程計(jì)數(shù)中斷服務(wù)程序中。在該程序中,需要完成當(dāng)前行駛里程數(shù)和總額的累加操作,并將結(jié)果存入里程和總額寄存器中。3.4 中途等待中斷服務(wù)程序當(dāng)在計(jì)數(shù)狀態(tài)

21、下霍爾開(kāi)關(guān)沒(méi)有輸出信號(hào),片內(nèi)的T1 定時(shí)器便被啟動(dòng),每當(dāng)計(jì)時(shí)到達(dá)10分鐘,就對(duì)當(dāng)前金額加上中途等待的單價(jià),以后每十分鐘都自動(dòng)加上中途等待的單價(jià)。當(dāng)中途等待結(jié)束的時(shí)候,也就自動(dòng)切換到正常的計(jì)價(jià)。3.5 顯示子程序服務(wù)程序由于是分屏顯示數(shù)據(jù),所以就要用到4 個(gè)顯示子程序,分別是:時(shí)分秒顯示子程序(HMS_DIS)、金額單價(jià)顯示子程序(CP_DIS)、路程單價(jià)顯示子程序(DP_DIS)、單價(jià)調(diào)節(jié)子程序(PA_DIS)。3.6 鍵盤(pán)服務(wù)程序鍵盤(pán)采用查詢(xún)的方式,放在主程序中,當(dāng)沒(méi)有按鍵按下的時(shí)候,單片機(jī)循環(huán)主程序,一旦有按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。如圖9 主程序流程圖,圖10 定時(shí)

22、中斷服務(wù)程序。開(kāi)始保護(hù)現(xiàn)場(chǎng)重置計(jì)數(shù)初值否中斷10次?是數(shù)據(jù)送顯示緩沖單元調(diào)用顯示子程序恢復(fù)現(xiàn)場(chǎng)并中斷返回第4章 系統(tǒng)調(diào)試與測(cè)試結(jié)果分析根據(jù)系統(tǒng)設(shè)計(jì)方案,本系統(tǒng)的調(diào)試共分為三大部分:硬件調(diào)試,軟件調(diào)試和軟硬件聯(lián)調(diào)。測(cè)試包括里程計(jì)價(jià)測(cè)試、掉電存儲(chǔ)測(cè)試測(cè)試。4.1 使用的儀器儀表 數(shù)字萬(wàn)用表DT9203單片機(jī)仿真器WAVE6000燒寫(xiě)器 GF2100雙蹤穩(wěn)壓穩(wěn)流電源DH1718E-5數(shù)字示波器 TDS10024.2 系統(tǒng)調(diào)試根據(jù)系統(tǒng)設(shè)計(jì)方案,本系統(tǒng)的調(diào)試共分為三大部分:硬件調(diào)試,軟件調(diào)試和軟硬件聯(lián)調(diào)。由于在系統(tǒng)設(shè)計(jì)中采用模塊設(shè)計(jì)法,所以方便對(duì)各電路模塊功能進(jìn)行逐級(jí)測(cè)試。結(jié) 束 語(yǔ)通過(guò)本次課程設(shè)計(jì),又

23、使我學(xué)到了許多書(shū)本上無(wú)法學(xué)到的知識(shí),也使也深該體會(huì)到單片機(jī)技術(shù)應(yīng)用領(lǐng)域的廣泛,不僅使我對(duì)學(xué)過(guò)的單片機(jī)知識(shí)有了很多的鞏固,同時(shí)也對(duì)單片機(jī)這一門(mén)課程產(chǎn)生了更大的興趣。在本次課程設(shè)計(jì)過(guò)程中,我學(xué)會(huì)了在網(wǎng)絡(luò)上查找有關(guān)本設(shè)計(jì)的各硬件的資源,其中包括:AT89S51單片機(jī)及其引腳說(shuō)明、AT24C02引腳圖及其引腳功能等,為本次課程設(shè)計(jì)提供了一定的資料。由于平時(shí)很少進(jìn)行課程設(shè)計(jì),所以對(duì)于課程設(shè)計(jì)報(bào)告的格式也是近期才接觸到,經(jīng)過(guò)這兩次的設(shè)計(jì),為我們以后畢業(yè)設(shè)計(jì)的制作也奠定了一定的基礎(chǔ)。1計(jì)價(jià)表使用說(shuō)明 (1)S1按鍵的功能在出租車(chē)不走的時(shí)候,按下S1,可以實(shí)現(xiàn)數(shù)據(jù)的分屏顯示;車(chē)在行走的時(shí)候只有總金額

24、和單價(jià)顯示屏在顯示,當(dāng)?shù)竭_(dá)目的地的時(shí)候,客戶(hù)要求查看總的里程的時(shí)候,就可以按下S1 切換到里程和單價(jià)顯示屏,供客戶(hù)查詢(xún)。(2)S2按鍵的功能在按下S1按鍵之后,若接著按下S2鍵則進(jìn)行單價(jià)調(diào)整(默認(rèn)為調(diào)整白天單價(jià)),當(dāng)接著按下S1時(shí),則進(jìn)行晚上單價(jià)調(diào),再次按下S1可進(jìn)行中途等待單價(jià)調(diào)整。當(dāng)單價(jià)調(diào)整結(jié)束后,可以通過(guò)過(guò)按下S2按鍵進(jìn)行時(shí)間調(diào)整,默認(rèn)為調(diào)整時(shí),接著按下S1可進(jìn)行調(diào)整分,分調(diào)整后再接下S1可進(jìn)行秒調(diào)整。當(dāng)時(shí)調(diào)整完成后,若接著按下S2則又可進(jìn)行單價(jià)調(diào)整。(3)S3按鍵的功能在顯示金額及單價(jià)時(shí),若按下S3鍵則顯示路程和單價(jià),再次按下S3,可返回顯示金額及單價(jià)。(4)S4按鍵的功能在按下S1按

25、鍵之后,若接著按下S4按鍵,則進(jìn)行設(shè)定默認(rèn)晚上單價(jià),并啟動(dòng)計(jì)價(jià)器,若沒(méi)有按下S4則可設(shè)定默認(rèn)單價(jià)(白天),并啟動(dòng)計(jì)價(jià)器。當(dāng)設(shè)定默認(rèn)晚上單價(jià)結(jié)束后,再次接下S4按鍵,則可設(shè)定默認(rèn)中途等待單價(jià),并啟動(dòng)計(jì)價(jià)器。當(dāng)設(shè)定默認(rèn)中途等待單價(jià)后,若還按一次S4,則返回系統(tǒng)時(shí)間的顯示。2.全部源程序/12864(帶字庫(kù)) (漢字及字母的顯示,漢字不能錯(cuò)位)#include <stdio.h>#include <reg52.h>#include <absacc.h>#define lcd_bus P0 / 數(shù)據(jù)總線(xiàn)sbit rs =P32; /數(shù)據(jù)&指令選擇,H:寫(xiě)數(shù)據(jù)

26、,L:寫(xiě)指令sbit rw =P33; /讀&寫(xiě)選擇,H:read,L:writesbit e =P34; /讀寫(xiě)使能sbit psb=P30; /psb=H,并口模式, psb=L,串口模式sbit rst=P35; /LCD復(fù)位,低有效sbit bf =P07; /忙閑狀態(tài)標(biāo)志位,H:內(nèi)部正執(zhí)行操作,L:空閑sbit P20=P20; /進(jìn)入單價(jià)調(diào)節(jié)sbit P21=P21; /計(jì)價(jià)開(kāi)始按鍵sbit P23=P23; /時(shí)間調(diào)節(jié)按鍵sbit P26=P26; /停車(chē)鎖定屏顯按鍵sbit P27=P27; /確認(rèn)按鍵sbit P16=P16; /光電開(kāi)關(guān)檢測(cè)sbit P14=P14;

27、 /373片選void delayus(unsigned char us);/延時(shí)子程序usvoid delayms(unsigned int ms);/延時(shí)子程序msvoid init_lcd(void);/初始化void chk_busy(void);/檢測(cè)忙閑void wr_data(unsigned char dat);/寫(xiě)數(shù)據(jù)到LCDvoid wr_comm(unsigned char comm);/寫(xiě)命令到LCDvoid wr_str(unsigned char *s);/向LCD寫(xiě)字符串,長(zhǎng)度64字符之內(nèi)(32個(gè)漢字)void wendu();sbit DS18B20=P17;

28、/ ds18b20數(shù)據(jù)線(xiàn)void leddisplay(); / 數(shù)碼管顯示void shijian();bit ResetDS1820(void); /復(fù)位子程序void WRDS18B20(unsigned char); / 寫(xiě)1個(gè)字節(jié)子程序unsigned char RDDS18B20(void); / 讀1個(gè)字節(jié)子程序unsigned int GetTempDS18B20(void); /讀取溫度子程序void delay1s(); /延時(shí)子程序 1s/*-DS1302程序開(kāi)始- -*/sbit SCLK1302=P13; / 時(shí)鐘sbit DATA1302=P12; / 數(shù)據(jù)sbit

29、 RST1302=P11; / 復(fù)位sbit BIT0=ACC0; / 累加器A 最低位sbit BIT7=ACC7; / 累加器A 最高位void wr1302(unsigned char dat); /向1302寫(xiě)1個(gè)字節(jié)unsigned char rd1302(void); /從1302讀1個(gè)字節(jié)void v_wr1302(unsigned char add,unsigned char dat); /先寫(xiě)地址,后寫(xiě)1字節(jié)數(shù)據(jù)unsigned char v_rd1302(unsigned char add); /先寫(xiě)地址,后讀1字節(jié)數(shù)據(jù)void v_set1302(unsigned cha

30、r *p2); /設(shè)置初始時(shí)間void v_get1302(void); /讀取DS1302當(dāng)前時(shí)間/* -DS1302程序結(jié)束- */unsigned char RcvData8; / 1302接收緩沖區(qū)unsigned char SendData8=0,0,0,0,0,0,0,0; / 1302發(fā)送緩沖區(qū)unsigned char time7; /當(dāng)前時(shí)間,格式: 秒 分 時(shí) 日 月 星期 年unsigned char settime7=0x20,0x55,0x14,0x20,0x07,0x03,0x09; /時(shí)間初始值: 秒 分 時(shí) 日 月 星期 年unsigned char ledxs

31、08; / 時(shí)-分-秒 LED顯示unsigned char ledxs3; / 數(shù)碼管顯示緩沖區(qū)unsigned char ledxs28; / 時(shí)-分-秒 LED顯示unsigned char xs16; /顯示緩沖區(qū)年 月 日 時(shí) 分 秒unsigned char aa5=0x30,0x30,0x30,0x30,0; /距離數(shù)組unsigned char bb5=0x30,0x30,0x30,0x30,0; /費(fèi)用數(shù)組unsigned char cc2=0x31,0x35;/單價(jià)數(shù)組unsigned char dd4=0,0,0,0; /語(yǔ)音芯片報(bào)價(jià)數(shù)組void zongkong();v

32、oid tiaojie();void jijia();void baojia();void danjia();unsigned int x=15;/單價(jià)main() delayms(200); v_set1302(settime); / 設(shè)置初始時(shí)間 zongkong();void zongkong() P14=1; init_lcd();/LCD初始化,并清屏 while(1) shijian(); wendu(); if(P20=0) danjia();/進(jìn)入單價(jià)調(diào)節(jié)函數(shù) if(P21=0) init_lcd();/LCD初始化,并清屏 jijia(); /進(jìn)入計(jì)價(jià)頁(yè)面 if(P23=0)

33、 tiaojie(); /調(diào)節(jié)時(shí)間 wr_comm(0x80); wr_str("泰山學(xué)院出租車(chē)行"); wr_comm(0x90); wr_str(" 歡 迎 您"); wr_comm(0x88); wr_str(" "); wr_data(ledxs20); wr_data(ledxs21); wr_data(ledxs22); wr_data(ledxs23); wr_data(ledxs24); wr_data(ledxs25); wr_data(ledxs26); wr_data(ledxs27); wr_comm(0x98

34、); wr_data(ledxs00); wr_data(ledxs01); wr_data(ledxs02); wr_data(ledxs03); wr_data(ledxs04); wr_data(ledxs05); wr_data(ledxs06); wr_data(ledxs07); wr_comm(0x9d); wr_data(ledxs0); wr_data(ledxs1); wr_str("."); wr_data(ledxs2); wr_str("度"); void shijian() unsigned char i,j; v_get13

35、02(); /取得當(dāng)前時(shí)間 j=2; for(i=7;i>0;i-) xsj=(timei-1>>4)+0x30; xsj+1=(timei-1&0x0f)+0x30; /BCD碼拆成2字節(jié) j=j+2; ledxs00=xs2; ledxs01=xs3; / 年 ledxs02=0x2d; / - ledxs03=xs6; ledxs04=xs7; / 月 ledxs05=0x2d; / - ledxs06=xs8; ledxs07=xs9; / 日 ledxs20=xs10; ledxs21=xs11; / 時(shí) ledxs22=0x2d; / - ledxs23=

36、xs12; ledxs24=xs13; / 分 ledxs25=0x2d; / - ledxs26=xs14; ledxs27=xs15; / 秒void wr1302(unsigned char dat) /向1302寫(xiě)1個(gè)字節(jié) unsigned char i; for(i=0;i<8;i+) /從最低位開(kāi)始發(fā)送 ACC=dat; DATA1302=BIT0;/位傳送至數(shù)據(jù)總線(xiàn) ; SCLK1302=0; /清時(shí)鐘總線(xiàn) ; SCLK1302=1; /時(shí)鐘上升沿,發(fā)送數(shù)據(jù)有效 dat=dat>>1; /數(shù)據(jù)右移 ; unsigned char rd1302(void) /從1

37、302讀1個(gè)字節(jié) unsigned char i; for(i=0;i<8;i+) /從最低位開(kāi)始接收 ACC=ACC>>1; DATA1302=1; /讀數(shù)據(jù)之前,P1口輸出1 SCLK1302=1;/時(shí)鐘置高電平 ; SCLK1302=0;/時(shí)鐘下降沿,接收數(shù)據(jù)有效 ; BIT7=DATA1302;/接收1位數(shù)據(jù) ; return ACC;void v_wr1302(unsigned char add,unsigned char dat)/先寫(xiě)地址,后寫(xiě)1字節(jié)數(shù)據(jù) / 地址或命令 數(shù)據(jù) RST1302=0;/復(fù)位引腳低電平,所有數(shù)據(jù)傳送終止 ; SCLK1302=0;/清

38、時(shí)鐘總線(xiàn) ; RST1302=1;/復(fù)位引腳高電平,控制邏輯有效 ; wr1302(add); /寫(xiě)地址或命令 ; wr1302(dat); /寫(xiě)1個(gè)數(shù)據(jù) ; SCLK1302=1; RST1302=0;unsigned char v_rd1302(unsigned char add) /先寫(xiě)地址,后讀1字節(jié)數(shù)據(jù) / 地址 unsigned char i; RST1302=0;/復(fù)位引腳低電平,所有數(shù)據(jù)傳送終止 ; SCLK1302=0;/清時(shí)鐘總線(xiàn) ; RST1302=1;/復(fù)位引腳高電平,控制邏輯有效 ; wr1302(add); /寫(xiě)地址或命令 ; i=rd1302(); /讀取數(shù)據(jù) S

39、CLK1302=1; RST1302=0; return i; /返回讀取的數(shù)據(jù)/* 名稱(chēng): send_byte1302* 說(shuō)明: 先寫(xiě)地址,后寫(xiě)數(shù)據(jù)(時(shí)鐘多字節(jié)方式)* 功能: 往DS1302寫(xiě)入時(shí)鐘數(shù)據(jù)(多字節(jié)方式)* 調(diào)用: wr1302();v_wr1302();* 輸入: *p: 時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年 控制* 8Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B 1B* 返回值: 無(wú)*/void send_byte1302(unsigned char *p) unsigned char i; v_wr1302(0x8e,0x00); /

40、控制命令,WP=0,寫(xiě)操作 RST1302=0;/復(fù)位引腳低電平,所有數(shù)據(jù)傳送終止 ; SCLK1302=0;/清時(shí)鐘總線(xiàn) ; RST1302=1;/復(fù)位引腳高電平,控制邏輯有效 ; wr1302(0xbe); /0xbe:時(shí)鐘多字節(jié)寫(xiě)命令 for(i=0;i<8;i+)/發(fā)送數(shù)據(jù)8字節(jié) wr1302(*p); p+; SCLK1302=1; RST1302=0;/* 名稱(chēng): rcv_byte1302* 說(shuō)明: 先寫(xiě)地址,后讀數(shù)據(jù)(時(shí)鐘多字節(jié)方式)* 功能: 讀取DS1302時(shí)鐘數(shù)據(jù)* 調(diào)用: wr1302() , rd1302()* 輸入: *p1: 時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí)

41、 日 月 星期 年* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B* 返回值: ucDa :讀取的數(shù)據(jù)*/unsigned char rcv_byte1302(unsigned char *p1) unsigned char i; RST1302=0;/復(fù)位引腳低電平,所有數(shù)據(jù)傳送終止 ; SCLK1302=0;/清時(shí)鐘總線(xiàn) ; RST1302=1;/復(fù)位引腳高電平,控制邏輯有效 ; wr1302(0xbf);/ 0xbf:時(shí)鐘多字節(jié)讀命令 for(i=0;i<8;i+)/接收數(shù)據(jù)8字節(jié) *p1=rd1302(); p1+; SCLK1302=1; RST1302=

42、0;/* 名稱(chēng): v_set1302* 說(shuō)明:* 功能: 設(shè)置初始時(shí)間* 調(diào)用: v_wr1302()* 輸入: *p2: 初始時(shí)間地址。初始時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B* 返回值: 無(wú)*/void v_set1302(unsigned char *p2) unsigned char i; unsigned char addr=0x80; v_wr1302(0x8e,0x00); /控制命令,WP=0,允許寫(xiě) for(i=0;i<7;i+) v_wr1302(addr,*p2); /* 秒 分 時(shí) 日 月

43、 星期 年 */ p2+; addr=addr+2; v_wr1302(0x8e,0x80); / 控制命令,WP=1,寫(xiě)保護(hù)/* 名稱(chēng): v_get1302* 說(shuō)明:* 功能: 讀取DS1302當(dāng)前時(shí)間* 調(diào)用: v_rd1302()* 輸入: time: 保存當(dāng)前時(shí)間地址。當(dāng)前時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B* 返回值: 無(wú)*/void v_get1302(void) unsigned char i; unsigned char addr=0x81; for(i=0;i<7;i+) timei=v_rd1302(addr); /格式為: 秒 分 時(shí) 日 月 星期 年 addr=addr+2; void wendu() unsigned int wendu,temp,m; m=1; while(m-) wendu=GetTempDS18B20(); /讀取溫度 temp=wendu/100; led

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論