單片機課程設(shè)計-自行車里程計速度計_第1頁
已閱讀1頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  單片機原理及應(yīng)用</b></p><p><b>  課程設(shè)計</b></p><p>  題 目 自行車里程計/速度計 </p><p>  二級學(xué)院 電子信息與電氣工程學(xué)院</p><p>  班 級

2、 </p><p>  姓 名 </p><p>  學(xué) 號 </p><p>  指導(dǎo)教師 </p><p>  設(shè)計時間 2010-6-21~2010-7-2 </p>

3、<p><b>  目錄</b></p><p><b>  一、概述</b></p><p>  1、設(shè)計目的…………………………………………………………… 1</p><p>  2、課題簡介…………………………………………………………… 1</p><p><b>  

4、二、系統(tǒng)設(shè)計</b></p><p>  1、總體設(shè)計方案……………………………………………………… 2</p><p>  2、硬件部分簡介……………………………………………………… 3</p><p>  (A)AT89c51芯片簡介……………………………………………… 3</p><p>  (B)硬件設(shè)計……………………

5、…………………………………… 4</p><p>  3、軟件部分…………………………………………………………… 5</p><p>  (A)初始化程序………………………………………………………6</p><p>  (B)主程序……………………………………………………………8</p><p>  (C)中斷程序……………………………………

6、……………………9</p><p>  (D)里程、速度處理程序……………………………………………11</p><p>  (E)顯示子程序………………………………………………………14</p><p>  (F)延時子程序………………………………………………………16</p><p>  三、調(diào)試…………………………………………………………

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

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

9、……………………… 23</p><p>  3、完整程序…………………………………………………………… 24</p><p>  4、實物圖……………………………………………………………… 33</p><p>  自行車里程計/速度計的設(shè)計</p><p><b>  概述</b></p><p&

10、gt;<b>  設(shè)計目的</b></p><p>  本設(shè)計采用AT89C51單片機作控制,利用霍爾元件等器件設(shè)計一個可用LED數(shù)碼管顯示當(dāng)前自行車行駛的距離及速度并具有超速報警功能的自行車里程/速度表,使其作為自行車的一種輔助工具,讓自行車的功用更強大,給人們帶來更多的方便。</p><p><b>  課題簡介</b></p>

11、<p>  自行車被發(fā)明及使用到現(xiàn)在已有兩百多年的歷史,在這兩百年間人類在不斷的嘗試與研發(fā)過程中,自行車發(fā)展的目的也從最早的代步工具轉(zhuǎn)換成休閑娛樂的用途,隨著生活水平的提高,人們希望自行車的功能更強大,而里程計/速度計正滿足了這個需求。現(xiàn)在先進的里程/速度計不僅能顯示實時的速度和里程,還顯示時間,甚至具有測量騎車人的心跳、顯示騎車人熱量消耗等功能。</p><p>  由于時間有限,本設(shè)計完成的功能減

12、為兩個,即測量并通過LED數(shù)碼管進行動態(tài)顯示當(dāng)前的速度和里程,并在超速時發(fā)出警報。</p><p>  要求達到的各項指標及實現(xiàn)方法如下:</p><p>  1. 利用霍爾傳感器產(chǎn)生里程數(shù)的脈沖信號。</p><p>  2. 對脈沖信號進行計數(shù)。</p><p>  實現(xiàn):利用單片機自帶的計數(shù)器T1對霍爾傳感器脈沖信號進行計數(shù)。<

13、/p><p>  3. 對數(shù)據(jù)進行處理,要求用LED顯示里程總數(shù)和即時速度。</p><p>  實現(xiàn):利用軟件編程,對數(shù)據(jù)進行處理得到需要的數(shù)值。</p><p>  最終實現(xiàn)目標:自行車的速度里程表具有里程、速度測試與顯示功能,采用單片機作控制,顯示電路可顯示里程及速度。</p><p><b>  1</b></

14、p><p><b>  二、系統(tǒng)設(shè)計</b></p><p><b>  1、總體設(shè)計方案</b></p><p>  采用AT89C51芯片,用霍爾元件將車輪的轉(zhuǎn)速轉(zhuǎn)換成電脈沖,經(jīng)過處理后送入單片機。里程及速度的測量,是經(jīng)過AT89C51的定時/計數(shù)器測出總的脈沖數(shù)和每轉(zhuǎn)一圈的時間,再經(jīng)過單片機的計算得出,計算結(jié)果通過LED

15、顯示器顯示出來。</p><p>  傳感器是獲取自然或生產(chǎn)領(lǐng)域中信息的關(guān)鍵器件,是現(xiàn)代信息系統(tǒng)和各種設(shè)備不可缺少的信息采集工具。磁傳感器是一種將磁學(xué)量信號轉(zhuǎn)變?yōu)殡娦盘柕钠骷蜓b置。隨著信息產(chǎn)業(yè)、工業(yè)自動化、醫(yī)療儀器等的飛速發(fā)展和計算機應(yīng)用的普及,需要大量的傳感器將被測或被控的非電信號轉(zhuǎn)換成可與計算機兼容的電信號。作為輸入信號,這就給磁傳感器的快速發(fā)展提供了機遇,形成了磁傳感器的產(chǎn)業(yè)。其中最具代表的磁傳感器就是霍

16、爾傳感器,在自動檢測系統(tǒng)中,利用霍爾傳感器測轉(zhuǎn)數(shù)是一種最基本的測量工作。</p><p>  單片機是本次設(shè)計的核心部件,它是信號從采集到輸出的橋梁,而且包括計算、定時、信息處理等功能</p><p>  當(dāng)輪子每轉(zhuǎn)一圈,通過開關(guān)型霍爾元件傳感器采集到一個脈沖信號,并從引腳12即P3.2外部中斷0端輸入,傳感器每獲取一個脈沖信號即對系統(tǒng)提供一次計數(shù)中斷。每次中斷代表車輪轉(zhuǎn)動一圈,中斷數(shù)n輪

17、圈的周長為L的乘積為里程值。計數(shù)器T1計算每轉(zhuǎn)一圈所用的時間t,就可以計算出即時速度v。當(dāng)里程鍵按下時,里程指示燈亮,LED切換顯示當(dāng)前里程,與當(dāng)速度鍵按下時,速度指示燈亮,LED切換顯示當(dāng)前速度,若自行車超速,系統(tǒng)發(fā)出報警信號,指示燈閃爍。里程數(shù)據(jù)自動記憶,也可用于電動自行車、摩托車、汽車等機動車儀表上。</p><p>  設(shè)計包括硬件、軟件兩部分,硬件電路包括AT89C51單片機的外圍電路以及LED顯示電路

18、等,這里對硬件部分只做簡單介紹,主要闡述的是軟件部分的設(shè)計,包括數(shù)據(jù)初始化程序的設(shè)計、主程序的設(shè)計、處理子程序的設(shè)計、顯示子程序的設(shè)計;最后針對仿真過程遇到的問題進行了具體說明與分析,對本次設(shè)計進行總結(jié)。</p><p><b>  2</b></p><p><b>  硬件部分介紹</b></p><p>  (A)A

19、T89C51芯片簡介</p><p>  AT89C51是一種帶4K字節(jié)閃存可編程可擦除的只讀存儲器即為</p><p>  (FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機。</p><p><b>  管腳說明:</b><

20、;/p><p>  VCC:供電電壓。 </p><p><b>  GND:接地。 </b></p><p>  P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FI

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

22、阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。 </p><p>  P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。P3口也可作為AT89C51的一些特殊功能口,如下表所示: </p><p>  P3.0 RXD(串行輸入口) </p><p>  P

23、3.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.6 /WR(外部數(shù)據(jù)存儲器寫選

24、通) </p><p>  P3.7 /RD(外部數(shù)據(jù)存儲器讀選通) </p><p>  RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。 </p><p>  ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。</p><p>

25、  /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。 </p><p><b>  3</b></p><p><b>  (B)硬件設(shè)計</b></p><p>  自行車里程計/速度計電路原理圖見附錄。<

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

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

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

29、.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>  自行車的速度里程表的硬件電路設(shè)計是基礎(chǔ)部

30、分,它包括信號的捕獲、放大、整形,單片機的計算處理,數(shù)碼管的實時顯示和單片機外圍基本電路的設(shè)計,兩大主要器件就是傳感器和單片機。</p><p><b>  4</b></p><p><b>  軟件部分</b></p><p>  模塊化結(jié)構(gòu)設(shè)計即是根據(jù)要求和硬件設(shè)計的結(jié)構(gòu),將整個系統(tǒng)的功能分成許多小的功能模塊,再根據(jù)

31、這些小的功能模塊進行程序編寫的過程。這樣的設(shè)計方法,使得系統(tǒng)的整個功能和各部分的功能趨于明朗化。當(dāng)系統(tǒng)出現(xiàn)問題,就可以根據(jù)功能設(shè)置找出問題的根源,從而更快地解決問題。所以說,在整個設(shè)計過程中,軟件設(shè)計必須與硬件設(shè)計緊密地結(jié)合在一起。</p><p>  軟件設(shè)計包括初始化程序、主程序、行車過程中里程和速度計算子程序、延時子程序、中斷服務(wù)子程序、顯示子程序等。</p><p>  系統(tǒng)軟件總

32、體流程圖如圖3.1所示</p><p>  總體設(shè)計思路:首先進行初始化,選擇車輪周長,P3.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口分別用于設(shè)置輪圈的大小,低電平有效。中斷0

33、用于對輪子圈數(shù)的計數(shù)輸入,輪子每轉(zhuǎn)一圈,霍爾傳感器輸出一個低電平脈沖。將根據(jù)里程寄存器中的內(nèi)容計算和判斷出行駛里程數(shù)。中斷1用于控制定時器T1的啟/停,當(dāng)輸入為0時關(guān)閉定時器。此控制信號是將輪子圈數(shù)的計數(shù)經(jīng)二分頻后形成。這樣,每次定時器T1的開啟時間剛好為轉(zhuǎn)一圈的時間,根據(jù)輪子的周長就可以計算出自行車的速度。</p><p>  圖 3.1 系統(tǒng)整體流程圖 5&l

34、t;/p><p>  主要內(nèi)存單元及用處:</p><p>  50H:EEPROM器件尋址字節(jié)存放單元</p><p>  51H:EEPROM傳送字節(jié)數(shù)存放單元</p><p>  30H:EEPROM發(fā)送數(shù)據(jù)緩沖單元</p><p>  40H:EEPROM讀出數(shù)據(jù)存放單元</p><p> 

35、 0A0H:EEPROM尋址字節(jié)寫入</p><p>  0A1H:EEPROM尋址字節(jié)讀出</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ù)單元&l

36、t;/p><p>  68H、69H、6AH、6BH:存放自行車每圈時間數(shù)</p><p>  70H、71H、72H、73H:顯示BCD碼數(shù)據(jù)存放用</p><p>  11H--15H:存放被除數(shù)</p><p>  16H—19H:存放除數(shù)</p><p><b>  (A)初始化程序</b>&

37、lt;/p><p>  初始化程序主要完成以下工作:將T1設(shè)為外部控制定時器方式;外部中斷0及外部中斷1設(shè)為邊沿觸發(fā)方式;將部分內(nèi)存單元清0;設(shè)置輪子周長;開中斷及定時器;將EEPROM中的數(shù)據(jù)調(diào)入內(nèi)存。</p><p>  CLEARMEN:MOV TMOD,#90H ;T1為16位外部控制定時器</p><p>  MOV SP,#75H

38、 ;堆棧從75H開始</p><p>  SETB PX0 ;外部中斷0優(yōu)先級為1</p><p>  SETB IT0 ;外部中斷0用邊沿觸發(fā)</p><p>  SETB IT1 ;外部中斷1用邊沿觸發(fā)</p><p>  CLR A

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

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

41、</p><p>  MOV 61H,A ;清內(nèi)存中特定單元 6</p><p>  MOV 62H,A ;清內(nèi)存中特定單元</p><p>  MOV 63H,A ;清內(nèi)存中特定單元</p><p>  DEC A

42、 ;A為0FFH</p><p>  MOV 68H,A ;內(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

43、 ;內(nèi)存置數(shù)據(jù)0FFH</p><p>  MOV P1,A ;P1口置1</p><p>  CLEAR1: JB P1.2,KEY1 ;根據(jù)P1.2設(shè)置狀態(tài)</p><p>  MOV 21H,#0FH </p><p>  LJMP CLEAR2

44、;轉(zhuǎn)CLEAR2</p><p>  KEY1: JB P1.3,KEY2 ;根據(jù)P1.3設(shè)置狀態(tài)</p><p>  MOV 21H,#12H</p><p>  LJMP CLEAR2</p><p>  KEY2: JB P1.6,KEY3 ;根據(jù)P1.6設(shè)置狀態(tài)</p>&

45、lt;p>  MOV 21H,#14H </p><p>  LJMP CLEAR2</p><p>  KEY3: JB P1.7,ERR ;根據(jù)P1.7設(shè)置狀態(tài)</p><p>  MOV 21H,#19H</p><p>  CLEAR2: SETB TR1

46、 ;開定時器T1</p><p>  SETB EA ;開中斷允許</p><p>  SETB EX0 ;開外中斷0</p><p>  SETB ET1 ;開定時中斷T1</p><p>  SETB P3.1 ;關(guān)報警器</p

47、><p>  LCALL VIICREAD ;將EEPROM中原里程數(shù)據(jù)調(diào)入內(nèi)存</p><p><b>  RET</b></p><p>  ERR: CPL P3.1 ;未設(shè)置車輪周長,開始報警</p><p>  LCALL DL5S ;延時5S<

48、/p><p>  LJMP CLEAR1 ;重新初始化</p><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中

49、,不為0則掃描P1.7,若P1.7為0則將其周長值存入21H中,不為0則說明沒有選擇車輪直徑,此時開始報警,并調(diào)用延時子程序。接著再從P1.2口掃描,如此循環(huán),直到有鍵按下后停止報警。</p><p><b>  7</b></p><p>  圖 3.2 初始化程序流程圖</p><p><b>  (B)主程序</b>

50、;</p><p>  主程序根據(jù)P3.0口的開關(guān)狀態(tài)選擇里程速度顯示。</p><p>  START: LCALL CLEARMEN ;上電初始化</p><p>  START1: JB P3.0,DISPLAYS ;P3.0=1,顯示里程</p><p>  LCALL DISPLAY

51、V ;P3.0=0,顯示速度</p><p>  START2: SJMP START1 ;循環(huán)</p><p><b>  8</b></p><p>  圖3.3 主程序流程圖</p><p>  (C)用外部中斷0實現(xiàn)的里程計數(shù)程序</p>

52、<p>  定時中斷是為滿足定時或計數(shù)的需要而設(shè)置的。在單片機內(nèi)部有兩個定時/計數(shù)器,以對其中的計數(shù)結(jié)構(gòu)進行計數(shù)的方法,來實現(xiàn)定時或計數(shù)功能。當(dāng)結(jié)構(gòu)發(fā)生計數(shù)溢出時,即表明定時時間或計數(shù)值已滿,這時就以計數(shù)溢出信號作為中斷請求,去置位一個溢出標志,作為單片機接受中斷請求的標志。這種中斷請求是在單片機芯片內(nèi)部發(fā)生的,因此無須在芯片上設(shè)置引入端。</p><p>  定時/計數(shù)器控制寄存器TCON是8位寄存

53、器,地址為88H,可以位尋址。其高4位用于定時/計數(shù)器中斷控制,低4位借給外部中斷,用做中斷標志和觸發(fā)方式選擇位。本設(shè)計采用定時中斷,對自行車的里程和速度進行計數(shù)。</p><p>  INTEX0: PUSH ACC ;累加器堆棧保護</p><p>  PUSH PSW ;狀態(tài)字堆棧保護</p><

54、;p>  INC 60H ;圈數(shù)加1</p><p>  CLR A ;清A</p><p>  CJNE A,60H,INTEX0OUT ;計數(shù)器沒溢出轉(zhuǎn)INTEX0OUT</p><p>  INC 61H ;溢出進位(61H加1)&l

55、t;/p><p>  CJNE A,61H,INTEX0OUT ;計數(shù)器沒溢出轉(zhuǎn)INTEX0OUT</p><p>  INC 62H ;溢出進位(62H加1)</p><p>  INTEX0OUT:LCALL VIICWRITE ;里程數(shù)據(jù)存入EEPROM</p><p>  S

56、ETB EX1 ;開外部中斷1</p><p>  POP PSW ;狀態(tài)字恢復(fù)</p><p>  POP ACC ;累加器恢復(fù) 9</p><p>  RETI ;中斷返回</p

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

58、</p><p>  JNB 00H,INTEX11 ;溢出標志為0轉(zhuǎn)INTEX11</p><p>  MOV TL1,#0FFH ;溢出時計時單元賦#0FFH(顯示速度為零)</p><p>  MOV TH1,#0FFH </p><p>  MOV 6CH,#0FFH<

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

60、lt;/p><p>  CLR A ;清A</p><p>  MOV TL1,A ;計數(shù)單元置零</p><p>  MOV TH1,A</p><p>  MOV 6CH,A</p><p>  MOV 6DH,A</p>&l

61、t;p>  CLR 00H ;清溢出標志</p><p>  POP PSW ;狀態(tài)字堆?;謴?fù)</p><p>  POP ACC ;累加器堆棧恢復(fù)</p><p>  RETI ;中斷返回</p><

62、;p>  ;T1計數(shù)器中斷服務(wù)程序。(計數(shù)器T1由外部中斷1輸入控制,當(dāng)為高電平時計時開始)</p><p>  INTT1: PUSH ACC ; 累加器堆棧保護</p><p>  PUSH PSW ;狀態(tài)字堆棧保護</p><p>  INC 6CH ;6C計時單元

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

64、移入A</p><p>  JNZ INTT11 ;不為0,轉(zhuǎn)INTT11</p><p>  SETB 00H ;計時器溢出,置溢出標志位</p><p>  INTT11: POP PSW ;狀態(tài)字堆?;謴?fù)</p><p>  POP ACC

65、 ;累加器堆棧恢復(fù)</p><p>  RETI ;中斷返回</p><p><b>  10</b></p><p>  圖 3.4 中斷流程圖</p><p>  (D)里程、速度處理程序</p><p><b>  里程處理程序

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

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

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

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

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

71、字節(jié)</p><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

72、 ; 高四位為0</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

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

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

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

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

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

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

79、 A,#0FH ;高四位為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>  RE

80、T ;子程序返回</p><p>  圖 3.6速度處理程序流程圖</p><p><b>  13</b></p><p><b>  (E)顯示子程序</b></p><p>  采用動態(tài)掃描顯示接口電路,動態(tài)顯示接口電路是把所有顯示器的8個筆劃段a-

81、h同名端連在一起,而每一個顯示器的公共極COM各自獨立地受I/O線控制。CPU向字段輸出口送出字型碼時,所有顯示器接收到相同的字型碼,但究竟是哪個顯示器亮,則取決于COM端??梢圆捎梅謺r的方法,輪流控制各個顯示器的COM端,使各個顯示器輪流點亮。在輪流點亮掃描過程中,每位顯示器的點亮?xí)r間是極為短暫的(約1ms),由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實際上各位顯示器并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的

82、顯示數(shù)據(jù),不會有閃爍感。</p><p>  本設(shè)計P2.0、P2.1、P2.2、P2.3信號一起組成位選通的位選信號,P0.0~P0.7信號一起組成段碼選通的段選信號,通過軟件編程,先把所要顯示的數(shù)據(jù)放入存儲單元,然后把數(shù)據(jù)送入段選通對應(yīng)的地址,再選通某一個LED,逐步完成四個LED的顯示。</p><p><b>  ;里程顯示控制程序</b></p>

83、<p>  DISPLAYS:SETB P1.0 ;點亮LED1</p><p>  CLR P1.1 ;關(guān)閉速度指示燈</p><p>  SETB P3.7</p><p>  LCALL SSS ;將圈數(shù)轉(zhuǎn)為公里數(shù)</p><p>  LCA

84、LL DISPLAY ;顯示公里數(shù)據(jù)</p><p>  LJMP START1 ;跳回START1</p><p><b>  ;速度顯示程序</b></p><p>  DISPLAYV:CLR P1.0 ;關(guān)閉LED1(里程指示燈)</p><p>

85、;  SETB P1.1 ;點亮LED2(速度指示燈)</p><p>  CLR P3.7 </p><p>  LCALL VVV ;每圈時間換算為KM/H程序</p><p>  MOV A,71H ;將十位數(shù)(BCD碼)值植入A</p>&

86、lt;p>  SUBB A,#04H ;與預(yù)定報警值比較</p><p>  JNC WARING ;時速超過40時報警</p><p>  SETB P3.1 ;關(guān)報警燈</p><p>  V1: LCALL DISPLAY ;顯亮一次</p&

87、gt;<p>  RET ;子程序返回</p><p>  DISPLAY: MOV R1,#70H ;顯示單元首址</p><p>  MOV R2,#0FEH ;掃描字</p><p>  PLAY: MOV A,R2 ;掃描字送

88、入A</p><p>  MOV P2,A ;放到端口P2</p><p>  MOV A,@R1 ;取顯示數(shù)據(jù)</p><p>  ANL A,#0FH ;高四位清0</p><p>  MOV DPTR,#TAB ;取段碼表首址</p&g

89、t;<p>  MOVC A,@A+DPTR ;查顯示數(shù)據(jù)對應(yīng)段碼 14</p><p>  MOV P0,A ;段碼輸出</p><p>  LCALL DL1MS ;點亮1MS</p><p>  INC R1 ;指向下一顯

90、示數(shù)據(jù)地址</p><p>  MOV A,R2 ;取掃描字</p><p>  JNB ACC.3,ENDOUT ;已掃描到第四位,轉(zhuǎn)ENDOUT退出</p><p>  RL A ;循環(huán)左移</p><p>  MOV R2,A ;放回

91、R2</p><p>  AJMP PLAY ;轉(zhuǎn)PLAY循環(huán)</p><p>  ENDOUT: SETB P2.0 ;關(guān)掃描</p><p>  SETB P2.1 ;關(guān)掃描</p><p>  SETB P2.2 ;關(guān)掃描<

92、;/p><p>  SETB P2.3 ;關(guān)掃描</p><p>  RET ;子程序返回</p><p><b>  ;共陰極段碼表</b></p><p>  TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H&l

93、t;/p><p>  DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H</p><p><b>  DB 00H</b></p><p><b>  15</b></p><p>  圖 3.5 顯示程序流程圖</p><p><b>

94、;  (F)延時子程序</b></p><p>  ;1ms延時程序 利用循環(huán)實現(xiàn)延時</p><p>  DL1MS: MOV R6,#14H</p><p>  DL1: MOV R7,#19H</p><p>  DL2: DJNZ R7,DL2 ;循環(huán)19H次</p><p> 

95、 DJNZ R6,DL1 ;循環(huán)14H次</p><p><b>  RET</b></p><p>  ;出錯閃爍利用延時255ms</p><p>  DL5S: MOV R5,#0FFH </p><p>  DL3: LCALL DL1MS ;調(diào)用1ms延時</p>&

96、lt;p>  DJNZ R5,DL3 ;循環(huán)255次</p><p><b>  RET</b></p><p><b>  16</b></p><p><b>  三、調(diào)試</b></p><p><b>  1.硬件調(diào)試</b><

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

98、>  首先,新建一個項目選擇AT89C51,新建一個文件,將程序輸入,輸完后保存,保存時需加后綴名.ASM。然后將文件添加到新建的工程下。進行檢錯和編譯,窗口如圖3.2所示。</p><p>  圖 3.1 KEIL編譯窗口</p><p>  編譯無誤后即可運行,運行時可從Peripherals中調(diào)出輸出口P0—P3來觀察輸出情況。運行時窗口如圖3.1所示。</p>

99、<p>  圖 3.2 KEIL運行窗口 17</p><p>  接著再使用PROTEUS仿真軟件進行仿真。首先新建一個文件,選擇所需的元件并排列好,根據(jù)電路原理圖進行布線。當(dāng)完成原理圖布線后,利用PROTEUS ISIS編輯環(huán)境所提供的電器規(guī)則檢查命令對設(shè)計進行檢查,并根據(jù)系統(tǒng)提供的錯誤檢查報告修改原理圖。直到通過電器規(guī)則檢查為止。然后在KEIL中生成HEX

100、文件,雙擊AT89C51芯片,將完整的程序灌入芯片,單擊左下角的開始箭頭即可開始模擬仿真。</p><p>  在仿真過程中遇到過一些問題,針對這些問題做了些軟件方面的調(diào)整。</p><p>  剛開始仿真時,P0口是灰色的,數(shù)碼管沒有點亮。經(jīng)檢查是由于P0口內(nèi)部沒有上拉電阻,因此,必須另外加上,上拉電阻一段接P0口,另一端直接接到電源的正集。接上后數(shù)碼管點亮,但顯示的是亂碼經(jīng)過仔細的檢查

101、,發(fā)現(xiàn)了程序中的錯誤,硬件中選用的是共陰極數(shù)碼管,而程序中錯用了共陽極的段碼表,從而造成了應(yīng)該點亮的部分沒亮,而不該點亮的部分反而亮了的錯誤情況。</p><p><b>  18</b></p><p><b>  四、操作說明</b></p><p>  本設(shè)計為自行車里程計/速度計,實現(xiàn)了里程速度計的基本功能。<

102、;/p><p>  接通電源后,由于未選擇車輪周長,蜂鳴器報警提示,同時LED燈D3閃爍,直到有鍵按下。當(dāng)按下P1.2口所接開關(guān)SW2時選擇車輪周長1,按下P1.3口所接開關(guān)SW3時選擇車輪周長2,按下P1.6口所接開關(guān)SW4時選擇車輪周長3,P1.7口所接開關(guān)SW5時選擇車輪周長4,選擇周長后,每按下開關(guān)SW6一次表示車輪轉(zhuǎn)了一圈,此時數(shù)碼管顯示當(dāng)前的里程值,此時若按下開關(guān)SW7則數(shù)碼管顯示當(dāng)前的速度值,當(dāng)超速時蜂

103、鳴器報警。</p><p><b>  19</b></p><p><b>  五、參考文獻</b></p><p>  [1]《單片機原理及應(yīng)用技術(shù)》 范力旻 主編 電子工業(yè)出版社</p><p>  [2]《單片機原理及其接口技術(shù)》(第二版) 胡汗才編著 北京大學(xué)出版社</p

104、><p>  [3]《51系列單片機設(shè)計實列》 樓然苗 李光飛編著 北航出版社</p><p>  [4]《單片微機測控系統(tǒng)設(shè)計大全》 王福瑞編著 北航出版社</p><p>  [5]《例說8051》 張義和 編著 人民郵電出版社</p><p>  [6]《傳感器應(yīng)用技術(shù)141例》松井邦彥, 梁瑞林

105、 編著 科學(xué)出版社,</p><p>  [7]《單片機設(shè)計教程》 孫惠芹 編著 電子工業(yè)出版社</p><p>  [8]《單片機及應(yīng)用系統(tǒng)設(shè)計原理與實踐》 劉海成編著 北京航空航天大學(xué)出版社</p><p>  [9]《單片機原理與應(yīng)用系統(tǒng)設(shè)計》 歐偉明 編著 電子工業(yè)出版社</p><p>  [10]《單片機原理與應(yīng)

106、用實例仿真》 李泉溪主編 北京航空航天大學(xué)出版社</p><p>  [11]《單片機原理與應(yīng)用技術(shù)實踐》盧勝利 編著 機械工業(yè)出版社[12]《單片機實踐應(yīng)用與技術(shù)》 馬長林,陳怡,程利民 編著 清華大學(xué)出版社</p><p><b>  20</b></p><p><b>  六、心得體會</b></p>

107、;<p>  通過兩周的時間,我們較成功的完成了這次課程設(shè)計。</p><p>  剛開始選課題的時候,對各個課題都不了解,難易程度也不太清楚,前面選的幾個課題有的比較簡單,有的又和其他的組沖突,所以課題定的比較晚,后來感覺對這個方面還是比較感興趣的,而且它的實際用途也比較大。通過查閱一些資料,我們確定了總體方案。接下來就是采購元器件了,因為以前沒買過,沒什么經(jīng)驗,買的時候也沒仔細看,回來后發(fā)現(xiàn)元器

108、件都比較舊,特別是89C51芯片,引腳都發(fā)黑了,只好去換了一個。接下來的幾天就是焊接電路了,由于我們選的電路比較復(fù)雜,所以焊接也是一項大工程。開始我們把所有元件都焊在了一塊板子上,排列比較緊湊,結(jié)果導(dǎo)線全部接好以后,板子上密密麻麻的全是線,顯得很亂。調(diào)試的時候,結(jié)果不正確,經(jīng)過一些改動和調(diào)整仍不見起色,看著這么多線不知從何下手,后來正負極之間發(fā)生短路現(xiàn)象。我們不得不放棄這塊板子,準備重新做。于是我們重新買了一套元件,不同的是,這次買了兩

109、塊板子,根據(jù)上一次的經(jīng)驗教訓(xùn),我們準備將電路分兩部分,其中一塊板子上只有最小系統(tǒng),兩塊板子通過排線相互連接。這樣焊接出來的板子看起來就清晰的多,而且,兩個人一起焊,每人一塊板子焊得更快,效率更高。經(jīng)過一天的調(diào)試,結(jié)果終于正確了,看到正確的結(jié)果</p><p>  這次的課程設(shè)計我學(xué)到了很多知識,也有了一些經(jīng)驗。不論是在動手動腦方面,都使我受益良多。</p><p><b>  2

110、1</b></p><p><b>  七、附錄</b></p><p><b>  1、元器件清單</b></p><p><b>  22</b></p><p><b>  電路原理圖</b></p><p>&

111、lt;b>  23</b></p><p><b>  完整程序</b></p><p>  VSDA EQU P1.5</p><p>  VSCL EQU P1.4</p><p>  SLA EQU 50H</p><p>  NUMBYT

112、 EQU 51H</p><p>  MTD EQU 30H</p><p>  MRD EQU 40H</p><p>  SLAW EQU 0A0H</p><p>  SLAR EQU 0A1H</p><p>  DPHH EQU 62H</p&g

113、t;<p>  TH1H EQU 6CH</p><p>  TH1HH EQU 6DH</p><p><b>  ;</b></p><p>  ;;;;;;;;;;;;;;;;;</p><p>  ;;PROGRAM INPUT;;</p><p>  ;;

114、;;;;;;;;;;;;;;;</p><p><b>  ;</b></p><p>  ORG 0000H</p><p>  LJMP START</p><p>  ORG 0003H</p><p>  LJMP INTEX0</p><p

115、>  ORG 000BH</p><p><b>  RETI</b></p><p>  ORG 0013H</p><p>  LJMP INTEX1</p><p>  ORG 001BH</p><p>  LJMP INTT1</p>

116、<p>  ORG 0023H</p><p><b>  RETI</b></p><p>  ORG 002BH</p><p><b>  RETI</b></p><p><b>  ;</b></p><p>  

117、;;;;;;;;;;;;;;;;;</p><p>  ;;PROGRAM CLEAR;;</p><p>  ;;;;;;;;;;;;;;;;;</p><p><b>  ;上電初始化程序</b></p><p>  CLEARMEN: MOV TMOD,#90H</p><p>  MO

118、V SP,#75H</p><p><b>  SETB PX0</b></p><p><b>  SETB IT0</b></p><p><b>  SETB IT1</b></p><p><b>  CLR A</b></p&

119、gt;<p>  MOV 20H,A</p><p>  MOV 6CH,A</p><p>  MOV 6DH,A</p><p>  MOV 70H,A 24</p><p>  MOV 71H,A</p&g

120、t;<p>  MOV 72H,A</p><p>  MOV 73H,A</p><p>  MOV 60H,A</p><p>  MOV 61H,A</p><p>  MOV 62H,A</p><p>  MOV 63H,A</p><p><

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論