自行車行程速度畢業(yè)設計--基于單片機的自行車里程速度計設計_第1頁
已閱讀1頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  畢業(yè)設計</b></p><p>  設計題目:基于單片機的自行車里程速度計設計</p><p>  學 院: </p><p>  專 業(yè): </p><p>  班 級: </p>&l

2、t;p>  姓 名: </p><p>  指導教師: </p><p>  日 期: 年 月 日</p><p><b>  摘 要</b></p><p>  目前自行車已成為人們娛樂、休閑、鍛煉的首選,尤其是對于用來鍛煉

3、的人們,自行車速度里程計讓他們清楚地知道當前的速度、里程等物理量,更好的用于鍛煉。本論文主要闡述一種基于霍爾元件的自行車速度里程計設計。以 AT89C51 單片機為核心,A44E 霍爾傳感器測轉(zhuǎn)數(shù),實現(xiàn)對自行車速度里程計測量統(tǒng)計。該速度里程計將傳感器輸入到單片機的脈沖信號的寬度實時地測量出來,然后通過單片機計算出速度和行程,再將所得的數(shù)據(jù)存儲到串口數(shù)據(jù)存儲器,采用CAT24WC32 實現(xiàn)在系統(tǒng)掉電的時候保存速度和行程信息,并由串口液晶顯

4、示模塊實時顯示出所測速度和行程。本設計介紹了自行車速度/里程測試儀的硬件電路和軟件設計。硬件部分利用霍爾元件將自行車每轉(zhuǎn)一圈的脈沖數(shù)傳入單片機系統(tǒng),然后單片機系統(tǒng)將信號經(jīng)過處理送顯示。軟件部分用匯編語言進行編程,采用模塊化設計思想。該系統(tǒng)硬件電路簡單,子程序具有通用性,完全符合設計要求。</p><p>  關鍵詞:速度/里程;霍爾元件;單片機;LCD液晶顯示</p><p><b&

5、gt;  Abstract</b></p><p>  Now the bicycle has become the first choice of entertainmenting and exercising. Especially for people to exercise,The bicycle speed/trip can fulfill the basic need of people’

6、s life, so that they can learn the speed and the mileage of the bicycle. In these paper, the bicycle speed/trip design based on the Hall element is elaborated. By AT89C51 as kernel, using A44E Hall element to measure re

7、volution, the measure and statistic are achieved. The range informations are saved by CAT24WC32 when the p</p><p>  Key words: speed/trip; Hall element; Single Chip Microcomputer; LCD</p><p><

8、;b>  目錄</b></p><p><b>  一、概述</b></p><p>  1、設計目的…………………………………………………………… 1</p><p>  2、課題簡介…………………………………………………………… 1</p><p><b>  二、系統(tǒng)設計</b&g

9、t;</p><p>  1、總體設計方案……………………………………………………… 2</p><p>  2、硬件部分簡介……………………………………………………… 3</p><p>  (1)AT89c51芯片簡介……………………………………………… 3</p><p>  (2)硬件設計…………………………………………………………

10、 4</p><p>  3、軟件部分…………………………………………………………… 5</p><p>  (1)初始化程序………………………………………………………6</p><p>  (2)主程序……………………………………………………………8</p><p>  (3)中斷程序…………………………………………………………9</

11、p><p>  (4)里程、速度處理程序……………………………………………11</p><p>  (5)顯示子程序………………………………………………………14</p><p>  (6)延時子程序………………………………………………………16</p><p>  三、調(diào)試………………………………………………………………………17</p&

12、gt;<p>  1、硬件調(diào)試…………………………………………………………… 17</p><p>  2、軟件調(diào)試…………………………………………………………… 17 </p><p>  四、操作說明…………………………………………………………………19</p><p>  五、參考文獻…………………………………………………………………20<

13、/p><p>  六、心得體會…………………………………………………………………21</p><p>  七、附錄………………………………………………………………………22</p><p>  1、元器件清單………………………………………………………… 22</p><p>  2、整體原理圖………………………………………………………… 23&l

14、t;/p><p>  3、完整程序…………………………………………………………… 24</p><p>  自行車里程計/速度計的設計</p><p><b>  概述</b></p><p><b>  設計目的</b></p><p>  本設計采用AT89C51單片機作控制

15、,利用霍爾元件等器件設計一個可用LED數(shù)碼管顯示當前自行車行駛的距離及速度并具有超速報警功能的自行車里程/速度表,使其作為自行車的一種輔助工具,讓自行車的功用更強大,給人們帶來更多的方便。</p><p><b>  課題簡介</b></p><p>  自行車被發(fā)明及使用到現(xiàn)在已有兩百多年的歷史,在這兩百年間人類在不斷的嘗試與研發(fā)過程中,自行車發(fā)展的目的也從最早的代

16、步工具轉(zhuǎn)換成休閑娛樂的用途,隨著生活水平的提高,人們希望自行車的功能更強大,而里程計/速度計正滿足了這個需求?,F(xiàn)在先進的里程/速度計不僅能顯示實時的速度和里程,還顯示時間,甚至具有測量騎車人的心跳、顯示騎車人熱量消耗等功能。</p><p>  由于時間有限,本設計完成的功能減為兩個,即測量并通過LED數(shù)碼管進行動態(tài)顯示當前的速度和里程,并在超速時發(fā)出警報。</p><p>  要求達到的

17、各項指標及實現(xiàn)方法如下:</p><p>  1. 利用霍爾傳感器產(chǎn)生里程數(shù)的脈沖信號。</p><p>  2. 對脈沖信號進行計數(shù)。</p><p>  實現(xiàn):利用單片機自帶的計數(shù)器T1對霍爾傳感器脈沖信號進行計數(shù)。</p><p>  3. 對數(shù)據(jù)進行處理,要求用LED顯示里程總數(shù)和即時速度。</p><p>

18、  實現(xiàn):利用軟件編程,對數(shù)據(jù)進行處理得到需要的數(shù)值。</p><p>  最終實現(xiàn)目標:自行車的速度里程表具有里程、速度測試與顯示功能,采用單片機作控制,顯示電路可顯示里程及速度。</p><p><b>  二、系統(tǒng)設計</b></p><p><b>  1、總體設計方案</b></p><p&g

19、t;  采用AT89C51芯片,用霍爾元件將車輪的轉(zhuǎn)速轉(zhuǎn)換成電脈沖,經(jīng)過處理后送入單片機。里程及速度的測量,是經(jīng)過AT89C51的定時/計數(shù)器測出總的脈沖數(shù)和每轉(zhuǎn)一圈的時間,再經(jīng)過單片機的計算得出,計算結(jié)果通過LED顯示器顯示出來。</p><p>  傳感器是獲取自然或生產(chǎn)領域中信息的關鍵器件,是現(xiàn)代信息系統(tǒng)和各種設備不可缺少的信息采集工具。磁傳感器是一種將磁學量信號轉(zhuǎn)變?yōu)殡娦盘柕钠骷蜓b置。隨著信息產(chǎn)業(yè)、工業(yè)

20、自動化、醫(yī)療儀器等的飛速發(fā)展和計算機應用的普及,需要大量的傳感器將被測或被控的非電信號轉(zhuǎn)換成可與計算機兼容的電信號。作為輸入信號,這就給磁傳感器的快速發(fā)展提供了機遇,形成了磁傳感器的產(chǎn)業(yè)。其中最具代表的磁傳感器就是霍爾傳感器,在自動檢測系統(tǒng)中,利用霍爾傳感器測轉(zhuǎn)數(shù)是一種最基本的測量工作。</p><p>  單片機是本次設計的核心部件,它是信號從采集到輸出的橋梁,而且包括計算、定時、信息處理等功能</p&g

21、t;<p>  當輪子每轉(zhuǎn)一圈,通過開關型霍爾元件傳感器采集到一個脈沖信號,并從引腳12即P3.2外部中斷0端輸入,傳感器每獲取一個脈沖信號即對系統(tǒng)提供一次計數(shù)中斷。每次中斷代表車輪轉(zhuǎn)動一圈,中斷數(shù)n輪圈的周長為L的乘積為里程值。計數(shù)器T1計算每轉(zhuǎn)一圈所用的時間t,就可以計算出即時速度v。當里程鍵按下時,里程指示燈亮,LED切換顯示當前里程,與當速度鍵按下時,速度指示燈亮,LED切換顯示當前速度,若自行車超速,系統(tǒng)發(fā)出報警

22、信號,指示燈閃爍。里程數(shù)據(jù)自動記憶,也可用于電動自行車、摩托車、汽車等機動車儀表上。</p><p>  設計包括硬件、軟件兩部分,硬件電路包括AT89C51單片機的外圍電路以及LED顯示電路等,這里對硬件部分只做簡單介紹,主要闡述的是軟件部分的設計,包括數(shù)據(jù)初始化程序的設計、主程序的設計、處理子程序的設計、顯示子程序的設計;最后針對仿真過程遇到的問題進行了具體說明與分析,對本次設計進行總結(jié)。</p>

23、<p>  圖2.1 系統(tǒng)的原理框圖</p><p><b>  硬件部分介紹</b></p><p> ?。?)AT89C51芯片簡介</p><p>  AT89C51是一種帶4K字節(jié)閃存可編程可擦除的只讀存儲器即為</p><p> ?。‵PEROM—Flash Programmable and Er

24、asable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機。</p><p>  圖2-2 單片機內(nèi)部機構(gòu)示意圖</p><p><b>  管腳說明:</b></p><p><b>  VCC:供電電壓。</b></p><p><b>  GN

25、D:接地。</b></p><p>  P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。</p><p>  P1口:P1口是一個內(nèi)部提供

26、上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 </p><p>  P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作

27、為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。</p><p>  P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出

28、4個TTL門電流。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p>  P3口也可作為AT89C51的一些特殊功能口,如下表所示:</p><p><b>  口管腳 備選功能</b></p><p>  P3.0 RXD(串行輸入口)<

29、;/p><p>  P3.1 TXD(串行輸出口)</p><p>  P3.2 /INT0(外部中斷0)</p><p>  P3.3 /INT1(外部中斷1)</p><p>  P3.4 T0(記時器0外部輸入)</p><p>  P3.5 T1(記時器1外部輸入)</p><p>  P3

30、.6 /WR(外部數(shù)據(jù)存儲器寫選通)</p><p>  P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)</p><p>  P3口同時為閃爍編程和編程校驗接收一些控制信號。</p><p>  RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。</p><p>  ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸

31、出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無

32、效。</p><p>  /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。</p><p>  /EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當/EA端保持高電平

33、時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。</p><p>  XTAL2:來自反向振蕩器的輸出。</p><p><b>  振蕩器特性:</b></p><p>  XTAL1和XTAL2分別

34、為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。</p><p><b>  (2)硬件設計</b></p><p>  自行車里程計/速度計電路原理圖見附錄。<

35、/p><p>  本次設計信號的捕獲采用的是霍爾傳感器。 霍爾器件具有許多優(yōu)點,它們的結(jié)構(gòu)牢固、體積小、重量輕、壽命長、安裝方便、功耗小、頻率高(可達1MHz)、耐震動、不怕灰塵、油污、水汽及煙霧等的污染或腐蝕?;魻柧€性器件的精度高、線性度好;霍爾開關器件無觸點、無磨損、輸出波形清晰、無抖動、無回跳、位置重復精度高。取用各種補償和保護措施的霍爾器件工作溫度范圍寬,可達-55℃~150℃。XTAL1和XTAL

36、2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應不接。由于輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。</p><p>  P0口作為輸出口用于顯示歷程狀態(tài)和速度狀態(tài)。由于P0口沒有上拉電阻,</p><p>  因此作為輸出口時要加上上

37、拉電阻來驅(qū)動LED數(shù)碼管的點亮。接于引腳10即P3.2、RXD的開關用于控制改變顯示的方式,當開關閉合時,顯示速度;開關打開時顯示里程。第12腳即外部中斷0用于對輪子圈數(shù)的計數(shù)輸入,輪子每轉(zhuǎn)一圈,霍爾傳感器輸出一個低電平脈沖。第十三腳即外部中斷1用于控制定時器T1的啟停,當輸入為0時關閉定時器。此控制信號是將輪子圈數(shù)的計數(shù)脈沖經(jīng)二分頻后形成,這樣,每次定時器T1的開啟時間剛好為轉(zhuǎn)一圈的時間,根據(jù)輪子的周長就可以計算出自行車的速度。P1.

38、4口和P1.5口用于EEPROM存儲器24C01的存取控制。11腳輸出用于超速時的報警,此時蜂鳴器發(fā)出聲音,同時LED燈閃爍。</p><p>  LED數(shù)碼管采用四位相連的共陰極數(shù)碼管,片選信號分別通過三極管接</p><p>  至21-24管腳即P2.0-P2.4口,從而實現(xiàn)里程和速度的動態(tài)顯示。</p><p>  自行車的速度里程表的硬件電路設計是基礎部分

39、,它包括信號的捕獲、放大、整形,單片機的計算處理,數(shù)碼管的實時顯示和單片機外圍基本電路的設計,兩大主要器件就是傳感器和單片機。</p><p>  3.軟件部分軟件部分</p><p>  模塊化結(jié)構(gòu)設計即是根據(jù)要求和硬件設計的結(jié)構(gòu),將整個系統(tǒng)的功能分成許多小的功能模塊,再根據(jù)這些小的功能模塊進行程序編寫的過程。這樣的設計方法,使得系統(tǒng)的整個功能和各部分的功能趨于明朗化。當系統(tǒng)出現(xiàn)問題,就

40、可以根據(jù)功能設置找出問題的根源,從而更快地解決問題。所以說,在整個設計過程中,軟件設計必須與硬件設計緊密地結(jié)合在一起。</p><p>  軟件設計包括初始化程序、主程序、行車過程中里程和速度計算子程序、延時子程序、中斷服務子程序、顯示子程序等。</p><p>  系統(tǒng)軟件總體流程圖如圖3.1所示</p><p>  總體設計思路:首先進行初始化,選擇車輪周長,P

41、3.0是用于里程和速度切換的,低電平為顯示速度,高電平為顯示里程。根據(jù)P3.0的狀態(tài)來決定顯示內(nèi)容,P3.0=1時,轉(zhuǎn)到計算速度子程序并進行顯示;P3.0=0時,轉(zhuǎn)到計算里程子程序并進行顯示。P1.0和P1.1口分別用于顯示里程狀態(tài)和速度狀態(tài)。P1.2、P1.3、P1.6和P1.7口分別用于設置輪圈的大小,低電平有效。中斷0用于對輪子圈數(shù)的計數(shù)輸入,輪子每轉(zhuǎn)一圈,霍爾傳感器輸出一個低電平脈沖。將根據(jù)里程寄存器中的內(nèi)容計算和判斷出行駛里程

42、數(shù)。中斷1用于控制定時器T1的啟/停,當輸入為0時關閉定時器。此控制信號是將輪子圈數(shù)的計數(shù)經(jīng)二分頻后形成。這樣,每次定時器T1的開啟時間剛好為轉(zhuǎn)一圈的時間,根據(jù)輪子的周長就可以計算出自行車的速度。</p><p>  圖 3.1 系統(tǒng)整體流程圖 </p><p>  主要內(nèi)存單元及用處:</p><p>  50H:E

43、EPROM器件尋址字節(jié)存放單元</p><p>  51H:EEPROM傳送字節(jié)數(shù)存放單元</p><p>  30H:EEPROM發(fā)送數(shù)據(jù)緩沖單元</p><p>  40H:EEPROM讀出數(shù)據(jù)存放單元</p><p>  0A0H:EEPROM尋址字節(jié)寫入</p><p>  0A1H:EEPROM尋址字節(jié)讀出&

44、lt;/p><p>  62H:DPTR計數(shù)擴展高8位</p><p>  6CH:定時器T1計數(shù)擴展高8位</p><p>  6DH:定時器T1計數(shù)擴展高8—16位</p><p>  60H、61H、62H:里程計數(shù)單元</p><p>  68H、69H、6AH、6BH:存放自行車每圈時間數(shù)</p>

45、<p>  70H、71H、72H、73H:顯示BCD碼數(shù)據(jù)存放用</p><p>  11H--15H:存放被除數(shù)</p><p>  16H—19H:存放除</p><p><b>  (1)初始化程序</b></p><p>  初始化程序主要完成以下工作:將T1設為外部控制定時器方式;外部中斷0及外部中

46、斷1設為邊沿觸發(fā)方式;將部分內(nèi)存單元清0;設置輪子周長;開中斷及定時器;將EEPROM中的數(shù)據(jù)調(diào)入內(nèi)存。</p><p>  CLEARMEN:MOV TMOD,#90H ;T1為16位外部控制定時器</p><p>  MOV SP,#75H ;堆棧從75H開始</p><p>  SETB PX0 ;外部

47、中斷0優(yōu)先級為1</p><p>  SETB IT0 ;外部中斷0用邊沿觸發(fā)</p><p>  SETB IT1 ;外部中斷1用邊沿觸發(fā)</p><p>  CLR A ;清A</p><p>  MOV 20H,A ;清內(nèi)存中特定

48、單元</p><p>  MOV 6CH,A ;清內(nèi)存中特定單元</p><p>  MOV 6DH,A ;清內(nèi)存中特定單元</p><p>  MOV 70H,A ;清內(nèi)存中特定單元</p><p>  MOV 71H,A ;清內(nèi)存中特定單元&l

49、t;/p><p>  MOV 72H,A ;清內(nèi)存中特定單元</p><p>  MOV 73H,A ;清內(nèi)存中特定單元</p><p>  MOV 60H,A ;清內(nèi)存中特定單元</p><p>  MOV 61H,A ;清內(nèi)存中特定單元

50、 6</p><p>  MOV 62H,A ;清內(nèi)存中特定單元</p><p>  MOV 63H,A ;清內(nèi)存中特定單元</p><p>  DEC A ;A為0FFH</p><p>  MOV 68H,A ;

51、內(nèi)存置數(shù)據(jù)0FFH</p><p>  MOV 69H,A ;內(nèi)存置數(shù)據(jù)0FFH</p><p>  MOV 6AH,A ;內(nèi)存置數(shù)據(jù)0FFH</p><p>  MOV 6BH,A ;內(nèi)存置數(shù)據(jù)0FFH</p><p>  MOV P1,A ;

52、P1口置1</p><p>  CLEAR1: JB P1.2,KEY1 ;根據(jù)P1.2設置狀態(tài)</p><p>  MOV 21H,#0FH </p><p>  LJMP CLEAR2 ;轉(zhuǎn)CLEAR2</p><p>  KEY1: JB P1.3,KEY2

53、 ;根據(jù)P1.3設置狀態(tài)</p><p>  MOV 21H,#12H</p><p>  LJMP CLEAR2</p><p>  KEY2: JB P1.6,KEY3 ;根據(jù)P1.6設置狀態(tài)</p><p>  MOV 21H,#14H </p><p>  LJMP

54、 CLEAR2</p><p>  KEY3: JB P1.7,ERR ;根據(jù)P1.7設置狀態(tài)</p><p>  MOV 21H,#19H</p><p>  CLEAR2: SETB TR1 ;開定時器T1</p><p>  SETB EA ;開中斷

55、允許</p><p>  SETB EX0 ;開外中斷0</p><p>  SETB ET1 ;開定時中斷T1</p><p>  SETB P3.1 ;關報警器</p><p>  LCALL VIICREAD ;將EEPROM中原里程數(shù)據(jù)調(diào)入內(nèi)存<

56、/p><p><b>  RET</b></p><p>  ERR: CPL P3.1 ;未設置車輪周長,開始報警</p><p>  LCALL DL5S ;延時5S</p><p>  LJMP CLEAR1 ;重新初始化</p>&l

57、t;p>  初始化具體過程:首先對P1.2口的內(nèi)容進行查詢,若P1.2=0,則說明P1.2口接的按鈕被按下,即選擇第一種車輪周長,同時將周長存入21H單元內(nèi);若P1.2=1,則第一個按鈕沒被按下,再對P1.3口的內(nèi)容進行查詢,內(nèi)容為0則將其周長值存入21H中,不為0則掃描P1.6,內(nèi)容為0則將其周長值存入21H中,不為0則掃描P1.7,若P1.7為0則將其周長值存入21H中,不為0則說明沒有選擇車輪直徑,此時開始報警,并調(diào)用延時子

58、程序。接著再從P1.2口掃描,如此循環(huán),直到有鍵按下后停止報警。</p><p>  圖 3.2 初始化程序流程圖</p><p><b>  (2)主程序</b></p><p>  主程序根據(jù)P3.0口的開關狀態(tài)選擇里程速度顯示。</p><p>  START: LCALL CLEARMEN

59、 ;上電初始化</p><p>  START1: JB P3.0,DISPLAYS ;P3.0=1,顯示里程</p><p>  LCALL DISPLAYV ;P3.0=0,顯示速度</p><p>  START2: SJMP START1 ;循環(huán)</p><

60、;p>  圖3.3 主程序流程圖</p><p>  (3)用外部中斷0實現(xiàn)的里程計數(shù)程序</p><p>  定時中斷是為滿足定時或計數(shù)的需要而設置的。在單片機內(nèi)部有兩個定時/計數(shù)器,以對其中的計數(shù)結(jié)構(gòu)進行計數(shù)的方法,來實現(xiàn)定時或計數(shù)功能。當結(jié)構(gòu)發(fā)生計數(shù)溢出時,即表明定時時間或計數(shù)值已滿,這時就以計數(shù)溢出信號作為中斷請求,去置位一個溢出標志,作為單片機接受中斷請求的標志。這種

61、中斷請求是在單片機芯片內(nèi)部發(fā)生的,因此無須在芯片上設置引入端。</p><p>  定時/計數(shù)器控制寄存器TCON是8位寄存器,地址為88H,可以位尋址。其高4位用于定時/計數(shù)器中斷控制,低4位借給外部中斷,用做中斷標志和觸發(fā)方式選擇位。本設計采用定時中斷,對自行車的里程和速度進行計數(shù)。</p><p>  INTEX0: PUSH ACC ;累加器堆棧

62、保護</p><p>  PUSH PSW ;狀態(tài)字堆棧保護</p><p>  INC 60H ;圈數(shù)加1</p><p>  CLR A ;清A</p><p>  CJNE A,60H,INTEX0OUT ;計數(shù)器沒溢

63、出轉(zhuǎn)INTEX0OUT</p><p>  INC 61H ;溢出進位(61H加1)</p><p>  CJNE A,61H,INTEX0OUT ;計數(shù)器沒溢出轉(zhuǎn)INTEX0OUT</p><p>  INC 62H ;溢出進位(62H加1)</p><p>

64、  INTEX0OUT:LCALL VIICWRITE ;里程數(shù)據(jù)存入EEPROM</p><p>  SETB EX1 ;開外部中斷1</p><p>  POP PSW ;狀態(tài)字恢復</p><p>  POP ACC ;累加器恢復

65、 RETI ;中斷返回</p><p>  ;每轉(zhuǎn)一圈時間計數(shù)處理程序,每圈時間放在68H—6BH單元中</p><p>  INTEX1: PUSH ACC ;累加器堆棧保護</p><p>  PUSH PSW ;狀態(tài)字堆棧保

66、護</p><p>  CLR EX1 ;關外部中斷1</p><p>  JNB 00H,INTEX11 ;溢出標志為0轉(zhuǎn)INTEX11</p><p>  MOV TL1,#0FFH ;溢出時計時單元賦#0FFH(顯示速度為零)</p><p>  MOV TH1,#

67、0FFH </p><p>  MOV 6CH,#0FFH</p><p>  MOV 6DH,#0FFH</p><p>  INTEX11: MOV 68H,TL1 ;將時間計數(shù)值移入暫存單元68H-6BH</p><p>  MOV 69H,TH1 </p><p&

68、gt;  MOV 6AH,6CH</p><p>  MOV 6BH,6DH</p><p>  CLR A ;清A</p><p>  MOV TL1,A ;計數(shù)單元置零</p><p>  MOV TH1,A</p><p>  MOV

69、 6CH,A</p><p>  MOV 6DH,A</p><p>  CLR 00H ;清溢出標志</p><p>  POP PSW ;狀態(tài)字堆棧恢復</p><p>  POP ACC ;累加器堆?;謴?lt;/p>&

70、lt;p>  RETI ;中斷返回</p><p>  ;T1計數(shù)器中斷服務程序。(計數(shù)器T1由外部中斷1輸入控制,當為高電平時計時開始)</p><p>  INTT1: PUSH ACC ; 累加器堆棧保護</p><p>  PUSH PSW ;狀態(tài)字堆棧

71、保護</p><p>  INC 6CH ;6C計時單元加1</p><p>  MOV A,6CH ;6C單元內(nèi)容移入A</p><p>  JNZ INTT11 ;不為0,轉(zhuǎn)INTT11</p><p>  INC 6DH ;進位

72、,6DH單元加1</p><p>  MOV A,6DH ;移入A</p><p>  JNZ INTT11 ;不為0,轉(zhuǎn)INTT11</p><p>  SETB 00H ;計時器溢出,置溢出標志位</p><p>  INTT11: POP PSW

73、 ;狀態(tài)字堆?;謴?lt;/p><p>  POP ACC ;累加器堆?;謴?lt;/p><p>  RETI ;中斷返回</p><p>  圖 3.4 中斷流程圖</p><p>  (4)里程、速度處理程序</p><p><b&

74、gt;  里程處理程序</b></p><p>  外中斷0服務程序用于對單片機P3.2口輸入的圈脈沖進行計數(shù),為十六進制計數(shù)器。60H為低位,62H為高位。每次計數(shù)一次后,對里程數(shù)據(jù)進行一次存儲操作。當車輪每轉(zhuǎn)一圈,通過霍爾元件將脈沖數(shù)輸入單片機內(nèi),通過計數(shù)器計出脈沖數(shù),再用乘法子程序算出里程數(shù)。</p><p>  SSS: MOV 19H,#64H

75、 ;除數(shù)最高位賦值</p><p>  MOV 18H,#00H ;除數(shù)賦值</p><p>  MOV 17H,#00H ; 除數(shù)賦值</p><p>  MOV 16H,#00H ; 除數(shù)賦值</p><p>  MOV 11H,#00H

76、 ; 被除數(shù)賦值</p><p>  MOV 12H,#00H ; 被除數(shù)賦值</p><p>  MOV 13H,62H ; 被除數(shù)賦值</p><p>  MOV 14H,61H ; 被除數(shù)賦值</p><p>  MOV 15

77、H,60H ; 被除數(shù)賦值</p><p>  LCALL DIVST ;調(diào)除法程序 LCALL BCDST ; 跳到二進制轉(zhuǎn)BCD碼程序</p><p>  MOV A,25H ;將25H內(nèi)容移入A</p><

78、p>  ANL A,#0FH ; 高四位為0</p><p>  MOV 70H,A ;移入70H</p><p>  MOV A,25H ; 將25H內(nèi)容移入A</p><p>  SWAP A ;交換高低字節(jié)</p>

79、;<p>  ANL A,#0FH ; 高四位為0</p><p>  MOV 71H,A ; 移入71H</p><p>  MOV A,24H ; 將24H內(nèi)容移入A</p><p>  ANL A,#0FH ; 高四位為0&

80、lt;/p><p>  MOV 72H,A ; 移入72H</p><p>  MOV A,24H ; 將24H內(nèi)容移入A</p><p>  SWAP A ; 交換高低字節(jié)</p><p>  ANL A,#0FH

81、 ; 高四位為0</p><p>  MOV 73H,A ; 移入73H</p><p><b>  RET</b></p><p>  圖 3.5 里程處理程序流程圖</p><p><b>  速度處理程序</b></p><p>  外中

82、斷1服務程序用于處理輪子轉(zhuǎn)動一圈后的計時數(shù)據(jù)。當標志位(00H)為1時,計數(shù)溢出,放入最大時間值(為#0FFH);當標志位為0時,將計數(shù)單元(TL1、TH1、6CH、6DH)的值放入68H~6BH單元。定時器計出每轉(zhuǎn)一圈所用的時間,用自行車車輪的周長除以時間就得出自行車的速度。</p><p>  VVV: MOV 18H,68H ;除數(shù)賦值</p><p>

83、;  MOV 17H,69H ;除數(shù)賦值</p><p>  MOV 16H,6AH ;除數(shù)賦值 </p><p>  MOV 11H,#00H ;被除數(shù)賦值</p><p>  MOV 12H,#00H ;被除

84、數(shù)賦值</p><p>  MOV 13H,#36H ;被除數(shù)賦值</p><p>  MOV 14H,#0EEH ;被除數(shù)賦值</p><p>  MOV 15H,#80H ;被除數(shù)賦值</p><p>  LCALL DIVST ;調(diào)除

85、法程序</p><p>  MOV 14H,#00H ;舍去一位</p><p>  LCALL BCDST ;跳到二進制轉(zhuǎn)BCD碼程序</p><p>  MOV A,25H ;以下將速度值放入顯示單元</p><p>  ANL A,#0FH

86、 ;高四位為0</p><p>  MOV 70H,A ;放入70H內(nèi)</p><p>  MOV A,25H ;再取數(shù)</p><p>  SWAP A ;高低字節(jié)交換</p><p>  ANL A,#0FH

87、 ;高四位為0</p><p>  MOV 71H,A ;放入71H內(nèi)</p><p>  MOV 72H,#00H ;72H為0</p><p>  MOV 73H,#00H ;73H為0</p><p>  RET

88、 ;子程序返回</p><p>  圖 3.6速度處理程序流程圖</p><p><b>  (5)顯示子程序</b></p><p>  采用動態(tài)掃描顯示接口電路,動態(tài)顯示接口電路是把所有顯示器的8個筆劃段a-h同名端連在一起,而每一個顯示器的公共極COM各自獨立地受I/O線控制。CPU向字段輸出口送出字型碼時,所有顯示器

89、接收到相同的字型碼,但究竟是哪個顯示器亮,則取決于COM端??梢圆捎梅謺r的方法,輪流控制各個顯示器的COM端,使各個顯示器輪流點亮。在輪流點亮掃描過程中,每位顯示器的點亮時間是極為短暫的(約1ms),由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應,盡管實際上各位顯示器并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感。</p><p>  本設計P2.0、P2.1、P2.2、P2.3

90、信號一起組成位選通的位選信號,P0.0~P0.7信號一起組成段碼選通的段選信號,通過軟件編程,先把所要顯示的數(shù)據(jù)放入存儲單元,然后把數(shù)據(jù)送入段選通對應的地址,再選通某一個LED,逐步完成四個LED的顯示。</p><p><b>  ;里程顯示控制程序</b></p><p>  DISPLAYS:SETB P1.0 ;點亮LED1</

91、p><p>  CLR P1.1 ;關閉速度指示燈</p><p>  SETB P3.7</p><p>  LCALL SSS ;將圈數(shù)轉(zhuǎn)為公里數(shù)</p><p>  LCALL DISPLAY ;顯示公里數(shù)據(jù)</p><p>  LJMP S

92、TART1 ;跳回START1</p><p><b>  ;速度顯示程序</b></p><p>  DISPLAYV:CLR P1.0 ;關閉LED1(里程指示燈)</p><p>  SETB P1.1 ;點亮LED2(速度指示燈)</p><p

93、>  CLR P3.7 </p><p>  LCALL VVV ;每圈時間換算為KM/H程序</p><p>  MOV A,71H ;將十位數(shù)(BCD碼)值植入A</p><p>  SUBB A,#04H ;與預定報警值比較</p>&l

94、t;p>  JNC WARING ;時速超過40時報警</p><p>  SETB P3.1 ;關報警燈</p><p>  V1: LCALL DISPLAY ;顯亮一次</p><p>  RET ;子程序返回</p>

95、<p>  DISPLAY: MOV R1,#70H ;顯示單元首址</p><p>  MOV R2,#0FEH ;掃描字</p><p>  PLAY: MOV A,R2 ;掃描字送入A</p><p>  MOV P2,A ;放到端口P2&l

96、t;/p><p>  MOV A,@R1 ;取顯示數(shù)據(jù)</p><p>  ANL A,#0FH ;高四位清0</p><p>  MOV DPTR,#TAB ;取段碼表首址</p><p>  MOVC A,@A+DPTR ;查顯示數(shù)據(jù)對應段碼

97、 MOV P0,A ;段碼輸出</p><p>  LCALL DL1MS ;點亮1MS</p><p>  INC R1 ;指向下一顯示數(shù)據(jù)地址</p><p>  MOV A,R2 ;取掃描字</p><p>

98、  JNB ACC.3,ENDOUT ;已掃描到第四位,轉(zhuǎn)ENDOUT退出</p><p>  RL A ;循環(huán)左移</p><p>  MOV R2,A ;放回R2</p><p>  AJMP PLAY ;轉(zhuǎn)PLAY循環(huán)</p><p>

99、  ENDOUT: SETB P2.0 ;關掃描</p><p>  SETB P2.1 ;關掃描</p><p>  SETB P2.2 ;關掃描</p><p>  SETB P2.3 ;關掃描</p><p>  RET

100、 ;子程序返回</p><p><b>  ;共陰極段碼表</b></p><p>  TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H</p><p>  DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H</p><p>

101、;<b>  DB 00H</b></p><p>  圖 3.5 顯示程序流程圖</p><p><b>  (6)延時子程序</b></p><p>  ;1ms延時程序 利用循環(huán)實現(xiàn)延時</p><p>  DL1MS: MOV R6,#14H</p><p&

102、gt;  DL1: MOV R7,#19H</p><p>  DL2: DJNZ R7,DL2 ;循環(huán)19H次</p><p>  DJNZ R6,DL1 ;循環(huán)14H次</p><p><b>  RET</b></p><p>  ;出錯閃爍利用延時255ms</p><

103、;p>  DL5S: MOV R5,#0FFH </p><p>  DL3: LCALL DL1MS ;調(diào)用1ms延時</p><p>  DJNZ R5,DL3 ;循環(huán)255次</p><p><b>  RET</b></p><p><b>  三、調(diào)試</b&

104、gt;</p><p><b>  1.硬件調(diào)試</b></p><p>  硬件調(diào)試時,我們首先檢查了接線,對照電路原理圖,確保準確無誤。其次是檢查各個焊點是否有虛焊的情況,檢查無誤后,接通經(jīng)穩(wěn)壓后的5V電源。硬件的修改可在元器件參數(shù)方面調(diào)整,如電阻的阻值等。</p><p><b>  2.軟件調(diào)試</b></p

105、><p>  先用KEIL軟件輸入完整的程序,進行編譯。</p><p>  首先,新建一個項目選擇AT89C51,新建一個文件,將程序輸入,輸完后保存,保存時需加后綴名.ASM。然后將文件添加到新建的工程下。進行檢錯和編譯,窗口如圖3.2所示。</p><p>  圖 3.1 KEIL編譯窗口</p><p>  編譯無誤后即可運行,運行時可

106、從Peripherals中調(diào)出輸出口P0—P3來觀察輸出情況。運行時窗口如圖3.1所示。</p><p>  圖 3.2 KEIL運行窗口 17</p><p>  接著再使用PROTEUS仿真軟件進行仿真。首先新建一個文件,選擇所需的元件并排列好,根據(jù)電路原理圖進行布線。當完成原理圖布線后,利用PROTEUS ISIS編輯環(huán)境所提供的電器規(guī)則檢查命

107、令對設計進行檢查,并根據(jù)系統(tǒng)提供的錯誤檢查報告修改原理圖。直到通過電器規(guī)則檢查為止。然后在KEIL中生成HEX文件,雙擊AT89C51芯片,將完整的程序灌入芯片,單擊左下角的開始箭頭即可開始模擬仿真。</p><p>  在仿真過程中遇到過一些問題,針對這些問題做了些軟件方面的調(diào)整。</p><p>  剛開始仿真時,P0口是灰色的,數(shù)碼管沒有點亮。經(jīng)檢查是由于P0口內(nèi)部沒有上拉電阻,因此

108、,必須另外加上,上拉電阻一段接P0口,另一端直接接到電源的正集。接上后數(shù)碼管點亮,但顯示的是亂碼經(jīng)過仔細的檢查,發(fā)現(xiàn)了程序中的錯誤,硬件中選用的是共陰極數(shù)碼管,而程序中錯用了共陽極的段碼表,從而造成了應該點亮的部分沒亮,而不該點亮的部分反而亮了的錯誤情況。</p><p><b>  18</b></p><p><b>  四、操作說明</b>

109、</p><p>  本設計為自行車里程計/速度計,實現(xiàn)了里程速度計的基本功能。</p><p>  接通電源后,由于未選擇車輪周長,蜂鳴器報警提示,同時LED燈D3閃爍,直到有鍵按下。當按下P1.2口所接開關SW2時選擇車輪周長1,按下P1.3口所接開關SW3時選擇車輪周長2,按下P1.6口所接開關SW4時選擇車輪周長3,P1.7口所接開關SW5時選擇車輪周長4,選擇周長后,每按下開關S

110、W6一次表示車輪轉(zhuǎn)了一圈,此時數(shù)碼管顯示當前的里程值,此時若按下開關SW7則數(shù)碼管顯示當前的速度值,當超速時蜂鳴器報警。</p><p>  (1)接通電源后,由于未選擇車輪周長,蜂鳴器報警提示,紅燈閃爍。</p><p>  (2)按下P1.2口所接開關SW2時選擇車輪周長1藍燈亮</p><p> ?。?)按下開關SW7則數(shù)碼管顯示當前的速度值,綠燈亮,當超速時

111、蜂鳴器報警。</p><p>  (4)每按下開關SW6一次表示車輪轉(zhuǎn)了一圈,此時數(shù)碼管顯示當前的里程值</p><p><b>  五、參考文獻</b></p><p>  [1]《單片機原理及應用技術》 范力旻 主編 電子工業(yè)出版社</p><p>  [2]《單片機原理及其接口技術》(第二版) 胡汗才編著

112、 北京大學出版社</p><p>  [3]《51系列單片機設計實列》 樓然苗 李光飛編著 北航出版社</p><p>  [4]《單片微機測控系統(tǒng)設計大全》 王福瑞編著 北航出版社</p><p>  [5]《例說8051》 張義和 編著 人民郵電出版社</p><p>  [6]《傳感器應用技

113、術141例》松井邦彥, 梁瑞林 編著 科學出版社,</p><p>  [7]《單片機設計教程》 孫惠芹 編著 電子工業(yè)出版社</p><p>  [8]李勛, 劉源, 李靜東. 單片機實用教程.北京航空航天大學出版社, 2006</p><p>  [9]曲家駭,王季秩,伺服控制系統(tǒng)中的傳感器[M]. 機械工業(yè)出版社. 1998</p>

114、<p>  [10]張洪潤, 張亞凡. 傳感器技術與應用教程. 清華大學出版社, 2005</p><p><b>  六、心得體會</b></p><p>  通過兩周的時間,我們較成功的完成了這次課程設計。</p><p>  剛開始選課題的時候,對各個課題都不了解,難易程度也不太清楚,前面選的幾個課題有的比較簡單,有的又和其

115、他的組沖突,所以課題定的比較晚,后來感覺對這個方面還是比較感興趣的,而且它的實際用途也比較大。通過查閱一些資料,我們確定了總體方案。接下來就是采購元器件了,因為以前沒買過,沒什么經(jīng)驗,買的時候也沒仔細看,回來后發(fā)現(xiàn)元器件都比較舊,特別是89C51芯片,引腳都發(fā)黑了,只好去換了一個。接下來的幾天就是焊接電路了,由于我們選的電路比較復雜,所以焊接也是一項大工程。開始我們把所有元件都焊在了一塊板子上,排列比較緊湊,結(jié)果導線全部接好以后,板子上

116、密密麻麻的全是線,顯得很亂。調(diào)試的時候,結(jié)果不正確,經(jīng)過一些改動和調(diào)整仍不見起色,看著這么多線不知從何下手,后來正負極之間發(fā)生短路現(xiàn)象。我們不得不放棄這塊板子,準備重新做。于是我們重新買了一套元件,不同的是,這次買了兩塊板子,根據(jù)上一次的經(jīng)驗教訓,我們準備將電路分兩部分,其中一塊板子上只有最小系統(tǒng),兩塊板子通過排線相互連接。這樣焊接出來的板子看起來就清晰的多,而且,兩個人一起焊,每人一塊板子焊得更快,效率更高。經(jīng)過一天的調(diào)試,結(jié)果終于正

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論