久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3984|回復: 1
打印 上一主題 下一主題
收起左側(cè)

用單片機實現(xiàn)汽車行駛狀態(tài)記錄儀系統(tǒng)設計資料

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:77446 發(fā)表于 2015-4-19 18:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
摘  要

汽車行駛狀態(tài)記錄儀是一種安裝在汽車上的特殊的數(shù)字式電子記錄裝置。它可以全程記錄汽車行駛數(shù)據(jù),并通過對所記錄的行駛信息數(shù)據(jù)進行分析,精確掌控汽車的各種狀況。利用它,可有效預防駕駛員違章駕駛、遏制重大交通事故,約束駕駛員的不良駕駛習慣,為執(zhí)法人員進行事故的分析、處理提供科學的原始數(shù)據(jù),因此在交通運輸管理中發(fā)揮著十分重要的作用。針對目前汽車行駛記錄儀的研究現(xiàn)狀,本文設計并實現(xiàn)了一種基于51單片機的汽車行駛狀態(tài)記錄儀,該汽車行駛狀態(tài)記錄儀具有準確性、可靠性、高效性、易讀性和價格低廉等特點。
關(guān)鍵詞:汽車行駛狀態(tài)記錄儀;單片機;C51;液晶顯示;

ABSTRACT

Vehicle traveling data recorder(VTDR) is a special digital electronic recorder which used to acquire and store vehicle’s traveling speedtime-distance and other related status informationand then display data via LCD and RS232 interfaceThe use of vehicle travel- ling data recorder carol not merely halt the break in traffic rules and regulations, restrain the drivers from being drive at bad habitand call prevent the traffic accident effectively, it can also offer scientific initial data for the tipstaffs carries on the accidentsSo it plays a very important role in transportation managementAiming at the actuality of the VTDR researcha VTDR is designed in this paper which bases on the 51 MCUIt also has some characteristics such as real-time,reliable,high dependability, read-easy and less cost
Key words: Vehicle Traveling Data RecorderSingle Chip MicrocomputerC51LCD Display


目  錄

1  緒論        1
1.1國內(nèi)外汽車行駛狀態(tài)記錄儀發(fā)展的狀況        1
1.2本課題的目的和意義        2
1.3本課題的主要研究內(nèi)容        3
2  汽車行駛狀態(tài)記錄儀總體方案設計        3
2.1汽車行駛記錄儀的功能和技術(shù)指標        3
2.2汽車行駛狀態(tài)記錄儀的系統(tǒng)結(jié)構(gòu)        4
2.2.1設計思路分析        4
2.2.2面板介紹和使用方法        5
3  汽車行駛狀態(tài)記錄儀硬件設計與實現(xiàn)        6
3.1 記錄儀的供電        6
3.2 信息采集模塊        7
3.3單片機模塊        8
3.4可編程邏輯器件        9
3.5日歷時鐘芯片        12
3.6液晶顯示模塊LCD        14
3.7信息的存儲        15
4  汽車行駛狀態(tài)記錄儀軟件設計與實現(xiàn)        16
4.1 軟件流程        16
4.2中斷子程序        18
4.3 獲取狀態(tài)信息        20
4.4 時間信息的設置和獲取        21
4.5 鍵盤輸入        22
4.6 液晶顯示        25
4.7 IC卡操作        26
5  分析與結(jié)論        28
6  后續(xù)研究與發(fā)展前景        29
附  錄        30
參考文獻        31
致  謝        32







2  汽車行駛狀態(tài)記錄儀總體方案設計2.1汽車行駛記錄儀的功能和技術(shù)指標
汽車行駛狀態(tài)記錄儀的主要功能及技術(shù)指標應包括以下幾個方面。
(1) 能夠?qū)崟r監(jiān)督并記錄汽車行駛的各種狀態(tài)信息,包括速度、里程等重要數(shù)據(jù)。
(2) 為每個駕駛員提供單獨的可移動存儲卡式設備,用于記錄駕駛員信息(如姓名、工號等)和汽車(如車號等),為有關(guān)部門檢查提供必要的信息;同時,還需要提供存儲發(fā)車站和終點站的功能。
(3) 安裝在汽車上的行駛狀態(tài)記錄儀要提供方便、靈活的操作界面,可進行輸入信息的提示,同時還要有實時信息的顯示,并可根據(jù)用戶要求或設置,另外還要具備汽車超速時的報警功能。
(4) 安裝在計算機上的汽車行駛信息分析軟件應該提供方便的圖形用戶界面,支持鼠標和鍵盤操作,能統(tǒng)計分析任何時段的行駛速度、行駛里程、停車次數(shù)、停車時間、超速次數(shù)、超速時間、發(fā)車以及到站時間,并能用圖形顯示速度、里程的變化情況;在汽車正常行駛或發(fā)生交通事故時,可向管理部門提供詳實的汽車行駛數(shù)據(jù),幫助管理人員全面了解汽車的行駛情況,同時也可提供故障診斷功能,便于汽車維護和維修人員判斷及修理。
所開發(fā)的汽車行駛狀態(tài)記錄儀作為產(chǎn)品使用還需要滿足下面的要求:
l 合適的數(shù)據(jù)記錄頻率:速度的采樣周期可設置為1次/ s~0.2次/s。
l 一定的數(shù)據(jù)記錄容量:0~240h。
l 較長的數(shù)據(jù)存儲時間:掉電情況下可至少保存10年以上。
l 監(jiān)測汽車行駛速度范圍:0~240km/h。
l 記錄需要的汽車行駛數(shù)據(jù),包括速度、里程、超速度及時間、停車次數(shù)及時間。
l 存儲卡還要可以存儲駕駛員信息、汽車信息、發(fā)車時間和到站時間、起始站和終點站。
l 要能夠抗電磁干擾、防火、防潮、抗沖擊。
l 尺寸要合適,便于在汽車上安裝。
2.2汽車行駛狀態(tài)記錄儀的系統(tǒng)結(jié)構(gòu)2.2.1設計思路分析
本系統(tǒng)包括數(shù)據(jù)采集、控制、鍵盤輸入、液晶顯示、日歷、數(shù)據(jù)存儲等功能模塊,其中采集、控制、鍵盤及“屏顯”都屬于51單片機的應用范疇。
本課題研究的汽車行駛狀態(tài)記錄儀的總體結(jié)構(gòu)框圖如圖2-1:
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5C1E.tmp.png
圖2-1汽車行駛狀態(tài)記錄儀總體結(jié)構(gòu)框圖

在圖2-1中,單片機系統(tǒng)是整個系統(tǒng)的核心,通過硬件和內(nèi)部軟件的配合控制整個系統(tǒng)的運行。
供電單元的作用是將汽車內(nèi)部配電模塊提供的電壓轉(zhuǎn)換成記錄儀可以正常工作的電壓,這其中為了避免汽車內(nèi)部電機的干擾,需要進行屏蔽。
信號采集模塊是指將汽車內(nèi)部霍爾傳感器傳過來的一對分差信號經(jīng)過適當?shù)淖儞Q變成一個脈沖信號提供給單片機系統(tǒng)。這其中需要用光耦模塊進行隔離,來避免強脈沖信號對電路板的干擾。
信息儲存是指單片機系統(tǒng)將采集到的信息經(jīng)過適當?shù)倪\算處理之后存儲到智能IC卡中,IC 卡中的信息可以長時間保存,可以用讀卡設備讀出其中的信息然后進行分析。
設計這樣的單片機系統(tǒng)當然還要用到可編程邏輯器件,它可以靈活方便地產(chǎn)生譯碼、控制等信號。
鍵盤輸入和液晶顯示是常用的單片機輸入/輸出模塊,為用戶提供友好方便的人機操作界面,用戶可以輸入特定的信息,也可以看到實時的速度、里程及時間等信息,可以做出實時判斷。
2.2.2面板介紹和使用方法
本論文中介紹的汽車行駛狀態(tài)記錄儀最終會作為車載設備在汽車上,它需要具有有好的用戶操作界面,和一般的儀器儀表開發(fā)一樣,需要有用戶操作面板,可設計類似于圖2-2所示的操作界面。
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5C2F.tmp.jpg
                 圖 2-2 汽車行駛狀態(tài)記錄儀面板圖

主屏為系統(tǒng)的顯示界面,由液晶模塊實現(xiàn),它的功能是顯示實時速度、里程等信息;鍵盤主要用于輸入車號、站號等信息;面板的右下方是IC卡插座,用戶(此處實際就是司機)由此插入自己的智能IC卡,IC卡記錄此次行駛的信息。面板中間區(qū)域是兩個指示燈,左邊為電源指示燈,正常情況下接通電源后亮綠燈,右邊為超速報警燈,超速時亮紅燈。
3  汽車行駛狀態(tài)記錄儀硬件設計與實現(xiàn)3.1 記錄儀的供電
電源系統(tǒng)是任何汽車電子設計中最重要的子系統(tǒng)之一,電源設計非常重要,如果電源設計比較糟糕的話,其它單元設計無論多么完美,系統(tǒng)也不能正常發(fā)揮作用。整體功耗、電磁干擾等都是必須考慮的因素。
目前汽車內(nèi)部產(chǎn)生的供電是+12V,記錄儀本身需要的是+5V供電,所以系統(tǒng)需要供電模塊來實現(xiàn)+12V+5V的電源變換,其工作原理如圖3-1a)、3-1b)所示。
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5C4F.tmp.jpg
圖3-1a 汽車行駛狀態(tài)記錄儀電源部分原理圖
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5C5F.tmp.jpg
圖3-1b 汽車行駛狀態(tài)記錄儀電源部分原理圖

由于汽車行駛狀態(tài)記錄儀電源部分原理圖畫出來比較大,故分成3-1a)、3-1b)顯示。
汽車內(nèi)部會提供一條屏蔽線PB,它的作用是屏蔽汽車內(nèi)部產(chǎn)生的干擾,它被引入到光耦模塊,光耦模塊起到光耦隔離作用,屏蔽線和光耦電路一起可以使得采集到的信號波形盡可能干凈,信號采集電路受汽車內(nèi)部電動機產(chǎn)生的干擾盡可能小。
3.2 信息采集模塊
此部分的硬件設計較為簡單,因為需要采集的信號很少,而且汽車內(nèi)部有自己的傳感器,實際上也就是有現(xiàn)成的信號提供給記錄儀。汽車輪子每轉(zhuǎn)一周,會通過車子內(nèi)部的霍爾傳感器傳送一對差分信號,此差分信號經(jīng)過信號采集模塊變成滿足要求的計數(shù)脈沖,此脈沖信號經(jīng)過一定的處理即可用來得到速度、里程等信息。
信號采集模塊的電路原理圖如圖3-2所示
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5C70.tmp.jpg
圖3-2汽車行駛狀態(tài)記錄儀信號采集電路原理圖

圖 3-2中U8是東芝公司的單光耦芯片TLP521-2,實際上它的內(nèi)部就是兩組光敏三極管,如圖3-3所示。


光敏三極管也是利用硅PN結(jié)的光電效應制成的。光敏三極管使用時,其基極通常開路,基極—集電極產(chǎn)生的光敏感生電流反饋入基極,并被光敏三極管自己所放大,因此光敏三極管的靈敏度比光敏二極管大得多,通常要大100多倍。光敏三極管的最大工作頻率只有幾百KHz。
光耦模塊主要就是通過電光電的變換將電信號隔離開來的,它可以避免一側(cè)對另一側(cè)產(chǎn)生的干擾。記錄儀上的+5V工作系統(tǒng)是弱電電路,汽車內(nèi)部提供的脈沖信號在送入記錄儀之前必須經(jīng)過光耦隔離的處理。
圖3-2中HP和FP是汽車輪子轉(zhuǎn)一周內(nèi)部提供的差分信號,它在通過系統(tǒng)的信號采集模塊后產(chǎn)生狀態(tài)記錄儀系統(tǒng)可以使用的信號SIG;圖3-2中PB為屏蔽線,由它構(gòu)成了屏蔽網(wǎng)絡,有效地屏蔽了汽車電動機等對硬件電路的干擾。
通過屏蔽和光耦隔離,得到波形干凈的SIG信號,信號采集功能完成。采集到的SIG信號需要送到可編程邏輯器件中進一步處理,由單片機系統(tǒng)對處理后的結(jié)果進行相應的運算,可以得到速度、里程等狀態(tài)信息。
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5C81.tmp.jpg
圖3-3  單光耦芯片(TLP521內(nèi)部工作框圖)
3.3單片機模塊
對于整個汽車行駛狀態(tài)記錄儀而言,起到控制和樞紐作用的單片機模塊無疑是其中最重要的部分。其工作原理圖如圖3-4所示。
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5C91.tmp.jpg
圖3-4 汽車行駛狀態(tài)記錄儀單片機模塊原理圖

圖3-4中U4為12M晶振,它為單片機提供穩(wěn)定的12MHz工作時鐘。
系統(tǒng)選用Atmel公司的帶有8KB Flash的8位微控制器AT89S8252作為單片機芯片,它完全與MCS-51系列單片機兼容(從指令集到引腳)。
和51單片機相比AT89S8252還具有一些增強型的功能。因為記錄儀最終需要將記錄的車輛行駛狀態(tài)信息存入IC卡,本系統(tǒng)選用的IC卡是通過SPI口存儲的,所以本文選用帶有SPI接口功能的單片機芯片AT89S8252。
由于單片機AT89S8252芯片各管腳的功能與作用和80C51芯片的基本一樣,在文中將不做詳細介紹。
3.4可編程邏輯器件
可編程邏輯器件(Programmable Logic Device,PLD)技術(shù)是目前電子設計領(lǐng)域中最具活力和發(fā)展前途的一項技術(shù),在PLD上,工程師可以通過傳統(tǒng)的原理圖輸入法,或是硬件描述語言自由地設計一個數(shù)字系統(tǒng)。通過軟件仿真,可以事先驗證設計的正確性。在印刷電路板PCB完成以后,還可以利用可編程邏輯器件的在線修改能力,隨時修改設計而不必改動硬件電路。使用可編程邏輯器件來開發(fā)數(shù)字電路,可以大大縮短設計時間,減少PCB面積,提高系統(tǒng)的可靠性。可編程芯片和單片機的配合使用已成為單片機系統(tǒng)的最常用開發(fā)模式。
本文中可編程邏輯器件主要完成的功能包括:脈沖信號的計數(shù)、定時器和產(chǎn)生芯片選擇信號。實現(xiàn)的功能比較簡單,使用端口不多,選用Altera公司的EPM7032S44可以達到要求。EPM7032S44屬于MAX7000S系列,此系列是Altera公司的主流芯片,采用5V/3.3V工藝,價格便宜。
可編程邏輯器件設計的常用方法有圖形輸入法和文本輸入法。圖形輸入法類似于數(shù)字電路設計,只是它是通過器件模型而不是具體器件搭建的;文本輸入法則是通過編程的方法從已知輸入得到需要的輸出。相比之下文本輸入法更為靈活,在實現(xiàn)復雜電路的設計時常采用它。本文中可編程邏輯器件實現(xiàn)的功能采用了圖形輸入和文本輸入結(jié)合的方式,比較簡單。
本文中選用了Altera公司的開發(fā)軟件Maxplus來設計的GDF文件如圖3-5所示。
由圖3-5可知,液晶顯示模塊和日歷時鐘芯片的片選信號由讀、寫信號及最高位地址線A15經(jīng)過簡單的邏輯電路搭建而成。圖中另外一部分電路由兩個子模塊timer和sigcounter構(gòu)成,它們的作用是對信號采集到的信號SIG進行計數(shù),結(jié)果通過系統(tǒng)的地址/數(shù)據(jù)復用總線送給單片機處理。
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5CB1.tmp.jpg
圖3-5汽車行駛狀態(tài)記錄儀可編程邏輯器件頂層圖形輸入設計(GDF文件)

Timer模塊用VHDL語言實現(xiàn),代碼如下:
SUBDESIGN timer
(
            clk                : INPUT ;
            suocun        : OUTPUT;
)
VARIABLE
            f[3..0] : DFF;
            suocun        : DFF;
BEGIN
            f[].clk=clk;
            suocun.clk=clk;
            f[].d=(!suocun)&(f[]+1);
            suocun.d=f[3] & !f[2] & !f[1] & !f[0];
END;

Timer模塊的輸入信號為日歷時鐘芯片產(chǎn)生的方波信號,輸出為計數(shù)器模塊sigcounter需要的鎖存信號“suocun”。
計數(shù)器模塊sigcounter也采用VHDL編程實現(xiàn),代碼如下:

SUBDESIGN sigcounter
(
            sig, lrst,suocun,oe                : INPUT ;
            ad[7..0]        : OUTPUT;
)
VARIABLE
            cnt0[7..0]                :DFF;
            cnt1[7..0]                :DFF;
            reg[4..0]                :DFF;
            tnode[7..0] : TRI_STATE_NODE;
BEGIN
            reg0.clk=suocun;
            reg0.d=!reg0;
            reg1.clk=!oe;
            reg1.d=!reg0;
            reg2.clk=!suocun;
            reg2.d=reg0;
            reg3.clk=!oe;
            reg3.d=reg0;
            reg4.clk=!suocun;
            reg4.d=!reg0;
cnt0[].clk=sig & reg0;
            cnt1[].clk=sig & !reg0;
            cnt0[].clrn=lrst & (reg3.q # reg4.q);
            cnt1[].clrn=lrst & (reg1.q # reg2.q);
cnt0[].d=cnt0[]+1;
            cnt1[].d=cnt1[]+1;
            tnode[7]=TRI(cnt0[7].q,oe & !reg0);
            tnode[7]=TRI(cnt1[7].q,oe & reg0);
            tnode[6]=TRI(cnt0[6].q,oe & !reg0);
            tnode[6]=TRI(cnt1[6].q,oe & reg0);
            tnode[5]=TRI(cnt0[5].q,oe & !reg0);
            tnode[5]=TRI(cnt1[5].q,oe & reg0);
            tnode[4]=TRI(cnt0[4].q,oe & !reg0);
            tnode[4]=TRI(cnt1[4].q,oe & reg0);
            tnode[3]=TRI(cnt0[3].q,oe & !reg0);
            tnode[3]=TRI(cnt1[3].q,oe & reg0);
            tnode[2]=TRI(cnt0[2].q,oe & !reg0);
            tnode[2]=TRI(cnt1[2].q,oe & reg0);
            tnode[1]=TRI(cnt0[1].q,oe & !reg0);
            tnode[1]=TRI(cnt1[1].q,oe & reg0);
            tnode[0]=TRI(cnt0[0].q,oe & !reg0);
            tnode[0]=TRI(cnt1[0].q,oe & reg0);
            ad[]=tnode[];
        END;
至此本設計中可編程邏輯電路的設計已經(jīng)完成。在調(diào)試過程中若發(fā)現(xiàn)需要更改設計也很方便,只需重新編寫程序、設計.gdf文件重新下載即可,不用對電路板做修改,這也是采用可編程邏輯器件的最大優(yōu)點。
3.5日歷時鐘芯片
汽車行駛狀態(tài)記錄儀需要對狀態(tài)發(fā)生時所對應的時間信息做相應的記錄,以便后來的分析使用,所以需要獲取詳細的時間信息。
在2.1節(jié)中系統(tǒng)的技術(shù)指標中提到數(shù)據(jù)記錄容量要求在0~240小時,數(shù)據(jù)存儲時間在掉電情況下至少保存10年以上。根據(jù)這些要求,系統(tǒng)中選用了日歷時鐘芯片來提供詳細的日期和時、分、秒的時間信息。
本文中選用達拉斯半導體公司的芯片DS12C887.。DS12C887是一款實時時鐘芯片,內(nèi)部有鋰供電的石英晶振,它可以在無外部供電的情況下將數(shù)據(jù)保存10年以上。它內(nèi)部通過計數(shù)可以實現(xiàn)時間的記錄,時間信息可以詳細到時、分、秒、年、月、日,以及星期,時間顯示模塊可以選擇帶有“AM”和“PM”指示的12小時模式及正常的24小時模式,芯片可以提供鬧鐘的設置,在芯片內(nèi)部還有15個字節(jié)的時鐘和控制寄存器,以及113個字節(jié)的通用RAM空間。芯片DS12C887的內(nèi)部工作原理如圖3-6所示。
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5CC2.tmp.png
圖3-6日歷時鐘芯片DS12C887的內(nèi)部工作原理框圖

DS12C887的內(nèi)存空間為128個字節(jié),其中11個字節(jié)專門用于存儲實時時間信息,4個字節(jié)專門用于控制和存放狀態(tài)信息,剩下的113個字節(jié)為用戶可以使用的普通RAM空間。
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5CE2.tmp.png
圖3-7日歷時鐘芯片DS12C887內(nèi)部內(nèi)存空間映射示意圖
3.6液晶顯示模塊LCD
本文中液晶顯示模塊LCD(Liquid Crystal Display)選用內(nèi)含KS0108B/HD61202控制器的圖形液晶顯示模塊GXM12864,它是一種采用低功耗CMOS技術(shù)實現(xiàn)的點陣圖形LCD模塊,有8位微處理器接口,通過內(nèi)部的128×64位映射DDRAM(Display Data RAM)實現(xiàn)128點×64點大小的平板顯示。該液晶顯示模塊使用KS0107B為行驅(qū)動器,同時使用KS0108B作為列驅(qū)動器。KS0107B不與MPU發(fā)生聯(lián)系,只要提供電源就能產(chǎn)生行驅(qū)動信號和各種同步信號,比較簡單。
對于用戶來說,LCD模塊的使用關(guān)鍵在于驅(qū)動芯片的使用,驅(qū)動芯片和LCD顯示屏的接口電路已經(jīng)做好在GXM12864的內(nèi)部,用戶使用時只需閱讀驅(qū)動芯片的相關(guān)資料,設計出驅(qū)動芯片和微處理器之間的接口電路,編寫具體的驅(qū)動程序。
前面提到行驅(qū)動芯片KS0107B不與MPU發(fā)生聯(lián)系,只要提供電源就能產(chǎn)生行驅(qū)動信號和各種同步信號,比較簡單,在此就不做介紹了。
列驅(qū)動芯片KS0108B與KS0107B配合對液晶屏進行行列驅(qū)動,可直接與8位微處理器相連。微處理器對液晶顯示模塊的操作是通過KS0108B支持的指令系統(tǒng)實現(xiàn)的,掌握這些命令是編寫液晶模塊驅(qū)動程序的關(guān)鍵。
3.7信息的存儲
汽車行駛狀態(tài)記錄儀最終的任務是要將記錄下的信息存儲到智能IC卡中,以便以后對信息進行分析。IC卡采用符合國際標準的智能卡,本系統(tǒng)選用的是ATMEL公司的AT45D041A。
AT45D041A是4M位的串行數(shù)據(jù)Flash,采用+5V供電,它支持在系統(tǒng)的頁編程,刪除操作可選擇頁或塊刪除,支持SPI接口的讀寫操作,主要用于數(shù)字語音、圖像和數(shù)據(jù)的存儲。
AT45D041A具有4M位的內(nèi)存空間,此空間由2048頁構(gòu)成,每頁264B,除此外,它還有兩個SRAM數(shù)據(jù)緩沖,每個緩沖區(qū)的大小也是264B,緩沖區(qū)的作用使得主內(nèi)存在重新編程的時候允許接受新數(shù)據(jù)。AT45D041A的內(nèi)部結(jié)構(gòu)如圖3-8所示。
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5CF3.tmp.png
圖3-8   IC卡芯片AT45D041A的內(nèi)部結(jié)構(gòu)框圖

與普通Flash并行的數(shù)據(jù)接入相比,AT45D041A使用SPI接口串行接入數(shù)據(jù),采用簡單的串行數(shù)據(jù)接口可以增加系統(tǒng)可靠性,減小器件的封裝,減少引腳數(shù)目。AT45D041A和CPU接口的引腳主要有7個:CS為低電平有效的片選腳;SCK為串行時鐘腳;SI、SO分別為串行輸入、輸出腳;WP為低電平有效的硬件頁寫操作保護腳,低電平時主內(nèi)存空間的前256頁不允許進行編程操作,在此可接VCC;RESET是低電平有效的芯片復位腳;RDY/BUSY是狀態(tài)指示腳,表示當前卡的狀態(tài)是準備好(高電平)或是忙(低電平)。這些引腳中SCK、SI和SO即為芯片的串行接口。
4  汽車行駛狀態(tài)記錄儀軟件設計與實現(xiàn)
下面將介紹如何在前面實現(xiàn)的硬件平臺上實現(xiàn)軟件設計過程。
4.1 軟件流程
本文中設計的軟件流程如圖4-1所示。
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5D03.tmp.png
圖4-1   汽車行駛狀態(tài)記錄儀軟件流程圖

從圖4-1中可以看出,軟件的流程是和汽車行駛狀態(tài)記錄儀工作時的工序相對應的。在啟動后,液晶顯示屏會提示輸入站號、車號等信息,用戶可以通過鍵盤輸入,汽車開動以后,顯示屏會顯示汽車實時的速度和所行駛的里程信息,在到站以后,用戶按先功能鍵“FUN”則可以輸入到站的站號,之后記錄下的行駛狀態(tài)信息被存入到IC卡中。在行駛過程中還要判斷汽車是否超速,超速要給出報警等提示。可編程邏輯器件對車輪轉(zhuǎn)一周產(chǎn)生的信號進行計數(shù),單片機利用定時中斷定期對計數(shù)值進行統(tǒng)計計算,從而得到速度等信息,程序中不斷將速度值和門限值做比較,如果超過就打開超速報警紅燈。
除了定時中斷以外,本系統(tǒng)還使用了一個外部中斷INT0,汽車到站時,用戶按下“FUN”鍵就會觸發(fā)此中斷。程序檢測到此中斷后會執(zhí)行到站后的相應操作。
主程序在檢測到車子開動以后進入一個無限循環(huán),循環(huán)和中斷的配合實現(xiàn)了系統(tǒng)的整個功能。
4.2中斷子程序
本例中使用了定時器0中斷(工作在計時器方式)和外部中斷0。前者用于定時顯示速度、里程等信息;后者用于到站操作。主程序需要根據(jù)要求對中斷有關(guān)的寄存器進行設置。
……
TMOD=0x06;
TH0=-5;
TL0=-5;
IP=0x01;
EA=1;
ET0=1;
EX0=1;
TR0=1;
……
定時中斷服務程序如下:
void timer0 ( ) interrupt 1 using 1
{
EA=0;
time_count++;
circle=P0;
P1_4=0;
ttcy+ =circle;
P3_1=0;
P1_7=1;
……
……
……
EA=1;
}
程序中最主要的是三個變量time_count、circle和ttcy。其中circle值由CPLD計算獲得,它表示的是轉(zhuǎn)速信息;ttcy值對circle進行累加,在主程序中由它可得到行駛里程信息;time_count變量也是一個全局變量,在定時中斷中不斷累加,它決定了主程序何時刷新速度和里程的更新顯示。
外部中斷采用的是中斷查詢的方式,也就是中斷到來的時候只做置位操作(給設定的中斷標志位置1),主程序中不斷輪詢此標志位,發(fā)現(xiàn)被置位后進行相應的處理,這樣可簡化中斷服務子程序。
外部中斷服務程序如下:
void  int0 ( )  interrupt  0  using 2
{
      EA=0;
      int0flag=1;
      EA=1;
}
上述程序完成對int0flag的置位操作。
在主程序中需要輪詢int0flag變量。
void  main (void)
{
    ……
    while  (1)
    {
        ……
        if ( int0flag)
        {
           ……
}
}
}
4.3 獲取狀態(tài)信息
硬件電路中,車輪每轉(zhuǎn)一周都會提供一個脈沖信號SIG,然后可編程邏輯器件EPM7032會算出轉(zhuǎn)速信息通過P0口送給單片機。
單片機獲取狀態(tài)信息的程序如下:
if (time_count>=120)
{
time_count=0;
hi=36*circle/35;
mid=hi/100;
disp1(mid);
lo=(hi-mid*100)/10;
disp2(lo);
disp2(hi-mid*100-lo*10);
mid=(36*circle-35*hi)*10/35;
disp3(mid);
j=ttcy/700;
mid=j/100;
disp4(mid);
lo=(j-mid*100)/10;
disp5(lo);
disp5(j-mid*100-lo*10);
mid=(ttcy-700*j)*10/700;
disp6(mid);
}
4.4 時間信息的設置和獲取
主程序流程圖中,初始化部分要包括時間信息的初始化。首先屏幕會顯示提示信息,比如“請輸入年”,然后用戶通過鍵盤輸入正確信息,比如“2008”,此時程序記錄此信息并顯示在液晶屏上,這樣依次根據(jù)屏幕提示輸入所有的時間信息,包括年、月、日、時、分、秒。具體程序如下:
void presettime  ( )
{
    unsigned char year,month,day,hour,min,sec;
    timereg_b=0x8e;
    timereg_a=0x2f;
    dispnian( );
    year=getkey( );
    time_year=year;
    dispyue( );
    month=getkey( )
time_month=month;
    dispri( );
    day=getkey( );
    time_day=day;


dispshi;
hour=getkey( );
time_hour=hour;
dispfen;
min=getkey( );
time_min=min;
dispmiao;
sec=getkey( );
time_sec=sec;
timeregb=0x0e;
}
設置初始時間主要是對實時時鐘芯片DS12C887的操作,程序通過獲取鍵盤輸入的值,寫入芯片內(nèi)部的6種時間寄存器。芯片內(nèi)部還有4個控制寄存器,在此設計中只用了A、B寄存器。此外,程序中還用到了鍵盤掃描和液晶顯示相關(guān)的函數(shù)。
4.5 鍵盤輸入
記錄儀的輸入通過鍵盤來實現(xiàn),使用的鍵盤掃描函數(shù)keyscan()如下:
unsigned char keyscan(void)
(
    unsigned char sccode,recode;
    P1=0x78;
    if  ((P1&0x78)!=0x78)
    {
        d110ms( );
        if  ((P1&0x78)!=0x78)
{
sccode=0xfe;
          while ((sccode&0x08)!=0)
{
     P1=sccode;
     if  ((P1&0x78)!=0x78)
     {
        recode =(P1&0x78)︱0x78;
        return ((~sccode)+(~recode));
}
else sccode=(sccode<<1)︱0x01;
}
}
}
return (0);
)
鍵盤讀取函數(shù)getkey()如下:
unsigned char getkey(void)
{
    unsigned char num1,num2,num;
    num1=0; num2=0; num=0;
    while (key!=0x44)
{
   num1=keyscan( );
   switch(num1)
   {
       case 0x09:
            num1=0;
            num2=num2*10;
            num=num+1;
            if (num==2)   
{disp2(num1);}
else {disp1(num1);}
break;
               case 0x11:
                    num1=1;
                    num2=num1*10+num1;
                    num=num+1;
if (num==2)   
{disp2(num1);}
else {disp1(num1);}
break;
              case  0x21:
                    ……
              case  0x41:
                    ……
              case  0x0a:
                    ……
              case  0x12:
                    ……
              case  0x22:
                    ……
              case  0x42:
                    ……
              case  0x0c:
                    ……
              case  0x14:
                    ……
              case  0x24:
                    ……
              case  0x44:
                    break;
}
return(num2);
}
在鍵盤讀取函數(shù)getkey()中除了讀取了鍵值以外還調(diào)用了數(shù)字顯示函數(shù),將數(shù)字顯示了出來。由于鍵盤讀取函數(shù)getkey()程序較長,文中只寫出了程序的框架,但不影響調(diào)試等操作。
4.6 液晶顯示
液晶顯示包括屏幕提示、鍵盤輸入值的顯示及行駛中狀態(tài)信息的顯示。要編寫正確的液晶顯示程序,就必須熟悉所用液晶模塊的指令集。本設計中使用的液晶模塊是GXM12864,它所用的控制驅(qū)動器是2片KS0108B和1片KS0107B,其中和單片機直接進行連接的是KS0108B,KS0108B共有7種指令。
1、顯示開關(guān)指令
R/W
D/I
DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0
0
0
0     0     1    1     1     1     1    0/1
當DB0=1時,LCD顯示RAM中的內(nèi)容;DB0=0時,關(guān)閉顯示。
2、顯示起始行(ROW)設置指令
R/W
D/I
DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0
0
0
1     1           顯示起始行(0~63)
該指令設置了對應液晶屏最上一行的顯示RAM的行號,有規(guī)律地改變顯示起始行,使LCD實現(xiàn)顯示滾動的效果。
3、頁(PAGE)設置指令
R/W
D/I
DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0
0
0
1     0     1    1     1       頁號(0~7)
顯示RAM共64行,分8頁,每頁8行。
4、列地址(Y Address)設置指令
R/W
D/I
DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0
0
0
0     1              顯示列地址(0~63)
設置了頁地址和行地址,就唯一確定了顯示RAM中的一個單元,這樣MPU就可以用讀、寫指令讀出該單元中的內(nèi)容或向該單元寫進一個字節(jié)數(shù)據(jù)。
5、讀狀態(tài)指令
R/W
D/I
DB7  DB6  DB5   DB4   DB3  DB2  DB1  DB0
1
0
BUSY  0  ON/OFF RESET  0     0    0    0
該指令用來查詢液晶顯示模塊內(nèi)部控制器的狀態(tài),各參量含義為:
BUSY:1—內(nèi)部在工作,0—正常狀態(tài)  
ON/OFF:1—顯示關(guān)閉,0—顯示打開        
RESET:1—復位狀態(tài),0—正常狀態(tài)
在BUSY和RESET狀態(tài)中,除讀狀態(tài)指令外,其它指令不對液晶顯示模塊產(chǎn)生作用。在對液晶顯示模塊操作之前要查詢BUSY狀態(tài),以確定是否可以對液晶顯示模塊進行操作。
6、寫數(shù)據(jù)指令
R/W
D/I
DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0
0
1
              寫數(shù)據(jù)
7、讀數(shù)據(jù)指令
R/W
D/I
DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0
1
1
             讀顯示數(shù)據(jù)

4.7 IC卡操作
   前面介紹了IC卡中有主內(nèi)存和兩塊緩沖區(qū),IC芯片AT45D041提供專門的讀寫指令對它們進行操作。圖4-2和圖4-3是寫操作和讀操作的流程圖。
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5D43.tmp.png
圖4-2  AT45D041寫操作流程圖
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5D53.tmp.png
圖4-3  AT45D041讀操作流程圖
5  分析與結(jié)論
本文詳細介紹了汽車行駛狀態(tài)記錄儀的整個設計過程。本文中設計的汽車行駛信息記錄儀體積小巧,攜帶安裝均很方便,應用廣泛,可安裝使用在各種12V或24V直流電源的車輛上。記錄儀的數(shù)據(jù)記錄和分析分離,駕駛?cè)藛T無法對記錄下來的數(shù)據(jù)進行任何修改,只有管理部門可以對數(shù)據(jù)進行分析。
汽車行駛狀態(tài)記錄儀的操作使用過程中的注意事項:
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5D54.tmp.png 系統(tǒng)數(shù)據(jù)采集模塊的入口處應該使用屏蔽線進行屏蔽。
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5D65.tmp.png 實時時鐘芯片DS12C887是內(nèi)部自帶電池的芯片,使用前最好測試其電池電量,電量不足會出現(xiàn)異常的讀數(shù)和操作。
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5D66.tmp.png 在程序控制液晶顯示模塊GXM1286的顯示時要注意左右的選擇,不同液晶模塊左右區(qū)選擇可能不同。
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5D67.tmp.png LCD在清屏后再顯示之前先做一次初始化操作,這樣可避免顯示時出現(xiàn)顯示屏的閃動問題。
下圖5-1為汽車行駛狀態(tài)記錄儀的軟件部分調(diào)試結(jié)果:
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5D87.tmp.jpg
圖5-1  汽車行駛狀態(tài)記錄儀的軟件部分調(diào)試結(jié)果

附  錄
設計的數(shù)據(jù)顯示圖和電路圖:
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5D98.tmp.jpg
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5DA8.tmp.jpg
file:///C:\Users\admin\AppData\Local\Temp\ksohtml\wps5DB9.tmp.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2015-4-19 20:38 | 只看該作者
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜小视频在线播放 | 亚洲精品视频一区二区三区 | 国产成人精品综合 | 国产三级 | 久久9精品 | 午夜欧美 | 欧美亚洲在线 | 性一交一乱一透一a级 | 黄色国产| 亚洲美女一区 | 欧美老少妇一级特黄一片 | 日本一区二区不卡视频 | 久久精品手机视频 | 天天看夜夜 | 在线午夜 | 亚洲午夜久久久 | 久久av网| 免费欧美视频 | 色眯眯视频在线观看 | 夜夜操天天艹 | 日韩成人免费av | 激情五月综合 | 国产欧美一区二区三区在线看 | 欧美精品在线观看 | 成人亚洲 | 国产精品久久久久一区二区三区 | 久久精品国产一区二区三区不卡 | 99久久精品免费看国产四区 | 最新中文字幕第一页视频 | 欧美一二三 | 欧美一区二区三区免费电影 | 青青久在线视频 | 91在线看网站 | 99成人| 羞羞免费网站 | 国产一区二区三区www | 国产精品久久久久久久久久妇女 | 国产欧美在线播放 | 日韩中文字幕网 | 欧美午夜视频 | 人人干人人干人人 |