畢業(yè)設(shè)計(jì)汽車速度與里程表設(shè)計(jì)和實(shí)現(xiàn)_第1頁
畢業(yè)設(shè)計(jì)汽車速度與里程表設(shè)計(jì)和實(shí)現(xiàn)_第2頁
畢業(yè)設(shè)計(jì)汽車速度與里程表設(shè)計(jì)和實(shí)現(xiàn)_第3頁
畢業(yè)設(shè)計(jì)汽車速度與里程表設(shè)計(jì)和實(shí)現(xiàn)_第4頁
畢業(yè)設(shè)計(jì)汽車速度與里程表設(shè)計(jì)和實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 汽車速度與里程表設(shè)計(jì)和實(shí)現(xiàn)前言 汽車是現(xiàn)代生活中不可或缺的一種重要交通工具,傳統(tǒng)的指針式里程表伴隨著汽車的誕生就一直為人們喜愛,不過,新生事物不會因傳統(tǒng)的存在而停止它前進(jìn)的步伐。數(shù)碼科技在今天已滲透到工業(yè),農(nóng)業(yè),民用等產(chǎn)品的點(diǎn)點(diǎn)滴滴。新概念的汽車速度與里程表最直觀的變化就是用大屏幕的液晶取代指針式表盤,直接用數(shù)字顯示速度和里程,以及其他一些諸如油耗、時(shí)鐘、環(huán)境溫度等參數(shù),直觀的呈現(xiàn)給使用者。同時(shí),它還具有成本低廉,顯示清晰,穩(wěn)定可靠等優(yōu)點(diǎn)。由于單片機(jī)體積小,可以把它做到產(chǎn)品的內(nèi)部,取代老式機(jī)械零件,縮小產(chǎn)品體積,增強(qiáng)功能,實(shí)現(xiàn)智能化。因此被廣泛地用在智能產(chǎn)品中。intel公司的mcs-51系

2、列單片機(jī)近年來得到了廣泛流行。本文即介紹一種基于at89c2051單片機(jī)的汽車速度與里程表的設(shè)計(jì)和實(shí)現(xiàn)。本設(shè)計(jì)以at89c2051為核心,利用單片機(jī)的運(yùn)算和控制功能,采用串口液晶顯示模塊實(shí)時(shí)顯示所測汽車的速度和里程信息的設(shè)計(jì)方案。由于使用了串口液晶顯示模塊和e2prom,以及高效快速算法,因而可在節(jié)約系統(tǒng)資源和簡化程序設(shè)計(jì)的基礎(chǔ)上保證測量精度和系統(tǒng)實(shí)時(shí)性。本文先對汽車速度和里程表設(shè)計(jì)中所需設(shè)備作詳細(xì)介紹,再對設(shè)計(jì)中存在的問題進(jìn)行了講述,對硬件部分和軟件部分的設(shè)計(jì)和實(shí)現(xiàn)作認(rèn)真的說明。1 系統(tǒng)概述1本系統(tǒng)設(shè)計(jì)由信號采集處理模塊、單片機(jī)at89c2051控制模塊、系統(tǒng)化lcd顯示模塊、系統(tǒng)軟件等組成

3、。系統(tǒng)軟件包括單片機(jī)和液晶模塊的初始化模塊、液晶模塊的寫數(shù)據(jù)/命令子模塊、周期測量模塊、速度與里程計(jì)算模塊、數(shù)據(jù)存儲模塊、速度和里程顯示數(shù)據(jù)轉(zhuǎn)bcd碼模塊、顯示數(shù)據(jù)消多余零模塊、數(shù)據(jù)顯示模塊以及實(shí)時(shí)中斷服務(wù)模塊等。其中,信號采集處理模塊以霍爾傳感器為核心器件,將不同的轉(zhuǎn)速信號轉(zhuǎn)換成相應(yīng)的脈沖信號,并送到單片機(jī)的t1引腳;對單片機(jī)進(jìn)行設(shè)置,使內(nèi)部的定時(shí)器/計(jì)數(shù)器timer0工作在定時(shí)狀態(tài),timer1工作在計(jì)數(shù)狀態(tài),利用內(nèi)部定時(shí)器t0對脈沖輸入引腳t1進(jìn)行控制,這樣就能精確地檢測到設(shè)定時(shí)間內(nèi)加到t1引腳的脈沖數(shù),一個(gè)脈沖即代表著車子前進(jìn)一個(gè)輪長,對脈沖數(shù)進(jìn)行處理就可得到里程和速度的數(shù)據(jù);將數(shù)據(jù)送

4、到lcd顯示模塊進(jìn)行顯示。速度顯示部分采用串口液晶顯示模塊,所得的數(shù)據(jù)采用i2c總線并通過e2prom來存儲,因而節(jié)省了所需單片機(jī)的口線和外圍器件,同時(shí)也簡化了顯示部分的軟件編程。汽車速度與里程表系統(tǒng)原理框圖如圖1-1所示:脈沖信號單片機(jī)lcd圖1-1 汽車速度與里程表系統(tǒng)原理框圖2 基本原理與設(shè)計(jì)方案本設(shè)計(jì)能實(shí)時(shí)地將所測的速度顯示出來,同時(shí)也能夠累計(jì)顯示總里程數(shù)。該速度里程表能將傳感器輸入到單片機(jī)的脈沖信號的寬度(傳感器將車速轉(zhuǎn)變成相應(yīng)寬度的脈沖信號)實(shí)時(shí)地測量出來,然后通過單片機(jī)計(jì)算出速度和里程,再將所得的數(shù)據(jù)存儲到串口數(shù)據(jù)存儲器,并由串口液晶顯示模塊實(shí)時(shí)顯示出所測速度。本設(shè)計(jì)用兩個(gè)按鍵來

5、控制顯示速度或里程??紤]到信號的衰減、干擾等影響,在信號送入單片機(jī)前應(yīng)對其進(jìn)行放大整形,然后再輸入到單片機(jī)進(jìn)行測速。單片機(jī)利用定時(shí)器t0的控制功能測出輸入信號的周期后,再利用單片機(jī)的算術(shù)運(yùn)算功能將周期轉(zhuǎn)換成速度,同時(shí)每秒鐘進(jìn)行一次里程累計(jì),從而計(jì)算出總里程。最后將得出的速度和里程值存儲在e2prom中,并根據(jù)兩個(gè)按鍵的選擇情況來顯示速度或里程。為了方便計(jì)算要顯示數(shù)據(jù)值的段碼,可再將其轉(zhuǎn)換成壓縮的bcd碼,然后通過查表將要顯示的數(shù)據(jù)值中每一位的壓縮bcd碼轉(zhuǎn)換成8段碼送到顯示緩沖區(qū),最后經(jīng)串口送至液晶顯示模塊以顯示所測的速度或里程。2.1 霍爾傳感器簡介2 霍耳效應(yīng):1879年e.h. 霍爾發(fā)現(xiàn)

6、,如果對位于磁場(b)中的導(dǎo)體(d)施加一個(gè)電壓(v),該磁場的方向垂直于所施加電壓的方向,那么則在既與磁場垂直又和所施加電流方向垂直的方向上會產(chǎn)生另一個(gè)電壓(uh),人們將這個(gè)電壓叫做霍爾電壓,產(chǎn)生這種現(xiàn)象被稱為霍爾效應(yīng)。霍爾效應(yīng)從本質(zhì)上講是運(yùn)動的帶電粒子在磁場中受洛侖茲力作用而引起的偏轉(zhuǎn)。當(dāng)帶電粒子(電子或空穴)被約束在固體材料中,這種偏轉(zhuǎn)就導(dǎo)致在垂直電流和磁場的方向上產(chǎn)生正負(fù)電荷的積累,從而形成附加的橫向電場。通有電流i 的金屬或半導(dǎo)體板置于磁感強(qiáng)度為b 的均勻磁場中,磁場的方向和電流方向垂直,在金屬板的第三對表面間就顯示出橫向電勢差 u h 的現(xiàn)象稱為霍耳效應(yīng)。u h 就稱為霍耳電勢差

7、。實(shí)驗(yàn)測定,霍耳電勢差的大小和電流i 及磁感強(qiáng)度b成正比,而與板的厚度d 成反比?;魻栟D(zhuǎn)速傳感器:霍爾轉(zhuǎn)速傳感器磁場由磁鋼提供,所以霍爾傳感器和磁鋼需要配對使用?;魻杺鞲衅髟诜谴挪牧系膱A盤邊上粘貼一塊磁鋼,它固定在圓盤外緣附近。圓盤每轉(zhuǎn)動一圈,霍爾傳感器便輸出一個(gè)脈沖。通過單片機(jī)測量產(chǎn)生脈沖的頻率就可以得出圓盤的轉(zhuǎn)速?;魻栯娏鱾鞲衅鞅旧硪呀?jīng)存在濾波電路,輸出無須再加裝濾波,可直接供單片機(jī)的05v的 ad采集或直接送到單片機(jī)的中斷輸入引腳,其采樣信號非常穩(wěn)定,而且抗干擾能力很強(qiáng)。霍爾電流傳感器反應(yīng)速度一般在7微妙,所以不用考慮單片機(jī)循環(huán)判斷的時(shí)間。若在圓盤上貼上多塊磁鋼,則圓盤每轉(zhuǎn)一圈,輸出的脈

8、沖信號將相應(yīng)增加,單位時(shí)間內(nèi)測到的脈沖數(shù)將增多,測出的轉(zhuǎn)速也將更加精細(xì)?;魻栟D(zhuǎn)速傳感器的外形圖和與磁場的作用關(guān)系如圖2.1-1所示;霍爾傳感器檢測轉(zhuǎn)速示意圖如圖2.1-2所示:圖2.1-1 霍爾轉(zhuǎn)速傳感器的外形圖圖2.1-2 霍爾傳感器檢測轉(zhuǎn)速示意圖2.2 at89c2051芯片簡介3at89c2051是一個(gè)低電壓,高性能cmos 8位單片機(jī),片內(nèi)含4k bytes的可反復(fù)擦寫的flash只讀程序存儲器和128 bytes的隨機(jī)存取數(shù)據(jù)存儲器(ram),器件采用atmel公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)mcs-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和flash存儲單元,內(nèi)置功能強(qiáng)大

9、的微型計(jì)算機(jī)的at89c2051提供了高性價(jià)比的解決方案。at89c2051是一個(gè)低功耗高性能單片機(jī),40個(gè)引腳,32個(gè)外部雙向輸入/輸出(i/o)端口,同時(shí)內(nèi)含2個(gè)外中斷口,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,at89c2051可以按照常規(guī)方法進(jìn)行編程,也可以在線編程。其將通用的微處理器和flash存儲器結(jié)合在一起,特別是可反復(fù)擦寫的flash存儲器可有效地降低開發(fā)成本。at89c2051具有如下功能特性: 兼容mcs51指令系統(tǒng); 32個(gè)雙向i/o口; 兩個(gè)16位可編程定時(shí)/計(jì)數(shù)器; 1個(gè)串行中斷; 兩個(gè)外部中斷源; 4k可反復(fù)擦寫(1000次)flash rom; 128x

10、8bit內(nèi)部ram; 6個(gè)中斷源; 低功耗空閑和掉電模式; 軟件設(shè)置睡眠和喚醒功能。2.3 液晶顯示模塊sed1520sed1520液晶顯示驅(qū)動器是一種點(diǎn)陣圖形式液晶顯示驅(qū)動器,它可直接與8位微處理器相連,集行、列驅(qū)動器于一體,因此使用起來十分方便,作為內(nèi)藏式控制器被廣泛應(yīng)用于點(diǎn)陣數(shù)較少的液晶顯示模塊。2.3.1 sed1520芯片介紹本設(shè)計(jì)仿真實(shí)驗(yàn)系統(tǒng)采用的液晶顯示屏內(nèi)置控制器為sed1520,點(diǎn)陣為122x32,需要兩片sed1520組成,由e1、e2分別選通,以控制顯示屏的左右兩半屏。圖形液晶顯示模塊有兩種連接方式。一種為直接訪問方式,一種為間接控制方式。本設(shè)計(jì)采用直接控制方式。直接控制

11、方式就是將液晶顯示模塊的接口作為存儲器或i/o 設(shè)備直接掛在計(jì)算機(jī)總線上。計(jì)算機(jī)通過地址譯碼控制 e1和 e2的選通;讀/寫操作信號 r/w由地址線 a1控制;命令/數(shù)據(jù)寄存器選擇信號ao由地址線a0控制,地址映射如表2.3.1-1所示(地址中的x由lcd cs決定,可參見地址譯碼部分說明);液晶屏顯示控制電路如圖2.3.1-1所示:表2.3.1-1 地址映射(地址中的x由lcd cs決定,可參見地址譯碼部分說明)0x000h0x001h0x002h0x003h0x004h0x005h0x006h0x007h寫e1指令寫e1數(shù)據(jù)讀e1狀態(tài)讀e1數(shù)據(jù)寫e2指令寫e2數(shù)據(jù)讀e2狀態(tài)讀e2數(shù)據(jù)圖2.

12、3.1-1 液晶屏顯示控制電路2.3.2 sed1520特性內(nèi)置顯示ram區(qū)ram容量為2560(32行80列)位。ram中的1位數(shù)據(jù)控制液晶屏上一個(gè)點(diǎn)的亮滅狀態(tài):“1”表示亮,“0”表示暗。它具有16個(gè)行驅(qū)動口和16個(gè)列驅(qū)動口,并可級聯(lián)兩個(gè)sed1520實(shí)現(xiàn)32行驅(qū)動。還可直接與80系列微處理器相連,亦可直接與68系列微處理器相連。其驅(qū)動占空比為1/16或1/32。并可以與sed1520配合使用,以便擴(kuò)展列驅(qū)動口數(shù)目。2.3.3 sed1520指令與顯示ram結(jié)構(gòu)sed1520指令系統(tǒng)比較簡單,共13條,除讀狀態(tài)指令、讀顯示ram數(shù)據(jù)指令外,其他指令均為寫操作,并且讀寫指令均為單字節(jié)指令。在

13、送出每條指令時(shí),必須進(jìn)行控制器狀態(tài)檢測,狀態(tài)字節(jié)的含義如下: d7:1/0,模塊忙/準(zhǔn)備就緒; d5:1/0,模塊顯示關(guān)/開; d4:1/0,模塊復(fù)位/正常; d3-d0:未用。 在指令使用中,關(guān)鍵要分清顯示行、列設(shè)置和顯示頁面設(shè)置的關(guān)系。單片sed1520可驅(qū)動6116液晶屏,其內(nèi)部顯示ram相對于com0每8行為一個(gè)顯示頁面。本設(shè)計(jì)所用的字符液晶模塊由兩塊sed1520級聯(lián)驅(qū)動,其中一個(gè)工作在主工作方式下,另一個(gè)工作在從方式下,主工作方式sed1520負(fù)責(zé)上半屏16行的驅(qū)動和左半屏的61列驅(qū)動,從工作方式的sed1520則負(fù)責(zé)下半屏16行的驅(qū)動和右半屏的61列驅(qū)動,使能信號e1、e2用來區(qū)

14、分具體控制的是那一片sed1520。這樣兩片sed1520級聯(lián)可驅(qū)動12232圖形點(diǎn)陣液晶顯示屏,可完成圖形顯示,也可顯示七個(gè)半(1616點(diǎn)陣)漢字。2.4 定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)416位的定時(shí)/計(jì)數(shù)器分別由兩個(gè)8位專用寄存器組成,即:t0由th0和tl0構(gòu)成;t1由th1和tl1構(gòu)成。其訪問地址依次為8ah-8dh。這些寄存器是用于存放定時(shí)或計(jì)數(shù)初值的。此外,其內(nèi)部還有一個(gè)8位的定時(shí)器方式寄存器tmod和一個(gè)8位的定時(shí)控制寄存器tcon。這些寄存器之間是通過內(nèi)部總線和控制邏輯電路連接起來的。tmod主要是用于選定定時(shí)器的工作方式;tcon主要是用于控制定時(shí)器的啟動停止,此外tcon還可以保存t0

15、、t1的溢出和中斷標(biāo)志。當(dāng)定時(shí)器工作在計(jì)數(shù)方式時(shí),外部事件通過引腳t0(p3.4)和t1(p3.5)輸入。定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)原理圖如圖2.4-1所示:圖2.4-1 定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)原理圖2.5 定時(shí)計(jì)數(shù)器的原理16位的定時(shí)器/計(jì)數(shù)器實(shí)質(zhì)上就是一個(gè)加1計(jì)數(shù)器,其控制電路受軟件控制、切換。當(dāng)定時(shí)器/計(jì)數(shù)器為定時(shí)工作方式時(shí),計(jì)數(shù)器的加1信號由振蕩器的12分頻信號產(chǎn)生,即每過一個(gè)機(jī)器周期,計(jì)數(shù)器加1,直至計(jì)滿溢出為止。顯然,定時(shí)器的定時(shí)時(shí)間與系統(tǒng)的振蕩頻率有關(guān)。因一個(gè)機(jī)器周期等于12個(gè)振蕩周期,所以計(jì)數(shù)頻率 fcount=1/12osc。如果晶振為12mhz,則計(jì)數(shù)周期為: t=1/(12106

16、)hz1/12=1s 。這是最短的定時(shí)周期。若要延長定時(shí)時(shí)間,則需要改變定時(shí)器的初值,并要適當(dāng)選擇定時(shí)器的長度(如8位、13位、16位等)。當(dāng)定時(shí)器/計(jì)數(shù)器為計(jì)數(shù)工作方式時(shí),通過引腳t0和t1對外部信號計(jì)數(shù),外部脈沖的下降沿將觸發(fā)計(jì)數(shù)。計(jì)數(shù)器在每個(gè)機(jī)器周期的s5p2期間采樣引腳輸入電平。若一個(gè)機(jī)器周期采樣值為1,下一個(gè)機(jī)器周期采樣值為0,則計(jì)數(shù)器加1。此后的機(jī)器周期s3p1期間,新的計(jì)數(shù)值裝入計(jì)數(shù)器。所以檢測一個(gè)由1至0的跳變需要兩個(gè)機(jī)器周期,故外部事件的最高計(jì)數(shù)頻率為振蕩頻率的1/24。例如,如果選用12mhz晶振,則最高計(jì)數(shù)頻率為0.5mhz。雖然對外部輸入信號的占空比無特殊要求,但為了確

17、保某給定電平在變化前至少被采樣一次,外部計(jì)數(shù)脈沖的高電平與低電平保持時(shí)間均需在一個(gè)機(jī)器周期以上。 當(dāng)cpu用軟件給定時(shí)器設(shè)置了某種工作方式之后,定時(shí)器就會按設(shè)定的工作方式獨(dú)立運(yùn)行,不再占用cpu的操作時(shí)間,除非定時(shí)器計(jì)滿溢出,才可能中斷cpu 當(dāng)前操作。cpu也可以重新設(shè)置定時(shí)器工作方式,以改變定時(shí)器的操作。由此可見,定時(shí)器是單片機(jī)中效率高而且工作靈活的部件。2.6 頻率測量本設(shè)計(jì)所采用的霍爾傳感器是由一個(gè)磁鋼和一個(gè)霍爾器件組成的。磁鋼被貼在非磁性圓盤上,跟著圓盤一起旋轉(zhuǎn)。此霍爾器件就固定在圓盤的附近,工作時(shí),圓盤每轉(zhuǎn)動一圈,霍爾器件就會產(chǎn)生一個(gè)脈沖。這里的一個(gè)脈沖就代表了一個(gè)圓盤的周長。在本

18、設(shè)計(jì)中,霍爾傳感器產(chǎn)生的脈沖將被送到單片機(jī)的內(nèi)部定時(shí)計(jì)數(shù)器timer1的t1口。內(nèi)部的定時(shí)計(jì)數(shù)器timer0工作在定時(shí)狀態(tài),timer1工作在計(jì)數(shù)狀態(tài)。timer0和timer1均工作在模式1。本設(shè)計(jì)中,timer0所產(chǎn)生的是0.5秒的定時(shí)。timer1將對0.5秒內(nèi)對加到t1腳的脈沖進(jìn)行計(jì)數(shù)。假設(shè)0.5秒內(nèi)timer1計(jì)數(shù)到n個(gè)脈沖,則圓盤的轉(zhuǎn)動頻率為 n / 0.5=2n 。若是將磁鋼貼于汽車的輪軸上,則汽車輪子每轉(zhuǎn)一圈,霍爾器件產(chǎn)生一個(gè)脈沖。對脈沖頻率進(jìn)行處理,即可轉(zhuǎn)化為車速。對脈沖數(shù)進(jìn)行累加再乘以輪子的長度,即可得到里程數(shù)據(jù)。本設(shè)計(jì)中開辟了兩個(gè)字節(jié)的數(shù)據(jù)區(qū)存儲累加脈沖數(shù)據(jù),最多能計(jì)數(shù)6

19、5536個(gè)脈沖,也即131072 米(假設(shè)車輪周長2m)。3 系統(tǒng)硬件設(shè)計(jì)53.1 信號預(yù)處理電路它由二級電路構(gòu)成,第一級是由開關(guān)三極管組成的零偏置放大器,采用開關(guān)三極管可以保證放大器具有良好的高頻響應(yīng)。當(dāng)輸入信號為零或負(fù)電壓時(shí),三極管截止,電路輸出高電平;而當(dāng)輸入信號為正電壓時(shí),三極管導(dǎo)通,此時(shí)輸出電壓隨著輸入電壓的上升而下降,這使得速度里程表既可以測量任意方波信號的頻率,也可以測量正弦波信號的頻率。由于放大器的放大功能降低了對待測信號的幅度要求,因此,系統(tǒng)能對任意大于0.5v的正弦波和脈沖信號進(jìn)行測量。預(yù)處理電路的第二級采用帶施密特觸發(fā)器的反相器ct74ls14來把放大器生成的單相脈沖轉(zhuǎn)換

20、成與coms電平相兼容的方波信號同時(shí)將輸出信號加到單片機(jī)的p3.2口上。系統(tǒng)信號預(yù)處理電路如圖3.1-1所示:圖3.1-1 系統(tǒng)信號預(yù)處理電路3.2 施密特觸發(fā)器利用施密特觸發(fā)器狀態(tài)轉(zhuǎn)換過程中的正反饋,可以把邊沿變化緩慢的周期性信號變換為邊沿很陡的矩形脈沖信號。輸入的信號只要幅度大于vt+,即可在施密特觸發(fā)器的輸出端得到同等頻率的矩形脈沖信號。從傳感器得到的矩形脈沖經(jīng)傳輸后往往發(fā)生波形畸變。當(dāng)傳輸線上的電容較大時(shí),波形的上升沿將明顯變壞;當(dāng)傳輸線較長,而且接收端的阻抗與傳輸線的阻抗不匹配時(shí),在波形的上升沿和下降沿將產(chǎn)生振蕩現(xiàn)象;當(dāng)其他脈沖信號通過導(dǎo)線間的分布電容或公共電源線疊加到矩形脈沖信號時(shí)

21、,信號上將出現(xiàn)附加的噪聲。無論出現(xiàn)上述的那一種情況,都可以通過用施密特反相觸發(fā)器整形而得到比較理想的矩形脈沖波形。只要施密特觸發(fā)器的vt+和vt-設(shè)置得合適,均能受到滿意的整形效果。施密特觸發(fā)器對脈沖整形圖如圖3.2-1所示:圖3.2-1 施密特觸發(fā)器對脈沖整形圖3.3 液晶顯示電路和數(shù)據(jù)存儲電路6本設(shè)計(jì)的顯示部分采用液晶顯示模塊lcm0825,lcm0825是8位段碼式液晶顯示模塊,它內(nèi)部集成有l(wèi)cd控制器、lcd驅(qū)動器和ram,因而可方便顯示數(shù)據(jù)的編程。液晶顯示模塊采用3-4線串行數(shù)據(jù)輸入,可直接與單片機(jī)接口。由于串行接口方式節(jié)省了所需的口線和系統(tǒng)資源,因而使系統(tǒng)具有較高的資源利用率。該模

22、塊可在2.7v-5.2v電壓下工作,其低功耗及背光可調(diào)特性使得設(shè)計(jì)更具有經(jīng)濟(jì)性和通用性。lcm0825能夠顯示8位數(shù)據(jù),每一個(gè)數(shù)據(jù)均以8段碼的形式放在其內(nèi)部顯示ram區(qū),并用模塊內(nèi)ram的兩個(gè)存儲地址來放置一個(gè)數(shù)據(jù)的8段碼。8位數(shù)據(jù)共占用內(nèi)部16個(gè)地址。每一個(gè)數(shù)據(jù)位的8段碼存放形式及高低地址存放段碼的順序都和表1所列的第8位數(shù)據(jù)的8段碼存放格式一樣,只是段碼的存放地址不同。所以,編程時(shí)一定要考慮數(shù)據(jù)的存放地址和形式。在使用該液晶顯示模塊時(shí),vcc與vlcd之間可用一個(gè)50k的電位器來調(diào)整背光。液晶顯示模塊與單片機(jī)接口電路圖如圖3.3-1所示:圖3.3-1 液晶顯示模塊與單片機(jī)接口電路圖4 系統(tǒng)

23、軟件設(shè)計(jì)整個(gè)程序的設(shè)計(jì)以gx-arm-s3c2410試驗(yàn)箱為平臺,其中速度和里程的計(jì)算都采取了近似處理。本系統(tǒng)軟件采用模塊化設(shè)計(jì)方法。整個(gè)系統(tǒng)由初始化模塊、電機(jī)轉(zhuǎn)速控制模塊、電機(jī)轉(zhuǎn)向顯示模塊、頻率測量模塊、速度,里程顯示模塊、漢字顯示模塊以及其他功能模塊組成。整個(gè)程序設(shè)計(jì)中,以60h、61h、62h三個(gè)地址為數(shù)據(jù)緩沖區(qū),60h(data1)用于存儲每0.5s 計(jì)數(shù)到的脈沖數(shù),用于計(jì)算速度;61h(data2)、62h(data3)兩個(gè)地址用于存儲計(jì)數(shù)到的脈沖的累加數(shù)據(jù),用于計(jì)算里程。系統(tǒng)程序流程總框圖如圖4-1所示: 開始初始化顯示漢字 延時(shí)清屏顯示漢字 電機(jī)控制 方向顯示計(jì)數(shù)脈沖速度 里程顯

24、示圖4-1 系統(tǒng)程序流程總框圖4.1 電機(jī)轉(zhuǎn)速控制模塊程序設(shè)計(jì)7電機(jī)轉(zhuǎn)速的控制模塊由指撥開關(guān)、單片機(jī)、dac0832數(shù)模變換芯片組成。指撥開關(guān)k0-k7接單片機(jī)的p10-p17(p1口),通過指撥開關(guān)可輸入數(shù)據(jù)0-255,單片機(jī)將指撥開關(guān)輸入的數(shù)據(jù)輸出到dac0832數(shù)模變換芯片,通過數(shù)模變換,轉(zhuǎn)換成-8v+8v的電壓驅(qū)動直流電機(jī)。從而達(dá)到對電機(jī)轉(zhuǎn)速的控制。輸入數(shù)據(jù)等于128時(shí),輸出電壓為0v;數(shù)據(jù)大于128時(shí),輸出電壓大于0v;輸入數(shù)據(jù)小于128時(shí),輸出電壓小于0v。電機(jī)轉(zhuǎn)速控制模塊程序設(shè)計(jì)如下:mov p1,#0ffh ;設(shè)置p1口為輸入口mov dptr,#cs0832mov a, p1

25、movx dptr,a4.2 頻率測量模塊程序設(shè)計(jì)霍爾傳感器產(chǎn)生的脈沖被送到單片機(jī)的內(nèi)部定時(shí)/計(jì)數(shù)器timer1的t1口。內(nèi)部定時(shí)/計(jì)數(shù)器timer0工作在定時(shí)狀態(tài),timer1工作在計(jì)數(shù)狀態(tài)。timer0和timer1均工作在模式1。本設(shè)計(jì)中timer0產(chǎn)生0.5秒的定時(shí)。timer1將對0.5秒內(nèi)對加到t1腳的脈沖進(jìn)行計(jì)數(shù)。我們假設(shè)0.5秒內(nèi)timer1計(jì)數(shù)到了第n個(gè)脈沖。這時(shí),圓盤的轉(zhuǎn)動頻率就為為 n / 0.5=2n。頻率測量模塊程序設(shè)計(jì)如下:jishu: mov ie,#10001010b ;打開中斷開關(guān) mov tmod,#mode ;設(shè)定內(nèi)部定時(shí)器/計(jì)數(shù)器的工作模式 mov sp

26、,#70h mov 40h,#00h mov th1,#00h ;將timer1的計(jì)數(shù)寄存器賦初值0 mov tl1,#00h ;將timer1的計(jì)數(shù)寄存器賦初值0 setb tr1 ;啟動timer1aa: clr f1 ;標(biāo)志位賦0 mov th0,#03ch ;定時(shí)器寫入初值 mov tl0,#0b0h setb tr0 ;打開定時(shí)器timer0 jnb f1 , $ ;等待50ms inc 40h mov a, 40h cjne a, #09h,aa ;定時(shí)中斷重復(fù)10次 clr tr1 ;關(guān)閉計(jì)數(shù)器timer1 mov data1,tl1 ;取出timer1計(jì)數(shù)值給data1 mov

27、 a,data1 add a,data2 mov data2,a ;將計(jì)數(shù)值累加到data2 jnc bb ;檢查計(jì)數(shù)是否溢出 inc data3 ;有溢出則data3加1bb: ret;-定時(shí)中斷子程序timer : clr tr0 setb f1 reti當(dāng)timer0工作在模式1時(shí),tlo、tho計(jì)數(shù)寄存器各使用8位,從計(jì)算式 28 = 256,可以得出在設(shè)置計(jì)數(shù)初值時(shí),把計(jì)數(shù)起點(diǎn)的值除以256,再將其余數(shù)放入tlo計(jì)數(shù)寄存器,將商數(shù)放入tho計(jì)數(shù)寄存器。這個(gè)實(shí)驗(yàn)系統(tǒng)所采用的是12mhz的晶振,定時(shí)器所計(jì)數(shù)的脈沖的周期為1us。由此,我們將這樣設(shè)計(jì):每50ms產(chǎn)生一次定時(shí)中斷,就需要計(jì)數(shù)

28、50000個(gè)脈沖,則裝入計(jì)數(shù)寄存器的計(jì)數(shù)初值就為6553650000 = 15536,這時(shí),裝入tho計(jì)數(shù)寄存器的初值就為15536/256 = 60(03ch), 裝入tlo計(jì)數(shù)寄存器的初值為176(0b0h)。timer0中斷子程序流程圖如圖4.2-1所示:timer關(guān)閉定時(shí)器f1=1返回 圖4.2-1 timer0中斷子程序流程圖主程序流程圖如圖4.2-2所示:開始初始化設(shè)定計(jì)數(shù)器初值,并啟動f1=0定時(shí)器賦初值,并啟動f1=0?yesno40h加140h=9 ?noyes停止計(jì)數(shù),取出計(jì)數(shù)值將計(jì)數(shù)值累加到data2cy=0 ?yesnodata3加1返回主程序圖4.2-2 主程序流程圖

29、4.3 液晶顯示程序設(shè)計(jì)8本設(shè)計(jì)中速度和里程的數(shù)據(jù)由液晶顯示模塊顯示,所用的液晶顯示模塊由sed1520芯片驅(qū)動,首先對液晶顯示模塊進(jìn)行初始化,編寫相應(yīng)的字庫,編寫讀寫程序等。液晶顯示程序的設(shè)計(jì)包括了初始化程序、清屏程序、寫指令代碼子程序、寫顯示數(shù)據(jù)子程序、讀顯示數(shù)據(jù)子程序、中文顯示子程序、數(shù)字顯示程序以及中文字庫和數(shù)字字庫的編寫。4.4 速度里程顯示程序設(shè)計(jì)本設(shè)計(jì)中霍爾傳感器產(chǎn)生的脈沖被送到單片機(jī)的內(nèi)部定時(shí)計(jì)數(shù)器timer1的t1口。內(nèi)部定時(shí)計(jì)數(shù)器timer0工作在定時(shí)狀態(tài),timer1工作在計(jì)數(shù)狀態(tài)。timer0和timer1均工作在模式1。本設(shè)計(jì)中timer0產(chǎn)生0.5秒的定時(shí)。time

30、r1將對0.5秒內(nèi)對加到t1腳的脈沖進(jìn)行計(jì)數(shù)。假設(shè)0.5秒內(nèi)timer1計(jì)數(shù)到n個(gè)脈沖。則圓盤的轉(zhuǎn)動頻率為 n / 0.5=2n 。若是將磁鋼貼于汽車的輪軸上,則汽車輪子每轉(zhuǎn)一圈,霍爾器件產(chǎn)生一個(gè)脈沖。對脈沖頻率進(jìn)行處理,即可轉(zhuǎn)化為車速。對脈沖數(shù)進(jìn)行累加再乘以輪子的長度,即可得到里程數(shù)據(jù)。本程序?qū)ζ囘\(yùn)行的實(shí)際情況進(jìn)行模擬。設(shè)計(jì)程序時(shí)假設(shè)汽車輪子的周長約為2m,最后在顯示屏顯示的速度單位是km/h,里程單位是km。速度的計(jì)算如下:若0.5秒計(jì)數(shù)到n個(gè)脈沖,則輪子的轉(zhuǎn)動頻率為2n,車速為2n2 m/s,也即2n23.6 km/h 。設(shè)計(jì)中作近似處理,處理為14n km/h 。顯示時(shí)先顯示百位,再

31、依次顯示十位、個(gè)位。程序如下:;-速度處理顯示子程序speed: push a mov a,data1 mov b,#0eh ;計(jì)數(shù)值乘以14 mul ab mov b, #64h ;除數(shù)賦值100 div ab ;得到百位顯示數(shù)據(jù)代碼 mov code_ , a ;百位顯示字庫代碼 mov a,b lcall bb1 ;調(diào)用速度寫顯示數(shù)據(jù)程序 mov b,#0ah ;除數(shù)賦值10 div ab ;得到十位顯示數(shù)據(jù)代碼 mov code_ , a ;十位顯示字庫代碼 mov ctemp, #08h ;顯示后移8列 mov a,b lcall bb1 ;調(diào)用速度寫顯示數(shù)據(jù)程序 mov code_

32、 , a ;個(gè)位顯示字庫代碼 mov ctemp, #10h lcall bb1 mov data1,#00h ;數(shù)據(jù)緩沖區(qū)清零 pop a retdata2,data3存儲計(jì)數(shù)到的脈沖總數(shù),data2能存儲255個(gè)脈沖,每次計(jì)數(shù)溢出,則data3加1,data3里的數(shù)據(jù)權(quán)重為256.這樣兩個(gè)字節(jié)的數(shù)據(jù)能計(jì)數(shù)最多65536個(gè)脈沖,也即131072 米 。130多公里。實(shí)際制作里程表時(shí)只要適當(dāng)增加數(shù)據(jù)緩沖區(qū)的數(shù)量,即可對最大顯示里程進(jìn)行擴(kuò)充。程序設(shè)計(jì)過程中,對里程數(shù)據(jù)的顯示作了近似處理。程序如下:;-里程處理顯示子程序milage: push a mov a,data3 mov b,#0c8h

33、;除以200 顯示百位里程數(shù)據(jù) div ab mov code_, a mov ctemp,#00h mov a,b lcall bb2 mov b,#014h ; 顯示十位里程數(shù)據(jù) div ab mov code_,a mov ctemp, #08h mov a,b lcall bb2 mov b, #02h ; 顯示個(gè)位里程數(shù)據(jù) div ab mov code_ ,a mov ctemp, #10h mov a,b lcall bb2;- mov code_ ,#0ah mov ctemp, #17h ;顯示小數(shù)點(diǎn) lcall bb2;- cjne a,#00h, m1 mov a,dat

34、a2 ;data2除以50得到小數(shù)點(diǎn)mov b,#032h 后第一位 div ab mov code_ , a mov ctemp, #1eh mov a,b lcall bb2 mov b,#05h ;余數(shù)再除以5得到小數(shù)點(diǎn)后第二位 div ab mov code_ ,a mov ctemp, #26h lcall bb2 pop a retm1 : mov a,data2 mov b,#032h div ab add a,#05h ;顯示大于0.50公里時(shí)代碼加5 mov code_, a mov ctemp, #1eh mov a,b lcall bb2 mov b,#05h div a

35、b mov code_ ,a mov ctemp, #26h lcall bb2 pop a ret;-第二行速度數(shù)據(jù)顯示調(diào)用子程序bb1: push a mov page_,#00h mov a,ctemp add a,#3ch mov column,a lcall diw_pr pop a ret;-第一行里程數(shù)據(jù)顯示調(diào)用子程序bb2: push a mov page_,#02h mov a,ctemp add a,#3ch mov column,a lcall diw_pr pop a ret4.5 模塊程序設(shè)計(jì)該程序?qū)闹笓荛_關(guān)輸入的數(shù)據(jù)作出反應(yīng),若輸入的數(shù)據(jù)為128,則在lcd顯示屏

36、上顯示“停止”的標(biāo)志,若輸入的數(shù)據(jù)大于128,則顯示“正轉(zhuǎn)”的標(biāo)志,若輸入的數(shù)據(jù)小于128,則顯示“反轉(zhuǎn)”的標(biāo)志。模塊程序如下:fxb: mov ctemp ,#00h cjne a,#80h,fx mov page_,#00h ;停止 mov a,ctemp add a,#2ah mov column,a mov code_,#09h lcall ccw_pr mov page_,#00h ;顯示“0” mov a,ctemp add a,#3ch mov column,a mov code_,#00h lcall diw_pr mov page_,#00h ;顯示“0” mov a,cte

37、mp add a,#44h mov column,a mov code_,#00h lcall diw_pr mov page_,#00h ;顯示“0” mov a,ctemp add a,#4ch mov column,a mov code_,#00h lcall diw_pr retfx: anl a,#80h cjne a,#80h,fx1 mov page_,#00h ;正轉(zhuǎn) mov a,ctemp add a,#2ah mov column,a mov code_,#07h lcall ccw_pr retfx1: mov page_,#00h ;反轉(zhuǎn) mov a,ctemp add

38、 a,#2ah mov column,a mov code_,#08h lcall ccw_pr ret5 系統(tǒng)軟件調(diào)試9程序的調(diào)試過程是一個(gè)比較復(fù)雜的過程,有些需要高度的技巧和一定的方法。一般的編程軟件都提供單步、單步越過、斷點(diǎn)、運(yùn)行到光標(biāo)處等基本方法,一般掌握這幾種基本方法就可以解決絕大部分問題。經(jīng)過長時(shí)間的調(diào)試實(shí)踐之后自然就可以掌握一定的調(diào)試技巧,即熟能生巧。 5.1 程序查錯(cuò)手段單片機(jī)的應(yīng)用系統(tǒng)均需借助對應(yīng)的開發(fā)系統(tǒng)(或裝置)進(jìn)行在線仿真,對應(yīng)用系統(tǒng)的軟、硬件進(jìn)行全面地檢測與調(diào)試。各種開發(fā)系統(tǒng)或裝置均提供以下查錯(cuò)手段。首先有單步執(zhí)行。采用單步執(zhí)行操作可對應(yīng)用程序每步執(zhí)行一條指令,可逐條

39、檢查這一段程序的執(zhí)行過程是否符合原設(shè)計(jì)要求??芍苯硬槌鲥e(cuò)誤所在。宏單步可執(zhí)行一段程序,如一步就可執(zhí)行完整個(gè)循環(huán)程序段。再次,有斷點(diǎn)設(shè)置全速運(yùn)行可在程序有疑慮的地方設(shè)置斷點(diǎn),從設(shè)置的起始地址開始,以全速或非全速方式向設(shè)定的斷點(diǎn)處運(yùn)行。如果這段程序無語法或邏輯上的錯(cuò)誤,則連續(xù)運(yùn)行到設(shè)置的斷點(diǎn)處停止運(yùn)行,返回監(jiān)控狀態(tài)。如果有錯(cuò)誤,則在錯(cuò)誤處停止運(yùn)行,如果進(jìn)入死循環(huán)或者程序跑飛,就永遠(yuǎn)不會停止運(yùn)行。全速斷點(diǎn)運(yùn)行為檢查實(shí)時(shí)性及中斷響應(yīng)處理等提供了方便。另外,還有顯示器窗口檢查和實(shí)時(shí)跟蹤記錄等。除上述之外,還有以下功能: 符號化調(diào)試,程序運(yùn)行; 自動生成目標(biāo)代碼和固化;5.2 源程序檢測在源程序進(jìn)行調(diào)試之前,硬件系統(tǒng)必須基本正確,重點(diǎn)對源程序進(jìn)行檢測。首先是對照程序流程圖,先對相對獨(dú)立的功能模塊,子程序,中斷服務(wù)程序等進(jìn)行仔細(xì)地檢查,然后對整個(gè)主程序按其功能劃分成若干程序段進(jìn)行分段檢查,逐步擴(kuò)大到整個(gè)程序系統(tǒng)。檢查時(shí)重點(diǎn)檢查程序的邏輯功能、結(jié)構(gòu)和算法,有關(guān)參量和初始值是否完善,正確,關(guān)鍵性指令的選擇是否合理,特別是借助開發(fā)系統(tǒng)也較難調(diào)試正確的隱患,只有通過細(xì)心的檢查加以排除。再次是硬件系統(tǒng)檢查,硬件系統(tǒng)必須排除電源短路和碰線故障,然后空板(沒有插上芯片等器件)進(jìn)行上電檢查各電源點(diǎn)是否正確,有關(guān)邏輯電平及信號是否正確。確認(rèn)無誤之后逐次插上芯片等器件,借助開發(fā)系統(tǒng)可檢查出是否有硬

溫馨提示

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

最新文檔

評論

0/150

提交評論