版權(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><b> 目 錄</b></p><p><b> 摘 要2</b></p><p> ABSTRACT3</p><p> 1 課程設(shè)計(jì)任務(wù)書4</p><p> 1.1 課程設(shè)計(jì)任務(wù)
2、4</p><p> 1.2 課程設(shè)計(jì)方案4</p><p><b> 2硬件電路設(shè)計(jì)6</b></p><p> 2.1 振蕩電路6</p><p> 2.2 復(fù)位電路設(shè)計(jì)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 單片機(jī)各引腳功能說明9</p><p> 3 軟件設(shè)計(jì)11</p><p> 3.1 單片機(jī)資源使用11&
4、lt;/p><p> 3.2 單片機(jī)軟件模塊設(shè)計(jì)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> 參考文獻(xiàn)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è)計(jì)的是一個(gè)基于單片機(jī)STC89C52的出租車自動(dòng)計(jì)費(fèi)設(shè)計(jì),附有復(fù)位電路,時(shí)鐘電路,鍵盤電路等。復(fù)位電路是單片機(jī)的初始化操作,除了正常的初始化外,為擺脫困境,通過復(fù)位電路可以重新開始。時(shí)鐘電路采用12MHz的晶振,作為系統(tǒng)的時(shí)鐘源,具有較高的準(zhǔn)確性。</p><p> 在上電時(shí)
7、字符型液晶1602顯示最初的起步價(jià),里程收費(fèi),等待時(shí)間收費(fèi)三種收費(fèi),通過按鍵可以調(diào)整起步價(jià),里程收費(fèi),等待時(shí)間收費(fèi)。通過按鍵模擬出租車的運(yùn)行,暫停,停止。在1602液晶上可以顯示運(yùn)行的時(shí)間,運(yùn)行時(shí)暫停的時(shí)間,通過計(jì)算可以得出總共的費(fèi)用和總的路程。在這里主要是以STC89C52單片機(jī)為核心控制器,P1口接1602液晶顯示模塊。</p><p> 關(guān)鍵字 STC89C52;1602液晶;出租車計(jì)費(fèi)器</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è)計(jì)任務(wù)書</p><p> 1.1 課程設(shè)計(jì)任務(wù)</p><p> 基
13、于單片機(jī)出租車模擬計(jì)價(jià)器,采用at24c02存儲(chǔ)芯片+LCD1602液晶顯示等設(shè)計(jì)而成。用24c02來存儲(chǔ)單價(jià),通過按鍵來模擬增加里程,模擬出租車向前開。通過液晶顯示器顯示當(dāng)前的行駛狀態(tài)、行駛公里、行駛時(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> 1
14、.2 課程設(shè)計(jì)方案</p><p> 方案一:采用數(shù)字電子技術(shù),利用555定時(shí)芯片構(gòu)成多諧振蕩器,或采用外圍的晶振電路作為時(shí)鐘脈沖信號(hào),采用計(jì)數(shù)芯片對(duì)脈沖盡心脈沖的計(jì)數(shù)和分頻,最后通過譯碼電路對(duì)數(shù)據(jù)進(jìn)行譯碼,將譯碼所得的數(shù)據(jù)送給數(shù)碼管顯示,一下是該方案的流程框圖,方案一如圖1.1所示:</p><p><b> 圖1.1方案一</b></p>&l
15、t;p> 方案二:采用EDA技術(shù),根據(jù)層次化設(shè)計(jì)理論,該設(shè)計(jì)問題自頂向下可分為分頻模塊,控制模塊 計(jì)量模塊、譯碼和動(dòng)態(tài)掃描顯示模塊,其系統(tǒng)框圖如圖1.2所示:</p><p><b> 圖1.2方案二</b></p><p> 方案三:采用MCU技術(shù),通過單片機(jī)作為主控器,利用1602字符液晶作為顯示電路,采用外部晶振作為時(shí)鐘脈沖,通過按鍵可以方便調(diào)節(jié),一
16、下是方案三的系統(tǒng)流程圖,本方案主要是必須對(duì)于數(shù)字電路比較熟悉,成本又高。方案圖如圖1.3所示:</p><p><b> 圖1.3方案三</b></p><p> 方案總結(jié):通過各個(gè)方案的比較本次采用方案三,不但控制簡(jiǎn)單,而且成本低廉,設(shè)計(jì)電路簡(jiǎn)單。</p><p><b> 2硬件電路設(shè)計(jì)</b></p>
17、;<p><b> 2.1 振蕩電路</b></p><p> 單片機(jī)內(nèi)部有一個(gè)高增益、反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。通過這兩個(gè)引腳在芯片外并接石英晶體振蕩器和兩只電容(電容和一般取20pF)。這樣就構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。 振蕩電路脈沖經(jīng)過二分頻后作為系統(tǒng)的時(shí)鐘信號(hào),再在二
18、分頻的基礎(chǔ)上三分頻產(chǎn)生ALE信號(hào),此時(shí)得到的信號(hào)時(shí)機(jī)器周期信號(hào)。振蕩電路如圖2.1所示:</p><p><b> 圖2.1振蕩電路</b></p><p> 2.2 復(fù)位電路設(shè)計(jì) </p><p> 復(fù)位操作有兩種基本形式:一種是上電復(fù)位,另一種是按鍵復(fù)位。按鍵復(fù)位具有上電復(fù)位功能外,若要復(fù)位,只要按圖中的RESET鍵,電源VCC經(jīng)電
19、阻R1、R2分壓,在RESET端產(chǎn)生一個(gè)復(fù)位高電平。上電復(fù)位電路要求接通電源后,通過外部電容充電來實(shí)現(xiàn)單片機(jī)自動(dòng)復(fù)位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平只要能保持足夠的時(shí)間(2個(gè)機(jī)器周期),單片機(jī)就可以進(jìn)行復(fù)位操作。按鍵復(fù)位電路圖如圖2.2所示。</p><p><b> 圖2.2復(fù)位電路</b></p>
20、;<p> 2.3 鍵盤接口電路 </p><p> 獨(dú)立式鍵盤:獨(dú)立式鍵盤中,每個(gè)按鍵占用一根I/O口線,每個(gè)按鍵電路相對(duì)獨(dú)立。I/O口通過按鍵與地相連,I/O口有上拉電阻,無鍵按下時(shí),引腳端為高電平,有鍵按下時(shí),引腳電平被拉低。I/O口內(nèi)部有上拉電
21、阻時(shí),外部可不接上拉電阻。鍵盤接口電路如圖2.3所示:</p><p> 圖2.3鍵盤接口電路</p><p><b> 2.4 顯示電路</b></p><p> 2.4.1 1602LCD的基本參數(shù)及引腳功能</p><p> 1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光
22、的比不帶背光的厚,是否帶背光在應(yīng)用中并無差別,兩者尺寸差別如圖10所示。</p><p> 圖10 LM016L結(jié)構(gòu)圖</p><p> LCD1602主要技術(shù)參數(shù): </p><p> 容量:16×2個(gè)字符</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采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表1所示:<
24、;/p><p><b> 表1引腳接口說明表</b></p><p> 第1腳:VSS為地電源。</p><p> 第2腳:VDD接5V正電源。</p><p> 第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對(duì)比度。&l
25、t;/p><p> 第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。</p><p> 第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(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端為使能端,
26、當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。</p><p> 第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。</p><p> 第15腳:背光源正極。</p><p> 第16腳:背光源負(fù)極。 </p><p> 2.4.2 顯示模塊采用1602液晶顯示接口電路</p><p><b> 圖2.
27、4顯示電路 </b></p><p> 2.5 單片機(jī)各引腳功能說明</p><p> 下面對(duì)STC89C52各引腳的功能進(jìn)行較為詳細(xì)的介紹:</p><p> 1)電源引腳Vcc和Vss</p><p> Vcc(40腳):電源端為+5V Vss(20腳):接地端。
28、 </p><p> 2)時(shí)鐘電路引腳XTAL1和XTAL2</p><p> XTAL2(18腳):接外部晶體和微調(diào)電容的一端。在單片機(jī)內(nèi)部它是振蕩電路反向放大器的輸出端,振蕩電路的頻率就是晶體固有頻率。若需采用外部時(shí)針電路時(shí),該引腳輸入外時(shí)鐘脈沖。要檢查89C52的振蕩電路是否正常工作,可用示波器查看XTAL2端是否有脈沖信號(hào)輸出。</p><p> XT
29、AL1(19腳):接外部晶體和微調(diào)電容的另一端。在片內(nèi),它是振蕩電路反向放大器的輸入端。在采用外部時(shí)鐘時(shí),該引腳必須接地。 </p><p> 3)控制信號(hào)腳 RST ALE PSEN 和EA。</p><p> RST(9腳):RST是復(fù)位信號(hào)輸入端,高電平有效。在此輸入端保持兩個(gè)機(jī)器周期(24個(gè)時(shí)鐘振蕩周期)的高電平時(shí),就可以完成復(fù)位操作。</p><p&g
30、t; ALE/PROG(30引腳):地址鎖存允許信號(hào)端。當(dāng)STC89C52上電正常工作后,ALE引腳不斷向外輸出正脈沖信號(hào)。此頻率為振蕩器頻率fosc的1/6,當(dāng)CPU訪問片外存儲(chǔ)器時(shí),ALE輸出信號(hào)作為鎖存低8位地址的控制信號(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)。如果你想看一下STC89C
31、52芯片的好壞,可用示波器查看ALE端是否有脈沖信號(hào)輸出,如有脈沖信號(hào)輸出,則STC89C52基本上是好的。ALE的負(fù)載驅(qū)動(dòng)能力為8個(gè)LS型TTL(低功耗高速TTL)。</p><p> PSEN(29腳);程序存儲(chǔ)允許輸出信號(hào)引腳,在訪問片外程序存儲(chǔ)器時(shí),此端定時(shí)輸出負(fù)脈沖作為讀片外存儲(chǔ)器的選通信號(hào)。此引腳接ERROM的OE端。PSEN端有效,即允許讀出ERROM/ROM中的指令碼。CPU在從外部ERROM/
32、ROM取指令期間,每個(gè)周期PSEN兩次有效。不過,在訪問片外RAM時(shí),要少產(chǎn)生兩次PSEN負(fù)脈沖信號(hào)。要檢查一個(gè)STC89C52小系統(tǒng)上電后CPU能否正常到ERROM/ROM中讀取指令碼,也可用于示波器看PSEN端有無脈沖輸出。如有,說明基本上工作正常。</p><p> EA/VPP(31腳):外部程序存儲(chǔ)器地址允許輸入端/固化編程電壓輸入端。當(dāng)EA引腳接高電平時(shí),CPU只訪問片內(nèi)ERROM/ROM并執(zhí)行內(nèi)部
33、程序存儲(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ǔ)器中的指令,而不管是否有片內(nèi)程序存儲(chǔ)器。對(duì)于無芯片內(nèi)的ROM的8031或8032,須外擴(kuò)ERROM,此時(shí)必須將EA引腳接地。如果使用有片內(nèi)ROM的STC89C52,外擴(kuò)ERROM也是可以的,但也要使EA接地。</p&g
34、t;<p> 4)I/O(輸入/輸出端口,P0,P1,P2,P3)</p><p> P0口:P0口是一個(gè)漏極開路的8位準(zhǔn)雙向I/O端口。</p><p> P1口:8位準(zhǔn)雙向I/O端口。</p><p> P2口:即可以做地址總線輸出地址高8位,也可以做普通I/O用,(此時(shí)為準(zhǔn)雙向口)。</p><p> P3口:雙
35、功能口,即可以做普通I/O口用(此時(shí)為準(zhǔn)向口,也可以按每位定義實(shí)現(xiàn)第二功能操作)。見表1。</p><p> 表1 P3口的第二功能表</p><p><b> 3 軟件設(shè)計(jì)</b></p><p> 3.1 單片機(jī)資源使用</p><p> 在本次設(shè)計(jì)中像電路鍵盤用到了P2口,其中P2.0到P2.5口作為
36、鍵盤的輸</p><p> 入,顯示電路用到了P1和P3口,P1口為液晶的數(shù)據(jù)口。</p><p> 3.2 單片機(jī)軟件模塊設(shè)計(jì)</p><p> 3.2.1 中斷子函數(shù)</p><p> 對(duì)于中斷程序,只要定時(shí)器計(jì)數(shù)滿就會(huì)產(chǎn)生中斷50ms中斷一次,共計(jì)20次,秒鐘加1,秒鐘計(jì)滿再分鐘加,當(dāng)分鐘加到99時(shí)全部清零。以下是中斷子函數(shù)
37、的流程圖如圖3.1所示:</p><p> 圖3.1中斷子程序流程圖</p><p> 3.2.2 判鍵子函數(shù)</p><p> 對(duì)于獨(dú)立式鍵盤判鍵,首先看有鍵按下不,如果有鍵按下則延時(shí)一會(huì)兒,在判斷是否真的有鍵按下,如果確實(shí)有鍵按下,在判鍵釋放,最后執(zhí)行鍵功能程序。判鍵子函數(shù)的流程框圖如圖3.2所示: </p><p>
38、 圖3.2判鍵子程序流程圖</p><p> 3.2.3 顯示子程序</p><p> 1602液晶是字符型液晶,它的內(nèi)部自帶字符庫(kù),它可以寫兩行的字符,同時(shí)每行可以寫40個(gè)字符,在寫顯示程序的時(shí)候,我們先寫命令,再設(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> 出租車計(jì)費(fèi)器系統(tǒng)的設(shè)計(jì)已經(jīng)全部完成,能按預(yù)期的效果進(jìn)行模擬汽車啟動(dòng),停止,暫
40、停等功能,并能夠通過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)化的程序,使其有很高的智能化水平。</p><p> 幾個(gè)月來,經(jīng)過自己努力,基本上完成了設(shè)計(jì)要求的內(nèi)容,在系統(tǒng)可行性分析、原理圖設(shè)計(jì)等方面都作了許多實(shí)際工作,取得了一些成績(jī),同時(shí)也遇到了一些問題,存在一些不足。經(jīng)過這幾個(gè)月
41、的學(xué)習(xí)和工作,我覺得自己不論是在理論知識(shí)方面還是在動(dòng)手能力方面都有了不小的進(jìn)步,自己從中受益匪淺。這次設(shè)計(jì)很好的把以前學(xué)到的理論知識(shí)應(yīng)用于實(shí)踐,使我認(rèn)識(shí)到理論知識(shí)與實(shí)踐之間有一定的差距,只有通過不斷的努力學(xué)習(xí)和實(shí)踐才能很好的把理論知識(shí)應(yīng)用到實(shí)踐當(dāng)中,也只有通過不斷的實(shí)踐才能對(duì)理論知識(shí)的理解。</p><p> 通過這次設(shè)計(jì)不僅學(xué)會(huì)了如何去查找相關(guān)資料,更重要的是通過查找資料和翻閱書籍學(xué)到了不少知識(shí),擴(kuò)大了知識(shí)面
42、,提高了知識(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)手能力,也提高了我思考問題、分析問題、解決問題的能力,更重要的是學(xué)會(huì)用工程化的思想來解決問題。這在以前的學(xué)習(xí)過程中是不曾學(xué)到的。在短短的三個(gè)月時(shí)間內(nèi)完成設(shè)計(jì)內(nèi)容,在很大程度上得益于老師的幫助。</p><p> 這次設(shè)計(jì)是我認(rèn)真認(rèn)
43、識(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)一步提高。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 李廣弟,朱月秀,冷祖祁.單片機(jī)基礎(chǔ)[M].第3版.北京航空航天大學(xué)出版社,2007年1月</p
44、><p> [2]李華.MCS-51系列單片機(jī)實(shí)用接口技術(shù)[M].北京航空航天大學(xué)出版社,1996</p><p> [3] 馬忠梅,張凱,馬巖,單片機(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>
45、<p> [5] 劉守義,單片機(jī)應(yīng)用技術(shù)[M],西安:西安電子科技大學(xué)出版社,1996.8;</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ù)
46、責(zé),老師的諄諄教誨使我受益匪淺,在此向何老師表示衷心的感謝并致以崇高的敬意!感謝家人給予我學(xué)業(yè)上和生活上的支持與照顧。同時(shí)感謝給予我?guī)椭母魑焕蠋?、同學(xué)以及朋友們!</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)用單片機(jī)頭文件</p><p> #define uchar unsigned char //無符號(hào)字符型 宏定義變量范圍0~255</p><p> #define u
48、int unsigned int //無符號(hào)整型 宏定義變量范圍0~65535</p><p> uchar miao,fen = 0,shi;</p><p> uchar flag_bai_hei; //白天的晚上的標(biāo)志位</p><p> uchar value;</p><p> uint bai_3l_
49、price = 60; //白天3千米內(nèi)的單價(jià) 6元</p><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
50、_price = 70; //晚上3千米內(nèi)的單價(jià)/千米 7元</p><p> uint wan_3w_price = 22; //晚上3千米外的單價(jià)/千米 2.2元</p><p> uint wan_wait_price = 10; //晚上等待時(shí)的單價(jià)/分鐘 1元</p><p> uint distance
51、 = 0; //行使的距離</p><p> uint zong_jia; //總的價(jià)</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í)函數(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> /****************自動(dòng)初始化保存的數(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)//新的單片機(jī)初始單片機(jī)內(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> /****************獨(dú)立按鍵處理函數(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) //按鍵松開松手檢測(cè)</p><p><b> {</b></p><p> key_value = 0;</p><p> key_new = 1;//按鍵松開后進(jìn)入等待
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; //按鍵松開后進(jìn)入等待松開按鍵狀態(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> /*********************對(duì)應(yīng)菜單內(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) //清零 從新計(jì)價(jià)</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)的價(jià)格</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公里外的價(jià)格</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> /*************定時(shí)器0初始化程序***************/</p><p> void time_init() </p><p><b> {</b></p>
99、<p> EA = 1; //開總中斷</p><p> TMOD = 0X01; //定時(shí)器0、工作方式1</p><p> ET0 = 1; //開定時(shí)器0中斷 </p><p> TR0 = 1; //允許定時(shí)器0定時(shí)</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> /*************定時(shí)器0中斷服務(wù)程序***************/</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等.壓縮文件請(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機(jī)的出租車計(jì)費(fèi)器的畢業(yè)設(shè)計(jì)
- 基于單片機(jī)出租車計(jì)費(fèi)器的設(shè)計(jì)
- 基于單片機(jī)的出租車計(jì)費(fèi)器的畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的出租車計(jì)費(fèi)器的設(shè)計(jì)
- 基于單片機(jī)的出租車計(jì)費(fèi)器的畢業(yè)設(shè)計(jì) (2)
- 基于單片機(jī)的出租車計(jì)費(fèi)器的畢業(yè)設(shè)計(jì) (3)
- 基于單片機(jī)的出租車計(jì)費(fèi)器的設(shè)計(jì)
- 單片機(jī)出租車計(jì)費(fèi)器畢業(yè)論文
- 單片機(jī)課程設(shè)計(jì)——出租車計(jì)費(fèi)器
- 畢業(yè)設(shè)計(jì)----基于pic單片機(jī)的出租車計(jì)費(fèi)系統(tǒng)
- 畢業(yè)設(shè)計(jì)----基于pic單片機(jī)的出租車計(jì)費(fèi)系統(tǒng)
- 畢業(yè)設(shè)計(jì)----基于pld設(shè)計(jì)的出租車計(jì)費(fèi)器系統(tǒng)
- 基于plc單片機(jī)的出租車計(jì)費(fèi)系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的出租車自動(dòng)計(jì)費(fèi)設(shè)計(jì)
- 基于fpga的出租車計(jì)費(fèi)器設(shè)計(jì)
- 基于vhdl的出租車計(jì)費(fèi)器設(shè)計(jì)
- 基于pic單片機(jī)的出租車計(jì)費(fèi)系統(tǒng)----畢業(yè)設(shè)計(jì)論文
- eda出租車計(jì)費(fèi)器
- 出租車計(jì)費(fèi)器設(shè)計(jì)畢業(yè)論文
- 基于vhdl語言的出租車計(jì)費(fèi)器設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論