基于單片機(jī)的出租車計(jì)費(fèi)器的畢業(yè)設(shè)計(jì) (2)_第1頁(yè)
已閱讀1頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  基于單片機(jī)出租車計(jì)費(fèi)器的設(shè)計(jì)</p><p>  題 目 基于單片機(jī)的出租車計(jì)價(jià)器 </p><p><b>  學(xué) 生 </b></p><p><b>  指導(dǎo)教師 </b></p><p>  年 級(jí) 2012級(jí)<

2、;/p><p>  專 業(yè) 電子信息工程</p><p>  二級(jí)學(xué)院 信息工程學(xué)院</p><p><b>  2015年1月</b></p><p><b>  目 錄</b></p><p><b>  摘 要2</b></p&

3、gt;<p>  ABSTRACT3</p><p>  1 課程設(shè)計(jì)任務(wù)書4</p><p>  1.1 課程設(shè)計(jì)任務(wù)4</p><p>  1.2 課程設(shè)計(jì)方案4</p><p><b>  2硬件電路設(shè)計(jì)6</b></p><p>  2.1 振蕩電路6&l

4、t;/p><p>  2.2 復(fù)位電路設(shè)計(jì)6</p><p>  2.3 鍵盤接口電路7</p><p>  2.4 顯示電路7</p><p>  2.4.1 1602LCD的基本參數(shù)及引腳功能7</p><p>  2.4.2 顯示模塊采用1602液晶顯示接口電路9</p><p

5、>  2.5 單片機(jī)各引腳功能說明9</p><p>  3 軟件設(shè)計(jì)11</p><p>  3.1 單片機(jī)資源使用11</p><p>  3.2 單片機(jī)軟件模塊設(shè)計(jì)12</p><p>  3.2.1 中斷子函數(shù)12</p><p>  3.2.2 判鍵子函數(shù)12</p>

6、<p>  3.2.3 顯示子程序13</p><p>  3.3 總程序流程框圖14</p><p><b>  總結(jié)15</b></p><p><b>  參考文獻(xiàn)16</b></p><p><b>  致謝17</b></p>

7、<p>  附錄1 元件件清單18</p><p>  附錄2 原理圖19</p><p>  附錄3 程序清單20</p><p>  基于單片機(jī)的出租車計(jì)價(jià)器</p><p><b>  1 引言</b></p><p>  隨著現(xiàn)代經(jīng)濟(jì)飛速的發(fā)展,人民生活水平的提高

8、,越來越多的居民為了方便的出行,大都會(huì)選擇乘坐出租車出行,而且隨著科學(xué)技術(shù)的前進(jìn),各種各樣的打車軟件相繼出現(xiàn),例如滴滴打車軟件等,都更加方便了生活,人們?yōu)榱烁咝实幕顒?dòng)也更傾向于打車,于是了解出租車必備設(shè)備計(jì)價(jià)器成了人們的興趣,這可以使我們了解其原理,避免出現(xiàn)被多要費(fèi)用等情況的出現(xiàn)。</p><p>  本課題采用STC89C52單片機(jī)進(jìn)行設(shè)計(jì),其中用按鍵來實(shí)現(xiàn)輪胎轉(zhuǎn)圈行駛的里程數(shù)、顯示模式的切換、時(shí)鐘的調(diào)整、等

9、待時(shí)間的增加等功能,使用DS1302進(jìn)行計(jì)時(shí),LCD1602液晶顯示屏顯示,使用芯片at24C02進(jìn)行內(nèi)容存儲(chǔ),使用Keil編程軟件編寫程序,實(shí)現(xiàn)了路程清零、里程數(shù)增加及路程和費(fèi)用的顯示、時(shí)間的加減調(diào)整、顯示內(nèi)容的切換等功能。</p><p><b>  主要研究步驟如下:</b></p><p> ?。?)熟悉STC89C52rc單片機(jī)及其最小系統(tǒng)與開發(fā)環(huán)境;<

10、;/p><p> ?。?)將所需器件按照原理圖進(jìn)行焊接</p><p> ?。?)在Keil中編寫程序</p><p>  (4)將程序下載到單片機(jī)中,進(jìn)行測(cè)試和調(diào)試。</p><p><b>  2 背景</b></p><p>  2.1 選題背景</p><p> 

11、 我國(guó)在70年代開始出現(xiàn)出租車,但那時(shí)的計(jì)費(fèi)系統(tǒng)大都是國(guó)外進(jìn)口,不但不準(zhǔn)確,而且價(jià)格還十分昂貴。隨著改革開放日益深入,出租車行業(yè)的發(fā)展勢(shì)頭已經(jīng)十分突出,國(guó)內(nèi)各機(jī)械廠家紛紛推出國(guó)產(chǎn)計(jì)價(jià)器。出租車計(jì)價(jià)器的功能從剛開始的只顯示路程(需要司機(jī)自己定價(jià),計(jì)算后四舍五入),到能夠自主計(jì)費(fèi)。隨著城市旅游業(yè)的發(fā)展,出租車行業(yè)已成為城市的窗口,象征著一個(gè)城市的文明程度?,F(xiàn)在各大中城市出租車行業(yè)都已經(jīng)普及自動(dòng)計(jì)價(jià)器,所以計(jì)價(jià)器技術(shù)的發(fā)展已成定局。隨著城市建

12、設(shè)日益加快,象征著城市面貌的出租車行業(yè)也將加速發(fā)展,而計(jì)價(jià)器的普及也是毫無疑問,所以未來汽車計(jì)價(jià)器的市場(chǎng)十分有潛力。</p><p>  2.2 選題目的及意義</p><p>  出租車時(shí)城市交通的重要組成部分,行業(yè)健康和發(fā)展也獲得越來越多的關(guān)注。出租車計(jì)價(jià)器是乘客與司機(jī)雙方的交易準(zhǔn)則,它是出租車行業(yè)發(fā)展的重要標(biāo)志,是出租車中最重要的工具。它關(guān)系著交易雙方的利益。具有良好性能的計(jì)價(jià)器無

13、論是對(duì)廣大出租車司機(jī)朋友還是乘客來說都是很必要的。因此,出租車計(jì)價(jià)器的研究的研究也是十分有應(yīng)用價(jià)值的。</p><p><b>  3 設(shè)計(jì)要求</b></p><p>  基于單片機(jī)出租車模擬計(jì)價(jià)器,采用at24c02存儲(chǔ)芯片+LCD1602液晶顯示等設(shè)計(jì)而成。用24c02來存儲(chǔ)單價(jià),通過按鍵來模擬增加里程,模擬出租車向前開。通過液晶顯示器顯示當(dāng)前的行駛狀態(tài)、行駛

14、公里、行駛時(shí)間時(shí)間(時(shí)、分、秒)、費(fèi)用、單價(jià)、等信息??梢栽O(shè)置每公里單價(jià),以及夜間單價(jià)和白天單價(jià)的不同模式,設(shè)置后掉電無需重新設(shè)置,設(shè)置有等待/繼續(xù)計(jì)時(shí)模式。計(jì)費(fèi)分行走的里程*單價(jià)+等待的時(shí)間*價(jià)格。</p><p><b>  3.1 系統(tǒng)功能</b></p><p>  k1:開啟顯示屏,模式選擇。模式一:無人狀態(tài)下,顯示時(shí)間和單價(jià);模式二:等待時(shí)間顯示,模式三

15、:顯示時(shí)分秒和年月日。</p><p><b>  k2:調(diào)整時(shí)鐘</b></p><p>  k3:在模式二中表示等待時(shí)間開始和暫停;在模式三中表示調(diào)整位的自減。</p><p>  k4:在模式三中表示調(diào)整位的自加。</p><p>  k5:在模式一中表示里程自加,每按下一次表示里程加0.1K。</p>

16、<p>  k6:乘客下車后里程清零。</p><p><b>  4 課程方案論證</b></p><p><b>  4.1 方案一:</b></p><p>  采用數(shù)字電子技術(shù),利用555定時(shí)芯片構(gòu)成多諧振蕩器,或采用外圍的晶振電路作為時(shí)鐘脈沖信號(hào),采用計(jì)數(shù)芯片對(duì)脈沖盡心脈沖的計(jì)數(shù)和分頻,最后通過

17、譯碼電路對(duì)數(shù)據(jù)進(jìn)行譯碼,將譯碼所得的數(shù)據(jù)送給數(shù)碼管顯示,一下是該方案的流程框圖,方案一如圖4.1所示:</p><p><b>  圖4.1方案一</b></p><p><b>  4.2 方案二</b></p><p>  采用EDA技術(shù),根據(jù)層次化設(shè)計(jì)理論,該設(shè)計(jì)問題自頂向下可分為分頻模塊,控制模塊 計(jì)量模塊、譯碼

18、和動(dòng)態(tài)掃描顯示模塊,其系統(tǒng)框圖如圖4.2所示:</p><p><b>  圖4.2方案二</b></p><p><b>  4.3 方案三</b></p><p>  采用MCU技術(shù),通過單片機(jī)作為主控器,利用1602字符液晶作為顯示電路,采用外部晶振作為時(shí)鐘脈沖,通過按鍵可以方便調(diào)節(jié),一下是方案三的系統(tǒng)流程圖,本方

19、案主要是必須對(duì)于數(shù)字電路比較熟悉,成本又高。方案圖如圖4.3所示:</p><p><b>  圖4.3方案三</b></p><p><b>  圖4.3方案三</b></p><p><b>  4.4 方案選擇</b></p><p>  通過各個(gè)方案的比較本次采用方案

20、三,不但控制簡(jiǎn)單,而且成本低廉,設(shè)計(jì)電路簡(jiǎn)單。</p><p><b>  5 硬件電路設(shè)計(jì)</b></p><p><b>  5.1 振蕩電路</b></p><p>  單片機(jī)內(nèi)部有一個(gè)高增益、反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。通過這兩個(gè)引腳在芯片外并接石英晶體振蕩器和兩只電容(

21、電容和一般取30pF)。這樣就構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。 </p><p>  振蕩電路脈沖經(jīng)過二分頻后作為系統(tǒng)的時(shí)鐘信號(hào),再在二分頻的基礎(chǔ)上三分頻產(chǎn)生ALE信號(hào),此時(shí)得到的信號(hào)時(shí)機(jī)器周期信號(hào)。振蕩電路如圖5.1所示:</p><p><b>  圖5.1振蕩電路</b></p><p>

22、;  5.2 復(fù)位電路設(shè)計(jì) </p><p>  復(fù)位操作有兩種基本形式:一種是上電復(fù)位,另一種是按鍵復(fù)位。按鍵復(fù)位具有上電復(fù)位功能外,若要復(fù)位,只要按圖中的RESET鍵,電源VCC經(jīng)電阻R1、R2分壓,在RESET端產(chǎn)生一個(gè)復(fù)位高電平。上電復(fù)位電路要求接通電源后,通過外部電容充電來實(shí)現(xiàn)單片機(jī)自動(dòng)復(fù)位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平

23、只要能保持足夠的時(shí)間(2個(gè)機(jī)器周期),單片機(jī)就可以進(jìn)行復(fù)位操作。按鍵復(fù)位電路圖如圖2.2所示。</p><p><b>  圖5.2復(fù)位電路</b></p><p>  5.3 鍵盤接口電路 </p><

24、p> ?。?)獨(dú)立式鍵盤:獨(dú)立式鍵盤中,每個(gè)按鍵占用一根I/O口線,每個(gè)按鍵電路相對(duì)獨(dú)立。I/O口通過按鍵與地相連,I/O口有上拉電阻,無鍵按下時(shí),引腳端為高電平,有鍵按下時(shí),引腳電平被拉低。I/O口內(nèi)部有上拉電阻時(shí),外部可不接上拉電阻。鍵盤接口電路如圖2.3所示:</p><p>  圖5.3鍵盤接口電路</p><p><b>  5.4 顯示電路</b>

25、</p><p>  5.4.1 1602LCD的基本參數(shù)及引腳功能</p><p>  1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無差別,兩者尺寸差別如圖10所示。</p><p>  圖10 LM016L結(jié)構(gòu)圖</p><p>  LCD1602主要技術(shù)參數(shù):&#

26、160;</p><p>  容量:16×2個(gè)字符</p><p>  芯片工作電壓:4.5—5.5V</p><p>  工作電流:2.0mA(5.0V)</p><p>  模塊最佳工作電壓:5.0V</p><p>  字符尺寸:2.95×4.35(W×H)mm</p>

27、<p><b>  引腳功能說明:</b></p><p>  1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表1所示:</p><p><b>  表1引腳接口說明表</b></p><p>  第1腳:VSS為地電源。</p><p>  第2腳:V

28、DD接5V正電源。</p><p>  第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對(duì)比度。</p><p>  第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。</p><p>  第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行

29、寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。</p><p>  第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。</p><p>  第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。</p><p>  第15腳:背光源正極。</p>

30、;<p>  第16腳:背光源負(fù)極。 </p><p>  5.4.2 顯示模塊采用1602液晶顯示接口電路</p><p><b>  圖5.4顯示電路 </b></p><p>  5.5 單片機(jī)各引腳功能說明</p><p>  下面對(duì)STC89C52各引腳的功能進(jìn)行較為詳細(xì)的介紹:</p&

31、gt;<p>  1)電源引腳Vcc和Vss</p><p>  Vcc(40腳):電源端為+5V Vss(20腳):接地端。 </p><p>  2)時(shí)鐘電路引腳XTAL1和XTAL2</p><p>  XTAL2(18腳):接外部晶體和微調(diào)電容的一端。在單片機(jī)內(nèi)部它是振蕩電路反向放大器的輸出

32、端,振蕩電路的頻率就是晶體固有頻率。若需采用外部時(shí)針電路時(shí),該引腳輸入外時(shí)鐘脈沖。要檢查89C52的振蕩電路是否正常工作,可用示波器查看XTAL2端是否有脈沖信號(hào)輸出。</p><p>  XTAL1(19腳):接外部晶體和微調(diào)電容的另一端。在片內(nèi),它是振蕩電路反向放大器的輸入端。在采用外部時(shí)鐘時(shí),該引腳必須接地。 </p><p>  3)控制信號(hào)腳 RST ALE PSEN 和EA

33、。</p><p>  RST(9腳):RST是復(fù)位信號(hào)輸入端,高電平有效。在此輸入端保持兩個(gè)機(jī)器周期(24個(gè)時(shí)鐘振蕩周期)的高電平時(shí),就可以完成復(fù)位操作。</p><p>  ALE/PROG(30引腳):地址鎖存允許信號(hào)端。當(dāng)STC89C52上電正常工作后,ALE引腳不斷向外輸出正脈沖信號(hào)。此頻率為振蕩器頻率fosc的1/6,當(dāng)CPU訪問片外存儲(chǔ)器時(shí),ALE輸出信號(hào)作為鎖存低8位地址的

34、控制信號(hào)。在CPU訪問片外數(shù)據(jù)存儲(chǔ)時(shí),每取值一次(一個(gè)機(jī)器周期)會(huì)丟失一個(gè)脈沖。平時(shí)不訪問片外存儲(chǔ)時(shí),ALE端也以1/6的振蕩頻率固定輸出正脈沖,因而ALE信號(hào)可以用作對(duì)外輸出時(shí)鐘或定時(shí)信號(hào)。如果你想看一下STC89C52芯片的好壞,可用示波器查看ALE端是否有脈沖信號(hào)輸出,如有脈沖信號(hào)輸出,則STC89C52基本上是好的。ALE的負(fù)載驅(qū)動(dòng)能力為8個(gè)LS型TTL(低功耗高速TTL)。</p><p>  PSEN

35、(29腳);程序存儲(chǔ)允許輸出信號(hào)引腳,在訪問片外程序存儲(chǔ)器時(shí),此端定時(shí)輸出負(fù)脈沖作為讀片外存儲(chǔ)器的選通信號(hào)。此引腳接ERROM的OE端。PSEN端有效,即允許讀出ERROM/ROM中的指令碼。CPU在從外部ERROM/ROM取指令期間,每個(gè)周期PSEN兩次有效。不過,在訪問片外RAM時(shí),要少產(chǎn)生兩次PSEN負(fù)脈沖信號(hào)。要檢查一個(gè)STC89C52小系統(tǒng)上電后CPU能否正常到ERROM/ROM中讀取指令碼,也可用于示波器看PSEN端有無脈沖

36、輸出。如有,說明基本上工作正常。</p><p>  EA/VPP(31腳):外部程序存儲(chǔ)器地址允許輸入端/固化編程電壓輸入端。當(dāng)EA引腳接高電平時(shí),CPU只訪問片內(nèi)ERROM/ROM并執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令。但在PC(程序計(jì)數(shù)器)的值超過OFFFH(對(duì)8751/8051為4k)時(shí),將自動(dòng)轉(zhuǎn)向執(zhí)行片外存儲(chǔ)器的程序。當(dāng)出入信號(hào)EA引腳接低電平(接地)時(shí),CPU只訪問外部ERROM/ROM并執(zhí)行外部程序存儲(chǔ)器中的

37、指令,而不管是否有片內(nèi)程序存儲(chǔ)器。對(duì)于無芯片內(nèi)的ROM的8031或8032,須外擴(kuò)ERROM,此時(shí)必須將EA引腳接地。如果使用有片內(nèi)ROM的STC89C52,外擴(kuò)ERROM也是可以的,但也要使EA接地。</p><p>  4)I/O(輸入/輸出端口,P0,P1,P2,P3)</p><p>  P0口:P0口是一個(gè)漏極開路的8位準(zhǔn)雙向I/O端口。</p><p>

38、  P1口:8位準(zhǔn)雙向I/O端口。</p><p>  P2口:即可以做地址總線輸出地址高8位,也可以做普通I/O用,(此時(shí)為準(zhǔn)雙向口)。</p><p>  P3口:雙功能口,即可以做普通I/O口用(此時(shí)為準(zhǔn)向口,也可以按每位定義實(shí)現(xiàn)第二功能操作)。見表1。</p><p>  表1 P3口的第二功能表</p><p><b>

39、  6 軟件設(shè)計(jì)</b></p><p>  6.1 單片機(jī)資源使用</p><p>  在本次設(shè)計(jì)中像電路鍵盤用到了P2口,其中P2.0到P2.5口作為鍵盤的輸</p><p>  入,顯示電路用到了P1和P3口,P1口為液晶的數(shù)據(jù)口。</p><p>  6.2 單片機(jī)軟件模塊設(shè)計(jì)</p><p>

40、;  6.2.1 中斷子函數(shù)</p><p>  對(duì)于中斷程序,只要定時(shí)器計(jì)數(shù)滿就會(huì)產(chǎn)生中斷50ms中斷一次,共計(jì)20次,秒鐘加1,秒鐘計(jì)滿再分鐘加,當(dāng)分鐘加到99時(shí)全部清零。以下是中斷子函數(shù)的流程圖如圖6.1所示:</p><p>  圖3.1中斷子程序流程圖</p><p><b>  圖6.1</b></p><p&

41、gt;  6.2.2 判鍵子函數(shù)</p><p>  對(duì)于獨(dú)立式鍵盤判鍵,首先看有鍵按下不,如果有鍵按下則延時(shí)一會(huì)兒,在判斷是否真的有鍵按下,如果確實(shí)有鍵按下,在判鍵釋放,最后執(zhí)行鍵功能程序。判鍵子函數(shù)的流程框圖如圖6.2所示: </p><p>  圖6.2判鍵子程序流程圖</p><p>  6.2.3 顯示子程序</p><

42、p>  1602液晶是字符型液晶,它的內(nèi)部自帶字符庫(kù),它可以寫兩行的字符,同時(shí)每行可以寫40個(gè)字符,在寫顯示程序的時(shí)候,我們先寫命令,再設(shè)定字符顯示,最后寫數(shù)據(jù),在每寫一次命令或數(shù)據(jù)都需要判斷液晶是否忙。液晶顯示程序流程圖如圖6.3所示: </p><p>  3.3顯示子程序流程圖</p><p><b>  圖6.3</b></p><

43、;p>  6.3 總程序流程框圖</p><p>  整體程序的流程框圖如圖6.4所示:</p><p>  圖3.4整體程序的流程框圖</p><p><b>  總結(jié)</b></p><p><b>  圖6.4</b></p><p><b>  7

44、 測(cè)試</b></p><p><b>  8 結(jié)論</b></p><p>  出租車計(jì)費(fèi)器系統(tǒng)的設(shè)計(jì)已經(jīng)全部完成,能按預(yù)期的效果進(jìn)行模擬汽車啟動(dòng),停止,暫停等功能,并能夠通過LCD顯示車費(fèi)數(shù)目。本款出租車計(jì)價(jià)器包括單價(jià)輸出、單價(jià)調(diào)整、顯示當(dāng)前的系統(tǒng)時(shí)間等功能。另外,多功能出租車計(jì)價(jià)器還具有性能可靠、電路簡(jiǎn)單、成本低、實(shí)用性強(qiáng)等特點(diǎn),加上經(jīng)過優(yōu)化的程序

45、,使其有很高的智能化水平。</p><p>  幾個(gè)月來,經(jīng)過自己努力,基本上完成了設(shè)計(jì)要求的內(nèi)容,在系統(tǒng)可行性分析、原理圖設(shè)計(jì)等方面都作了許多實(shí)際工作,取得了一些成績(jī),同時(shí)也遇到了一些問題,存在一些不足。經(jīng)過這幾個(gè)月的學(xué)習(xí)和工作,我覺得自己不論是在理論知識(shí)方面還是在動(dòng)手能力方面都有了不小的進(jìn)步,自己從中受益匪淺。這次設(shè)計(jì)很好的把以前學(xué)到的理論知識(shí)應(yīng)用于實(shí)踐,使我認(rèn)識(shí)到理論知識(shí)與實(shí)踐之間有一定的差距,只有通過不斷

46、的努力學(xué)習(xí)和實(shí)踐才能很好的把理論知識(shí)應(yīng)用到實(shí)踐當(dāng)中,也只有通過不斷的實(shí)踐才能對(duì)理論知識(shí)的理解。</p><p>  通過這次設(shè)計(jì)不僅學(xué)會(huì)了如何去查找相關(guān)資料,更重要的是通過查找資料和翻閱書籍學(xué)到了不少知識(shí),擴(kuò)大了知識(shí)面,提高了知識(shí)水平。經(jīng)過單元設(shè)計(jì)和系統(tǒng)設(shè)計(jì)鞏固了以前所學(xué)的專業(yè)知識(shí),自己真正認(rèn)識(shí)到理論聯(lián)系實(shí)際的重要性,為以后的學(xué)習(xí)和工作提供了很多有價(jià)值的經(jīng)驗(yàn)。通過這次設(shè)計(jì)不僅增強(qiáng)了自己的動(dòng)腦能力和動(dòng)手能力,也提高

47、了我思考問題、分析問題、解決問題的能力,更重要的是學(xué)會(huì)用工程化的思想來解決問題。這在以前的學(xué)習(xí)過程中是不曾學(xué)到的。在短短的三個(gè)月時(shí)間內(nèi)完成設(shè)計(jì)內(nèi)容,在很大程度上得益于老師的幫助。</p><p>  這次設(shè)計(jì)是我認(rèn)真認(rèn)識(shí)到完整、嚴(yán)謹(jǐn)、科學(xué)分析問題、解決問題的思想是多么的重要,只有擁有了科學(xué)的態(tài)度才能設(shè)計(jì)出有用的產(chǎn)品。另外通過本次設(shè)計(jì),是我認(rèn)識(shí)到自己理論知識(shí)的應(yīng)用能力有很大的欠缺,需要在以后的學(xué)習(xí)中進(jìn)一步提高。&l

48、t;/p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 李廣弟,朱月秀,冷祖祁.單片機(jī)基礎(chǔ)[M].第3版.北京航空航天大學(xué)出版社,2007年1月</p><p>  [2]李華.MCS-51系列單片機(jī)實(shí)用接口技術(shù)[M].北京航空航天大學(xué)出版社,1996</p><p>  [3] 馬忠梅,張凱,馬巖,單片

49、機(jī)的C語言應(yīng)用程序設(shè)計(jì),[M],北京:北京航空航天大學(xué)出版社,2003.11;</p><p>  [4] 胡輝,單片機(jī)原理及應(yīng)用設(shè)計(jì)—21世紀(jì)高等院校規(guī)劃教材[M],水利水電出版社,2005.7;</p><p>  [5] 劉守義,單片機(jī)應(yīng)用技術(shù)[M],西安:西安電子科技大學(xué)出版社,1996.8;</p><p><b>  附錄:</b>

50、</p><p><b>  致謝</b></p><p>  本論文是在何淑珍老師的悉心指導(dǎo)下完成的,何老師的淵博學(xué)識(shí)和豐富經(jīng)驗(yàn)給我留下了深刻的印象。從何老師那里我學(xué)到的不僅是專業(yè)知識(shí)與實(shí)際問題科學(xué)解決的方法,更為重要的是勤奮和嚴(yán)謹(jǐn)治學(xué)的精神以及對(duì)學(xué)生的認(rèn)真負(fù)責(zé),老師的諄諄教誨使我受益匪淺,在此向何老師表示衷心的感謝并致以崇高的敬意!感謝家人給予我學(xué)業(yè)上和生活上的支

51、持與照顧。同時(shí)感謝給予我?guī)椭母魑焕蠋?、同學(xué)以及朋友們!</p><p>  附錄1 元件件清單</p><p><b>  表5.1元器件清單</b></p><p><b>  附錄2 原理圖</b></p><p><b>  附錄3 程序清單</b></p&

52、gt;<p>  #include <reg52.h> //調(diào)用單片機(jī)頭文件</p><p>  #define uchar unsigned char //無符號(hào)字符型 宏定義變量范圍0~255</p><p>  #define uint unsigned int //無符號(hào)整型 宏定義變量范圍0~65535</p>

53、<p>  uchar miao,fen = 0,shi;</p><p>  uchar flag_bai_hei; //白天的晚上的標(biāo)志位</p><p>  uchar value;</p><p>  uint bai_3l_price = 60; //白天3千米內(nèi)的單價(jià) 6元</p><

54、;p>  uint bai_3w_price = 18; //白天3千米外的單價(jià)/千米 1.8元</p><p>  uint bai_wait_price = 5; //白天等待時(shí)的單價(jià)/分鐘 0.5元</p><p>  uint wan_3l_price = 70; //晚上3千米內(nèi)的單價(jià)/千米 7元</p><

55、p>  uint wan_3w_price = 22; //晚上3千米外的單價(jià)/千米 2.2元</p><p>  uint wan_wait_price = 10; //晚上等待時(shí)的單價(jià)/分鐘 1元</p><p>  uint distance = 0; //行使的距離</p><p>  uint zong_jia;

56、 //總的價(jià)</p><p>  bit flag_300ms = 0;</p><p>  bit flag_1s ;</p><p>  bit flag_time_en = 0;</p><p>  #include "lcd1602.h"</p><p>  /*************

57、**********1ms延時(shí)函數(shù)*****************************/</p><p>  void delay_1ms(uint q)</p><p><b>  {</b></p><p><b>  uint i,j;</b></p><p>  for(i=0;i&l

58、t;q;i++)</p><p>  for(j=0;j<120;j++);</p><p><b>  }</b></p><p>  #include "iic.h"</p><p>  void write_iic_data()</p><p><b> 

59、 {</b></p><p>  write_24c02(0,flag_bai_hei);</p><p>  write_24c02(1,bai_3l_price % 256); //保存數(shù)據(jù)</p><p>  write_24c02(2,bai_3l_price / 256); //保存數(shù)據(jù)</p><p>  wr

60、ite_24c02(3,bai_3w_price % 256); //保存數(shù)據(jù) </p><p>  write_24c02(4,bai_3w_price / 256); //保存數(shù)據(jù) </p><p>  write_24c02(5,bai_wait_price % 256); //保存數(shù)據(jù)

61、 </p><p>  write_24c02(6,bai_wait_price / 256); //保存數(shù)據(jù) </p><p>  write_24c02(7,wan_3l_price % 256); //保存數(shù)據(jù)</p><p>  write_24c02(8,wan_3l_price / 256); //保存數(shù)據(jù)<

62、/p><p>  write_24c02(9,wan_3w_price % 256); //保存數(shù)據(jù) </p><p>  write_24c02(10,wan_3w_price / 256); //保存數(shù)據(jù) </p><p>  write_24c02(11,wan_wait_price % 256

63、); //保存數(shù)據(jù) </p><p>  write_24c02(12,wan_wait_price / 256); //保存數(shù)據(jù) </p><p><b>  }</b></p><p>  /****************自動(dòng)初始化保存的數(shù)據(jù)*******************

64、/ </p><p>  void zidong_chushifa_iic()</p><p><b>  {</b></p><p>  value = read_24c02(200);</p><p>  value = read_24c02(200);</p><p>  if(val

65、ue != 0x91)//新的單片機(jī)初始單片機(jī)內(nèi)問EEPOM</p><p><b>  {</b></p><p>  value = 0x91;</p><p>  write_iic_data();</p><p>  write_24c02(200,value); //保存數(shù)據(jù)</p>

66、<p><b>  }</b></p><p>  delay_1ms(300);</p><p><b>  }</b></p><p>  /****************讀出來保存的數(shù)據(jù)**********************/ </p><p>  void rea

67、d_iic_data()</p><p><b>  {</b></p><p>  flag_bai_hei = read_24c02(0);</p><p>  bai_3l_price = read_24c02(2);</p><p>  bai_3l_price = bai_3l_price * 256 + r

68、ead_24c02(1);</p><p>  bai_3w_price = read_24c02(4);</p><p>  bai_3w_price = bai_3w_price * 256 + read_24c02(3);</p><p>  bai_wait_price = read_24c02(6);</p><p>  bai_w

69、ait_price = bai_wait_price * 256 + read_24c02(5);</p><p>  wan_3l_price = read_24c02(8);</p><p>  wan_3l_price = wan_3l_price * 256 + read_24c02(7);</p><p>  wan_3w_price = read_24c

70、02(10);</p><p>  wan_3w_price = wan_3w_price * 256 + read_24c02(9);</p><p>  wan_wait_price = read_24c02(12);</p><p>  wan_wait_price = wan_wait_price * 256 + read_24c02(11);</p&

71、gt;<p><b>  }</b></p><p>  /****************獨(dú)立按鍵處理函數(shù)************************/ </p><p>  #define key_io P2</p><p>  uchar key_can;</p><p>  void ke

72、y()</p><p><b>  {</b></p><p>  static uchar key_new = 0,key_old = 0,key_value = 0;</p><p>  key_io |= 0x3f;</p><p>  if(key_new == 0) //按鍵松開</p>&l

73、t;p><b>  {</b></p><p>  if((key_io & 0x3f) == 0x3f)</p><p>  key_value ++;</p><p><b>  else </b></p><p>  key_value = 0;</p><p

74、>  if(key_value >= 5) //按鍵松開松手檢測(cè)</p><p><b>  {</b></p><p>  key_value = 0;</p><p>  key_new = 1;//按鍵松開后進(jìn)入等待按鍵狀態(tài)</p><p><b>  }</b></p&

75、gt;<p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  if((key_io & 0x3f) != 0x3f) //按鍵按下</p><p>  key_value

76、 ++;</p><p><b>  else </b></p><p>  key_value =0;</p><p>  if(key_value >= 5)//按鍵按下消抖</p><p><b>  {</b></p><p>  key_value = 0;

77、</p><p>  key_new = 0; //按鍵松開后進(jìn)入等待松開按鍵狀態(tài)</p><p><b>  }</b></p><p><b>  }</b></p><p>  key_can = 20;</p><p>  if((key_new == 0) &

78、amp;& (key_old == 1))</p><p><b>  {</b></p><p>  switch(key_io & 0x3f)</p><p><b>  {</b></p><p>  case 0x3e: key_can = 1; break; //得到按

79、鍵值 </p><p>  case 0x3d: key_can = 2; break; //得到按鍵值 </p><p>  case 0x3b: key_can = 3; break; //得到按鍵值 </p><p>  case 0x37: key_can = 4; break; //得到按鍵值 </p><p>  ca

80、se 0x1f: key_can = 5; break; //得到按鍵值 </p><p>  case 0x2f: key_can = 6; break; //得到按鍵值 </p><p><b>  }</b></p><p>  //write_sfm2(2,0,key_can); //按鍵按下顯示按鍵值</p>

81、;<p><b>  } </b></p><p>  key_old = key_new; </p><p><b>  }</b></p><p>  #include "menu.h"</p><p>  /*********************對(duì)

82、應(yīng)菜單內(nèi)的處理函數(shù)******************/</p><p>  void menu_dis()</p><p><b>  {</b></p><p>  if(menu_1 == 0)</p><p><b>  {</b></p><p>  if(key_

83、can == 6)</p><p><b>  {</b></p><p>  distance ++;</p><p>  write_sfm4(1,0,distance); </p><p><b>  }</b></p><p>  if(key_can == 5)

84、 //清零 從新計(jì)價(jià)</p><p><b>  {</b></p><p>  flag_time_en = 0;</p><p><b>  shi = 0;</b></p><p><b>  fen = 0;</b></p><p>&l

85、t;b>  miao = 0;</b></p><p>  zong_jia = 0;</p><p>  distance = 0;</p><p><b>  }</b></p><p>  if(key_can == 2)</p><p><b>  {</

86、b></p><p>  flag_time_en = ~flag_time_en;</p><p><b>  }</b></p><p>  if(flag_300ms == 1)</p><p><b>  {</b></p><p>  flag_300ms =

87、 0;</p><p>  if(distance <= 30)//3公里內(nèi)的價(jià)格</p><p><b>  {</b></p><p>  if(flag_bai_hei == 0)</p><p><b>  {</b></p><p>  if(fen <

88、= 3)</p><p>  zong_jia = bai_3l_price;</p><p><b>  else </b></p><p>  zong_jia = bai_3l_price + (shi * 60 + fen - 3) * bai_wait_price;</p><p><b>  }

89、</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  if(fen <= 3)</p><p>  zong_jia = wan_3l_price; </p><p><b>

90、  else </b></p><p>  zong_jia = wan_3l_price + (shi * 60 + fen - 3) * bai_wait_price;</p><p><b>  }</b></p><p>  }else //3公里外的價(jià)格</p><p><b>

91、  {</b></p><p>  if(flag_bai_hei == 0)</p><p><b>  {</b></p><p>  if(fen <= 3)</p><p>  zong_jia = bai_3l_price + bai_3w_price * (distance - 30) /

92、10 ;</p><p><b>  else </b></p><p>  zong_jia = bai_3l_price + bai_3w_price * (distance - 30) / 10 + (shi * 60 + fen - 3) * bai_wait_price;</p><p><b>  }</b>

93、</p><p><b>  else </b></p><p><b>  {</b></p><p>  if(fen <= 3)</p><p>  zong_jia = wan_3l_price + wan_3w_price * (distance - 30) / 10 ;</

94、p><p><b>  else </b></p><p>  zong_jia = wan_3l_price + wan_3w_price * (distance - 30) / 10 + (shi * 60 + fen - 3) * wan_wait_price;</p><p><b>  }</b></p&g

95、t;<p><b>  }</b></p><p>  if(flag_bai_hei == 0)</p><p>  write_sfm2_dian(2,9,bai_3w_price);</p><p><b>  else </b></p><p>  write_sfm2_di

96、an(2,9,wan_3w_price);</p><p>  write_sfm2(2,0,shi); </p><p>  write_sfm2(2,3,fen); </p><p>  write_sfm2(2,6,miao); </p><p>  write_sfm4(1,10,zong_jia); </p><

97、p>  write_sfm4(1,0,distance); </p><p>  write_zifu(1,15,0x5c);//¥</p><p>  write_zifu(2,12,0x5c);//¥</p><p><b>  }</b></p><p><b>  }</b>

98、;</p><p><b>  }</b></p><p>  /*********************顯示函數(shù)******************/</p><p>  void jishu_chashu()</p><p><b>  {</b></p><p> 

99、 if((flag_1s == 1) && (flag_time_en == 1))</p><p><b>  {</b></p><p>  flag_1s = 0;</p><p><b>  miao++;</b></p><p>  if(miao >= 60)<

100、;/p><p><b>  {</b></p><p><b>  miao = 0;</b></p><p><b>  fen ++;</b></p><p>  if(fen >= 60)</p><p><b>  {</b&g

101、t;</p><p><b>  fen = 0;</b></p><p><b>  shi++;</b></p><p>  if(shi >= 24)</p><p><b>  {</b></p><p><b>  shi =

102、0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }<

103、;/b></p><p>  /*************定時(shí)器0初始化程序***************/</p><p>  void time_init() </p><p><b>  {</b></p><p>  EA = 1; //開總中斷</p><p>  

104、TMOD = 0X01; //定時(shí)器0、工作方式1</p><p>  ET0 = 1; //開定時(shí)器0中斷 </p><p>  TR0 = 1; //允許定時(shí)器0定時(shí)</p><p><b>  }</b></p><p>  void main()</p><p><

105、;b>  {</b></p><p>  init_1602();</p><p>  init_1602_dis_csf(); </p><p>  zidong_chushifa_iic();</p><p>  read_iic_data();</p><p>  time_init();<

106、;/p><p>  init_menu();</p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  key();</b></p><p>  if(key_can < 20)</

107、p><p>  key_with();</p><p>  menu_dis();</p><p>  jishu_chashu();</p><p><b>  }</b></p><p><b>  }</b></p><p>  /********

108、*****定時(shí)器0中斷服務(wù)程序***************/</p><p>  void time0_int() interrupt 1</p><p><b>  {</b></p><p>  static uchar value;</p><p>  TH0 = 0x3c;</p><p&

109、gt;  TL0 = 0xb0; // 50ms</p><p><b>  value ++;</b></p><p>  if(value % 6 == 0)</p><p>  flag_300ms = 1;</p><p>  if(value >= 20)</p><p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論