![](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/13/14/188ee7cb-4d39-4796-a72a-3bfcdbf9f056/188ee7cb-4d39-4796-a72a-3bfcdbf9f056pic.jpg)
![基于單片機的出租車計費器的畢業(yè)設(shè)計 (3)_第1頁](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/13/14/188ee7cb-4d39-4796-a72a-3bfcdbf9f056/188ee7cb-4d39-4796-a72a-3bfcdbf9f0561.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 基于單片機出租車計費器的設(shè)計</p><p><b> 目 錄</b></p><p><b> 摘 要2</b></p><p> ABSTRACT3</p><p> 1 課程設(shè)計任務書4</p><p> 1.1 課程設(shè)計任務
2、4</p><p> 1.2 課程設(shè)計方案4</p><p><b> 2硬件電路設(shè)計6</b></p><p> 2.1 振蕩電路6</p><p> 2.2 復位電路設(shè)計6</p><p> 2.3 鍵盤接口電路7</p><p> 2.
3、4 顯示電路7</p><p> 2.4.1 1602LCD的基本參數(shù)及引腳功能7</p><p> 2.4.2 顯示模塊采用1602液晶顯示接口電路9</p><p> 2.5 單片機各引腳功能說明9</p><p> 3 軟件設(shè)計11</p><p> 3.1 單片機資源使用11&
4、lt;/p><p> 3.2 單片機軟件模塊設(shè)計12</p><p> 3.2.1 中斷子函數(shù)12</p><p> 3.2.2 判鍵子函數(shù)12</p><p> 3.2.3 顯示子程序13</p><p> 3.3 總程序流程框圖14</p><p><b>
5、; 總結(jié)15</b></p><p><b> 參考文獻16</b></p><p><b> 致謝17</b></p><p> 附錄1 元件件清單18</p><p> 附錄2 原理圖19</p><p> 附錄3 程序清單20&
6、lt;/p><p><b> 摘 要</b></p><p> 本設(shè)計的是一個基于單片機STC89C52的出租車自動計費設(shè)計,附有復位電路,時鐘電路,鍵盤電路等。復位電路是單片機的初始化操作,除了正常的初始化外,為擺脫困境,通過復位電路可以重新開始。時鐘電路采用12MHz的晶振,作為系統(tǒng)的時鐘源,具有較高的準確性。</p><p> 在上電時
7、字符型液晶1602顯示最初的起步價,里程收費,等待時間收費三種收費,通過按鍵可以調(diào)整起步價,里程收費,等待時間收費。通過按鍵模擬出租車的運行,暫停,停止。在1602液晶上可以顯示運行的時間,運行時暫停的時間,通過計算可以得出總共的費用和總的路程。在這里主要是以STC89C52單片機為核心控制器,P1口接1602液晶顯示模塊。</p><p> 關(guān)鍵字 STC89C52;1602液晶;出租車計費器</p&
8、gt;<p><b> ABSTRACT</b></p><p> The design is based on a monolithic integrated circuit STC89C52 taxi billing design, with reset circuit, clocking circuit, keyboard circuit. Reset circuit
9、 is initialized, besides the normal operation of the initial dilemma, as a foreigner, through the reset circuit can start again. 12MHz adopts the clock circuit, as a system of crystal oscillator, higher clock source.<
10、/p><p> The characters in the crystal that the initial 1602, charges, fees mileage waiting time, three buttons can be adjusted by charging fees, just waiting time, mileage. Through the simulation of the taxi,
11、buttons, stop. Suspension In the liquid crystal display can run 1602, operation time, when suspension can be obtained by the computation of the total cost.here is mainly for the core controller, STC89C52 SCM P0 mouth aft
12、er 1602 LCD module, P1 mouth after the keys, through the keystroke.</p><p> Keyword: STC89C52;1602 LCD;Taxi devices</p><p> 1 課程設(shè)計任務書</p><p> 1.1 課程設(shè)計任務</p><p> 基
13、于單片機出租車模擬計價器,采用at24c02存儲芯片+LCD1602液晶顯示等設(shè)計而成。用24c02來存儲單價,通過按鍵來模擬增加里程,模擬出租車向前開。通過液晶顯示器顯示當前的行駛狀態(tài)、行駛公里、行駛時間時間(時、分、秒)、費用、單價、等信息??梢栽O(shè)置每公里單價,以及夜間單價和白天單價的不同模式,設(shè)置后掉電無需重新設(shè)置,設(shè)置有等待/繼續(xù)計時模式。計費分行走的里程*單價+等待的時間*價格。</p><p> 1
14、.2 課程設(shè)計方案</p><p> 方案一:采用數(shù)字電子技術(shù),利用555定時芯片構(gòu)成多諧振蕩器,或采用外圍的晶振電路作為時鐘脈沖信號,采用計數(shù)芯片對脈沖盡心脈沖的計數(shù)和分頻,最后通過譯碼電路對數(shù)據(jù)進行譯碼,將譯碼所得的數(shù)據(jù)送給數(shù)碼管顯示,一下是該方案的流程框圖,方案一如圖1.1所示:</p><p><b> 圖1.1方案一</b></p>&l
15、t;p> 方案二:采用EDA技術(shù),根據(jù)層次化設(shè)計理論,該設(shè)計問題自頂向下可分為分頻模塊,控制模塊 計量模塊、譯碼和動態(tài)掃描顯示模塊,其系統(tǒng)框圖如圖1.2所示:</p><p><b> 圖1.2方案二</b></p><p> 方案三:采用MCU技術(shù),通過單片機作為主控器,利用1602字符液晶作為顯示電路,采用外部晶振作為時鐘脈沖,通過按鍵可以方便調(diào)節(jié),一
16、下是方案三的系統(tǒng)流程圖,本方案主要是必須對于數(shù)字電路比較熟悉,成本又高。方案圖如圖1.3所示:</p><p><b> 圖1.3方案三</b></p><p> 方案總結(jié):通過各個方案的比較本次采用方案三,不但控制簡單,而且成本低廉,設(shè)計電路簡單。</p><p><b> 2硬件電路設(shè)計</b></p>
17、;<p><b> 2.1 振蕩電路</b></p><p> 單片機內(nèi)部有一個高增益、反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。通過這兩個引腳在芯片外并接石英晶體振蕩器和兩只電容(電容和一般取20pF)。這樣就構(gòu)成一個穩(wěn)定的自激振蕩器。 振蕩電路脈沖經(jīng)過二分頻后作為系統(tǒng)的時鐘信號,再在二
18、分頻的基礎(chǔ)上三分頻產(chǎn)生ALE信號,此時得到的信號時機器周期信號。振蕩電路如圖2.1所示:</p><p><b> 圖2.1振蕩電路</b></p><p> 2.2 復位電路設(shè)計 </p><p> 復位操作有兩種基本形式:一種是上電復位,另一種是按鍵復位。按鍵復位具有上電復位功能外,若要復位,只要按圖中的RESET鍵,電源VCC經(jīng)電
19、阻R1、R2分壓,在RESET端產(chǎn)生一個復位高電平。上電復位電路要求接通電源后,通過外部電容充電來實現(xiàn)單片機自動復位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平只要能保持足夠的時間(2個機器周期),單片機就可以進行復位操作。按鍵復位電路圖如圖2.2所示。</p><p><b> 圖2.2復位電路</b></p>
20、;<p> 2.3 鍵盤接口電路 </p><p> 獨立式鍵盤:獨立式鍵盤中,每個按鍵占用一根I/O口線,每個按鍵電路相對獨立。I/O口通過按鍵與地相連,I/O口有上拉電阻,無鍵按下時,引腳端為高電平,有鍵按下時,引腳電平被拉低。I/O口內(nèi)部有上拉電
21、阻時,外部可不接上拉電阻。鍵盤接口電路如圖2.3所示:</p><p> 圖2.3鍵盤接口電路</p><p><b> 2.4 顯示電路</b></p><p> 2.4.1 1602LCD的基本參數(shù)及引腳功能</p><p> 1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光
22、的比不帶背光的厚,是否帶背光在應用中并無差別,兩者尺寸差別如圖10所示。</p><p> 圖10 LM016L結(jié)構(gòu)圖</p><p> LCD1602主要技術(shù)參數(shù): </p><p> 容量:16×2個字符</p><p> 芯片工作電壓:4.5—5.5V</p><p> 工作電流:2
23、.0mA(5.0V)</p><p> 模塊最佳工作電壓:5.0V</p><p> 字符尺寸:2.95×4.35(W×H)mm</p><p><b> 引腳功能說明:</b></p><p> 1602LCD采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表1所示:<
24、;/p><p><b> 表1引腳接口說明表</b></p><p> 第1腳:VSS為地電源。</p><p> 第2腳:VDD接5V正電源。</p><p> 第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。&l
25、t;/p><p> 第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。</p><p> 第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。</p><p> 第6腳:E端為使能端,
26、當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。</p><p> 第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。</p><p> 第15腳:背光源正極。</p><p> 第16腳:背光源負極。 </p><p> 2.4.2 顯示模塊采用1602液晶顯示接口電路</p><p><b> 圖2.
27、4顯示電路 </b></p><p> 2.5 單片機各引腳功能說明</p><p> 下面對STC89C52各引腳的功能進行較為詳細的介紹:</p><p> 1)電源引腳Vcc和Vss</p><p> Vcc(40腳):電源端為+5V Vss(20腳):接地端。
28、 </p><p> 2)時鐘電路引腳XTAL1和XTAL2</p><p> XTAL2(18腳):接外部晶體和微調(diào)電容的一端。在單片機內(nèi)部它是振蕩電路反向放大器的輸出端,振蕩電路的頻率就是晶體固有頻率。若需采用外部時針電路時,該引腳輸入外時鐘脈沖。要檢查89C52的振蕩電路是否正常工作,可用示波器查看XTAL2端是否有脈沖信號輸出。</p><p> XT
29、AL1(19腳):接外部晶體和微調(diào)電容的另一端。在片內(nèi),它是振蕩電路反向放大器的輸入端。在采用外部時鐘時,該引腳必須接地。 </p><p> 3)控制信號腳 RST ALE PSEN 和EA。</p><p> RST(9腳):RST是復位信號輸入端,高電平有效。在此輸入端保持兩個機器周期(24個時鐘振蕩周期)的高電平時,就可以完成復位操作。</p><p&g
30、t; ALE/PROG(30引腳):地址鎖存允許信號端。當STC89C52上電正常工作后,ALE引腳不斷向外輸出正脈沖信號。此頻率為振蕩器頻率fosc的1/6,當CPU訪問片外存儲器時,ALE輸出信號作為鎖存低8位地址的控制信號。在CPU訪問片外數(shù)據(jù)存儲時,每取值一次(一個機器周期)會丟失一個脈沖。平時不訪問片外存儲時,ALE端也以1/6的振蕩頻率固定輸出正脈沖,因而ALE信號可以用作對外輸出時鐘或定時信號。如果你想看一下STC89C
31、52芯片的好壞,可用示波器查看ALE端是否有脈沖信號輸出,如有脈沖信號輸出,則STC89C52基本上是好的。ALE的負載驅(qū)動能力為8個LS型TTL(低功耗高速TTL)。</p><p> PSEN(29腳);程序存儲允許輸出信號引腳,在訪問片外程序存儲器時,此端定時輸出負脈沖作為讀片外存儲器的選通信號。此引腳接ERROM的OE端。PSEN端有效,即允許讀出ERROM/ROM中的指令碼。CPU在從外部ERROM/
32、ROM取指令期間,每個周期PSEN兩次有效。不過,在訪問片外RAM時,要少產(chǎn)生兩次PSEN負脈沖信號。要檢查一個STC89C52小系統(tǒng)上電后CPU能否正常到ERROM/ROM中讀取指令碼,也可用于示波器看PSEN端有無脈沖輸出。如有,說明基本上工作正常。</p><p> EA/VPP(31腳):外部程序存儲器地址允許輸入端/固化編程電壓輸入端。當EA引腳接高電平時,CPU只訪問片內(nèi)ERROM/ROM并執(zhí)行內(nèi)部
33、程序存儲器中的指令。但在PC(程序計數(shù)器)的值超過OFFFH(對8751/8051為4k)時,將自動轉(zhuǎn)向執(zhí)行片外存儲器的程序。當出入信號EA引腳接低電平(接地)時,CPU只訪問外部ERROM/ROM并執(zhí)行外部程序存儲器中的指令,而不管是否有片內(nèi)程序存儲器。對于無芯片內(nèi)的ROM的8031或8032,須外擴ERROM,此時必須將EA引腳接地。如果使用有片內(nèi)ROM的STC89C52,外擴ERROM也是可以的,但也要使EA接地。</p&g
34、t;<p> 4)I/O(輸入/輸出端口,P0,P1,P2,P3)</p><p> P0口:P0口是一個漏極開路的8位準雙向I/O端口。</p><p> P1口:8位準雙向I/O端口。</p><p> P2口:即可以做地址總線輸出地址高8位,也可以做普通I/O用,(此時為準雙向口)。</p><p> P3口:雙
35、功能口,即可以做普通I/O口用(此時為準向口,也可以按每位定義實現(xiàn)第二功能操作)。見表1。</p><p> 表1 P3口的第二功能表</p><p><b> 3 軟件設(shè)計</b></p><p> 3.1 單片機資源使用</p><p> 在本次設(shè)計中像電路鍵盤用到了P2口,其中P2.0到P2.5口作為
36、鍵盤的輸</p><p> 入,顯示電路用到了P1和P3口,P1口為液晶的數(shù)據(jù)口。</p><p> 3.2 單片機軟件模塊設(shè)計</p><p> 3.2.1 中斷子函數(shù)</p><p> 對于中斷程序,只要定時器計數(shù)滿就會產(chǎn)生中斷50ms中斷一次,共計20次,秒鐘加1,秒鐘計滿再分鐘加,當分鐘加到99時全部清零。以下是中斷子函數(shù)
37、的流程圖如圖3.1所示:</p><p> 圖3.1中斷子程序流程圖</p><p> 3.2.2 判鍵子函數(shù)</p><p> 對于獨立式鍵盤判鍵,首先看有鍵按下不,如果有鍵按下則延時一會兒,在判斷是否真的有鍵按下,如果確實有鍵按下,在判鍵釋放,最后執(zhí)行鍵功能程序。判鍵子函數(shù)的流程框圖如圖3.2所示: </p><p>
38、 圖3.2判鍵子程序流程圖</p><p> 3.2.3 顯示子程序</p><p> 1602液晶是字符型液晶,它的內(nèi)部自帶字符庫,它可以寫兩行的字符,同時每行可以寫40個字符,在寫顯示程序的時候,我們先寫命令,再設(shè)定字符顯示,最后寫數(shù)據(jù),在每寫一次命令或數(shù)據(jù)都需要判斷液晶是否忙。液晶顯示程序流程圖如圖3.3所示: </p><p> 3.3顯示子程
39、序流程圖</p><p> 3.3 總程序流程框圖</p><p> 整體程序的流程框圖如圖3.4所示:</p><p> 圖3.4整體程序的流程框圖</p><p><b> 總結(jié)</b></p><p> 出租車計費器系統(tǒng)的設(shè)計已經(jīng)全部完成,能按預期的效果進行模擬汽車啟動,停止,暫
40、停等功能,并能夠通過LCD顯示車費數(shù)目。本款出租車計價器包括單價輸出、單價調(diào)整、顯示當前的系統(tǒng)時間等功能。另外,多功能出租車計價器還具有性能可靠、電路簡單、成本低、實用性強等特點,加上經(jīng)過優(yōu)化的程序,使其有很高的智能化水平。</p><p> 幾個月來,經(jīng)過自己努力,基本上完成了設(shè)計要求的內(nèi)容,在系統(tǒng)可行性分析、原理圖設(shè)計等方面都作了許多實際工作,取得了一些成績,同時也遇到了一些問題,存在一些不足。經(jīng)過這幾個月
41、的學習和工作,我覺得自己不論是在理論知識方面還是在動手能力方面都有了不小的進步,自己從中受益匪淺。這次設(shè)計很好的把以前學到的理論知識應用于實踐,使我認識到理論知識與實踐之間有一定的差距,只有通過不斷的努力學習和實踐才能很好的把理論知識應用到實踐當中,也只有通過不斷的實踐才能對理論知識的理解。</p><p> 通過這次設(shè)計不僅學會了如何去查找相關(guān)資料,更重要的是通過查找資料和翻閱書籍學到了不少知識,擴大了知識面
42、,提高了知識水平。經(jīng)過單元設(shè)計和系統(tǒng)設(shè)計鞏固了以前所學的專業(yè)知識,自己真正認識到理論聯(lián)系實際的重要性,為以后的學習和工作提供了很多有價值的經(jīng)驗。通過這次設(shè)計不僅增強了自己的動腦能力和動手能力,也提高了我思考問題、分析問題、解決問題的能力,更重要的是學會用工程化的思想來解決問題。這在以前的學習過程中是不曾學到的。在短短的三個月時間內(nèi)完成設(shè)計內(nèi)容,在很大程度上得益于老師的幫助。</p><p> 這次設(shè)計是我認真認
43、識到完整、嚴謹、科學分析問題、解決問題的思想是多么的重要,只有擁有了科學的態(tài)度才能設(shè)計出有用的產(chǎn)品。另外通過本次設(shè)計,是我認識到自己理論知識的應用能力有很大的欠缺,需要在以后的學習中進一步提高。</p><p><b> 參考文獻</b></p><p> [1] 李廣弟,朱月秀,冷祖祁.單片機基礎(chǔ)[M].第3版.北京航空航天大學出版社,2007年1月</p
44、><p> [2]李華.MCS-51系列單片機實用接口技術(shù)[M].北京航空航天大學出版社,1996</p><p> [3] 馬忠梅,張凱,馬巖,單片機的C語言應用程序設(shè)計,[M],北京:北京航空航天大學出版社,2003.11;</p><p> [4] 胡輝,單片機原理及應用設(shè)計—21世紀高等院校規(guī)劃教材[M],水利水電出版社,2005.7;</p>
45、<p> [5] 劉守義,單片機應用技術(shù)[M],西安:西安電子科技大學出版社,1996.8;</p><p><b> 致謝</b></p><p> 本論文是在何淑珍老師的悉心指導下完成的,何老師的淵博學識和豐富經(jīng)驗給我留下了深刻的印象。從何老師那里我學到的不僅是專業(yè)知識與實際問題科學解決的方法,更為重要的是勤奮和嚴謹治學的精神以及對學生的認真負
46、責,老師的諄諄教誨使我受益匪淺,在此向何老師表示衷心的感謝并致以崇高的敬意!感謝家人給予我學業(yè)上和生活上的支持與照顧。同時感謝給予我?guī)椭母魑焕蠋?、同學以及朋友們!</p><p> 附錄1 元件件清單</p><p><b> 表5.1元器件清單</b></p><p><b> 附錄2 原理圖</b><
47、/p><p><b> 附錄3 程序清單</b></p><p> #include <reg52.h> //調(diào)用單片機頭文件</p><p> #define uchar unsigned char //無符號字符型 宏定義變量范圍0~255</p><p> #define u
48、int unsigned int //無符號整型 宏定義變量范圍0~65535</p><p> uchar miao,fen = 0,shi;</p><p> uchar flag_bai_hei; //白天的晚上的標志位</p><p> uchar value;</p><p> uint bai_3l_
49、price = 60; //白天3千米內(nèi)的單價 6元</p><p> uint bai_3w_price = 18; //白天3千米外的單價/千米 1.8元</p><p> uint bai_wait_price = 5; //白天等待時的單價/分鐘 0.5元</p><p> uint wan_3l
50、_price = 70; //晚上3千米內(nèi)的單價/千米 7元</p><p> uint wan_3w_price = 22; //晚上3千米外的單價/千米 2.2元</p><p> uint wan_wait_price = 10; //晚上等待時的單價/分鐘 1元</p><p> uint distance
51、 = 0; //行使的距離</p><p> uint zong_jia; //總的價</p><p> bit flag_300ms = 0;</p><p> bit flag_1s ;</p><p> bit flag_time_en = 0;</p><p> #include &quo
52、t;lcd1602.h"</p><p> /***********************1ms延時函數(shù)*****************************/</p><p> void delay_1ms(uint q)</p><p><b> {</b></p><p><b>
53、 uint i,j;</b></p><p> for(i=0;i<q;i++)</p><p> for(j=0;j<120;j++);</p><p><b> }</b></p><p> #include "iic.h"</p><p>
54、 void write_iic_data()</p><p><b> {</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,
55、bai_3l_price / 256); //保存數(shù)據(jù)</p><p> write_24c02(3,bai_3w_price % 256); //保存數(shù)據(jù) </p><p> write_24c02(4,bai_3w_price / 256); //保存數(shù)據(jù) </p><p> wri
56、te_24c02(5,bai_wait_price % 256); //保存數(shù)據(jù) </p><p> write_24c02(6,bai_wait_price / 256); //保存數(shù)據(jù) </p><p> write_24c02(7,wan_3l_price % 256); //保存數(shù)據(jù)</p><
57、p> write_24c02(8,wan_3l_price / 256); //保存數(shù)據(jù)</p><p> write_24c02(9,wan_3w_price % 256); //保存數(shù)據(jù) </p><p> write_24c02(10,wan_3w_price / 256); //保存數(shù)據(jù) <
58、/p><p> write_24c02(11,wan_wait_price % 256); //保存數(shù)據(jù) </p><p> write_24c02(12,wan_wait_price / 256); //保存數(shù)據(jù) </p><p><b> }</b></p><
59、;p> /****************自動初始化保存的數(shù)據(jù)*******************/ </p><p> void zidong_chushifa_iic()</p><p><b> {</b></p><p> value = read_24c02(200);</p><p>
60、 value = read_24c02(200);</p><p> if(value != 0x91)//新的單片機初始單片機內(nèi)問EEPOM</p><p><b> {</b></p><p> value = 0x91;</p><p> write_iic_data();</p>
61、<p> write_24c02(200,value); //保存數(shù)據(jù)</p><p><b> }</b></p><p> delay_1ms(300);</p><p><b> }</b></p><p> /****************讀出來保存的數(shù)據(jù)****
62、******************/ </p><p> void read_iic_data()</p><p><b> {</b></p><p> flag_bai_hei = read_24c02(0);</p><p> bai_3l_price = read_24c02(2);</p
63、><p> bai_3l_price = bai_3l_price * 256 + read_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_w
64、ait_price = read_24c02(6);</p><p> bai_wait_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_2
65、4c02(7);</p><p> wan_3w_price = read_24c02(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
66、_price = wan_wait_price * 256 + read_24c02(11);</p><p><b> }</b></p><p> /****************獨立按鍵處理函數(shù)************************/ </p><p> #define key_io P2</p>&
67、lt;p> uchar key_can;</p><p> void key()</p><p><b> {</b></p><p> static uchar key_new = 0,key_old = 0,key_value = 0;</p><p> key_io |= 0x3f;</p&g
68、t;<p> if(key_new == 0) //按鍵松開</p><p><b> {</b></p><p> if((key_io & 0x3f) == 0x3f)</p><p> key_value ++;</p><p><b> else </b>
69、</p><p> key_value = 0;</p><p> if(key_value >= 5) //按鍵松開松手檢測</p><p><b> {</b></p><p> key_value = 0;</p><p> key_new = 1;//按鍵松開后進入等待
70、按鍵狀態(tài)</p><p><b> }</b></p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><p> if((key_io &
71、0x3f) != 0x3f) //按鍵按下</p><p> key_value ++;</p><p><b> else </b></p><p> key_value =0;</p><p> if(key_value >= 5)//按鍵按下消抖</p><p><b
72、> {</b></p><p> key_value = 0;</p><p> key_new = 0; //按鍵松開后進入等待松開按鍵狀態(tài)</p><p><b> }</b></p><p><b> }</b></p><p> k
73、ey_can = 20;</p><p> if((key_new == 0) && (key_old == 1))</p><p><b> {</b></p><p> switch(key_io & 0x3f)</p><p><b> {</b></p&
74、gt;<p> case 0x3e: key_can = 1; break; //得到按鍵值 </p><p> case 0x3d: key_can = 2; break; //得到按鍵值 </p><p> case 0x3b: key_can = 3; break; //得到按鍵值 </p><p> case 0x37: k
75、ey_can = 4; break; //得到按鍵值 </p><p> case 0x1f: key_can = 5; break; //得到按鍵值 </p><p> case 0x2f: key_can = 6; break; //得到按鍵值 </p><p><b> }</b></p><p>
76、; //write_sfm2(2,0,key_can); //按鍵按下顯示按鍵值</p><p><b> } </b></p><p> key_old = key_new; </p><p><b> }</b></p><p> #include "menu
77、.h"</p><p> /*********************對應菜單內(nèi)的處理函數(shù)******************/</p><p> void menu_dis()</p><p><b> {</b></p><p> if(menu_1 == 0)</p><p&g
78、t;<b> {</b></p><p> if(key_can == 6)</p><p><b> {</b></p><p> distance ++;</p><p> write_sfm4(1,0,distance); </p><p><b>
79、; }</b></p><p> if(key_can == 5) //清零 從新計價</p><p><b> {</b></p><p> flag_time_en = 0;</p><p><b> shi = 0;</b></p><p&g
80、t;<b> fen = 0;</b></p><p><b> miao = 0;</b></p><p> zong_jia = 0;</p><p> distance = 0;</p><p><b> }</b></p><p>
81、if(key_can == 2)</p><p><b> {</b></p><p> flag_time_en = ~flag_time_en;</p><p><b> }</b></p><p> if(flag_300ms == 1)</p><p><
82、;b> {</b></p><p> flag_300ms = 0;</p><p> if(distance <= 30)//3公里內(nèi)的價格</p><p><b> {</b></p><p> if(flag_bai_hei == 0)</p><p>&l
83、t;b> {</b></p><p> if(fen <= 3)</p><p> zong_jia = bai_3l_price;</p><p><b> else </b></p><p> zong_jia = bai_3l_price + (shi * 60 + fen -
84、3) * bai_wait_price;</p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><p> if(fen <= 3)</p><p> z
85、ong_jia = wan_3l_price; </p><p><b> else </b></p><p> zong_jia = wan_3l_price + (shi * 60 + fen - 3) * bai_wait_price;</p><p><b> }</b></p><p&
86、gt; }else //3公里外的價格</p><p><b> {</b></p><p> if(flag_bai_hei == 0)</p><p><b> {</b></p><p> if(fen <= 3)</p><p> zong_
87、jia = bai_3l_price + bai_3w_price * (distance - 30) / 10 ;</p><p><b> else </b></p><p> zong_jia = bai_3l_price + bai_3w_price * (distance - 30) / 10 + (shi * 60 + fen - 3) * bai_
88、wait_price;</p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><p> if(fen <= 3)</p><p> zong_jia = wan_
89、3l_price + wan_3w_price * (distance - 30) / 10 ;</p><p><b> else </b></p><p> zong_jia = wan_3l_price + wan_3w_price * (distance - 30) / 10 + (shi * 60 + fen - 3) * wan_wait_pric
90、e;</p><p><b> }</b></p><p><b> }</b></p><p> if(flag_bai_hei == 0)</p><p> write_sfm2_dian(2,9,bai_3w_price);</p><p><b>
91、; else </b></p><p> write_sfm2_dian(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>
92、<p> write_sfm4(1,10,zong_jia); </p><p> write_sfm4(1,0,distance); </p><p> write_zifu(1,15,0x5c);//¥</p><p> write_zifu(2,12,0x5c);//¥</p><p><b>
93、 }</b></p><p><b> }</b></p><p><b> }</b></p><p> /*********************顯示函數(shù)******************/</p><p> void jishu_chashu()</p>
94、<p><b> {</b></p><p> if((flag_1s == 1) && (flag_time_en == 1))</p><p><b> {</b></p><p> flag_1s = 0;</p><p><b> miao++
95、;</b></p><p> if(miao >= 60)</p><p><b> {</b></p><p><b> miao = 0;</b></p><p><b> fen ++;</b></p><p> if(
96、fen >= 60)</p><p><b> {</b></p><p><b> fen = 0;</b></p><p><b> shi++;</b></p><p> if(shi >= 24)</p><p><b&
97、gt; {</b></p><p><b> shi = 0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><
98、b> }</b></p><p><b> }</b></p><p> /*************定時器0初始化程序***************/</p><p> void time_init() </p><p><b> {</b></p>
99、<p> EA = 1; //開總中斷</p><p> TMOD = 0X01; //定時器0、工作方式1</p><p> ET0 = 1; //開定時器0中斷 </p><p> TR0 = 1; //允許定時器0定時</p><p><b> }</b><
100、/p><p> void main()</p><p><b> {</b></p><p> init_1602();</p><p> init_1602_dis_csf(); </p><p> zidong_chushifa_iic();</p><p>
101、read_iic_data();</p><p> time_init();</p><p> init_menu();</p><p><b> while(1)</b></p><p><b> {</b></p><p><b> key();<
102、;/b></p><p> if(key_can < 20)</p><p> key_with();</p><p> menu_dis();</p><p> jishu_chashu();</p><p><b> }</b></p><p>
103、<b> }</b></p><p> /*************定時器0中斷服務程序***************/</p><p> void time0_int() interrupt 1</p><p><b> {</b></p><p> static uchar valu
104、e;</p><p> TH0 = 0x3c;</p><p> TL0 = 0xb0; // 50ms</p><p><b> value ++;</b></p><p> if(value % 6 == 0)</p><p> flag_300ms = 1;</p&g
105、t;<p> if(value >= 20)</p><p><b> {</b></p><p> flag_1s = 1;</p><p> value = 0;</p><p><b> }</b></p><p><b> }
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機的出租車計費器的畢業(yè)設(shè)計
- 基于單片機的出租車計費器的畢業(yè)設(shè)計
- 基于單片機出租車計費器的設(shè)計
- 基于單片機的出租車計費器的畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---基于單片機的出租車計費器的設(shè)計
- 基于單片機的出租車計費器的畢業(yè)設(shè)計 (2)
- 基于單片機的出租車計費器的設(shè)計
- 單片機出租車計費器畢業(yè)論文
- 單片機課程設(shè)計——出租車計費器
- 畢業(yè)設(shè)計----基于pic單片機的出租車計費系統(tǒng)
- 畢業(yè)設(shè)計----基于pic單片機的出租車計費系統(tǒng)
- 畢業(yè)設(shè)計----基于pld設(shè)計的出租車計費器系統(tǒng)
- 基于plc單片機的出租車計費系統(tǒng)設(shè)計畢業(yè)設(shè)計
- 基于單片機的出租車自動計費設(shè)計
- 基于fpga的出租車計費器設(shè)計
- 基于vhdl的出租車計費器設(shè)計
- 基于pic單片機的出租車計費系統(tǒng)----畢業(yè)設(shè)計論文
- eda出租車計費器
- 出租車計費器設(shè)計畢業(yè)論文
- 基于vhdl語言的出租車計費器設(shè)計
評論
0/150
提交評論