2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩60頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  本科畢業(yè)設(shè)計(jì)</b></p><p><b>  (20 屆)</b></p><p>  智能出租車計(jì)價(jià)器設(shè)計(jì)</p><p>  所在學(xué)院 </p><p>  專業(yè)班級 電子信息工程

2、 </p><p>  學(xué)生姓名 學(xué)號 </p><p>  指導(dǎo)教師 職稱 </p><p>  完成日期 年 月 </p><p><b>  摘 要</b></p&g

3、t;<p>  當(dāng)前各個(gè)城市的出租車都有著不同的收費(fèi)標(biāo)準(zhǔn),而傳統(tǒng)的出租車計(jì)價(jià)器往往是通過更改其代碼的方式對收費(fèi)方式進(jìn)行更改,比較麻煩。并且傳統(tǒng)的計(jì)價(jià)器都是采用LED數(shù)碼管顯示,無法做到顯示清楚詳盡。本課題研究的出租車計(jì)價(jià)系統(tǒng),附帶有價(jià)格更改功能,可以根據(jù)地區(qū)情況,對初始價(jià),行駛單價(jià),等候單價(jià),行駛路程,等待時(shí)間等數(shù)據(jù)進(jìn)行更改操作,方便快捷。同時(shí)為了防止出租車司機(jī)隨意更改數(shù)據(jù),還同時(shí)具備有數(shù)據(jù)更改加密功能,以及數(shù)據(jù)實(shí)時(shí)顯示功

4、能。而且本系統(tǒng)采用LCD12864液晶屏作為顯示器,放棄傳統(tǒng)的LED數(shù)碼管,顯示清楚明了,可以詳細(xì)地顯示初始價(jià),行駛單價(jià),等候單價(jià),行駛路程,等待時(shí)間并能動態(tài)顯示停車價(jià)和行駛價(jià)的自動切換過程。</p><p>  課題主要內(nèi)容包括硬件設(shè)計(jì)和軟件設(shè)計(jì)。硬件主要可分為磁性霍爾傳感器、STC89C51微處理器、液晶顯示模塊和鍵盤模塊有四大模塊。軟件設(shè)計(jì)可分為主程序、萬年歷、計(jì)價(jià)模塊、顯示模塊、單價(jià)調(diào)節(jié)模塊五大模塊。&l

5、t;/p><p>  關(guān)鍵詞:STC89C51;12864;鍵盤加密</p><p><b>  Abstract</b></p><p>  Taxis are the current cities have different charges, and the traditional taxi meter is often code the s

6、ame way had to change their way of fee changes, more trouble, the taxi meter of the research system, with a price Change the function, according to regional circumstances, the initial price, driving unit, pending price,

7、distance traveled, waiting time data changing operation, convenient and quick. Meanwhile, in order to prevent taxi drivers at random to change the data, but at the same time cha</p><p>  Main topics include

8、hardware and software design. Hardware can be divided into magnetic sensor, STC89C51microprocessor, LCD display module and keyboard module has four modules. Software design can be divided into the main program, calendar,

9、 pricing module, display module, unit price adjustment module five modules.</p><p>  Key Words: STC89C51;12864;Keyboard Encryption</p><p><b>  目 錄</b></p><p><b> 

10、 1.引言1</b></p><p>  2 系統(tǒng)方案設(shè)計(jì)2</p><p><b>  3 硬件設(shè)計(jì)5</b></p><p>  3.1.磁性霍爾傳感器5</p><p>  3.2 微處理器6</p><p>  3.2.1 時(shí)鐘電路6</p><

11、p>  3.2.2 復(fù)位電路6</p><p>  3.3液晶顯示模塊7</p><p>  3.3.1顯示模塊選擇7</p><p>  3.3.2 液晶顯示電路7</p><p>  3.4 鍵盤模塊8</p><p><b>  4 軟件設(shè)計(jì)10</b></p>

12、<p>  4.1 主程序10</p><p>  4.2萬年歷模塊12</p><p>  4.3 計(jì)價(jià)模塊14</p><p>  4.3.1 計(jì)算距離15</p><p>  4.3.2 起步價(jià)內(nèi)的運(yùn)算16</p><p>  4.3.3 行駛價(jià)的計(jì)算17</p>&

13、lt;p>  4.3.4 等候價(jià)的計(jì)算17</p><p>  4.4 液晶顯示模塊18</p><p>  4.4.1 寫指令19</p><p>  4.4.2寫數(shù)據(jù)21</p><p>  4.5 單價(jià)調(diào)節(jié)模塊22</p><p>  4.5.1 鍵盤模塊22</p>

14、<p>  4.5.2 密碼模塊24</p><p>  5系統(tǒng)電路圖以及PCB28</p><p><b>  6 結(jié)論29</b></p><p>  致 謝錯(cuò)誤!未定義書簽。</p><p><b>  參考文獻(xiàn)30</b></p><p>  

15、附錄1 系統(tǒng)程序31</p><p><b>  1.引言</b></p><p>  隨著電子技術(shù)的發(fā)展出租車計(jì)價(jià)器技術(shù)也在不斷進(jìn)步和提高,國內(nèi)出租車計(jì)價(jià)器已經(jīng)經(jīng)歷了四個(gè)階段的發(fā)展:從傳統(tǒng)的全部由機(jī)械元器件組成的機(jī)械式,到半電子式即用電子線路代替部分機(jī)械元器件的出租車計(jì)價(jià)器,再從集成電路式到目前的單片機(jī)系統(tǒng)設(shè)計(jì)的出租車計(jì)價(jià)器。</p><p

16、>  單片機(jī)系統(tǒng)的出租車計(jì)價(jià)器,有方便,準(zhǔn)確,直觀等優(yōu)點(diǎn),但是目前市面上所流行的計(jì)價(jià)器往往都是在出廠時(shí)就將其內(nèi)部數(shù)據(jù)設(shè)定好,不利于不同地方的使用,而且基本都是采用以LED作為顯示屏幕的計(jì)價(jià)器,這種計(jì)價(jià)器顯示的是一個(gè)起步價(jià),當(dāng)在超過一定的公里數(shù)后,就能按照預(yù)定的單價(jià)進(jìn)行計(jì)算,從而得出最終的價(jià)格。這種計(jì)價(jià)器雖然顯示比較直觀方便,但在現(xiàn)在多元化的情況下,就顯得比較的單一。例如,不同城市之間的起步價(jià),起步距離不同,更換城市后計(jì)價(jià)器就需要對

17、其代碼進(jìn)行修改,非常麻煩;還有傳統(tǒng)的LED數(shù)碼管,無法具體的將價(jià)格所有參數(shù)都顯示出來,無法做到清楚詳盡。 </p><p>  本課題主要任務(wù)是設(shè)計(jì)一個(gè)可以對數(shù)據(jù)詳實(shí)顯示并能對其中參數(shù)進(jìn)行方便更改設(shè)定的出租車計(jì)價(jià)器。其可以通過傳感器完成對車速的測量,轉(zhuǎn)換為行駛距離,通過單片機(jī)的處理計(jì)算得出價(jià)格;并能在停車等待一定時(shí)間后進(jìn)行等待價(jià)計(jì)算,同時(shí)可以在啟動后繼續(xù)計(jì)算行駛價(jià)。具有價(jià)格調(diào)整功能,可以對起步價(jià),行駛價(jià)單價(jià),等待

18、價(jià)單價(jià)進(jìn)行調(diào)整,并能對其進(jìn)行加密,防止被隨意更改,還能將數(shù)據(jù)詳實(shí)顯示在顯示屏上。顯示模塊使用液晶,保證顯示內(nèi)容的詳細(xì)完整,共顯示:起步價(jià),總價(jià),行駛路程,等待時(shí)間,等待單價(jià),行駛單價(jià)。</p><p>  課題主要內(nèi)容包括硬件設(shè)計(jì)和軟件設(shè)計(jì)。在硬件設(shè)計(jì)部分包括微處理器部分,鍵盤,并口傳輸以及顯示模塊。軟件包括液晶顯示文字圖像,價(jià)格計(jì)算,鍵盤輸入,車速車距換算等內(nèi)容。并要求計(jì)價(jià)準(zhǔn)確,顯示清晰正確。</p>

19、;<p><b>  2 系統(tǒng)方案設(shè)計(jì)</b></p><p>  出租車計(jì)價(jià)系統(tǒng)中,如何快速得出車輛行駛路程,是計(jì)價(jià)器工作的前提,目前流行的測速,測距方式有很多:如基于磁性霍爾傳感器的測速方式、超聲波測速方式、激光測速方式等等。</p><p>  1、基于磁性霍爾傳感器的測速儀</p><p>  應(yīng)用于車速檢測中的磁性霍爾傳

20、感器,是基于霍爾效應(yīng)的一種磁電傳感器,它具備有許多特點(diǎn)包括對磁場敏感度高、輸出信號穩(wěn)定、頻率響應(yīng)高、抗電磁干擾能力強(qiáng)、響應(yīng)速度快、溫度性能好、結(jié)構(gòu)簡單、使用方便等等。</p><p>  它是由磁極對應(yīng)的永磁鐵、轉(zhuǎn)子、霍爾元件、輸入插件以及輸出插件構(gòu)成。當(dāng)傳感器的轉(zhuǎn)子在外力作用下旋轉(zhuǎn)時(shí)帶動永磁鐵轉(zhuǎn)動,使霍爾元件與永磁鐵周期性的接觸,引起霍爾元件輸出的電壓產(chǎn)生周期性變化,通過后續(xù)電路處理形成穩(wěn)定的脈沖電壓信號,作為

21、輸出信號進(jìn)行處理運(yùn)算從而得出單位時(shí)間內(nèi)轉(zhuǎn)子轉(zhuǎn)動的次數(shù),通過與轉(zhuǎn)子的外徑的線性關(guān)系計(jì)算得出最終結(jié)果。</p><p>  其中比較有代表性的是利用微處理器的高速計(jì)數(shù)器端口進(jìn)行車速傳感器的數(shù)據(jù)采集,并利用軟件控制實(shí)現(xiàn)對采集數(shù)據(jù)的計(jì)算和圖形化顯示處理。該測速裝置具有測試精度高、數(shù)據(jù)通信可靠、圖表化的良好用戶界面、抗干擾能力強(qiáng)、檢測過程簡單直觀、系統(tǒng)開發(fā)成本低等優(yōu)點(diǎn),具有較好的推廣應(yīng)用前景。</p><

22、;p><b>  2、超聲波測速儀</b></p><p>  超聲波的頻率超過20KHz+人耳已經(jīng)聽不見,也不影響家用電器運(yùn)行。超聲測速就是通過測量聲波的多普勒頻移,進(jìn)而測得轉(zhuǎn)動物體的轉(zhuǎn)速,并通過A/D轉(zhuǎn)換表頭顯示轉(zhuǎn)速大小。</p><p>  超聲波測速儀的工作原理是通過超聲波的反射來進(jìn)行定位和確定時(shí)間,所以測量的有效作用距離比較短,而單靠提高超聲換能器的發(fā)

23、射功率并不能很好的解決問題;而且若只是單純的對反射波進(jìn)行放大,其的信噪比并不能得到很好的改善,會造成測量的精度不高。所以這些問題嚴(yán)重制約了超聲檢測手段在大作用距離、高精度測量中的應(yīng)用。</p><p>  而超聲波的特點(diǎn)則是其的指向性強(qiáng),能量消耗緩慢,在介質(zhì)中傳播的距離較遠(yuǎn)等,所以利用超聲波檢測具有迅速、方便、計(jì)算簡單、易于做到實(shí)時(shí)控制等優(yōu)點(diǎn),通過引入定時(shí)器進(jìn)行計(jì)時(shí),可以保證其可以很方便得運(yùn)用于工業(yè)或其他的一些方

24、面,擁有良好的兼容性。</p><p><b>  3、激光測速儀</b></p><p>  自1960年第一臺激光器——紅寶石激光器發(fā)明以來,人們便開始了對激光測速的研究?;诠潭〞r(shí)間間隔連續(xù)多次激光測距而實(shí)現(xiàn)的機(jī)動車激光測速儀,是上世紀(jì)90年代發(fā)展起來的一種新型機(jī)動車行駛速度的測量儀器,一般為移動式,只能用于靜態(tài)測量。</p><p> 

25、 機(jī)動車激光測速儀按其工作方式可以分為單光束長距離紅外機(jī)動車激光測速儀和雙光束短距離紅外機(jī)動車激光測速儀,工作方式是通過半導(dǎo)體激光器向目標(biāo)區(qū)域發(fā)射窄脈沖信號,對其接收到的反射波進(jìn)行時(shí)間軸上的處理運(yùn)算,從而得出目標(biāo)與發(fā)射點(diǎn)之間的距離。而機(jī)動車激光測速是在激光測距的基礎(chǔ)上對被測目標(biāo)發(fā)射脈沖激光串,進(jìn)行連續(xù)的一系列固定時(shí)間間隔的激光測距,得到被測目標(biāo)相對于測量點(diǎn)單位時(shí)間內(nèi)的位移的變化速率,從而最終獲得被測目標(biāo)移動的速度及方向。</p&g

26、t;<p>  激光測速系統(tǒng)在實(shí)際應(yīng)用中有很好的使用效果與工業(yè)兼容性。以反射式激光測速系統(tǒng)為例,該系統(tǒng)可以連續(xù)測量各種高速物體的速度變化,其工作距離和光斑大小都可以調(diào)整,具有很好的通用性。 通過比對目前主流測速方式,本課題中選用設(shè)計(jì)簡便,成本低廉,結(jié)果精確的磁性霍爾傳感器測速儀。本系統(tǒng)中其他的硬件模塊:選用功耗低、輕薄短小、平面直角顯示以及影象穩(wěn)定不閃爍,可視面積大,畫面效果好,抗干擾能力強(qiáng)等特點(diǎn)的LCD液晶屏作為

27、顯示模塊,采用使用方便成本低廉的靜態(tài)矩陣編碼鍵盤作為按鍵模塊。開發(fā)環(huán)境采用Keil C,編程語言為C51語言。文中對每個(gè)部分功能、實(shí)現(xiàn)過程作了詳細(xì)介紹。本設(shè)計(jì)系統(tǒng)的基礎(chǔ)是對行駛距離的測控?fù)Q算與數(shù)據(jù)通信。系統(tǒng)的框圖如圖2-1所示。</p><p>  圖2-1 系統(tǒng)框圖</p><p><b>  3 硬件設(shè)計(jì)</b></p><p>  本系

28、統(tǒng)硬件主要有四大模塊組成:磁性霍爾傳感器、微處理器、液晶顯示模塊和鍵盤模塊。</p><p>  3.1.磁性霍爾傳感器</p><p>  應(yīng)用于車速檢測中的磁性霍爾傳感器,是基于霍爾效應(yīng)的一種磁電傳感器,它是由磁極對應(yīng)的永磁鐵、轉(zhuǎn)子、霍爾元件、輸入插件以及輸出插件構(gòu)成。當(dāng)傳感器的轉(zhuǎn)子在外力作用下旋轉(zhuǎn)時(shí)帶動永磁鐵轉(zhuǎn)動,使霍爾元件與永磁鐵周期性的接觸,引起霍爾元件輸出的電壓產(chǎn)生周期性變化,

29、通過后續(xù)電路處理形成穩(wěn)定的脈沖電壓信號,作為車速傳感器的輸出信號。</p><p>  本系統(tǒng)中采用的是霍爾傳感器A3144,其電路圖如圖3-1所示。霍爾傳感器A3144是Allegro公司生產(chǎn)的寬溫、開關(guān)型霍爾效應(yīng)傳感器,其工作溫度范圍可達(dá)一40℃一150℃。它由電壓調(diào)整電路、反相電源保護(hù)電路、霍爾元件、溫度補(bǔ)償電路、微信號放大器、施密特觸發(fā)器和OC門輸出級構(gòu)成,通過使用上拉電路可以將其輸出接人CMOS邏輯電路

30、。該芯片具有尺寸小、穩(wěn)定性好、靈敏度高等特點(diǎn)。</p><p>  圖3-1 霍爾傳感器電路</p><p>  3腳為電源,2腳接地,1腳輸出端。由于是OC門輸出,所有添加上拉電阻。當(dāng)霍爾傳感器沒遇到磁鐵時(shí)輸出為高電平,遇到時(shí)產(chǎn)生低電平。</p><p><b>  3.2 微處理器</b></p><p>  系統(tǒng)

31、采用STC89C51作為微處理器系統(tǒng)。STC89C51是51單片機(jī)中較為普及的一款,該系列單片機(jī)的始祖是Intel的8031單片機(jī),STC的51系列的單片機(jī),可以完全兼容傳統(tǒng)的8051單片機(jī)。12時(shí)鐘/機(jī)器周期和6時(shí)鐘/機(jī)器周期可以任意選擇,指令代碼完全兼容傳統(tǒng)8051。并且具有EEPROM功能。</p><p>  在本系統(tǒng)中,微處理器是主控器,此芯片內(nèi)具有可編程程序存儲器, 減少了外部存儲器的擴(kuò)充,提高了系統(tǒng)

32、的可靠性。它主要可以完成高速數(shù)據(jù)采集、控制,數(shù)據(jù)處理,數(shù)據(jù)顯示與信號提取、反饋。</p><p>  由于使用內(nèi)部程序存儲器,所以EA接高電平,P0接液晶屏數(shù)據(jù)端口,P26,P27接液晶使能端,P1接鍵盤模塊。X1,X2接晶振。</p><p>  3.2.1 時(shí)鐘電路</p><p>  單片機(jī)內(nèi)部有一個(gè)高增益反相放大器,為單片機(jī)提供時(shí)鐘控制信號。其電路圖如圖3-

33、2所示。輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。在芯片外部XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,成為了一個(gè)穩(wěn)定的自激振蕩器。本系統(tǒng)中使用振蕩頻率為12MHz的石英晶體。其電路圖如圖3-3所示。為了讓晶振可以方便快速的起振,在晶振兩端加了2個(gè)30pF的起振電容C1、C2。</p><p>  圖3-2 晶振時(shí)鐘電路</p><p>  3.2.2 復(fù)位電路<

34、/p><p>  復(fù)位是單片機(jī)的初始化操作,其作用是使CPU和系統(tǒng)中其他部件都處于一個(gè)確定的初始化狀態(tài),單片機(jī)所有工作都從初始狀態(tài)開始。本設(shè)計(jì)采用按鍵電平復(fù)位,電平復(fù)位是通過RST端經(jīng)電阻與VCC接通而實(shí)現(xiàn)的。其電路圖如圖3-3所示。</p><p>  圖3-3 復(fù)位電路</p><p>  如果復(fù)位電路中R、C的值選擇不當(dāng),使的復(fù)位時(shí)間過長,單片機(jī)將處于循環(huán)復(fù)位狀

35、態(tài)。RESET引腳是復(fù)位信號的輸入端,復(fù)位信號是高電平有效。</p><p><b>  3.3液晶顯示模塊</b></p><p>  3.3.1顯示模塊選擇</p><p>  目前主流的顯示模塊主要包括LED點(diǎn)陣屏、LED數(shù)碼管、LCD液晶屏等。LED點(diǎn)陣屏優(yōu)點(diǎn)是壽命長、亮度高、遠(yuǎn)距離效果較好,缺點(diǎn)是體積龐大、發(fā)熱量高、分辨率低,不適合近

36、距離觀看。LED數(shù)碼管優(yōu)點(diǎn)是價(jià)格低廉、使用方便,缺點(diǎn)是顯示內(nèi)容少。液晶顯示屏與其他顯示模塊相比, LCD具有功耗低、輕薄短小、平面直角顯示以及影象穩(wěn)定不閃爍,可視面積大,畫面效果好,抗干擾能力強(qiáng)等特點(diǎn)。所以本系統(tǒng)選用LCD液晶屏作為顯示模塊。</p><p>  3.3.2 液晶顯示電路</p><p>  本系統(tǒng)采用的是12864,其硬件特性如下:提供8位,4位并行接口及串行接口可選,并

37、行接口適配M6800時(shí)序,自動電源啟動復(fù)位功能,內(nèi)部自建振蕩源,64×16位字符顯示RAM(DDRAM最多16字符×4行,LCD顯示范圍16×2行),2M位中文字型ROM(CGROM),總共提供8192個(gè)中文字型(16×16點(diǎn)陣),16K位半寬字型ROM(HCGROM),總共提供126個(gè)西文字型(16×8點(diǎn)陣),64×16位字符產(chǎn)生RAM(CGRAM),15×16位總

38、共240點(diǎn)的ICON  RAM(ICONRAM)。</p><p>  軟件特性如下:文字與圖形混合顯示功能,畫面清除功能,光標(biāo)歸位功能,顯示開/關(guān)功能,光標(biāo)顯示/隱藏功能,顯示字體閃爍功能,光標(biāo)移位功能功能,顯示移位功能,垂直畫面旋轉(zhuǎn)功能,反白顯示功能,休眠模式。</p><p>  圖3-6 液晶電路圖</p><p>  液晶引腳圖如3-6所示。電

39、路中GND端接地,VCC端接5V電源。DB0-DB7接單片機(jī),RW,RS,E接單片機(jī)。RS與RW與單片機(jī)P26,P27相連,控制數(shù)據(jù)和命令的讀寫。</p><p><b>  3.4 鍵盤模塊</b></p><p>  鍵盤是各種電子儀器不可缺少的最常用的、最基本的輸入工具,通過它可以輸入程序和數(shù)據(jù);鍵盤的研制也 已經(jīng)達(dá)到相當(dāng)高的水準(zhǔn) ,根據(jù)其不同的代碼轉(zhuǎn)換方式可以

40、分為編碼鍵盤和非編碼鍵盤。根據(jù)其不同的掃描方式還可以分為靜態(tài)鍵盤和動態(tài)鍵盤。表3-1對比了不同鍵盤的性能。</p><p>  表3-1 各種鍵盤電路的性能比較</p><p>  通過對比不同鍵盤的性能,本系統(tǒng)選定為4*2的動態(tài)非編碼鍵盤既矩陣非編碼鍵盤。矩陣鍵盤接在STC89S51的P1口,由硬件或軟件隨時(shí)對矩陣掃描,一旦某一鍵被按下,該鍵的行列信息即被轉(zhuǎn)換為位置碼并送入主機(jī),再由鍵

41、盤驅(qū)動程序查表,從而得到按鍵的ASCⅡ碼,最后送入內(nèi)存中的鍵盤緩沖區(qū)供主機(jī)分析執(zhí)行。矩陣鍵盤是由2條I/O線作為行線,4條I/O線作為列線組成的鍵盤。在行線和列線的每一個(gè)交叉點(diǎn)上,設(shè)置一個(gè)按鍵。</p><p>  圖3-7 按鍵電路</p><p>  鍵盤與單片機(jī)P1口相連,P2,P3與行線相連,P4,P5,P6,P7與列線相連。通過判斷行列線電平來判斷按鍵是否按下。</p&g

42、t;<p>  按鍵S1:開始按鍵。按下該鍵,里程隨脈沖數(shù)成正比累加,在里程大于3公里后,金額數(shù)按單程價(jià)格為2元/公里進(jìn)行累加。</p><p>  按鍵S2:調(diào)節(jié)按鍵。按下該鍵,光標(biāo)在各數(shù)據(jù)之間移動,可以按S6和S7進(jìn)行加減更改數(shù)據(jù). </p><p>  按鍵S3:暫停按鍵。到達(dá)目的地后,按“暫?!?鍵,計(jì)價(jià)器可暫停計(jì)價(jià)。</p><p>  按鍵

43、S4:清除按鍵。按“清除” 鍵,計(jì)價(jià)器能將記錄數(shù)據(jù)(里程、等待時(shí)間與價(jià)格等)自動清0。</p><p>  按鍵S5:返回按鍵。按下該鍵,回到顯示里程數(shù)、金額狀態(tài)。。</p><p>  按鍵S6: 在更改數(shù)據(jù)模式下,對數(shù)據(jù)進(jìn)行+操作。</p><p>  按鍵S7: 在更改數(shù)據(jù)模式下,對數(shù)據(jù)進(jìn)行-操作。</p><p>  按鍵S8: 加密

44、按鍵,按下后鍵入正確密碼進(jìn)入更改單價(jià)界面。</p><p><b>  4 軟件設(shè)計(jì)</b></p><p>  本系統(tǒng)的軟件設(shè)計(jì)主要可分為主程序、萬年歷模塊、計(jì)價(jià)模塊、顯示模塊、單價(jià)調(diào)節(jié)模塊五大模塊。</p><p><b>  4.1 主程序</b></p><p>  在主程序中,需要完成對各

45、接口芯片的初始化、片內(nèi)資源的初始化以及開中斷、循環(huán)等待等工作。另外,在主程序模塊中還需要設(shè)置啟動/清除標(biāo)志寄存器、里程寄存器和價(jià)格寄存器,并對它們進(jìn)行初始化。然后,主程序?qū)⒏鶕?jù)各標(biāo)志寄存器的內(nèi)容,分別完成啟動、清除、計(jì)程和計(jì)價(jià)等不同的操作。當(dāng)按下S1時(shí),就啟動計(jì)價(jià),將根據(jù)里程寄存器中的內(nèi)容計(jì)算和判斷出行駛里程是否已超過起價(jià)公里數(shù)。若已超過,則根據(jù)里程值、每公里的單價(jià)數(shù)和起價(jià)數(shù)來計(jì)算出當(dāng)前的累計(jì)價(jià)格,并將結(jié)果存于價(jià)格寄存器中,然后將時(shí)間和

46、當(dāng)前累計(jì)價(jià)格送顯示電路顯示出來。當(dāng)?shù)竭_(dá)目的地的時(shí)候,由于霍爾開關(guān)沒有送來脈沖信號,就停止計(jì)價(jià),顯示當(dāng)前所應(yīng)該付的金額和對應(yīng)的單價(jià),到下次啟動計(jì)價(jià)時(shí),系統(tǒng)自動對顯示清零,并重新進(jìn)行初始化過程。主程序流程圖如圖4-1所示。</p><p>  圖4-1 主程序流程圖</p><p>  主程序?qū)Ω鱾€(gè)模塊進(jìn)行初始化,然后,根據(jù)系統(tǒng)的功能要求,調(diào)用不同的子函數(shù),完成路程讀取、計(jì)算價(jià)格、液晶顯示等

47、工作。初始化主要作用是初始化定時(shí)計(jì)數(shù)器,選擇定時(shí)器的工作方式,其代碼如下:</p><p>  TMOD=0x11;</p><p><b>  ET0=1;</b></p><p>  TR0=0; //開始時(shí)關(guān)定時(shí)器0</p><p>  TH0=(65536-48000)/256;</p><

48、p>  TL0=(65536-48000)%256;</p><p><b>  ET1=1;</b></p><p><b>  TR1=1;</b></p><p>  TH1=(65536-48000)/256;</p><p>  TL1=(65536-48000)%256;</

49、p><p>  EX0=0; //開始時(shí)關(guān)外部中斷0</p><p><b>  IT0=1;</b></p><p><b>  EA=1; </b></p><p>  TMOD是定時(shí)/計(jì)數(shù)器工作方式控制寄存器,將定時(shí)/計(jì)數(shù)器0和定時(shí)/計(jì)數(shù)器1都選擇工作方式1,為16位計(jì)數(shù)器,ET0=1允許定時(shí)器

50、中斷,TRO=0開始時(shí)關(guān)閉定時(shí)器0,設(shè)定計(jì)時(shí)器計(jì)時(shí)時(shí)間為48000us, ET1打開定時(shí)器1中斷,啟動定時(shí)器1,設(shè)定計(jì)時(shí)為48000us,IT0=1設(shè)置INT0為負(fù)跳變觸發(fā)中斷,EA打開總中斷。定時(shí)器0計(jì)算行駛單價(jià),定時(shí)器1計(jì)算等候單價(jià)。</p><p><b>  4.2萬年歷模塊</b></p><p>  由出租車的性質(zhì)所決定,對于出租車計(jì)價(jià)器而言路程和時(shí)間是兩

51、個(gè)很關(guān)鍵的因素,設(shè)置萬年歷模塊的主要作用是做到在等候價(jià)計(jì)算時(shí)時(shí)間顯示的直觀清楚,更可以方便出租車司機(jī)和乘客對時(shí)間的掌握。電子萬年歷,包括顯示年月日時(shí)分秒以及星期信息,具備可調(diào)節(jié)時(shí)間和日期功能,并能保持與即時(shí)時(shí)間的一致性。該萬年歷選用12MHZ晶振,實(shí)現(xiàn)24小時(shí)為一個(gè)周期,同時(shí)顯示時(shí)間信息。萬年歷模塊流程圖如圖4-2所示。</p><p>  初始化后首先判斷是否需要修改日期,若需要修改,則通過鍵盤的控制,對年月日

52、時(shí)分秒進(jìn)行修改;若不需要修改日期,直接讀取日期,通過顯示程序顯示。</p><p>  圖4-2 萬年歷模塊流程圖</p><p>  萬年歷模塊計(jì)數(shù)/進(jìn)位主要代碼如下:</p><p>  TH0=(65536-48000)/256;</p><p>  TL0=(65536-48000)%256;</p><p>

53、;<b>  M++;</b></p><p>  if(M>=40) </p><p><b>  {Sec++;</b></p><p><b>  M=0;}</b></p><p>  If(sec>=60)</p><p><

54、;b>  {Min++;</b></p><p><b>  Sec=0;}</b></p><p>  if(Min>=60)</p><p><b>  {hour++;</b></p><p><b>  Min=0;}</b></p>

55、<p>  年月日時(shí)分秒星期共分7次完成讀取和寫入,定時(shí)器0計(jì)25ms,當(dāng)M自加到40時(shí),Sec自加1。進(jìn)位以秒單位和分單位為例,當(dāng)其小于60時(shí),其+1,當(dāng)其=60時(shí),清零并進(jìn)位。</p><p><b>  4.3 計(jì)價(jià)模塊</b></p><p>  通過讀取霍爾傳感器產(chǎn)生的脈沖信號并換算可以計(jì)算得出出租車行駛的距離,在得到行駛距離后通過計(jì)價(jià)模塊的運(yùn)

56、算即可得出總價(jià)。本計(jì)價(jià)模塊設(shè)有起步價(jià)。并具有行使價(jià),等候價(jià)自動的切換功能,將價(jià)格累計(jì)后得出總價(jià)。計(jì)價(jià)模塊流程圖如圖4-3所示。</p><p>  圖4-3 計(jì)價(jià)模塊流程圖</p><p>  磁性霍爾傳感器發(fā)出脈沖信號,微處理器在接收后,通過脈沖數(shù)*距離/脈沖的換算得出行駛的距離。當(dāng)行駛距離在起步距離之內(nèi)時(shí),讀取起步價(jià),當(dāng)行駛距離大于起步距離時(shí),根據(jù)超過的距離計(jì)算總價(jià)。若停車并且設(shè)定時(shí)

57、間內(nèi)未產(chǎn)生脈沖信號時(shí),轉(zhuǎn)換計(jì)時(shí)器0為計(jì)時(shí)器1,啟動等候價(jià)計(jì)價(jià)。當(dāng)再次產(chǎn)生脈沖信號,就切換回計(jì)時(shí)器0計(jì)時(shí),繼續(xù)計(jì)算行駛價(jià)格。</p><p>  4.3.1 計(jì)算距離</p><p>  在車輪轉(zhuǎn)動時(shí),霍爾傳感器的定子和轉(zhuǎn)子相接觸時(shí)就會產(chǎn)生一個(gè)脈沖信號,每讀取一個(gè)脈沖信號即可認(rèn)定汽車行駛了車輪周長的距離,通過讀取脈沖信號的個(gè)數(shù),就可以計(jì)算出前行的總里程。距離計(jì)算的流程圖如圖4-4所示。&l

58、t;/p><p>  圖4-4 距離計(jì)算流程圖</p><p>  在按下開始鍵后,調(diào)用距離計(jì)算模塊,通過讀取霍爾傳感器產(chǎn)生的脈沖,可以計(jì)算出行駛的距離。其主要代碼如下:</p><p>  X_Length=X_Length+2; //2m 霍爾的脈沖</p><p><b>  K++;</b></p>

59、<p>  X_Length為霍爾的脈沖,每產(chǎn)生一個(gè)脈沖,其自加Xm。由于目前車輪直徑都為25cm-30cm之間,所以本系統(tǒng)設(shè)其轉(zhuǎn)動一圈行駛距離為2m。K為出租車行駛標(biāo)志位。</p><p>  4.3.2 起步價(jià)內(nèi)的運(yùn)算</p><p>  按下開始鍵后,對路程的計(jì)算就開始了,通過與設(shè)定的路程相對比,判斷是否在起步距離之內(nèi),若在起步距離之內(nèi),就在LCD上顯示設(shè)定起步距離

60、和起步價(jià)。起步價(jià)的計(jì)算流程圖如圖4-5所示。</p><p>  圖4-5 起步價(jià)計(jì)算流程圖</p><p>  在開始后即進(jìn)入對路程的對比過程,當(dāng)路程小于設(shè)定路程,即為起步價(jià)內(nèi),顯示起步路程和起步價(jià)。其主要代碼如下:</p><p>  if(Flag==0) //起步里程內(nèi)</p><p>  if(X_Length>=1000

61、)</p><p><b>  Z_Sum++;</b></p><p>  X_Length=0;</p><p>  if(Z_Sum>=Li_Cheng)</p><p><b>  Flag=1;</b></p><p><b>  Flag_g=1;

62、</b></p><p>  Li_Cheng為設(shè)定的起步里程, X_Length>=1000,既霍爾產(chǎn)生500個(gè)脈沖信號,行駛距離為1公里,Z_Sum自加1,并將X_Length清零。諾Z_Sum小于Li_Cheng,只顯示起步價(jià),諾Z_Sum大于Li_Cheng,跳出起步價(jià)程序,進(jìn)入行駛價(jià)計(jì)算。</p><p>  4.3.3 行駛價(jià)的計(jì)算</p>&

63、lt;p>  通過起步價(jià)判斷,在實(shí)際行駛的路程已經(jīng)大于起步路程后,就進(jìn)入行駛價(jià)的計(jì)算環(huán)節(jié)。進(jìn)入行駛價(jià)計(jì)算后,每公里都按設(shè)定的行駛單價(jià)累計(jì),同時(shí)將更新的價(jià)格和距離實(shí)時(shí)的顯示在液晶屏上。行使價(jià)計(jì)算的流程圖如圖4-6所示。</p><p>  圖4-6 行使價(jià)計(jì)算流程圖</p><p>  跳出起步價(jià)的程序就自動啟動行駛價(jià)的計(jì)算,通過確認(rèn)行駛路程得出總價(jià),并實(shí)時(shí)顯示。其主要代碼如下:<

64、;/p><p>  if(X_Length>=1000) //起步里程之后每大于等于1公里</p><p><b>  Z_Sum++;</b></p><p>  X_Length=0;</p><p>  if(Hou>=7&&Min>=0&&Hou<22)&l

65、t;/p><p>  X_Money=X_Money+S_Money;</p><p>  當(dāng)進(jìn)入行駛價(jià)計(jì)算時(shí),X_Length>=1000為每行駛一公里,根據(jù)設(shè)定的單價(jià)進(jìn)行價(jià)格累計(jì)運(yùn)算。S_Money為設(shè)定每公里單價(jià),X_Money為總價(jià),單位為角。</p><p>  4.3.4 等候價(jià)的計(jì)算</p><p>  在碰到堵車等車輛長時(shí)

66、間停車的情況時(shí),等候價(jià)定時(shí)器開始計(jì)時(shí),通過與設(shè)定的時(shí)間對比,判斷是否進(jìn)入等候價(jià)的計(jì)算。若超過設(shè)定的等待時(shí)間就開始計(jì)算等候價(jià)。等候價(jià)計(jì)算的流程圖如圖4-7所示。</p><p>  圖4-7 等候價(jià)計(jì)算流程圖</p><p>  首先通過停車標(biāo)志位確認(rèn)是否為停車狀態(tài),若確實(shí)在停車狀態(tài),定時(shí)器開始計(jì)時(shí),與設(shè)定時(shí)間比較,超過時(shí)間以角/每分鐘為單位開始累積等候價(jià)。其主要代碼如下:</p>

67、;<p>  if(K<3) //停車標(biāo)志 (k的大小表示轉(zhuǎn)速)</p><p>  TH1=(65536-48000)/256;</p><p>  TL1=(65536-48000)%256;</p><p><b>  M++;</b></p><p>  if(M>=120)

68、</p><p><b>  Flag_c=1;</b></p><p>  if(Flag_c==1)</p><p><b>  C_Sec=0;</b></p><p><b>  C_Min++;</b></p><p>  X_Money= X

69、_Money+D_Money; //每等一分鐘加x“角”</p><p>  當(dāng)K<3時(shí),既認(rèn)定停車,開啟定時(shí)器1,M自加,當(dāng)M大于額定值時(shí),開始計(jì)算等候價(jià),每隔1分鐘X_Money開始自加x,單位是角。D_Money為可調(diào)節(jié)變量。由于X_Money為行駛價(jià),等候價(jià)共用參數(shù),故等候價(jià)直接累計(jì)進(jìn)行駛價(jià)內(nèi)。</p><p>  4.4 液晶顯示模塊</p><p&g

70、t;  出租車計(jì)價(jià)器的各項(xiàng)數(shù)據(jù)以及計(jì)算結(jié)果,通過液晶顯示程序顯示。STC89C51將信息發(fā)送給液晶顯示模塊,在LCD上顯示時(shí)間、價(jià)格、單價(jià)等各種狀態(tài)量。液晶顯示模塊的流程圖如圖4-8所示。</p><p>  圖4-8 液晶顯示程序流程圖</p><p>  液晶顯示流程中先選中選擇數(shù)據(jù)/指令寄存器,再進(jìn)行寫操作,E端為使能端,在寫入數(shù)據(jù)/指令程序后,當(dāng)EN端由高電平跳變成低電平時(shí),液晶

71、模塊執(zhí)行命令。</p><p>  4.4.1 寫指令</p><p>  在寫指令時(shí)先選中指令寄存器,指令寄存器(IR )用來保存當(dāng)前正在執(zhí)行的一條指令。給使能端低電平,將指令寫入指令寄存器后,再加一個(gè)上升沿,將指令保存。寫指令的流程圖如圖4-9所示。</p><p>  圖4-9 液晶寫指令流程圖</p><p>  液晶寫指令時(shí)先檢

72、測忙信號,然后選擇指令寄存器,選擇寫操作,將指令寫入后,在使能端加上升沿保存數(shù)據(jù)。其主要代碼如下:</p><p>  lcd_checkBusy(); //檢測忙碌狀態(tài)</p><p>  LCD_RS = 0; //RS至低,指令操作</p><p>  LCD_RW = 0; //RW至低,寫操作</p><p>  LCD_EN =

73、0;</p><p>  P0 = cmd; //指令數(shù)據(jù)</p><p>  LCD_EN = 1; //給使能端一個(gè)上升沿保存數(shù)據(jù)</p><p>  LCD_EN = 0; </p><p>  void lcd_checkBusy(void)是lcm用來檢測信號是否忙的信號函數(shù);RS定義為P2.5腳,為數(shù)據(jù)/命令端;RW定義為P2.6

74、腳,為讀/寫選擇端;EN定義為P2.7腳,為使能端。LCD_RS=0選擇指令寄存器。LCD_RW = 0時(shí),開始執(zhí)行寫操作,LCD_EN=0時(shí),液晶模塊開始執(zhí)行命令,寫入數(shù)據(jù)后,給使能端加一個(gè)上升沿保存數(shù)據(jù)。</p><p><b>  寫數(shù)據(jù)</b></p><p>  在寫數(shù)據(jù)時(shí),將RS端置低電平即選中數(shù)據(jù)寄存器。 數(shù)據(jù)寄存器是存放操作數(shù)、運(yùn)算結(jié)果和運(yùn)算的中間結(jié)果

75、,以減少訪問存儲器的次數(shù),或者存放從存儲器讀取的數(shù)據(jù)以及寫入存儲器的數(shù)據(jù)的寄存器。寫數(shù)據(jù)的流程圖如圖4-10所示。</p><p>  圖4-10 液晶寫數(shù)據(jù)流程圖</p><p>  液晶寫數(shù)據(jù)時(shí)先檢測忙信號,然后選擇數(shù)據(jù)寄存器,選擇寫操作,將數(shù)據(jù)寫入后,在使能端加上升沿保存數(shù)據(jù)。其主要代碼如下:</p><p>  lcd_checkBusy(); //檢測忙

76、碌狀態(tài) </p><p>  LCD_RS = 1; //RS至高,數(shù)據(jù)操作</p><p>  LCD_RW = 0;</p><p>  LCD_EN = 0;</p><p>  P0 = dat; //給LCD要顯示的數(shù)據(jù)</p><p>  LCD_EN = 1; //給使能端一個(gè)上升沿保存數(shù)據(jù)</p&

77、gt;<p>  LCD_EN = 0; </p><p>  LCD_RS=1是選擇數(shù)據(jù)寄存器。LCD_RW = 0時(shí),開始執(zhí)行寫操作,LCD_EN=0時(shí),液晶模塊開始執(zhí)行命令,寫入數(shù)據(jù)后,給使能端加一個(gè)上升沿保存數(shù)據(jù)。</p><p>  RS為高電平時(shí),選擇數(shù)據(jù)寄存器,寫入讀出數(shù)據(jù);為低電平時(shí),選擇指令寄存器,寫入讀出指令。RW為高電平時(shí),進(jìn)行讀操作;為低電平時(shí),進(jìn)行寫

78、操作。EN從高電平轉(zhuǎn)換到低電平時(shí),執(zhí)行命令。將變量傳給數(shù)據(jù)端P0口后,選擇數(shù)據(jù)寄存器,再進(jìn)行寫操作,將芯片進(jìn)行使能操作,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令,數(shù)據(jù)就寫入LCD了。</p><p>  4.5 單價(jià)調(diào)節(jié)模塊</p><p>  本模塊實(shí)現(xiàn)對起步價(jià),行駛單價(jià),等候單價(jià)等計(jì)價(jià)器參數(shù)的調(diào)節(jié)。同時(shí)為了防止司機(jī)隨意更改單價(jià),侵害消費(fèi)者利益,還設(shè)置了加密程序,只有輸入正確

79、的密碼后才能進(jìn)入單價(jià)的調(diào)節(jié)程序。本模塊,通過鍵盤模塊和加密模塊兩分模塊來實(shí)現(xiàn)功能。</p><p>  4.5.1 鍵盤模塊</p><p>  密碼的輸入和參數(shù)的修改都需要運(yùn)用鍵盤控制模塊。鍵盤模塊主要的工作是消抖和確認(rèn)鍵值。消抖分為消除前沿抖動和后沿抖動,消除前沿抖動的方法是通過設(shè)置延時(shí)命令,確定按下按鍵是否達(dá)到延時(shí)的時(shí)間;消除后延抖動則是通過閉合按鍵后發(fā)送數(shù)據(jù)防止按鍵按下后連續(xù)發(fā)送

80、同一鍵值。鍵盤模塊流程圖如圖4-11所示。</p><p>  圖4-11 鍵盤模塊流程圖</p><p>  在開始后,判斷是否有鍵閉合,若無按鍵,延遲6ms后返回閉合判定;若有按鍵則調(diào)用兩次延遲,進(jìn)行消抖判定,若為抖動返回閉合判定;若不是抖動求出閉合的鍵值,為了防止按鍵時(shí)鍵值的多次輸入,所以只有在按鍵釋放后才進(jìn)行賦值。按鍵主要程序如下:</p><p>  P

81、1=0x0f; </p><p>  if(P1==0x0f) return(0); //無鍵按下返回0.</p><p><b>  else</b></p><p>  mling(12); //調(diào)用延時(shí)函數(shù),去前沿鍵抖</p><p>  for

82、(a=0;a<4;a++)</p><p>  P1=_cror_(0x3f,a); //計(jì)算鍵值,依次將輸出線置低電平,檢查輸入線。</p><p>  if(P12==0) break;</p><p>  if(P13==0) break;</p><p>  Key=P1; //取得鍵值</p>

83、<p>  for(;P1!=0x0f;P1=0x0f) ; //等待按鍵釋放,去后沿鍵抖</p><p>  return(Key); //帶鍵值返回</p><p>  設(shè)置P1,若P1=0X0f,既無按鍵。若有就調(diào)用延遲子函數(shù),判斷是否為前沿抖動。P1=_cror_(0x7f,a)將輸入線置0檢查輸入線,逐行掃描輸出線,確定按鍵。取得鍵值后,等待

84、按鍵釋放后帶鍵值返回。</p><p>  4.5.2 密碼模塊</p><p>  在讀取了按鍵鍵入的鍵值后,需要與原來設(shè)定的密碼進(jìn)行比對,若錯(cuò)誤就跳出程序,若正確即可更具程序,對密碼進(jìn)行更改或者跳過開始對單價(jià)的更改。密碼模塊流程圖如圖4-12所示。</p><p>  圖4-12 密碼模塊流程圖</p><p>  對于鍵盤輸入的鍵值

85、,在識別后與存儲的原密碼相比較,判斷是否為正確密碼,錯(cuò)誤跳回輸入。若正確則進(jìn)入更改密碼環(huán)節(jié),可以輸入新密碼或跳過設(shè)置新密碼。在設(shè)置新密碼時(shí)需要兩次輸入相同密碼,否者重新輸入。若跳過更改密碼環(huán)節(jié)就進(jìn)入調(diào)節(jié)價(jià)格程序。</p><p><b>  一、密碼存儲</b></p><p>  對于設(shè)定的密碼需要對其進(jìn)行存儲,以便可以長久保持。采用EEPROM存儲,具備有掉電保存

86、數(shù)據(jù)的功能。EEPROM (Electrically Erasable Programmable Read-Only Memory),電可擦可編程只讀存儲器--一種掉電后數(shù)據(jù)不丟失的存儲芯片。 EEPROM 可以在電腦上或?qū)S迷O(shè)備上擦除已有信息,重新編程。</p><p>  1、先設(shè)置EEPROM的存儲空間</p><p>  EEPROM可以進(jìn)行讀取、寫入、和擦除。在開始工作之間,需要

87、對其各自不同的命令設(shè)置不同的存儲空間。其代碼如下:</p><p>  #define Read_CMD 0x01 //字節(jié)讀數(shù)據(jù)存儲區(qū)</p><p>  #define Write_CMD 0x02 //字節(jié)編程數(shù)據(jù)存儲區(qū)</p><p>  #define Dele_CMD 0x03 //扇區(qū)擦除數(shù)據(jù)存儲區(qū)</p><p>

88、  #define Read_CMD 0x01為設(shè)置讀數(shù)據(jù)存儲區(qū);#define Write_CMD 0x02為設(shè)置寫入數(shù)據(jù)存儲區(qū);#define Dele_CMD 0x03為設(shè)置扇區(qū)擦除數(shù)據(jù)存儲區(qū)</p><p><b>  2、進(jìn)行讀操作</b></p><p>  EEPROM讀操作的代碼如下:</p><p>  ISP_CONTR=E

89、n_Wait_Time; //開啟ISP/IAP;并送等待時(shí)間 </p><p>  ISP_CMD=Read_CMD; //送字節(jié)讀指令</p><p>  ISP_ADDRH=Byte_Addr/256;</p><p>  ISP_ADDRL=Byte_Addr%256;</p><p><b>  EA=0;</

90、b></p><p>  ISP_TRIG=0x46;//送觸發(fā)指令0x46,0xb9</p><p>  ISP_TRIG=0xb9;</p><p><b>  EA=1;</b></p><p>  ISP_CONTR=0x00;//禁止ISP/IAP 操作</p><p> 

91、 ISP_CMD=0x00;//去除ISP/IAP 命令</p><p>  首先開啟ISP/IAP,發(fā)送等候時(shí)間,ISP_CMD=Read_CMD即送字節(jié)讀指令。ISP_ADDRH=Byte_Addr/256;;ISP_ADDRL=Byte_Addr%256將數(shù)據(jù)存儲于ISP的高8位低8位中,關(guān)閉中斷,送觸發(fā)指令0x46,0xb9,開啟中斷,最后關(guān)閉ISP/IAP。</p><p>&

92、lt;b>  3、進(jìn)行寫操作</b></p><p>  EEPROM寫操作的代碼如下:</p><p>  ISP_CMD=Write_CMD; //送字節(jié)寫指令</p><p>  寫操作與讀操作代碼比較類似,ISP_CMD=Write_CMD送字節(jié)讀指令。</p><p><b>  4、擦除扇區(qū)<

93、;/b></p><p>  EEPROM擦除扇區(qū)的代碼如下:</p><p>  ISP_CMD=Dele_CMD; //送字節(jié)擦除指令</p><p>  ISP_ADDRH=Sector_Addr/256;</p><p>  ISP_ADDRL=Sector_Addr%256;</p><p>  

94、擦除扇區(qū)與寫操作代碼類似,ISP_CMD=Dele_CMD為送字節(jié)擦除指令,指令存儲區(qū)為Sector_Addr。</p><p><b>  二、密碼的比對</b></p><p>  在輸入數(shù)字之后,需要對輸入的數(shù)字與在存儲區(qū)內(nèi)設(shè)置的密碼進(jìn)行對比,判定輸入的數(shù)字是否正確。若錯(cuò)誤跳出操作。密碼對比流程圖如圖4-13所示。</p><p>  圖

95、4-13 密碼對比流程圖</p><p>  密碼的比對通過兩個(gè)步驟完成,首先對比數(shù)據(jù)位數(shù)是否正確,然后逐個(gè)數(shù)字對比時(shí)候全部正確。密碼比對的主要代碼如下:</p><p>  unsigned char ps[]={a1,a2,a3,a4,a5};</p><p>  unsigned char key; //輸入值</p><

96、p>  unsigned char keycount;//記錄輸入個(gè)數(shù)</p><p>  unsigned char getps[6]; //保存得到的密碼</p><p>  unsigned char pslen=5;//密碼長度</p><p>  if(keycount<6) //輸入少于6位</p>

97、<p>  getps[keycount]=key; //獲得的一位密碼</p><p>  keycount++; //等待取下一位</p><p>  if(keycount==6) //已經(jīng)輸入完了</p><p>  if(keycount!=pslen) //密碼長度不對,輸入錯(cuò)誤<

98、;/p><p>  errorflag=1; </p><p>  for(i=0;i<keycount;i++) //逐個(gè)比較</p><p>  if(getps[i]!=ps[i]) //發(fā)現(xiàn)錯(cuò)誤</p><p>  errorflag=1; </p><p><b>  else&l

99、t;/b></p><p>  rightflag=1; </p><p>  設(shè)置密碼為5位,定義為ps[],key為輸入值,keycount為輸入個(gè)數(shù),將輸入的密碼保存在gets[6]內(nèi)。當(dāng)keycount小于6時(shí),密碼未輸完全,可以繼續(xù)輸入新的位數(shù),直到keycount=6,當(dāng)輸入密碼位數(shù)不等于設(shè)定密碼位數(shù)時(shí),判定輸入錯(cuò)誤。當(dāng)相同時(shí),開始逐個(gè)對比輸入的數(shù)字,諾發(fā)現(xiàn)錯(cuò)誤,判定輸入

100、錯(cuò)誤,諾未發(fā)現(xiàn)錯(cuò)誤,則判定輸入正確。</p><p>  5系統(tǒng)電路圖以及PCB</p><p>  圖5-1 系統(tǒng)電路圖</p><p>  圖5-2 系統(tǒng)PCB圖</p><p><b>  6 結(jié)論</b></p><p>  本設(shè)計(jì)按照任務(wù)書的要求,基本完成了任務(wù)書規(guī)定的任務(wù)。制作出的

101、出租車計(jì)價(jià)系統(tǒng),所有模塊都能正常運(yùn)行,顯示清楚明了,計(jì)算迅速快捷,密碼識別準(zhǔn)確,調(diào)節(jié)方便。</p><p>  由于條件的不足,沒有將課題做進(jìn)一步研究。比如,可以增加模塊,可設(shè)溫度模塊、語音模塊等,這樣可以使本系統(tǒng)功能更強(qiáng)大,使用更方便。但這些措施勢必要增加系統(tǒng)設(shè)計(jì)的難度和成本,由于時(shí)間有限所以沒有采用,有待在以后的工作學(xué)習(xí)中不斷進(jìn)步。</p><p>  通過本次課程設(shè)計(jì),又使我學(xué)到了許

102、多書本上無法學(xué)到的知識,也使也深該體會到單片機(jī)技術(shù)應(yīng)用領(lǐng)域的廣泛,不僅使我對學(xué)過的單片機(jī)知識有了很多的鞏固,同時(shí)也對單片機(jī)這一門課程產(chǎn)生了更大的興趣。</p><p>  在本次課程設(shè)計(jì)過程中,我學(xué)會了在網(wǎng)絡(luò)上查找有關(guān)本設(shè)計(jì)的各硬件的資源,其中包括:STC89C51單片機(jī)及其引腳說明、12864引腳圖及其引腳功能等,為本次課程設(shè)計(jì)提供了一定的資料。也為以后的進(jìn)一步學(xué)習(xí)打下了堅(jiān)實(shí)的基礎(chǔ)。</p>&l

103、t;p><b>  參考文獻(xiàn)</b></p><p>  [1]李俊松,宋仲康.汽車車速傳感器測試系統(tǒng)的開發(fā)[J].汽車電器,2002,41(2):13-15.</p><p>  [2]鄭發(fā)農(nóng).電子式車速里程表[J].自動化儀表,2000,21(6):19-20.</p><p>  [3]杜錫勇,張弘,馮榮彪,駱明兒.光遮擋式激光測速

104、方法的研究[J].激光雜志,2009(4):10-12.</p><p>  [4]劉建生,程鐵棟.楊麗榮.基于CPLD和單片機(jī)的高精度超聲波測距研究[J].微計(jì)算機(jī)信息, 2006(5):21-22.</p><p>  [5]張和生,宋明耀.車載超聲測距儀的研制[J].儀表技術(shù)與傳感器,2003(2):11-13.</p><p>  [6]孫存英,俞嘉隆,喬衛(wèi)

105、平.超聲波探測技術(shù)原理實(shí)驗(yàn)[J].大學(xué)物理實(shí)驗(yàn),2010,23(1):31-34.</p><p>  [7]臧懷剛,趙保軍,陶然.可測速的智能超聲波液位儀[N].計(jì)量學(xué)報(bào),2006,27(4):17-18</p><p>  [8]陸晶晶,張為公,周耀群.基于GPS和加速度計(jì)的車速測量系統(tǒng)的開發(fā)與研制[J].測控技術(shù),2007(08):24-26.</p><p>

106、;  [9]林紹華.霍爾傳感器原理及在車速傳感器中的應(yīng)用[J].輕型汽車技術(shù),2003,31(12):14-16.</p><p>  [10]田漢波,趙英俊.一種基于線性霍爾傳感器的直流電機(jī)轉(zhuǎn)速測量方法[J].機(jī)械與電子,2007,23(1):31-34.</p><p>  [11]Cabric D,Mishra S M,Brodersen R W.Implementation Iss

107、ues inSpectrum Sensing for Cognitive Radios[J].The Thirty-eighthAsilomar Conference on Signals,Systems and Computers,Sep.2004,1:772~776.</p><p>  [12]beunen,Raoul;jaarsma,Catharinus F.& Kramer,Rob N.A. c

108、ounting of visitor in the Meijendel dunes,The Netherlands [J].Journal of Coastal Conservation 10 .2004:109~118.</p><p>  附錄1 系統(tǒng)程序</p><p>  //STC8051 22M晶振</p><p>  #include<re

109、g52.h></p><p>  #include<intrins.h></p><p>  #include<ds1302.h></p><p>  #include<eeprom.h></p><p>  #include<Key_Scan.h> </p><p&g

110、t;  volatile unsigned int X_Length=0;//X_Length:路程:0-1000m</p><p>  volatile unsigned char Z_Sum=0;//Z_Sum: 路程整數(shù)部分</p><p>  volatile unsigned char X_Money=0;//(單位:角)X_Money:</p><p&

111、gt;  volatile unsigned char M_Sum=0;//(單位:元)M_Sum:車費(fèi)整數(shù)部分(起步價(jià))</p><p>  volatile unsigned char S_Money=16;//(單位:角)S_Money:每公里單價(jià)</p><p>  volatile unsigned char B_Money=6;//(單位:元)S_Sum: 起步里程價(jià)&l

112、t;/p><p>  //volatile unsigned char Min=0,Hou=8,Sec,N;</p><p>  volatile unsigned char C_Min,C_Hou,C_Sec,M;</p><p>  volatile unsigned char Li_Cheng=2; //起步里程</p><p>  vol

113、atile unsigned int Num=0; //載客次數(shù)</p><p>  //volatile unsigned char W_SBUF[1];</p><p>  volatile unsigned char K=0; //出租車行駛標(biāo)志</p><p>  volatile unsigned char Flag_e; //使單片機(jī)斷電再上電具

114、有記憶功能</p><p>  bit Flag=0; //起步里程內(nèi)</p><p>  bit Flag_g=0;//起步里程之后的瞬間時(shí)刻</p><p>  bit Flag_c=0;//出租車等待標(biāo)志位</p><p>  bit Flag_k=0;//有無承載顧客</p><p>  bit

115、Flag_ck=0;//載客次數(shù)查看與清除標(biāo)志位</p><p>  sbit P00=P0^0; //是否停車標(biāo)志</p><p>  sbit P01=P0^1; //有無載客標(biāo)志</p><p>  sbit P02=P0^2;</p><p>  sbit P03=P0^3;</p><p>  sbi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論