<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 消費(fèi)電子 > 智能速度里程表設(shè)計(jì)

          智能速度里程表設(shè)計(jì)

          ——
          作者:姜新迎 馮有前 時間:2007-09-26 來源:國外電子元器件 收藏

            摘要:給出了以AT89C2051為核心,利用的運(yùn)算和控制功能,并采用串口液晶顯示模塊實(shí)時顯示所測速度和里程的速度里程表設(shè)計(jì)方案。該方案由于使用了串口液晶顯示模塊和E2PROM,以及高效快速算法,因而可在節(jié)約系統(tǒng)資源和簡化程序設(shè)計(jì)的基礎(chǔ)上保證測量精度和系統(tǒng)實(shí)時性。

              關(guān)鍵詞:;;

          1 系統(tǒng)概述

          1.1 系統(tǒng)組成

            本速度里程表由信號預(yù)處理電路、AT89C2051、串口液晶顯示電路、串口數(shù)據(jù)存儲電路和系統(tǒng)軟件組成。其中信號預(yù)處理電路包含信號放大、波形變換和波形整形。系統(tǒng)硬件框圖如圖1所示。信號預(yù)處理電路中的放大器用于對待測信號進(jìn)行放大,以降低對待測信號的幅度要求;波形變換和波形整形電路則用來將放大的信號轉(zhuǎn)換成可與單片機(jī)接口的TTL信號;通過單片機(jī)的設(shè)置可使INT0引腳能夠?qū)?nèi)部定時器T0的工作進(jìn)行控制,這樣能精確地測出加到INT0引腳的正脈沖寬度(即測出脈沖信號的周期);速度顯示部分采用串口液晶顯示模塊,所得的數(shù)據(jù)采用I2C總線并通過E2PROM來存儲,因而節(jié)省了所需單片機(jī)的口線和外圍器件,同時也簡化了顯示部分的軟件編程。

            系統(tǒng)軟件包括單片機(jī)和液晶模塊的初始化模塊、液晶模塊的寫數(shù)據(jù)/命令子模塊、周期測量模塊、速度里程計(jì)算模塊、數(shù)據(jù)存儲模塊、速度和里程顯示數(shù)據(jù)轉(zhuǎn)BCD碼模塊、顯示數(shù)據(jù)消多余零模塊、數(shù)據(jù)顯示模塊以及實(shí)時中斷服務(wù)模塊等。

          1.2 系統(tǒng)工作原理

            該設(shè)計(jì)能實(shí)時地將所測的速度顯示出來,同時也能夠累計(jì)顯示總里程數(shù)。該速度里程表能將傳感器輸入到單片機(jī)的脈沖信號的寬度(傳感器將車速轉(zhuǎn)變成相應(yīng)寬度的脈沖信號)實(shí)時地測量出來,然后通過單片機(jī)計(jì)算出速度和里程,再將所得的數(shù)據(jù)存儲到串口數(shù)據(jù)存儲器,并由串口液晶顯示模塊實(shí)時顯示出所測速度。本設(shè)計(jì)用兩個按鍵來控制顯示速度或里程。考慮到信號的衰減、干擾等影響,在信號送入單片機(jī)前應(yīng)對其進(jìn)行放大整形,然后再輸入到單片機(jī)進(jìn)行測速。單片機(jī)利用定時器T0的控制功能測出輸入信號的周期后,再利用單片機(jī)的算術(shù)運(yùn)算功能將周期轉(zhuǎn)換成速度,同時每秒鐘進(jìn)行一次里程累計(jì),從而計(jì)算出總里程。最后將得出的速度、里程值存儲在E2PROM中,并根據(jù)兩個按鍵的選擇情況來顯示速度或里程。為了方便計(jì)算要顯示數(shù)據(jù)值的段碼,可再將其轉(zhuǎn)換成壓縮的BCD碼,然后通過查表將要顯示的數(shù)據(jù)值中每一位的壓縮BCD碼轉(zhuǎn)換成8段碼送到顯示緩沖區(qū),最后經(jīng)串口送至液晶顯示模塊以顯示所測的速度或里程。

            設(shè)計(jì)時,應(yīng)綜合考慮測速精度和系統(tǒng)反應(yīng)時間。本設(shè)計(jì)用測量脈沖頻率來計(jì)算速度,因而具有較高的測速精度。為了保證系統(tǒng)的實(shí)時性,系統(tǒng)的速度轉(zhuǎn)換模塊和顯示數(shù)據(jù)轉(zhuǎn)BCD碼模塊都采用快速算法。另外,還應(yīng)盡量保證其它子模塊在編程時的通用性和高效性。本設(shè)計(jì)的速度和里程值采用8位顯示,并包含兩個小數(shù)位。

          2 系統(tǒng)硬件設(shè)計(jì)

          2.1 信號預(yù)處理電路

            系統(tǒng)的信號預(yù)處理電路如圖2所示。它由二級電路構(gòu)成,第一級是由開關(guān)三極管組成的零偏置放大器,采用開關(guān)三極管可以保證放大器具有良好的高頻響應(yīng)。當(dāng)輸入信號為零或負(fù)電壓時,三極管截止,電路輸出高電平;而當(dāng)輸入信號為正電壓時,三極管導(dǎo)通,此時輸出電壓隨著輸入電壓的上升而下降,這使得速度里程表既可以測量任意方波信號的頻率,也可以測量正弦波信號的頻率。由于放大器的放大功能降低了對待測信號的幅度要求,因此,系統(tǒng)能對任意大于0.5V的正弦波和脈沖信號進(jìn)行測量。預(yù)處理電路的第二級采用帶施密特觸發(fā)器的反相器CT74LS14來把放大器生成的單相脈沖轉(zhuǎn)換成與COMS電平相兼容的方波信號同時將輸出信號加到單片機(jī)的P3.2口上。

          2.2 單片機(jī)的選擇

            電路選用AT89C2051作為頻率計(jì)的信號處理核心。AT89C2051包含2kB閃存、128B的RAM、15根I/O口線、2個16位定時計(jì)數(shù)器、5個向量二級中斷結(jié)構(gòu)和1個全雙工的串行口,同時還具有加密陣列的二級程序存儲器加鎖功能。設(shè)計(jì)中用到了AT89C2051的T0、T1 定時器和INT0引腳,以及P1端口的6個口線。由于該單片機(jī)與89C51相兼容,因此在硬件電路設(shè)計(jì)和軟件編程方面更加方便。考慮到AT89C2051本身固有的特點(diǎn),設(shè)計(jì)時需注意以下幾點(diǎn):首先,它的程序存儲器空間為2kB,因此所有的跳轉(zhuǎn)和分支轉(zhuǎn)移指令都要限制在這個范圍內(nèi)。其次,它沒有MOVX指令,也就是說,它不支持外部存儲器操作,這一點(diǎn)設(shè)計(jì)時一定要考慮到。此外,AT89C2051自身還有一些其它特點(diǎn),譬如可以使用命令使其工作在低功耗模式等。單片機(jī)利用T0定時器和INT0引腳來測量輸入方波信號的周期,而使用外部中斷0來控制定時器T0是否開始定時。當(dāng)定時器T0的運(yùn)行控制位復(fù)位時,不管P3.2引腳是何值,定時器都不工作。只有當(dāng)定時器T0的運(yùn)行控制位置位后,才能根據(jù)P3.2引腳狀態(tài)來決定定時器是否工作。當(dāng)P3.2引腳出現(xiàn)高電平時,定時器T0開始定時;而在其出現(xiàn)低電平時,定時器T0停止工作,并將測量信號的周期保存在定時器的16位寄存器中。系統(tǒng)初始化時,可通過設(shè)置使T0 和T1定時器工作在模式1方式。T1定時器主要用于形成1秒鐘定時信號,用以為測量里程提供時間條件。

          2.3 液晶顯示電路和數(shù)據(jù)存儲電路

            本設(shè)計(jì)的顯示部分采用液晶顯示模塊LCM0825該模塊與單片機(jī)的接口電路如圖3所示。LCM0825是8位段碼式液晶顯示模塊,它內(nèi)部集成有LCD控制器、LCD驅(qū)動器和RAM,因而可方便顯示數(shù)據(jù)的編程。液晶顯示模塊采用3~4線串行數(shù)據(jù)輸入,可直接與單片機(jī)接口。由于串行接口方式節(jié)省了所需的口線和系統(tǒng)資源,因而使系統(tǒng)具有較高的資源利用率。該模塊可在2.7V~5.2V電壓下工作,其低功耗及背光可調(diào)特性使得設(shè)計(jì)更具有經(jīng)濟(jì)性和通用性。LCM0825能夠顯示8位數(shù)據(jù),每一個數(shù)據(jù)均以8段碼的形式放在其內(nèi)部顯示RAM區(qū),并用模塊內(nèi)RAM的兩個存儲地址來放置一個數(shù)據(jù)的8段碼。8位數(shù)據(jù)共占用內(nèi)部16個地址。每一個數(shù)據(jù)位的8段碼存放形式及高低地址存放段碼的順序都和表1所列的第8位數(shù)據(jù)的8段碼存放格式一樣,只是段碼的存放地址不同。所以,編程時一定要考慮數(shù)據(jù)的存放地址和形式。在使用該液晶顯示模塊時,VCC與VLCD之間可用一個50kΩ的電位器來調(diào)整背光。

            表1 第8位數(shù)據(jù)段碼與LCM0825內(nèi)部RAM的對應(yīng)關(guān)系

          D3 D2 D1 D0 ADDR
          8A 8B 8C DP8 00000
          8F 8G 8E 8D 00001

            數(shù)據(jù)存儲電路采用I2C總線的E2PROM存儲器24C64。24C64是串行的E2PROM存儲器,其存儲容量為8kBSCL為時鐘線,SDA為數(shù)據(jù)線。里程數(shù)據(jù)保存在24C64,因此中可保證掉電時數(shù)據(jù)不丟失。此外,使用串口也節(jié)省了數(shù)據(jù)口線。

          3 系統(tǒng)軟件設(shè)計(jì)

          3.1 數(shù)據(jù)處理過程

            待測信號經(jīng)預(yù)處理電路后加至單片機(jī)的P3.2(INT0)引腳可為單片機(jī)測量信號周期提供有效的輸入信號。單片機(jī)通過檢測P3.2引腳電平來決定是否啟動測量周期程序。當(dāng)該引腳為高電平時系統(tǒng)處于等待狀態(tài),要一直到該引腳出現(xiàn)低電平時才開始測周期。測量時首先將零賦給THO、TL0兩個寄存器,以將定時器T0的運(yùn)行控制位TR0置位,同時也將ET0置位以允許定時器T0中斷。然后再判斷P3.2引腳是否還為低電平,如為低電平則等待,直到出現(xiàn)高電平再開始判斷P3.2引腳是否為低電平,當(dāng)其不是低電平時再等待。一旦出現(xiàn)低電平,則立即復(fù)位TR0以終止定時器,以結(jié)束測周期程序。測周期過程中可能會發(fā)生定時器T0的中斷,每發(fā)生一次中斷則將R0寄存器加一,因此R0實(shí)際上是周期值的高字節(jié)。測出的周期值存儲在R0、TH0、TL0三個寄存器中,然后將其轉(zhuǎn)換成速度。速度是用車輪的周長除以脈沖周期得到的。由于所測周期的單位是μs,因此在相除轉(zhuǎn)換時應(yīng)將被除數(shù)擴(kuò)大106倍,以保證得出正確的速度。每秒進(jìn)行一次里程數(shù)累加時,可用當(dāng)前的速度值加上一秒前的里程數(shù)得出當(dāng)前的總里程數(shù),得出的速度和總里程值放到E2PROM中。通過k1、k2鍵可顯示速度或里程值,k1鍵為速度鍵,k2鍵為里程鍵,兩個鍵可以隨時設(shè)置。要顯示的速度或里程放到R1、R2、R3三個寄存器后即可調(diào)用轉(zhuǎn)換BCD代碼模塊,以將數(shù)據(jù)值轉(zhuǎn)換成壓縮的BCD代碼并顯示處理。考慮到對響應(yīng)時間的要求,BCD代碼模塊采用快速算法。數(shù)據(jù)轉(zhuǎn)變成相應(yīng)的壓縮BCD代碼后,可調(diào)用顯示消多余零和顯示數(shù)據(jù)存儲模塊,并將要顯示的數(shù)據(jù)值通過查表轉(zhuǎn)換成相應(yīng)數(shù)據(jù)的8段碼放到顯示緩沖區(qū)以備顯示。當(dāng)然,編程時要把十進(jìn)制數(shù)據(jù)的相應(yīng)8段碼放在表格中,這樣才能進(jìn)行查表以得到相應(yīng)數(shù)值的段碼。此過程的另一個重要目的是消除最高有效位前面的多余零,以使多余零的段碼處于不顯示狀態(tài),從而保證數(shù)據(jù)以正常的格式顯示出來。最后,將顯示緩沖區(qū)的8位8段碼經(jīng)串口送至液晶顯示模塊進(jìn)行顯示。

          3.2 系統(tǒng)軟件框圖

            本系統(tǒng)軟件采用模塊化設(shè)計(jì)方法。整個系統(tǒng)由初始化模塊、周期測量模塊、速度轉(zhuǎn)換模塊、里程計(jì)算和存儲模塊、數(shù)據(jù)轉(zhuǎn)BCD碼模塊、顯示數(shù)據(jù)處理模塊、數(shù)據(jù)顯示模塊、定時器中斷服務(wù)模塊以及其它功能模塊組成,圖4給出了其軟件框圖。上電后,首先進(jìn)入系統(tǒng)初始化模塊,此后系統(tǒng)軟件將開始運(yùn)行,以實(shí)時地將所測數(shù)值顯示在液晶模塊上。

          3.3 液晶顯示模塊的初始化

           ?。蹋茫停埃福玻凳谴校肝唬付我壕э@示模塊。使用時,要在上電后對該模塊進(jìn)行初始化。在初始化之前,應(yīng)延時200ms以上再送命令。它的初始化工作過程如下:首先定義液晶模塊(當(dāng)其命令代碼為:00101001),其次定義振蕩器方式(當(dāng)其命令代碼為00011000時,將模塊定義為內(nèi)部RC振蕩方式,命令代碼為00010100時,定義為外部晶體振蕩方式)。然后分別用命令代碼00000001和00000011開振蕩器和開顯示器。以上命令送入后,便可以在需要顯示數(shù)據(jù)時將相應(yīng)的段碼直接送入模塊內(nèi)部的顯示RAM中。在送顯示數(shù)據(jù)的段碼數(shù)據(jù)時,要考慮到顯示RAM 的高和低地址所對應(yīng)的數(shù)據(jù)段碼的存放形式。其第8位數(shù)據(jù)的段碼與LCM0825內(nèi)部的RAM地址的對應(yīng)關(guān)系見表1。以后隨地址的增加依次存放第7位至第1位數(shù)據(jù)段碼。為了正確地顯示數(shù)據(jù),應(yīng)使要顯示的8位字符在顯示屏幕中為左起第一位,右止第8位。

            另外,寫命令和寫數(shù)據(jù)程序應(yīng)分別編寫,因?yàn)樗鼈兊拿罡袷郊皶r序不同,見圖5。

            由時序圖可見,編寫傳輸子程序時,所傳數(shù)據(jù)的高位先移入模塊,否則模塊不能正常工作或顯示。同樣,為了能正確讀/寫命令或數(shù)據(jù),必須在時序中加入相應(yīng)的延時;此外,為保證系統(tǒng)的低功耗,每次讀/寫命令或數(shù)據(jù)之后,都應(yīng)將CS、RD、WR、DATA 置高電平。

          4 結(jié)束語

            本文介紹了一種基于單片機(jī)AT89C2051的速度里程表的設(shè)計(jì)方法。由于該方案中使用了串口段碼液晶顯示模塊E2PROM儲存器,因而節(jié)省了硬件資源,提高了系統(tǒng)性價(jià)比。同時,也有益于在此電路基礎(chǔ)上利用單片機(jī)的資源擴(kuò)展其它功能。

           



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();