版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、河南理工大學(xué)河南理工大學(xué)河南理工大學(xué)單片機(jī)應(yīng)用與仿真訓(xùn)練單片機(jī)應(yīng)用與仿真訓(xùn)練設(shè)計(jì)報(bào)告設(shè)計(jì)報(bào)告基于單片機(jī)的出租車(chē)計(jì)價(jià)器的設(shè)計(jì)基于單片機(jī)的出租車(chē)計(jì)價(jià)器的設(shè)計(jì)- 1 - / 32摘摘 要要本設(shè)計(jì)采用 AT89S52 單片機(jī)為主控器,并用霍爾傳感器檢測(cè)電機(jī)轉(zhuǎn)盤(pán)轉(zhuǎn)動(dòng)模擬車(chē)速,實(shí)現(xiàn)對(duì)出租車(chē)的多功能的計(jì)價(jià)設(shè)計(jì),輸出采用 8 段數(shù)碼顯示管。本電路設(shè)計(jì)的計(jì)價(jià)器可以實(shí)現(xiàn)要單程,往返和中途等待來(lái)調(diào)節(jié)計(jì)費(fèi),并且能夠記錄等待時(shí)間。出租車(chē)計(jì)價(jià)是根據(jù)車(chē)所行駛的路程以與乘客乘車(chē)的方式綜合決定的。出租車(chē)行駛總路程可以通過(guò)車(chē)輪的周長(zhǎng)乘車(chē)輪旋轉(zhuǎn)圈數(shù)得到。即可計(jì)算得到車(chē)輪旋轉(zhuǎn)幾周出租車(chē)能行駛一公里的路程。使用霍爾傳感器方便地計(jì)量車(chē)輪
2、旋轉(zhuǎn)的圈數(shù)。輸出的脈沖信號(hào)被接入到 AT89S52 單片機(jī)系統(tǒng)中,通過(guò)計(jì)算接收到的脈沖個(gè)數(shù),計(jì)算出當(dāng)前所行駛的路程,并且可以計(jì)算實(shí)時(shí)的速度,在速度低于 5 公里每小時(shí)是進(jìn)入等待計(jì)費(fèi)。于此同時(shí),根據(jù)不同的收費(fèi)標(biāo)準(zhǔn),通過(guò)選擇相應(yīng)的起步價(jià)、單價(jià)等收費(fèi)標(biāo)準(zhǔn)進(jìn)行計(jì)算。通過(guò)鍵盤(pán)能夠?qū)崿F(xiàn)往返設(shè)置,啟動(dòng)、暫停、停止計(jì)價(jià)器以與切換顯示當(dāng)前的行駛里程和需支付的車(chē)費(fèi)。本設(shè)計(jì)硬件電路總體可以分為五個(gè)單元:?jiǎn)纹瑱C(jī)最小系統(tǒng)單元,指示燈電路單元,按鍵電路單元,路程時(shí)間與金額顯示單元,轉(zhuǎn)速信號(hào)接收單元。軟件系統(tǒng)可以大致分為五個(gè)大的模塊為:總初始化模塊,按鍵掃描模塊,中斷與定時(shí)模塊,數(shù)據(jù)計(jì)算模塊,數(shù)碼管顯示模塊。其中,鍵盤(pán)掃描
3、和數(shù)碼管顯示采用查詢方式,轉(zhuǎn)速信號(hào)接收與等待記時(shí)采用中斷方式。這些軟硬件系統(tǒng)構(gòu)成了最終的設(shè)計(jì)。關(guān)鍵詞關(guān)鍵詞單片機(jī)霍爾傳感器出租車(chē)計(jì)價(jià)器 - 2 - / 32摘要摘要- - 1 1 - -1 1 概述概述- - 2 2 - -1.1 設(shè)計(jì)目的、意義- 2 -1.2 AT89S52 單片機(jī)功能簡(jiǎn)介- 3 -2.2.系統(tǒng)總體方案設(shè)計(jì)與硬件設(shè)計(jì)系統(tǒng)總體方案設(shè)計(jì)與硬件設(shè)計(jì)- - 4 4 - -2.1 設(shè)計(jì)要求- 4 -2.2 設(shè)計(jì)參數(shù)- 5 -2.3 方案的選取- 5 -2.4 硬件設(shè)計(jì)- 5 -2.4.1 AT89S52 單片機(jī)與最小系統(tǒng)- 5 -2.4.2 測(cè)距單元- 7 -2.4.3 顯示單元-
4、10 -2.4.4 鍵盤(pán)與指示單元- 10 -3 3 軟件設(shè)計(jì)軟件設(shè)計(jì)- - 1111 - -3.1 總體流程- 11 -3.2 計(jì)算模塊- 12 -3.3 鍵盤(pán)掃描- 12 -3.4 顯示程序- 12 -4PROTEUS4PROTEUS 軟件仿真軟件仿真- - 1313 - -5 5 課程設(shè)計(jì)體會(huì)課程設(shè)計(jì)體會(huì)- - 1414 - -參考文獻(xiàn)參考文獻(xiàn)- - 1515 - -附附 1 1:源程序代碼:源程序代碼- - 1616 - -附附 2 2:系統(tǒng)原理圖:系統(tǒng)原理圖- - 3030 - - 3 - / 321 1 概述概述1.1 設(shè)計(jì)目的、意義租車(chē)計(jì)價(jià)器技術(shù)也在不斷進(jìn)步和提高。國(guó)出租車(chē)計(jì)價(jià)器
5、已經(jīng)經(jīng)歷了 4 個(gè)階段的發(fā)展。從傳統(tǒng)的全部由機(jī)械元器件組成的機(jī)械式,到半電子式即用電子線路代替部分機(jī)械元器件的出租車(chē)計(jì)價(jià)器;再?gòu)募呻娐肥降侥壳暗膯纹瑱C(jī)系統(tǒng)設(shè)計(jì)的出租車(chē)計(jì)價(jià)器。出租車(chē)計(jì)價(jià)器計(jì)費(fèi)是否準(zhǔn)確、出租車(chē)司機(jī)是否作弊才是乘客最關(guān)心的問(wèn)題,而計(jì)價(jià)器營(yíng)運(yùn)數(shù)據(jù)的管理是否方便才是出租車(chē)司機(jī)最關(guān)注的。因此怎樣設(shè)計(jì)出一種既能有效防止司機(jī)作弊又能方便司機(jī)的計(jì)價(jià)器尤為重要。因此, 本文以單片機(jī) AT89S52 為核心設(shè)計(jì)一款多功能出租車(chē)計(jì)價(jià)器,該計(jì)價(jià)器能實(shí)現(xiàn)按時(shí)間和里程綜合計(jì)算車(chē)價(jià),能顯示時(shí)間、里程、單價(jià)、總車(chē)價(jià)等相關(guān)信息顯示。它比市場(chǎng)上的一些計(jì)價(jià)器使用更方便,功能更全,還具有有效防止司機(jī)作弊和系統(tǒng)穩(wěn)定性
6、好的優(yōu)點(diǎn)。本次設(shè)計(jì)的目的在于現(xiàn)在各大中城市出租車(chē)行業(yè)都已普與自動(dòng)計(jì)價(jià)器,所以計(jì)價(jià)器技術(shù)的發(fā)展已成定局。采用模擬電路和數(shù)字電路設(shè)計(jì)的計(jì)價(jià)器整體電路的規(guī)模較大,用到的器件多,造成故障率高,難調(diào)試。而采用單片機(jī)進(jìn)行的設(shè)計(jì),相對(duì)來(lái)說(shuō)功能強(qiáng)大,是深化單片機(jī)應(yīng)用的良好途徑,用較少的硬件和適當(dāng)?shù)能浖嗷ヅ浜峡梢院苋菀椎貙?shí)現(xiàn)設(shè)計(jì)要求,且靈活性強(qiáng),可以通過(guò)軟件編程來(lái)完成更多的附加功能。1.2AT89S52 單片機(jī)功能簡(jiǎn)介計(jì)算機(jī)系統(tǒng)已明顯地朝巨型化、單片化、網(wǎng)絡(luò)化三個(gè)方向發(fā)展。巨型化發(fā)展的目的在于不斷提高計(jì)算機(jī)的運(yùn)算速度和處理能力,以解決復(fù)雜系統(tǒng)計(jì)算和高速數(shù)據(jù)處理,比如系統(tǒng)仿真和模擬、實(shí)時(shí)運(yùn)算和處理。單片化是把計(jì)
7、算機(jī)系統(tǒng)盡可能集成在一塊半導(dǎo)體芯片上,其目的在于計(jì)算機(jī)微型化和提高系統(tǒng)的可靠性,這種單片計(jì)算簡(jiǎn)稱(chēng)單片機(jī)。單片機(jī)的部硬件結(jié)構(gòu)和指令系統(tǒng)主要是針對(duì)自動(dòng)控制應(yīng)用而設(shè)計(jì)的,所以單片機(jī)又稱(chēng)微控制器 MCU(Micro Controller Unit)。用它可以很容易地將計(jì)算機(jī)嵌入到各種儀器和現(xiàn)場(chǎng)控制設(shè)備中,因此單片機(jī)又叫做嵌入式微控制器(Embedded MCU)。單片機(jī)自 20 世紀(jì) 70 年代問(wèn)世以來(lái),以其鮮明的特點(diǎn)得到迅猛發(fā)展,已廣泛應(yīng)用于家用電器、智能玩具、- 4 - / 32智能儀器儀表、工業(yè)控制、航空航天等領(lǐng)域,經(jīng)過(guò) 30 多年的發(fā)展,性能不斷提高,品種不斷豐富,已經(jīng)形成自動(dòng)控制的一支中堅(jiān)力
8、量。據(jù)統(tǒng)計(jì),我國(guó)的單片機(jī)年容量已達(dá) 13 億片,且每年以大約 16的速度增長(zhǎng),但相對(duì)于國(guó)際市場(chǎng)我國(guó)的占有率還不到 1。這說(shuō)明單片機(jī)應(yīng)用在我國(guó)有著廣闊的前景。對(duì)于從事自動(dòng)控制的技術(shù)人員來(lái)講,掌握單片機(jī)原理與其應(yīng)用已經(jīng)成為必不可少的學(xué)習(xí)任務(wù)。 單片機(jī)的應(yīng)用十分廣泛,在工業(yè)控制領(lǐng)域、家電產(chǎn)品、智能化儀器儀表、計(jì)算機(jī)外部設(shè)備,特別是機(jī)電一體化產(chǎn)品中,都有重要的用途。其主要的用途可以分為以下方面:顯示:通過(guò)單片機(jī)控制發(fā)光二極管或是液晶,顯示特定的圖形和字符。機(jī)電控制:用單片機(jī)控制機(jī)電產(chǎn)品做定時(shí)或定向的動(dòng)作。檢測(cè):通過(guò)單片機(jī)和傳感器的聯(lián)合使用,用來(lái)檢測(cè)產(chǎn)品或者工況的意外發(fā)生。通信:通過(guò) RS-232 串行
9、通信或者是 USB 通信,傳輸數(shù)據(jù)和信號(hào)。科學(xué)計(jì)算:用來(lái)實(shí)現(xiàn)簡(jiǎn)單的算法。那么單片機(jī)是不是解決上述應(yīng)用的唯一選擇呢?淡然不是!目前,在自動(dòng)控制中,一般有三種選擇,分別是嵌入式微機(jī)、DSP 和單片機(jī)。單片機(jī)最明顯的優(yōu)點(diǎn)是價(jià)格便宜,從幾元人民幣到幾十元人民幣。這是因?yàn)檫@類(lèi)芯片的生產(chǎn)量很大,技術(shù)也很成熟。其次,單片機(jī)的體積也遠(yuǎn)小于其他兩種方案。單片機(jī)本身一般用 40 引腳封裝,當(dāng)然功能多一些的單片機(jī)也有引腳比較多的,如 68 引腳,功能少的只有10 多個(gè)或 20 多個(gè)引腳,有的甚至只有 8 只引腳。當(dāng)然,單片機(jī)無(wú)論在速度還是容量方面都小于其他兩種方案,但是在實(shí)際工作中并不是任何需要計(jì)算機(jī)的場(chǎng)合都要求計(jì)
10、算機(jī)有很高的性能。例如,控制電冰箱的控制器就不需要使用嵌入式系統(tǒng),用一片 51 就可以輕松實(shí)現(xiàn)。所以應(yīng)用的關(guān)鍵是看能否夠用,是否有很好的性能價(jià)格比。51 系列的單片機(jī)已經(jīng)面世十多年,依然沒(méi)有被淘汰,還在不斷發(fā)展中,這就說(shuō)明是他有廣闊的應(yīng)用前景。- 5 - / 322.2.系統(tǒng)總體方案設(shè)計(jì)系統(tǒng)總體方案設(shè)計(jì)與硬件設(shè)計(jì)與硬件設(shè)計(jì)2.1 設(shè)計(jì)要求(1)能顯示里程,單位為公里,最后一位為小數(shù)位。(2)能顯示金額數(shù),單位為元,最后一位為小數(shù)位。(3)可設(shè)定單程價(jià)格和往返價(jià)格,單程價(jià)格為 2 元/公里,往返價(jià)格為1.5 元/公里。(4)車(chē)速3總金額=起步價(jià)單程?總金額=(里程-3)*單價(jià)+等待時(shí)間*等待價(jià)格
11、價(jià)格為單程價(jià)格為雙程N(yùn)NNNN開(kāi)始初始化變量中斷與定時(shí)初始化鍵盤(pán)掃描數(shù)據(jù)計(jì)算數(shù)碼管顯示結(jié)束清零鍵?切換顯示鍵?切換標(biāo)志自取反單程雙程鍵?雙程標(biāo)志自取反暫停鍵?關(guān)中斷停止計(jì)費(fèi)調(diào)用初始化函數(shù)YYYYNYY- 13 - / 323.2 計(jì)算模塊計(jì)算程序根據(jù)里程數(shù)分別進(jìn)入不同的計(jì)算公式。如果里程大于 3 公里,則執(zhí)行公式:總金額=起步價(jià)+(里程-3)*單價(jià)+等待時(shí)間*等待單價(jià);否則,執(zhí)行公式:總金額=起步價(jià)+等待時(shí)間*等待單價(jià)。對(duì)于里程數(shù)采用外部中斷零來(lái)記錄,車(chē)輪沒(méi)轉(zhuǎn)一周,霍爾傳感器發(fā)一個(gè)脈沖然后進(jìn)入中斷子程序,對(duì)相應(yīng)的變量進(jìn)行更新。對(duì)于速度的判斷與等待時(shí)間的記錄采用定時(shí)器零中斷,設(shè)定 10ms 一個(gè)
12、中斷,然后判斷車(chē)速,小于 5 公里/小時(shí)時(shí),則開(kāi)始記錄等待時(shí)間。3.3 鍵盤(pán)掃描鍵盤(pán)掃描才用查詢方式,當(dāng)有按鍵按下時(shí)就對(duì)相應(yīng)的標(biāo)志進(jìn)行取反,或調(diào)用其他子函數(shù),在消抖過(guò)程中,這里將數(shù)碼管顯示程序潛入以保證顯示的穩(wěn)定。3.4 顯示程序顯示程序利用主函數(shù)的循環(huán),實(shí)現(xiàn)動(dòng)態(tài)掃描顯示,同時(shí)根據(jù)數(shù)碼管余輝和人眼暫留現(xiàn)象,即可實(shí)現(xiàn)顯示。本設(shè)計(jì)采用兩個(gè)四個(gè)一組的八位數(shù)碼管來(lái)顯示,一組顯示金額,另一組顯示路程與等待時(shí)間配合按鍵來(lái)切換。數(shù)據(jù)端都用單片機(jī) P1 口,片選端分別接在 P2 口的高四位和低四位。- 14 - / 324 4ProteusProteus 軟件仿真軟件仿真本設(shè)計(jì)需要用 Keil uVision
13、3 對(duì) C51 程序進(jìn)行編譯,生成“.hex”文件。在 Proteus 軟件中畫(huà)出仿真電路(如圖 19),把 Keil uVision3 編譯后生成的“.hex”導(dǎo)入到單片機(jī)中,按“運(yùn)行仿真”鍵進(jìn)行仿真如圖顯示的狀態(tài)設(shè)置為:單程,車(chē)速大于 5km/h,當(dāng)路程等于 7.2km 時(shí)的顯示情況。- 15 - / 325 5 課程設(shè)計(jì)體會(huì)課程設(shè)計(jì)體會(huì)在本次單片機(jī)課程設(shè)計(jì)中,我們選擇的題目是基于 51 單片機(jī)的出租車(chē)計(jì)價(jià)器的設(shè)計(jì)。老師統(tǒng)一配發(fā)的主控芯片是 AT89S52 單片機(jī),要實(shí)現(xiàn)的計(jì)價(jià)器的基本功能是以按鍵為輸入控制方式,實(shí)現(xiàn)對(duì)出租車(chē)運(yùn)行過(guò)程中狀態(tài)信息的測(cè)量,主要包括等待時(shí)間、金額和里程等,并將其顯
14、示出來(lái)。經(jīng)一個(gè)星期的努力我們完成了所有的基本功能,在完成整個(gè)課程設(shè)計(jì)的過(guò)程中,我們遇到了許多困難,但在解決困難的同時(shí),也收獲了許多,現(xiàn)在就將在整個(gè)課程設(shè)計(jì)過(guò)程中的幾點(diǎn)收獲與體會(huì)總結(jié)如下:1、提高了單片機(jī)的 C 語(yǔ)言編程能力。雖然單片機(jī)原理這門(mén)課程是在上學(xué)期修的,之后的這段時(shí)間也沒(méi)有使用單片機(jī)實(shí)際的做一些設(shè)計(jì),因?yàn)楫?dāng)時(shí)是用匯編語(yǔ)言學(xué)習(xí)的單片機(jī),對(duì) C 語(yǔ)言的編程方法不是很熟悉。因此,選題后我們使用郭天祥的新概念 51 單片機(jī)設(shè)計(jì)開(kāi)始練習(xí) 51 單片機(jī)的 C 程序設(shè)計(jì),一開(kāi)始我們總想一下子把整個(gè)程序?qū)懲辏S著更深入的學(xué)習(xí)后來(lái)發(fā)現(xiàn)這種想法是不對(duì)的),因而使自己的自信心很受挫。在這里我們得到的經(jīng)驗(yàn)是使
15、程序模塊化:將一個(gè)大的程序分為幾個(gè)主要模塊,分別完成,最后再組合在一起調(diào)試成功。2、使我們對(duì)硬件電路的分析與設(shè)計(jì)能力有了不小的進(jìn)步。本設(shè)計(jì)的硬件設(shè)計(jì)包括單片機(jī) AT89S52 單元、測(cè)距單元、顯示單元、按鍵與指示單元。通過(guò)上網(wǎng)查找相關(guān)資料,雖然找到了比較合適的電路圖,但因?yàn)閷?duì)其原理理解的不是特別透徹,在實(shí)際的焊接過(guò)程中遇到了不少的困難,比如沒(méi)有共地、缺少濾波電容、電源壓降太大、缺少下拉電阻,焊接中焊點(diǎn)虛焊和短路等。在這里我們得到的經(jīng)驗(yàn)是:拿到一個(gè)電路圖之后要對(duì)其進(jìn)行深入的分析,了解其原理,并修改其錯(cuò)誤,同時(shí)在焊接的過(guò)程中一定要細(xì)心、耐心,只有不停的分析電路,查找故障,久而久之我們才能成為一個(gè)很
16、好的設(shè)計(jì)者。3、增強(qiáng)了我們的團(tuán)隊(duì)意識(shí)。在整個(gè)設(shè)計(jì)的過(guò)程中,我們之間發(fā)生了不少的爭(zhēng)執(zhí),在設(shè)計(jì)硬件電路時(shí),我們對(duì)電路圖的選擇持有不同意見(jiàn),在焊接過(guò)程中我們對(duì)整體布局布線也有過(guò)爭(zhēng)議,在程序編寫(xiě)過(guò)程中對(duì)算法的選取,流程的設(shè)計(jì)也各持己見(jiàn)。由于我們各自的過(guò)分,堅(jiān)持導(dǎo)致了一些不必要的時(shí)間浪費(fèi)。在這里我們得到的經(jīng)驗(yàn)是:在- 16 - / 32合作的過(guò)程中要善于聆聽(tīng)對(duì)方的一間,要發(fā)現(xiàn)別人的長(zhǎng)處,彌補(bǔ)自己的不足。一個(gè)團(tuán)隊(duì)只有能夠相互取長(zhǎng)補(bǔ)短,才能夠在愉快的合作中更好得完成任務(wù)。4、不要過(guò)于追物的產(chǎn)品化。在做課程設(shè)計(jì)的過(guò)程中,由于我們一開(kāi)始考慮了許多復(fù)雜細(xì)小的情況,導(dǎo)致我們不知道從哪里開(kāi)始入手,產(chǎn)生了許多不必要的麻
17、煩。我們得到的經(jīng)驗(yàn)是:遇到問(wèn)題要抓主要矛盾,解決主要矛盾(實(shí)現(xiàn)基本功能)之后,再去考慮其他的細(xì)節(jié)問(wèn)題。遇到問(wèn)題不要只想,試著動(dòng)手做就有思路了。參考文獻(xiàn)參考文獻(xiàn)【1】 郭天祥.新概念 51 單片機(jī) C 語(yǔ)言教程.電子工業(yè),2008【2】 余發(fā)山,王福忠.單片機(jī)原理與應(yīng)用技術(shù).中國(guó)礦業(yè)大學(xué),2008.6【3】 侯玉寶,忠平,成群.基于 Proteus 的 51 系列單片機(jī)設(shè)計(jì)與仿真.電子工業(yè),2008【4】 泉溪.單片機(jī)原理與應(yīng)用實(shí)例仿真.航空航天大學(xué),2009【5】 譚浩強(qiáng).C 程序設(shè)計(jì).清華大學(xué),1991【6】 樓然苗,胡佳文,光飛等.單片機(jī)實(shí)驗(yàn)與課程設(shè)計(jì).浙江大學(xué),2010.10【7】 王曉
18、敏.傳感器檢測(cè)技術(shù)與應(yīng)用.大學(xué),2010【8】 吳紅星.電機(jī)驅(qū)動(dòng)與控制專(zhuān)用集成電路與應(yīng)用.中國(guó)電力,2006- 17 - / 32附附 1 1:源程序代碼:源程序代碼/里程和價(jià)格顯示程序#include#include#define uchar unsigned char#define uint unsigned int#define somenop _nop_();_nop_();_nop_();_nop_();_nop_();#define SlaveAddrW 0 xA0 /寫(xiě)命令#define SlaveAddrR 0 xA1 /讀命令/IIC 總線引腳定義sbit SDA = P10
19、; /數(shù)據(jù)線 /sbit SCL = P11; /時(shí)鐘線 /語(yǔ)音芯片定義sbit SS =P13;/片選 sbit MOSI=P14;/數(shù)據(jù)輸入 sbit MISO=P15;/數(shù)據(jù)輸出 sbit SCLK=P16;/ISD4004 時(shí)鐘sbit ls138A=P20;/138 譯碼器的 3 個(gè)位選,A 為低位sbit ls138B=P21;sbit ls138C=P22;sbit kds=P23; /單雙程控制開(kāi)關(guān)sbit kks=P24; /開(kāi)始控制開(kāi)關(guān)sbit kcx=P25; /查詢控制開(kāi)關(guān)- 18 - / 32sbit kzt=P26; /暫??刂崎_(kāi)關(guān)sbit kql=P27;/清零控
20、制開(kāi)關(guān)sbit kjy=P12; /上次記憶值查詢/變量定義uchar code duanma=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/數(shù)碼管段碼uint count,num0,k,zhuan,z,su,n;float gong,quan,jin,deng;uchar qiane,baie,shie,gee;/金額的千,百,十,個(gè)uchar qianc,baic,shic,gec;/路程的千,百,十,個(gè)/函數(shù)聲明void display(float cheng,float e,bit biao);/24C02 函
21、數(shù)聲明void IIC_Start(void); void IIC_Stop(void); void IIC_Ack(bit ackbit); void IIC_SendByte(unsigned char byt); bit IIC_WaitAck(void); unsigned char IIC_RecByte(void); void Write(uchar add,uchar dat);uint Read(uchar add);/24c02 操作函數(shù)/總線啟動(dòng)條件 void IIC_Start(void)SDA = 1;SCL = 1;somenop;SDA = 0;somenop;SC
22、L = 0;/總線停止條件 void IIC_Stop(void)- 19 - / 32SDA = 0;SCL = 1;somenop;SDA = 1;/應(yīng)答位控制 void IIC_Ack(bit ackbit)if(ackbit) SDA = 0;else SDA = 1;somenop;SCL = 1;somenop;SCL = 0;SDA = 1; somenop;/等待應(yīng)答 bit IIC_WaitAck(void)SDA = 1;somenop;SCL = 1;somenop;if(SDA) SCL = 0;IIC_Stop();return 0;- 20 - / 32else S
23、CL = 0;return 1;/通過(guò) I2C 總線發(fā)送數(shù)據(jù) void IIC_SendByte(unsigned char byt)unsigned char i;for(i=0;i8;i+) if(byt&0 x80) SDA = 1;else SDA = 0;somenop;SCL = 1;byt = 1;somenop;SCL = 0;/從 I2C 總線上接收數(shù)據(jù) unsigned char IIC_RecByte(void)unsigned char da;unsigned char i;for(i=0;i8;i+) SCL = 1;- 21 - / 32somenop;da
24、 0;time-) TH1=0 xfc; TL1=0 x18; TR1=1; while(TF1!=1) ; TF1=0; TR1=0; void isd_send(unsigned char isdx)/spi 串行發(fā)送子程序,8 位數(shù)據(jù) unsigned char isx_counter; SS=0;/ss=0,打開(kāi) spi 通信端SCLK=0; for(isx_counter=0;isx_counter1; SCLK=1; /上升沿鎖存數(shù)據(jù)delay(2); SCLK=0; /下降沿將數(shù)據(jù)讀走delay(2); - 23 - / 32 void isd_stop()/stop 指令(停止
25、當(dāng)前操作) delay(10); isd_send(0 x30); SS=1; /ss=1,關(guān)閉 spi 通信端delayms(50); void isd_powerup()/發(fā)送上電指令 delay(10); isd_send(0 x20); SS=1; /ss=1,關(guān)閉 spi 通信端delayms(50); void isd_stopwrdn()/發(fā)送掉電指令 delay(10); isd_send(0 x10); SS=1; /ss=1,關(guān)閉 spi 通信端delayms(50); void isd_play()/發(fā)送 play 指令,從當(dāng)前地址開(kāi)始放音,IAB=1 isd_send(
26、0 xf0); SS=1; /ss=1,關(guān)閉 spi 通信端 void isd_rec()/發(fā)送 rec 指令,從當(dāng)前地址開(kāi)始錄音,IAB=1 isd_send(0 xb0); SS=1; /ss=1,關(guān)閉 spi 通信端 void isd_setplay(unsigned char adl,unsigned char adh)/發(fā)送放音指令,從指定地址開(kāi)始放音 delayms(1); - 24 - / 32isd_send(adl); /發(fā)送放音起始地址低位delay(2); isd_send(adh); /發(fā)送放音起始地址高位delay(2); isd_send(0 xe0); /發(fā)送放音
27、指令字節(jié),IAB=0SS=1; /ss=1,關(guān)閉 spi 通信端 /*void isd_setrec(unsigned char adl,unsigned char adh)/發(fā)送錄音指令,從指定地址開(kāi)始錄音 delayms(1); isd_send(adl); /發(fā)送錄音起始地址低位delay(2); isd_send(adh); /發(fā)送錄音起始地址高位delay(2); isd_send(0 xa0); /發(fā)送錄音指令字節(jié),IAB=0SS=1; /ss=1,關(guān)閉 spi 通信端*/ /其它操作函數(shù)/void delaynms(uint nms) uint i,j; for(i=0;i0;j
28、-); void init() quan=0; jin=0; deng=0; n=0; z=0; su=0; gong=0; num0=0; count=0; zhuan=0; k=0;- 25 - / 32 kds=1; IT0=1; TMOD=0 x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; EX0=1;void main()uint wait,money; uint xun=0;uchar flag=0;display(0,0,0);if(kjy=0)/按下為查看上次記憶值 delaynms(
29、10); if(kjy=0) wait=Read(0 x00); /讀取 24C02 中上一次的等待時(shí)間、金額數(shù)據(jù) delaynms(10); money=Read(0 x02); delaynms(10); for(xun=200;xun0;xun-) display(wait,money,1); if(kks=0) delaynms(10); if(kks=0) init();isd_powerup();- 26 - / 32isd_setplay(0 x00,0 x00); isd_play(); /發(fā)送放音指令if(kds=0) /開(kāi)始計(jì)價(jià)后,顯示 2 秒鐘單價(jià) for(xun=200
30、;xun0;xun-) display(1.5,jin,0); else for(xun=200;xun0;xun-) display(2.0,jin,0); while(1) gong=k+quan/500; /公里=公里數(shù)+圈數(shù)除以 500,500 轉(zhuǎn)為一公里 if(kds=0) /按下為雙程下是雙程 if(gong=3) jin=5; else jin=gong*1.5; display(gong,jin,0); /顯示公里,金額 if(kds=1) if(gong0;xun-) display(deng,jin,1); if(kzt=0) /按下為暫停 delaynms(10); if
31、(kzt=0) EX0=0; ET0=0; isd_powerup(); isd_setplay(0 x00,0 x01); isd_play(); /發(fā)送放音指令 while(1) display(gong,jin,0); /顯示公里,金額 if(kql=0) delaynms(10); if(kql=0) deng=n*2+su/60; Write(0 x00,deng); delaynms(10); Write(0 x02,jin); delaynms(10); init(); flag=1; break; if(kcx=0)/按下為查詢 delaynms(10); if(kcx=0)
32、deng=n*2+su/60; /等待時(shí)間=2 分鐘乘以其個(gè)數(shù)+不到 120 秒的分鐘數(shù)for(xun=200;xun0;xun-) display(deng,jin,1);- 28 - / 32 if(flag=1) flag=0; break; void zhongduan0() interrupt 0 count+;/總的圈數(shù),可能會(huì)溢出 quan+;/輪子兩米一圈 if(quan=500) quan=0; k+; /k 是路程的千米整數(shù)位void time0() interrupt 1 EX0=0; TH0=(65536-50000)/256; TL0=(65536-50000)%25
33、6; num0+; if(num0=20) /一秒時(shí)間到 num0=0; /一秒后與一秒前的計(jì)數(shù)值之差給轉(zhuǎn)速 zhuanif(countz) zhuan=count+65535-z;/count 溢出情況下 else - 29 - / 32 zhuan=count-z; z=count; if(zhuan=120) /su 為秒的累加,累加到 2 分鐘,清零,表示一公里的 k 自加一,同時(shí)表示 2 分鐘的 n 加一 su=0; k+; n+; EX0=1; void display(float cheng,float e,bit biao)/若 biao=1,則前四位數(shù)碼管的第三位不加小數(shù)點(diǎn) if(biao=0) cheng=cheng*10; e=e*10; qianc=(int)cheng/1000; shic=(int)cheng%100/10; baic=(int)cheng%1000/100; gec=(int)cheng%10; qiane=(int)e/1000; shie=(int)e%100/10; baie=(int)e%1000/100; gee=(int)e%10; ls138A=0; ls138B=0; ls138C=0; P0=duanmaqianc; delaynms(2);
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 九年級(jí)英語(yǔ) 語(yǔ)法強(qiáng)化練習(xí)三(無(wú)答案)人教新目標(biāo)版
- 2024-2025學(xué)年版塊6 密度 專(zhuān)題6-1 天平平衡問(wèn)題 (含答案) 初中物理尖子生自主招生培優(yōu)講義83講
- 顏色變變變課件
- 三年級(jí)上冊(cè)道德與法治說(shuō)課稿-4 說(shuō)說(shuō)我們的學(xué)校 部編版
- 車(chē)輛贈(zèng)予過(guò)戶合同模板
- 庭院苗木養(yǎng)護(hù)合同模板
- 項(xiàng)目代建合同模板
- 美利車(chē)貸合同模板
- 老山界課件教學(xué)課件
- 房屋交付補(bǔ)足合同模板
- 醫(yī)院施工管理制度
- 三洋伺服驅(qū)動(dòng)新
- SAP中FI模塊操作手冊(cè)
- 80米濃密池施工技術(shù)
- 造口旁疝的外科治療ppt課件
- 新版 六安市城鎮(zhèn)職工生育保險(xiǎn)生育登記表
- 十二生肖英文
- 鋼筋直螺紋連接專(zhuān)項(xiàng)施工方案.doc
- 全國(guó)教育科學(xué)規(guī)劃課題重要事項(xiàng)變更申請(qǐng)審批表
- 木槿花產(chǎn)業(yè)策劃書(shū)
- (完整word版)建筑勞務(wù)公司項(xiàng)目部工作管理制度
評(píng)論
0/150
提交評(píng)論