版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《單片機應用與仿真訓練》設計報告</p><p><b> 出</b></p><p><b> 租</b></p><p><b> 車</b></p><p><b> 計</b></p><p>
2、<b> 價</b></p><p><b> 器</b></p><p><b> 摘要</b></p><p> 隨著出租車行業(yè)的發(fā)展,出租車行業(yè)已經(jīng)是城市交通的重要組成部分,從加強行業(yè)管理以及減少與乘客的糾紛出發(fā),以單片機為核心的智能出租車計價系統(tǒng)的開發(fā)就顯得尤其重要。本設計采用89C5
3、1單片機為主控器,以霍爾傳感器測距,實現(xiàn)對出租車的多功能的計價設計。并且還添加有其他的附加設計,使司機師傅操作起來更加方便,例如,按暫停鍵,計價器可暫停計價,按查詢鍵,可顯示總等待時間等。</p><p> 關鍵詞:89C51,霍爾傳感器</p><p><b> 目錄</b></p><p><b> 一、概論3</b
4、></p><p><b> 1、前言3</b></p><p><b> 2、設計的意義3</b></p><p><b> 3、設計任務3</b></p><p> 4、設計的目的和要求4</p><p> 二、系統(tǒng)總體方案及
5、硬件設計5</p><p> 1、系統(tǒng)總體方案5</p><p> 2、霍爾傳感器檢測單元5</p><p> 3、鍵盤調整單元6</p><p><b> 三、軟件設計8</b></p><p><b> 1、系統(tǒng)主程序8</b></p>
6、<p><b> 2、中斷程序9</b></p><p> 2.1、里程計數(shù)中斷程序9</p><p> 2.2、中途等待中斷程序9</p><p> 2.3、計算程序9</p><p> 2.4、顯示程序9</p><p> 2.5、鍵盤程序10</p&
7、gt;<p> 四、Proteus軟件仿真11</p><p><b> 五、實物圖12</b></p><p> 六、程設計心得體會13</p><p><b> 參考文獻13</b></p><p> 附1:源程序代碼14</p><p>
8、; 附2:系統(tǒng)原理圖22</p><p><b> 一 概述</b></p><p><b> 1、前言</b></p><p> 計價器是出租汽車的經(jīng)營者和乘坐出租汽車的消費者之間用于公平貿(mào)易結算的工具,因而計價器計價準確與否,直接關系到經(jīng)營者和消費者的經(jīng)濟利益。依據(jù)國家有關法律、法規(guī),出租汽車計價器是列入國家
9、首批強制檢定的工作計量器具之一,也是近年來國家質量技術監(jiān)督部門強化管理的六類重點計量器具之一。在出租車是城市交通的重要組成部分,行業(yè)健康和發(fā)展也獲得越來越多的關注。汽車計價器是乘客與司機雙方的交易準則,它是出租車行業(yè)發(fā)展的重要標志,是出租車中最重要的工具。它關系著交易雙方的利益。具有良好性能的計價器無論是對廣大出租車司機朋友還是乘客來說都是很必要的。</p><p> 出租車已經(jīng)成為我國城市公共交通的重要組成部
10、分和現(xiàn)代化城市必備的基礎設施,成為人們工作、生活中補課缺少的交通工具。而出租車計價器在出租汽車服務行業(yè)中占著極為重要的地位,因為出租車必須安裝出租車計價器才能投入正常的運營。出租車計價器是一種能根據(jù)乘客乘坐汽車行駛距離和等候時間的多少進行計價,并直接顯示車費值得計量器具。計價器是出租汽車經(jīng)營者和乘坐出租汽車的消費者之間用于公平貿(mào)易結算的工具,因而計價器準確與否,直接關系到經(jīng)營者和消費者的經(jīng)濟利益。依據(jù)國家有關法律、法規(guī),出租車計價器是列
11、入國家首批強制檢定的工作計量器具之一,也是近年來國家質量技術監(jiān)督部門強化管理的的六類重點計量器具之一。</p><p><b> 2、設計的意義</b></p><p> 在出租車時城市交通的重要組成部分的大環(huán)境下,行業(yè)的健康和發(fā)展也獲得越來越多的關注。汽車計價器是乘客與司機雙方的交易準則,它是出租車行業(yè)發(fā)展的重要標志,是出租車種最重要的工具。她關系著交易雙方的利
12、益。具有良好性能的計價器無論是對廣大出租車司機朋友還是乘客來說都是很必要的。因此,汽車計價器的研究也是十分有應用價值的,尤其是對于出租車行業(yè)有著極其重要的意義。</p><p><b> 3、設計任務</b></p><p> 本設計是采用AT89C51單片機為主控器,以霍爾傳感器測距,實現(xiàn)對出租車的多功能的計價設計,輸出采用8段數(shù)碼顯示管。本電路設計的計價器不但
13、能實現(xiàn)基本的計價,而且還能根據(jù)單程,返程和起步來調節(jié)單價,并實現(xiàn)了暫停和等待時間查詢的功能。</p><p> 4、設計的目的和要求</p><p> 目的:通過單片機課程設計,熟練掌握c語言的編程方法,將理論聯(lián)系到實踐中去,提高我們的動腦和動手的能力。通過出租車計價器系統(tǒng)的設計,掌握單片機個資源的使用方法,和簡單程序的編寫,最終提高我們的邏輯抽象能力。</p><
14、p><b> 基本要求:</b></p><p> (1)能顯示里程,單位為公里,最后一位為小數(shù)位。</p><p> (2)能顯示金額數(shù),單位為元,最后一位為小數(shù)位。</p><p> (3)可設定單程價格和往返價格,單程價格為2元/公里,往返價格為1.5元/公里。</p><p> (4)車速<
15、5公里/小時的時間累積為總等待時間,每5分鐘等待時間相當于里程數(shù)增加1公里。</p><p> (5)起步公里數(shù)為3公里,價格為5元,若實際距離大于3公里,按規(guī)則3計算價格。</p><p> (6)按暫停鍵,計價器可暫停計價,按查詢鍵,可顯示總等待時間。</p><p> 二 系統(tǒng)總體方案及硬件設計</p><p><b>
16、 1、系統(tǒng)總體方案</b></p><p> 模擬計數(shù)器系統(tǒng)主要由四大模塊組成:霍爾傳感器、AT89C51單片機、獨立鍵盤。</p><p> 霍爾傳感器安裝在車輪的旁側,主要檢測汽車行進的公里數(shù),并產(chǎn)生一系列相應的脈沖輸出,脈沖送到單片機進行處理,單片機根據(jù)程序設定通過計算脈沖數(shù)換算出行駛公里數(shù),再根據(jù)價格等相關數(shù)據(jù)進行金額的計算,計算好的金額、里程都實時地顯示在數(shù)碼管
17、上。獨立鍵盤可以調節(jié)價格等相關數(shù)據(jù),按下相應的按鈕,產(chǎn)生信號交由單片機處理并實時顯示出來??傮w方案結構圖如下:</p><p> 圖2.1 系統(tǒng)總體結構框圖</p><p> 2、霍爾傳感器檢測單元</p><p> 屬于開關型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號符合TTL電平標準,可以直接接到單片機的IO 端口上,而且其最高檢測
18、頻率可達到1MHZ。</p><p> 集成霍耳開關由穩(wěn)壓器A、霍耳電勢發(fā)生器(即硅霍耳片)B、差分放大器C、施密特觸發(fā)器D和OC門輸出E五個基本部分組成。</p><p> 在輸入端輸入電壓Vcc,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍爾電勢發(fā)生器的兩端,根據(jù)霍爾效應原理,當霍爾片處在磁場中時,在垂直于磁場的方向通以電流,則與這二者相垂直的方向上將會產(chǎn)生霍爾電勢差VH輸出,該VH信號經(jīng)放大器放大后送至
19、施密特觸發(fā)器整形,使其成為方波輸送到OC門輸出。當施加的磁場達到工作點(即Bop)時,觸發(fā)器輸出高電壓(相對于地電位),使三極管導通,此時OC門輸出端輸出低電壓,三極管截止,使OC門輸出高電壓,這種狀態(tài)為關。這樣兩次電壓變換,使霍爾開關完成了一次開關動作。 霍爾傳感器原理如圖5所示。</p><p> 圖2.2 傳感器測距示意圖</p><p> 里程計算是通過安裝在車輪上
20、的霍爾傳感器檢測到的脈沖信號,送到單片機產(chǎn)生中斷,單片機再根據(jù)程序設定,計算出里程。其原理如圖2.4所示。</p><p> 本系統(tǒng)選擇了將霍爾傳感器的脈沖輸出口接到P3.3口外部中斷1作為信號的輸入端(這樣可以減少程序設計的麻煩),車輪每轉一圈(設車輪的周長是5米),霍爾開關就檢測并輸出信號,引起單片機的中斷,對脈沖計數(shù),當計數(shù)達到200次時,即1公里,單片機就控制將金額自動增加,如圖2.5(霍爾傳感器)。&
21、lt;/p><p> 圖2.3 霍爾傳感器 </p><p><b> 3、鍵盤調整單元</b></p><p> 當單價等信息需要進行修改時,就要用到鍵盤進行修改。由于調節(jié)信息不多,故采用4個獨立鍵盤即可,分別實現(xiàn)清零、切換、增大、減小和功能等作用。電路原理如圖所示。</p><p> 圖2.4
22、鍵盤調整模塊</p><p> S1:接P1.1口,實現(xiàn)路程和單價的切換。</p><p> S2:接P1.2口,實現(xiàn)單程和往返程的切換。</p><p> S3:接P1.3口,實現(xiàn)清零功能(在按下查詢總價鍵之后實現(xiàn))。</p><p> S4:接P1.4口,暫停功能。</p><p> S5:接P1.5口,
23、對等待時間進行查詢。</p><p> S6:接P1.6口,查詢總價。</p><p><b> 三 軟件設計</b></p><p><b> 1、系統(tǒng)主程序</b></p><p> 在主程序模塊中,需要完成對各參量和接口的初始化、出租車起步價和單價的初始化以及中斷、計算、循環(huán)等工作。另
24、外,在主程序模塊中還需要設置啟動/清除標志寄存器、里程寄存器和價格寄存器,并對它們進行初始化。然后,主程序將根據(jù)各標志寄存器的內(nèi)容,分別完成啟動、清除、計程和計價等不同的操作。</p><p> 3.1 主程序流程圖</p><p> 當汽車運行起來時,就啟動計價,根據(jù)里程寄存器中的內(nèi)容計算和判斷行駛里程是否已超過起步價公里數(shù)。若已超過,則根據(jù)里程值、每公里的單價數(shù)和起步價數(shù)來計算出
25、當前的總金額,并將結果存于總金額寄存器中;中途等待時,脈沖輸入小于設定值時,當時間超過等待設定值時,開始進行計時,并把等待價格加到總金額里,然后將總金額、里程送數(shù)碼管顯示出來。程序流程如圖所示。</p><p><b> 2、中斷程序</b></p><p> 2.1、里程計數(shù)中斷程序</p><p> 每當霍爾傳感器輸出一個低電平信號就
26、使單片機中斷一次,當里程計數(shù)器對里程脈沖計滿1500次時,進入里程計數(shù)中斷服務程序中,里程變量加一。主函數(shù)中總金額也相應地變化。在中途等待中斷程序中,每1ms產(chǎn)生一次中斷,將由當前里程計算出速度值送入某個緩存變量。把當前速度值與預先設定的速度值相比較,當小于設定的車速時,進入等待計時。等待時間5分鐘相當于里程增加一公里。流程如圖3.4所示:</p><p><b> 圖3.2 中斷流程</b&g
27、t;</p><p> 2.2、中途等待中斷程序</p><p> 在中途等待中斷程序中,每1ms產(chǎn)生一次中斷,將當前里程值送入某個緩存變量,每5分鐘將緩存變量中的值和當前里程值比較,當汽車車速小于5公里/小時,將存儲器里面的值與實時測量的值比較,當行進的里程小于5公里每分鐘時,則進入等待計時,每5分鐘記一次價格。</p><p><b> 2.3、
28、計算程序</b></p><p> 計算程序根據(jù)里程數(shù)分別進入不同的計算公式。如果里程大于3公里,則執(zhí)行公式:總金額=起步價+(里程-3)*單價+等待時間*等待單價;否則,執(zhí)行公式:總金額=起步價+等待時間*等待單價。程序流程圖如圖所示。</p><p> 3.3 計算程序流程圖</p><p><b> 2.4、顯示程序</b&
29、gt;</p><p> 程序利用定時器每1ms產(chǎn)生一次中斷,相應變量置位,點亮一個數(shù)碼管,顯示一位數(shù)據(jù),利用主函數(shù)內(nèi)的循環(huán),實現(xiàn)動態(tài)掃描顯示,同時根據(jù)數(shù)碼管余輝和人眼暫留現(xiàn)象,即可實現(xiàn)顯示。</p><p> {0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段碼表示0-9</p><p> 圖
30、3.4 顯示子程序流程</p><p><b> 2.5、鍵盤程序</b></p><p> 鍵盤實質上是一組按鍵開關的集合,均利用機械觸點的合、斷作用。按鍵在閉合及斷開的瞬間均伴隨有一連串的抖動,抖動反應在電壓上就是呈現(xiàn)出高電平或低電平,為了確保CPU對一次按鍵動作只確認一次,必須消除抖動的影響。去抖通常有硬件去抖和軟件去抖兩種方法,本程序使用軟件延時去抖。 &
31、lt;/p><p> 圖3.5 按鍵抖動信號波形</p><p> 對于獨立式鍵盤判鍵,首先看有鍵按下不,如果有鍵按下則延時一會兒,在判斷是否真的有鍵按下,如果確實有鍵按下,再判鍵釋放,最后執(zhí)行鍵功能程序。判鍵子函數(shù)的流程框圖如圖3.5所示:</p><p> 圖3.6 判鍵子程序流程圖</p><p> 四 Proteus軟件仿真<
32、;/p><p> Proteus軟件是來自英國Labcenter electronics公司的EDA工具軟件,它組合了高級原理布圖、混合模式SPICE仿真,PCB設計以及自動布線來實現(xiàn)一個完整的電子設計系統(tǒng)。此系統(tǒng)受益于15年來的持續(xù)開發(fā),被《電子世界》在其對PCB設計系統(tǒng)的比較文章中評為最好產(chǎn)品—“The Route to PCB CAD”。Proteus 產(chǎn)品系列也包含了我們革命性的VSM技術,用戶可以對基于微
33、控制器的設計連同所有的周圍電子器件一起仿真。用戶甚至可以實時采用諸如LED/LCD、鍵盤、RS232終端等動態(tài)外設模型來對設計進行交互仿真。 其功能模塊:—個易用而又功能強大的ISIS原理布圖工具;PROSPICE混合模型SPICE仿真;ARES PCB設計。PROSPICE 仿真器的一個擴展PROTEUS VSM:便于包括所有相關的器件的基于微處理器設計的協(xié)同仿真。此外,還可以結合微控制器軟件使用動態(tài)的鍵盤,開關,按鈕,LED
34、s甚至LCD顯示CPU模型。支持許多通用的微控制器,如PIC,AVR,HC11以及89C51。最新支持ARM。交互的裝置模型包括:LED和LCD顯示,RS232</p><p><b> 五 實物圖</b></p><p><b> 實物展示圖</b></p><p><b> 六 程設計心得體會</
35、b></p><p> 通過這次課程設計,我掌握了數(shù)碼管的識別和測試;熟悉了霍爾傳感器的工作原理,了解了獨立按鍵的分配方法;以及如何提高計時精度的性能等等,掌握了proteus應用的方法和技術,通過查詢資料,也了解了出租車計價器的工作原理。課程設計誠然是一門專業(yè)課,給我很多專業(yè)知識以及專業(yè)技能上的提升,同時又是一門講道課,一門辯思課,給了我許多道,給了我很多思,給了我莫大的空間。同時,設計讓我感觸很深。使
36、我對抽象的理論有了具體的認識。</p><p> 在這次課程設計中,我一開始是在上網(wǎng)找資料,根據(jù)找到的霍爾傳感器電路資料。我們直接按照資料焊了元件,由于我們考慮到了原件的限制,所以對電路做了一些改動。我們根據(jù)實際需要對我們的電路進行改動,而且可以很自信的進行焊接。但是我們對仿真軟件不熟悉,焊電路時沒有仿真的支持,出了幾次錯誤。我把所有可能出錯的地方查了一邊,結果是電位器出了問題,看來不仿真就不能百分之百的成功,
37、還需要實踐來檢驗。</p><p> 通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢
38、固。動手能力有待提高,對計算機有關軟件的使用也應該熟練。</p><p> 通過本次課程設計,又使我學到了許多書本上無法學到的知識,也使也深該體會到單片機技術應用領域的廣泛,不僅使我對學過的單片機知識有了很多的鞏固,同時也對單片機這一門課程產(chǎn)生了更大的興趣。</p><p> 在本次課程設計過程中,我學會了在網(wǎng)絡上查找有關本設計的各硬件的資源,其中包括:AT89S51單片機及其引腳說明
39、、AT24C02引腳圖及其引腳功能等,為本次課程設計提供了一定的資料。由于平時很少進行課程設計,所以對于課程設計報告的格式也是近期才接觸到,經(jīng)過這兩次的設計,為我們以后畢業(yè)設計的制作也奠定了一定的基礎。</p><p><b> 參考文獻 </b></p><p> 【1】《模擬電子技術基礎》艾永樂 付子義編. 北京:中國電力出版社,2008</p>
40、<p> 【2】王曉明.單片機接口技術.北京航空航天大學出版社,2007</p><p> 【3】《電子技術實踐》 閻有運 編. 北京:中國礦業(yè)大學出版社。</p><p> 【4】《實用電子電路200例》 張慶雙 等編 北京:機械工業(yè)出版社,2003。</p><p> 【5】王曉敏.傳感器檢測技術及應用.北京大學出版社,2010.</
41、p><p><b> 附1:源程序代碼</b></p><p> #include<reg52.h></p><p> #include <intrins.h></p><p> #define uchar unsigned char</p><p> #define
42、 uint unsigned int</p><p> uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p> sbit deng1=P1^1; //暫停</p><p> sbit deng2=P1^2;
43、 //白天黑夜</p><p> sbit deng3=P1^3; //單雙程</p><p> sbit key0=P1^4; //功能鍵切換</p><p> sbit key1=P1^5; //白天黑夜</p><p>
44、 sbit key2=P1^6; //單雙程</p><p> sbit key4=P1^7; //確認 </p><p> sbit p11=P2^1; //數(shù)碼管各位位選,里程數(shù),總金額 ,單價</p><p> sbit p12=P2^2;</p>
45、<p> sbit p13=P2^3;</p><p> sbit p21=P2^5;</p><p> sbit p22=P2^6; </p><p> sbit p23=P2^7;</p><p> sbit p31=P2^0;</p><p> sbit p32=P2^4;</p&
46、gt;<p> uint zongjine,licheng,licheng_1,zanting,licheng_2;</p><p> uint lunquan,aa,bb,dengdai;</p><p> uint temp_1,temp_2,shezhi_1;</p><p> uchar danjia1,danjia2,danjia,q
47、iehuan;</p><p> uchar miao,fen;</p><p> void display(void);</p><p> /*********************</p><p><b> 延時時基為1ms</b></p><p> ***************
48、*********/</p><p> void delay_ms(uint x) </p><p><b> {</b></p><p><b> int i,j;</b></p><p> for(i=x;i>0;i--)</p&g
49、t;<p> for(j=110;j>0;j--);</p><p><b> }</b></p><p> /*******************</p><p><b> 按鍵消抖</b></p><p> ********************/</p&
50、gt;<p> uchar read_key(uchar xuanze) </p><p><b> {</b></p><p> uchar shezhi=0,key_wei=0;</p><p> key_wei=xuanze;</p><p><b>
51、P1|=0xf0;</b></p><p> if(key_wei==1) //讀取白天,黑夜鍵值</p><p><b> {</b></p><p><b> while(1)</b></p><p><b> {</b><
52、/p><p><b> if(!key1)</b></p><p><b> {</b></p><p> delay_ms(5);</p><p> if(!key1) </p><p><b> {</b></p><
53、;p> while(!key1) ;</p><p><b> shezhi++;</b></p><p><b> }</b></p><p> if(shezhi==2) shezhi=0;</p><p><b> }</b></p>&
54、lt;p><b> if(!key4)</b></p><p><b> {</b></p><p> delay_ms(80);</p><p> if(!key4) </p><p><b> {</b></p><p> whi
55、le(!key4) ;</p><p><b> break;</b></p><p><b> }</b></p><p><b> } </b></p><p> if(shezhi==1) deng2=0;</p><p> els
56、e if(shezhi==0) deng2=1;</p><p><b> }</b></p><p><b> }</b></p><p> else if(key_wei==2) //讀取單程,雙程鍵值</p><p><b> {</b&
57、gt;</p><p><b> while(1)</b></p><p><b> {</b></p><p> if(key2==0)</p><p><b> {</b></p><p> delay_ms(5);</p>
58、<p> if(key2==0)</p><p><b> {</b></p><p> while(!key2) ;</p><p><b> shezhi++;</b></p><p><b> } </b></p><p&
59、gt; if(shezhi==2) shezhi=0;</p><p><b> }</b></p><p> if(key4==0)</p><p><b> {</b></p><p> delay_ms(80);</p><p> if(key4==0)
60、 </p><p><b> {</b></p><p> while(!key4) ;</p><p><b> break;</b></p><p><b> }</b></p><p><b> } </b>
61、</p><p> if(shezhi==1) deng3=0;</p><p> else if(shezhi==0) deng3=1;</p><p><b> }</b></p><p><b> }</b></p><p> else if(
62、key_wei==3) //讀取顯示數(shù)據(jù)鍵值</p><p><b> {</b></p><p> if(key0==0)</p><p><b> {</b></p><p> display();</p><p> display();&
63、lt;/p><p> if(key0==0)</p><p><b> {</b></p><p> while(!key0) display();</p><p> shezhi_1++; </p><p><b> } </b></p>&l
64、t;p> if(shezhi_1==2) shezhi_1=0;</p><p><b> }</b></p><p> shezhi=shezhi_1;</p><p><b> }</b></p><p> return shezhi;</p><p>
65、;<b> }</b></p><p> /*******************</p><p><b> 函數(shù)初始化</b></p><p> ***********************/</p><p> void init() &
66、lt;/p><p><b> {</b></p><p><b> P1=0xff;</b></p><p><b> P2=0x00;</b></p><p> P0=table[0];</p><p> zongjine=0;</p>
67、;<p> licheng=0;</p><p> dengdai=0;</p><p> qiehuan=0;</p><p> danjia1=read_key(1); //讀取白天,黑夜</p><p> danjia2=read_key(2); //讀取單程,雙程</p><p>
68、; danjia=20-(5*danjia2);</p><p> EA=1; //開總中斷</p><p> EX0=1; //開外部中斷0</p><p> EX1=1; //開外部中斷1</p><p> IT0=1; //觸發(fā)方式下降沿</p>
69、<p> IT1=1; //觸發(fā)方式下降沿</p><p> PX1=1; //外部中斷1,暫停設為高優(yōu)先級</p><p> TMOD=0x11;</p><p> TH0=(65536-1000)/256;</p><p> TL0=(65536-1000)%256; //填入1ms初
70、值</p><p> ET0=1; //開定時器T0中斷</p><p> TR0=1; //開定時器T0</p><p><b> }</b></p><p> /*************************</p><p><b> 總金
71、額計算</b></p><p> *****************************/</p><p> void jisuan() </p><p><b> {</b></p><p><b> uint a;</b><
72、;/p><p> if(licheng>=3)</p><p> { </p><p> a=licheng_2-60;</p><p> zongjine=(danjia*a)/20+50; //金額計算</p><p><b> }</b><
73、;/p><p><b> else</b></p><p> zongjine=50; //起步公里內(nèi)金額計算 </p><p><b> } </b></p><p> /**********************************</p>&
74、lt;p> 數(shù)碼管顯示 總金額、里程數(shù)</p><p> ***********************************/</p><p> void display_1(uint zongjine_0,uint licheng_0) </p><p><b> {</b></p>
75、<p> uchar jbai,jshi,jge,lshi,lge,lxiao;</p><p> jbai=zongjine_0/100; //數(shù)碼管位置分配</p><p> jshi=(zongjine_0%100)/10;</p><p> jge=zongjine_0%10;</p>&
76、lt;p> lshi=licheng_0/100;</p><p> lge=(licheng_0%100)/10;</p><p> lxiao=licheng_0%10;</p><p> P0=0xff; //數(shù)碼管動態(tài)顯示</p><p><b> P2=0xf
77、f;</b></p><p> p11=0; P0=table[jbai]; delay_ms(1); </p><p> p11=1; p12=0; P0=table[jshi]|0x80; delay_ms(1); </p><p> p12=1; p13=0; P0=table[jge]; delay_m
78、s(1); </p><p> p13=1; p21=0; P0=table[lshi]; delay_ms(1); </p><p> p21=1; p22=0; P0=table[lge]|0x80; delay_ms(1); </p><p> p22=1; p23=0; P0=table[lxiao]; delay_ms
79、(1); </p><p><b> p23=1; </b></p><p><b> }</b></p><p> /*******************************</p><p> 數(shù)碼管顯示時間、單價</p><p> **********
80、***********************/</p><p> void display_2(uchar fen_0,uchar miao_0,uchar danjia_0) </p><p><b> {</b></p><p> uchar sfen,gfen,smiao,gmiao;</p>
81、;<p> uchar dshi,dge;</p><p> dshi=danjia_0/10;</p><p> dge=danjia_0%10;</p><p> sfen=fen_0/10;</p><p> gfen=fen_0%10;</p><p> smiao=miao_0/10
82、;</p><p> gmiao=miao_0%10;</p><p><b> P0=0xff;</b></p><p><b> P2=0xff;</b></p><p> p31=0; P0=table[sfen]; delay_ms(1); <
83、/p><p> p31=1; p11=0; P0=table[gfen]|0x80; delay_ms(1);</p><p> p11=1; p12=0; P0=table[smiao]; delay_ms(1);</p><p> p12=1; p13=0; P0=table[gmiao]; delay_ms(1)
84、;</p><p> p13=1; p22=0; P0=table[dshi]|0x80; delay_ms(1);</p><p> p22=1; p23=0; P0=table[dge]; delay_ms(1);</p><p><b> p23=1;</b></p><p>&
85、lt;b> }</b></p><p> /***************</p><p><b> 顯示內(nèi)容選擇</b></p><p> *******************/</p><p> void display() </p><
86、p><b> {</b></p><p> if(qiehuan==0) display_1(zongjine,licheng_1); </p><p> else if(qiehuan==1) display_2(fen,miao,danjia); </p><p><b> }</b></p&g
87、t;<p> /***************</p><p><b> 主函數(shù)</b></p><p> ***************/</p><p> void main() </p><p><b> {</b></p&g
88、t;<p><b> init();</b></p><p> qiehuan=0;</p><p><b> while(1)</b></p><p><b> {</b></p><p> licheng_1=licheng_2/2;</p&g
89、t;<p> jisuan(); //計算總金額</p><p> qiehuan=read_key(3); </p><p> display(); </p><
90、;p> } </p><p><b> }</b></p><p> void int0(void) interrupt 0 using 0 //外中斷0的中斷編號為0</p><p><b> {</b></p><p> lunquan++;<
91、/p><p> licheng_2++;</p><p> licheng_1=licheng_2/2;</p><p> if(lunquan==20)</p><p><b> {</b></p><p> lunquan=0;</p><p> licheng
92、++;</p><p><b> } </b></p><p><b> }</b></p><p> void int1(void) interrupt 2 using 2 //外中斷1的中斷編號為2 暫停</p><p><b> { </b&
93、gt;</p><p><b> EA=0;</b></p><p> zanting++;</p><p> display();</p><p> if(zanting==2) zanting=0;</p><p> if(zanting==1) </p>&l
94、t;p><b> {</b></p><p><b> deng1=0;</b></p><p><b> EA=1;</b></p><p><b> ET0=0;</b></p><p><b> TR0=0;</b&g
95、t;</p><p><b> EX0=0;</b></p><p><b> } </b></p><p><b> else</b></p><p><b> {</b></p><p><b> de
96、ng1=1;</b></p><p> EA=1; </p><p><b> EX0=1;</b></p><p> TH0=(65536-1000)/256;</p><p> TL0=(65536-1000)%256;</p><p><b
97、> ET0=1;</b></p><p> TR0=1; </p><p><b> } </b></p><p><b> }</b></p><p> void timer0() interrupt 1
98、 //定時器中斷0</p><p><b> {</b></p><p> TH0=(65536-1000)/256;</p><p> TL0=(65536-1000)%256;</p><p> if(temp_2==0)</p><p> aa=licheng_2;</p&g
99、t;<p> temp_2++; </p><p> if(temp_2==1000) //1s無反應進入等待計費</p><p><b> { </b></p><p> bb=licheng_2;</p><p&
100、gt;<b> temp_2=0;</b></p><p> if(aa==bb) </p><p><b> {</b></p><p><b> miao++;</b></p><p> if(miao==60)</p><p><b
101、> {</b></p><p><b> miao=0;</b></p><p><b> fen++;</b></p><p><b> }</b></p><p> }
102、 </p><p><b> }</b></p><p> if(dengdai==10)</p><p><b> {</b></p><p> dengdai=0;</p><p> licheng++;</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設計--出租車計價器
- 單片機課程設計--出租車計價器
- 單片機課程設計---出租車計價器
- 單片機課程設計--出租車計價器
- 單片機課程設計出租車計價器
- 單片機課程設計----出租車計價器
- 單片機課程設計-出租車計價器
- 單片機課程設計--出租車計價器
- 單片機課程設計--出租車計價器設計
- 單片機課程設計---出租車計價器設計
- 單片機課程設計論文---出租車計價器
- 微機原理課程設計--出租車計價器的設計
- 單片機原理及應用課程設計--基于51單片機的出租車計價器程序
- 課程設計---基于51單片機的出租車計價器
- 單片機課程設計---出租車計費系統(tǒng)
- 單片機課程設計---出租車計費系統(tǒng)
- 單片機課程設計--出租車計費系統(tǒng)
- 單片機課程設計--出租車計費系統(tǒng)
- 單片機課程設計-- 出租車計費系統(tǒng)
- 課程設計--基于單片機的出租車計價器的設計
評論
0/150
提交評論