自行車里程及速度計課程設計_第1頁
自行車里程及速度計課程設計_第2頁
自行車里程及速度計課程設計_第3頁
自行車里程及速度計課程設計_第4頁
自行車里程及速度計課程設計_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、學 號 08700109 單機原理及接口技術 設計說明書 自行車里程/速度計的設計 起止日期: 2011 年 8 月 29 日 至 2011 年 9 月 2 日 電子與信息工程系電子與信息工程系 2011 年年 9 月月 2 日日 學生姓名 班級 成績 指導教師 (簽字 ) 自行車里程自行車里程/ /速度計的設計速度計的設計 摘要摘要:本文介紹了用 89c52 單片機設計自行車里程/速度計,運用單片機的運算和控制功能,并采用數(shù)碼 管實時顯示所測速度和里程的速度里程計設計方案,用分頻器 tc4024 實現(xiàn)二分頻,用來探討 24c01 傳感 器的用途,通過實用電路的設計來掌握速度及里程傳感器的使用

2、方法及一些性能參數(shù)。本系統(tǒng)含了電子 電路技術,以及常用的 at89c52 單片機工作原理,通過本系統(tǒng)的設計,把它們倆者有機結合。 關鍵詞關鍵詞:at89c52 數(shù)碼管 tc4024 分頻器 24c01 傳感器 目目 錄錄 第一章第一章 緒緒 論論.1 1 第二章第二章 芯片介紹芯片介紹.2 2 2.12.1 at89c52 單片機 .2 2.1.1 at89c52 單片機簡介 .2 2.1.2 at89c52 的管腳及其含義 .2 2.22.2 tc4024 分頻器 .3 2.32.3 24c01 芯片 .3 2.3.1 24c01 簡介 .3 2.3.2 24c01 的特性: .4 第三章第

3、三章 硬件電路的設計硬件電路的設計.6 6 3.13.1 系統(tǒng)結構框圖 .6 3.23.2 系統(tǒng)硬件電路 .6 3.33.3 系統(tǒng)的工作原理 .7 第四章第四章 軟件設計軟件設計.8 8 4.14.1 系統(tǒng)內存的規(guī)劃 .8 4.24.2 系統(tǒng)的主要程序設計 .8 第五章第五章 系統(tǒng)調試系統(tǒng)調試.1010 5.15.1 硬件調試 .10 5.25.2 軟件調試 .10 第六章第六章 心得體會心得體會.1212 附錄附錄 1 1:元件清單:元件清單 .1414 附錄附錄 2:2: 系統(tǒng)完整源程序系統(tǒng)完整源程序 .1515 第一章第一章 緒緒 論論 傳感器,英文名字為 sensor 或 transd

4、ucer,亦稱換能器、變換器。在科技迅速發(fā)展的今天,傳感器 越來倍受重視。在日常生活、航天、航空,常規(guī)武器、交通運輸,機械制造、化工、生物醫(yī)學工程、自 動化檢測工程及計量等各項領域都被廣泛應用6。 目前,傳感器已向新材料開發(fā),集成化、智能化、數(shù)字化、新工藝,高精度化及高穩(wěn)定、高可靠化 等技術發(fā)展。特別是霍爾傳感器,鑒于它的價廉、易于使用,使它廣泛運用于里程計、速度計等6。 單片微型計算機簡稱單片機,又稱微控制器,特別適用于控制領域。通常單片機由單塊集成電路構 成,內部包含有計算機的基本部件:cpu(中央處理器) ,存儲器和 i/o 接口電路等。因此,單片機只需 要與適當?shù)能浖巴獠吭O備相結合,

5、便可以成為一個單片機控制系統(tǒng)4。 目前,場上銷售的單片機有 4 位、8、16 位、32 位,并且單片機朝著高性能多種方向發(fā)展,尤其是 8 位單片機以經成為當前單片機的主流,主要體現(xiàn)在 cpu 功能增強、內部資源增多、引腳的功能化、低電 壓和低功好耗化上4。 單片機因為其體積小、功能強,可靠性高,靈活方便等優(yōu)點,所以可以用于各個領域,對各行各業(yè) 的技術改造和產品更新?lián)Q代起到重要的推動作用。 本人經過學習,用 at89c52 設計了一個自行車里程/速度計。本設計可輪流顯示自行車行使的里程和 速度, 采用 tc4024 芯片作為計數(shù)器以及 2c401 存儲數(shù)據(jù),3 個單級共陰數(shù)碼管作為顯示系統(tǒng)。本系

6、統(tǒng)具 有超速信響提醒功能,里程數(shù)據(jù)自動記憶,也可應用于電動自行車、摩托車、汽車等機動車儀表上。 . 第二章第二章 芯片介紹芯片介紹 2.12.1 at89c52at89c52 單片機單片機 2.1.12.1.1 at89c52at89c52 單片機簡介單片機簡介 本設計選用 at89c52 單片機,at89c52 是一種低功耗、高性能 cmos 8 位微控制器。使用 atmel 公司 高密度非易失性存儲器技術制造,可與工業(yè) at89c51 產品指令和引腳完全兼容。 2.1.22.1.2 at89c52at89c52 的管腳及其含義的管腳及其含義 at89c52 的管腳及各管腳含義如下: 圖 1

7、 89c52 管腳圖 各引腳功能說明: vcc電源電壓; gnd接地; p0 口p0 口是一組 8 位漏極開路型雙向 i/o 口,也即地址/數(shù)據(jù)總線復用口。作為輸出口用時,每位 能吸收電流的方式驅動 8 個 ttl 邏輯門電路,對端口 p0 寫“1”時,可作為高阻抗輸入端用; 在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉換地址(低 8 位)和數(shù)據(jù)總線復用,在訪問期 間激活內部上拉電阻; 在 flash 編程時,p0 口接收指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時,要求外接上拉電阻; p1 口p1 口是一個帶內部上拉電阻的 8 位雙向 i/o 口,p1 的輸出緩沖級可驅動(吸收或輸出

8、電流)4 個 ttl 邏輯門電路。對端口寫“1” ,通過內部的上拉電阻把端口拉到高電平,此時可作輸出口。作輸入 口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流; 與 at89c51 不同之處是,p1.0 和 p1.1 還可分別作為定時/計數(shù)器 2 的外部計數(shù)輸入(p1.0/t2)和輸入 (p1.1/t2ex) ; flash 編程和程序校驗期間,p1 接收低 8 位地址; p1.0 和 p1.1 的第二功能: p1.0 t2(定時/計數(shù)器 2 外部計數(shù)脈沖輸入),時鐘輸出 ; p1.1 t2ex(定時/計數(shù) 2 捕獲/重裝載觸發(fā)和方向控制); p2 口p2 是一個帶內部

9、上拉電阻的 8 位雙向 i/o 口,p2 的輸出緩沖級可驅動(吸收或輸出電流)4 個 ttl 邏輯門電路。對端口 p2 寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入 口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流; 在訪問外部程序存儲器或 16 位地址的外部數(shù)據(jù)存儲器時,p2 口送出高 8 位地址數(shù)據(jù)。在訪問 8 位地址的 外部數(shù)據(jù)存儲器時,p2 口輸出 p2 鎖存器的內容; flash 編程或校驗時,p2 亦接收高位地址和一些控制信號; p3 口p3 口是一組帶有內部上拉電阻的 8 位雙向 i/o 口。p3 口輸出緩沖級可驅動(吸收或輸出電流)

10、 4 個 ttl 邏輯門電路。對 p3 口寫入“1”時,它們被內部上拉電阻拉高并可作為輸入端口。此時,被外部 拉低的 p3 口將用上拉電阻輸出電流; p3 口除了作為一般的 i/o 口線外,更重要的用途是它的第二功能: p3.0 rxd(串行輸入口) p3.1 txd(串行輸出口) p3.2 into(外中斷 0) p3.3 int1(外中斷 1) p3.4 to(定時/計數(shù)器 0) p3.5 t1(定時/計數(shù)器 1) p3.6 wr(外部數(shù)據(jù)存儲器寫選通) p3.7 rd(外部數(shù)據(jù)存儲器讀選通) 此外,p3 口還接收一些用于 flash 閃存編程和程序校驗的控制信號; rst復位輸入。當振蕩

11、器工作時,rst 引腳出現(xiàn)兩個機器周期以上高電平將是單片機復位; ale/prog當訪問外部程存儲器或數(shù)據(jù)存儲器時,ale(地址鎖存允許)輸出脈沖用于鎖存地址的 低 8 位字節(jié)。一般情況下,ale 仍以時鐘振蕩頻率的 1/6 輸出固定的脈沖信號,因此它可對外輸出時鐘或 用于定時目的。要注意的是:每當訪問外部數(shù)據(jù)存儲器時將跳過一個 ale 脈沖; 對 flash 存儲器編程期間,該引腳還用于輸入編程脈沖(prog); ea 端為高電平(接 vcc端),cpu 則執(zhí)行內部程序存儲器的指令。 2.22.2 tc4024tc4024 分頻器分頻器 本程序采用 tc4024 芯片,它是一個 7 位的計數(shù)

12、器,計數(shù)器具有分頻的作用,它包含有 14 個管腳, 其 7 腳接地,14 腳接+5v,1 腳接 at89c52 的 int0,即 12 腳,在系統(tǒng)中此芯片起到了二分頻的作用。 2.32.3 24c0124c01 芯片芯片 2.3.12.3.1 24c0124c01 簡介簡介 24c01 是一個 1k 位串行 cmos eeprom,內部含有 128 個 8 位字節(jié),catalyst 的先進 cmos 技術實際 上減少了器件的功耗,24c01 是一個 8 位字節(jié)頁寫緩沖器,該器件通過 i2c 總線接口進行操作,即此芯片 采用 i2c 協(xié)議進行讀寫數(shù)據(jù)。有一個專門的寫保護功能。 24c01 是 i

13、2c 接口的,但標準 51 是不帶 i2c 接口的,串口方式 0 是不行的,需要用 io 模擬,所以隨 便接兩個 io 都可以,而且都要接上拉電阻,大概幾 k 就行了,因為不是總線方式,所以不能用 mov 指 令,也不能用 sbuf,要判斷是否為滿,可以在程序里設個變量。 在這里要注意 e2p 芯片的壽命(一般是讀寫 100 萬次,足夠了) 。 存儲數(shù)據(jù)的時候,可以對操作數(shù)和 存儲的數(shù)據(jù)進行比較,不相等則存儲,這樣可以增加使用壽命,比有些每隔 1 秒鐘進行存儲的會好多了。 以下是 24c01 的管腳圖: 圖 2 管腳圖 表 1 24c01 的管腳描述 管腳名稱功能 a0、a1、a2器件地址選擇

14、 sda 串行數(shù)據(jù)/地址 scl 串行時鐘 wp 寫保護 vcc +1.8v6.0v 工作電壓 vss 接地 2.3.22.3.2 24c0124c01 的特性:的特性: 24c01 芯片具有以下特性: 1. 與 400khz 的 i2c 總線兼容; 2. +1.8-6.0v 工作電壓范圍; 3. 低功耗 cmos 技術; 4. 寫保護功能:當 wp 為高電平時進入寫保護狀態(tài); 5. 頁寫緩沖器; 6. 自定時擦寫周期; 7. 1,000,000 編程擦除/周期; 8. 可保存數(shù)據(jù) 100 年; 9. 8 腳 dip、soic、tssop 封裝; 10 溫度范圍:商業(yè)級、工業(yè)級和汽車級。 第三

15、章第三章 硬件電路的設計硬件電路的設計 3.13.1 系統(tǒng)結構框圖系統(tǒng)結構框圖 89c52 顯示電路 按鍵控制 指示燈電路 報警電路 里程、速 度測量電 路 顯示電 里程、速 度測量電 路 圖 3 按鍵控制部分功能:自行車轉圈的大小設置,速度、里程顯示選擇設置。 指示燈部分功能:里程狀態(tài)和速度狀態(tài)顯示。 報警部分功能:超速時采用聲音報警提示。 里程、速度測量電路部分功能:速度及里程傳感器采用霍爾傳元件,實現(xiàn)對自行車里程及速度的計算。 顯示部分功能:速度、里程用數(shù)碼管動態(tài)掃描顯示,由 p0 口送出段碼,p2 口送出位選信號。 3.23.2 系統(tǒng)硬件電路系統(tǒng)硬件電路 自行車里程/速度計能自動顯示自

16、行車行駛的總里程數(shù)及行車速度,具有超速信響提醒功能,里程數(shù) 據(jù)自動記憶,也可應用于電動自行車、摩托車、汽車等機動車儀表上。其硬件電路原理圖如圖 4。 圖 4 系統(tǒng)原理圖 3.33.3 系統(tǒng)的工作原理系統(tǒng)的工作原理 本設計能實時地將所測的速度與累計里程數(shù)顯示出來,主要是將 24c01 傳感器輸入到單片機的脈沖信 號,將頻率實時地測量出來,然后通過單片機計算出速度和里程,再將所得的數(shù)據(jù)存儲到 tc4024 芯片中, 通過 at89c52 單片機計算出來的速度和里程的數(shù)據(jù),必須通過 bcd 碼的轉換才能輸出給數(shù)碼管。最后由 共陰數(shù)碼管顯示所測速度與里程。 自行車里程/速度計采用 at89c52 單片

17、機作控制,速度及里程傳感器采用霍爾元件,其電器原理圖如 圖 5.1 所示。p0 口和 p2 口用于七段 led 顯示器的段碼及掃描輸出,在顯示里程時,第三位小數(shù)點用 17 腳 p3.7 口控制點亮。p1.0 和 p1.1 口分別用于顯示里程狀態(tài)和速度狀態(tài)。p1.2、 p1.3、 p1.6 和 p1.7 口分 別用于設置輪圈的大小。接口 10 口的開關用于確定顯示的方式,當開關閉合時,顯示速度;打開時顯示 里程。第 12 腳外中斷 0 用于對輪子圈數(shù)的計數(shù)輸入,輪子每轉一圈,霍爾傳感器輸出一個地電平脈沖。 第 13 腳外中斷 1 用于控制定時器 t1 的啟停,當輸入為 0 時關閉定時器。此控制信

18、號是將輪子圈數(shù)的計 數(shù)脈沖經二分頻后形成(見圖 5.1) ,這樣,每次定時器 t1 的開啟時間剛好為轉一圈的時間。根據(jù)輪子的 周長就可以計算出自行車的速度。p1.4 和 p1.5 口用于 eeprom 存儲器 24c01 的存取控制。11 腳輸出用 于速度超速時的報警。 第四章第四章 軟件設計軟件設計 4.14.1 系統(tǒng)內存的規(guī)劃系統(tǒng)內存的規(guī)劃 由于本系統(tǒng)處理功能較多,因而一部分內存單元用于特定的用處。其主 要內存單元用處如下: 50h:eeprom 器件尋址字節(jié)存放單元; 51h:eeprom 傳送字節(jié)數(shù)存放單元; 30h:eeprom 發(fā)送數(shù)據(jù)緩沖單元; 40h:eeprom 讀出數(shù)據(jù)存放

19、單元; 0a0h:eeprom 尋址字節(jié)字節(jié)寫; 0a1h:eeprom 尋址字節(jié)字節(jié)讀; 62 h:dptr 計數(shù)器擴展高 8 位; 6c h:定時器 t1 計數(shù)器擴展高 8 位; 6d h:定時器 t1 計數(shù)器擴展高 816 位; 60 h、61 h、62 h:里程計數(shù)單元; 68 h、69 h、6a h、6b h:存放自行車每圈時間數(shù); 70 h、71 h、72 h、73 h:顯示 bcd 碼數(shù)據(jù)存放用; 11 h15 h:存放被除數(shù); 16 h19 h:存放除數(shù)。 4.24.2 系統(tǒng)的主要程序設計系統(tǒng)的主要程序設計 1. 初始化程序 在本系統(tǒng)初始化程序中,主要完成以下工作:將 t1 設

20、為外部控制定時器方式;外中斷 0 及外中 斷 1 設為邊沿觸發(fā)方式;將部分內存單元清零;設置輪子 周長值;開中斷及定時器;將 eeprom 中 的數(shù)據(jù)調入內存等。 2. 輪圈設置出錯處理程序 p1.2、 p1.3、 p1.6、p1.7 端口的開關用于設定輪子的周長,當沒有設定時(至少讓一個開關 閉合) ,能從 p3.1 口輸出一個周期為 0.5s 的方波信號,用作發(fā)光管閃爍及信響器提醒。 3. 主程序 主程序根據(jù) p3.0 的開關狀態(tài)選擇里程或速度顯示,其流程圖如圖 6.2 所示。 圖 5 主程序流程圖 4.里程計數(shù)程序(外中斷 0 服務程序) 外中斷 0 服務程序用于對 12 腳輸入的圈脈沖

21、進行計數(shù),為十六進制計數(shù)器。60h 為低位,62h 為高位。每計數(shù)一次后,對里程數(shù)據(jù)進行一次存儲操作。 5.外中斷 1 服務程序 外中斷 1 服務程序用于處理輪子轉動一圈后計時數(shù)據(jù)。當標志位(00h)為 1 時,說明計數(shù)器溢 出,放入最大時間值(為#0ffh);當標志位為 0 時,將計數(shù)單元(tl1、th1、6ch、6dh)的值放入 68h6bh 單元。 6.eeprom 存取程序 本系統(tǒng)使用歸一化 i2c 串口存取子程序,使用一條數(shù)據(jù)線和時鐘線,采用 atmel 公司的 24c01 串口存儲器,應用簡單方便。 7.顯示子程序 當顯示里程時,先要將圈數(shù)計數(shù)器中的數(shù)據(jù)進行運算,求出總里程。當要

22、顯示速度時,要將輪子的這周長和轉一圈的時間數(shù)相除,然后換算成 km/h 單位。最后放入 70h73h, 進行數(shù)據(jù)顯示。 第五章第五章 系統(tǒng)調試系統(tǒng)調試 要完成一個產品的設計,有很多紛繁復雜的步驟和過程,其中最為重要 和最為關鍵的就是系統(tǒng)調試。調試的步驟和方法有很多。本人也看過不少,在這次系統(tǒng)調試的中調 試的過程我充分的發(fā)揮了仿真器的作用。 5.15.1 硬件調試硬件調試 硬件的焊接是一個比較繁瑣的過程,繁瑣的地方在于 3 個單聯(lián)數(shù)碼管的 連接,線路較多,在焊接時要特別的細心,在焊接完成并燒入程序之后通電發(fā)現(xiàn)數(shù)碼管不亮,檢查 了好幾遍,電路無焊沒有錯誤,于是我就懷疑可能是數(shù)碼管的問題,拿去貝爾(

23、學院的社團)測試 沒問題,數(shù)碼管并沒有燒壞。 在插入芯片時要特別注意不能把芯片插反,否則就會把芯片燒掉;也要 注意極性電容的方向,長的腳為正,短的為負,不能把負的接+5v,正的接地;在焊接三極管時也要 注意其三個管腳的排布,還有為保護三極管不被燒換,所以 3 個三極管要各自接一個限流電阻(這 里為 4.7k) 。 5.25.2 軟件調試軟件調試 軟件調試是調試的重點,同時也是出錯最多的地方;在整個軟件調試調試過程中我采取先部分后整 體的調試方法。 在整個程序的編寫調試過程中我首先調試的是數(shù)碼管顯示系統(tǒng),為此我編寫了以下一段程序用于數(shù) 碼管顯示調試,要求數(shù)碼管顯示 0、1、2。 org 0000

24、h main: mov p2, #0ffh mov p0, 0c0h mov p2, #0feh acall delay1 mov p2, #0ffh mov p0, 0f9h mov p2, #0fdh acall delay1 mov p2, #0ffh mov p0, 0a4h mov p2, #ofbh mov p2, #0ffh ajmp main delay1: mov r6, #02h again: mov r7, #8fh delay: djnz r7, delay djnz r6, again ret end 結果數(shù)碼管正確顯示了 0、1、2 這三個數(shù),顯示系統(tǒng)調試成功。 軟

25、件測試要注意一下幾點: 1.在編寫 i2c 串行歸一化存儲子程序時本來出了點錯,后經過多次調試才運行正確。 2.里程/速度控制程序是系統(tǒng)程序的重點,所以它當然也是軟件調試的重點。 3.顯示系統(tǒng)最好先調試。 4.用韋幅軟件進行仿真時要充分利用其逐步調試功能。 第六章第六章 心得體會心得體會 通過這次單片機的課程設計,我進一步熟悉和掌握了單片機的結構及工作原理,單片機的接口技術 及相關外圍芯片的外特性,控制方法和單片機核心的電路設計的基本方法和技術,通過實際程序設計和 調試,逐步掌握模塊化程序設計方法和調試技術。這次的課程設計是很難得,其中也有很多不懂得地方, 但正是這樣,我才能在從中學到很多的東

26、西!通過完成一個包括電路設計和程序開發(fā)的完整過程,了解 開發(fā)一單片機應用系統(tǒng)的全過程,為今后從事相應打下基礎。 本設計能自動顯示自行車行駛的總里程數(shù)及行車速度,具有超速信響報警提醒以及里程數(shù)據(jù)自動記 憶的功能,也可應用于電動自行車、摩托車、汽車等機動車的儀表上。由于本系統(tǒng)采用的是動態(tài)掃描 led 顯示且共陰數(shù)碼管的驅動電流不是很大,所以數(shù)碼管的顯示不是特別亮。但可以通過更換小點的電阻增 大其驅動電流(最大驅動電流不能超過 20 毫安)使數(shù)碼管變得更亮。 參考文獻參考文獻 1 李玉峰、倪虹霞. mcs-51 系列單片機原理與接口技術. 第一版. 北京: 人民郵電出版社. 2004 2 周興華.

27、手把手教你學單片機. 第一版.北京:北京航空航天大學出版社. 2005 3 曾一江. 單片微機原理與接口技術. 第一版.北京:科學出版社. 2006 4 張俊謨. 單片機中級教程原理與應用. 第二版. 北京:北京航空航天大學出版社. 2006. p1-11 5 張友德 、趙志英、涂時亮. 單片機微型機原理、應用與實驗.第五版.上海:復旦大學出版社. 2006. p24-27 6 呂泉. 現(xiàn)代傳感器原理及應用. 第一版. 北京:清華大學出版社. 2006. p1-5 7 張毅剛、彭喜元. 單片機原理與應用設計. 第一版. 哈爾濱:哈爾濱工業(yè)大學. 8 謝自美.電子線路設計.實驗.測試m.武漢:華

28、中科技大學出版社,2000 9 曲家駭,王季秩 ,伺服控制系統(tǒng)中的傳感器 10 鄔寬民.單片機外圍器件實用手冊,數(shù)據(jù)傳輸接口器件分冊.北京.北京航空航天大學出版社. 2001:189-195 11 王貴悅,新編傳感器實用手冊.水利電力出版社.2002:67-89 12 自行車電子里程表的初步設計 刁文興 南京工業(yè)職業(yè)技術學院 后勤總公司 江蘇 南 京 13 數(shù)字式汽車里程表的設計 諸德宏, 潘天紅, 朱湘臨 江蘇大學電氣信息工程學院 , 江蘇 鎮(zhèn)江 14 電子車速里程表的單片機實現(xiàn)方案王鎖弘, 威海雙豐電子傳感有限公司 山東 威海 15 張福學。傳感器使用電路 150 例.中國技術出版社m.1

29、992 年 16 embedded microcontrollers and processor design ,嵌入式微控制器與處理器設計, greg osborn,機械工業(yè)出版社 17 altium designer (protel),機械工業(yè)出版社 18 programming 8-bit pic microcontrollers in c with interactive hardware simulation, 8 位單片機 c 語言編程:基于 pic16 ,martin p. bates,人民郵電出版社 附錄附錄 1 1:元件清單:元件清單 元件型號數(shù)量元件型號數(shù)量 傳感器 24c

30、011 個瓷片電容30p2 個 分頻器tc40241 個晶振12m1 個 單片機集成塊at89c521 個覆銅板big 1 塊 電阻3301 個led 數(shù)碼管plt75361as3 個 電阻1 k2 個蜂鳴器passed1 個 電阻4.7k9 個三極管901210137 個 電阻8.2 k3 個發(fā)光二極管3 個 電阻1.8k3 個自鎖開關6 個 電解電容10f1 個 附錄附錄 2:2: 系統(tǒng)完整源程序系統(tǒng)完整源程序 以下是控制系統(tǒng)完整源程序 ; ; ; speed/mile or ike program ; ; ; ; ; 60h,61h,62h 作里程計數(shù)單元,6ch,6dh 作 t1 計數(shù)

31、擴充單元, ; 68h,69h,6ah,6bh 存放自行車每圈時間數(shù),70h,71h,72h,73h ; 作顯示 bcd 碼存放數(shù)用,11h15h 存放被除數(shù),16h-19h 存放除數(shù) ; ; ; 定義 vsda equ p1.5 ; eeprom 數(shù)據(jù)傳送口 vscl equ p1.4 ; eeprom 時鐘傳送口 sla equ 50h ; eeprom 器件尋址字節(jié)存放單元 numbyt equ 51h ; eeprom 傳送字節(jié)數(shù)存放單元 mtd equ 30h ; eeprom 發(fā)送數(shù)據(jù)緩沖單元 mrd equ 40h ; eeprom 讀出數(shù)據(jù)存放單元 slaw equ 0a0h

32、; eeprom 尋址字節(jié)寫 slar equ 0a1h ; eeprom 尋址字節(jié)讀 dphh equ 62h ; dptr 計數(shù)擴展高 8 位 th1h equ 6ch ; 定時器 t1 擴展高 8 位 th1hh equ 6dh ; 定時器 t1 擴展高 8-16 位 ; ; ; pro gram input ; ; org 0000h;程序執(zhí)行開始地址 ljmp start;跳至 start org 0003h;外中斷 0 中斷程序入口 ljmp intex0;跳至 intex0 中斷服務程序 org 000bh;定時器 t0 中斷程序入口 reti ;中斷返回 org 0013h;外

33、中斷 1 中斷入口 ljmp intex1; 跳至 intex1 中斷服務程序 org 001bh; 定時器 t1 中斷程序入口 ljmp intt1; 跳至 intt1 中斷服務程序 org 0023h;串口中斷入口地址 reti ;中斷返回 org 002bh;定時器 t2 中斷入口地址 reti ;中斷返回 ; ; ; ; program clear ; ; ;上電初始化程序 clearmen: mov tmod, #90h ;t1 為 16 位外部控制定時器 mov sp, #75h ;堆棧在 75h 開始 setb px0 ;外中斷 0 優(yōu)先級為 1 setb it0 ;外中斷 0

34、用邊沿觸發(fā) setb it1 ;外中斷 1 用邊沿觸發(fā) mov 20h, a ;清內存中特定單元 mov 6ch, a ; mov 6dh, a ; mov 70h, a ; mov 71h, a ; mov 72h, a ; mov 73h, a ; mov 60h, a ; mov 61h, a ; mov 62h, a ; mov 63h, a ; 清內存中特定單元 dec a ;a 為#0ffh mov 68h, a ;內存置數(shù)據(jù)#0ffh mov 69h, a ;內存置數(shù)據(jù)#0ffh mov 6ah, a ;內存置數(shù)據(jù)#0ffh mov 6bh, a ;內存置數(shù)據(jù)#0ffh mov

35、p1, a ;p1 口置 1 clear1: jb p1.2, key1 ;根據(jù) p1.2,p1.3,p1.6,p1.7 設置狀態(tài) ; 在 21 地址單元賦自行車周長 值 mov 21h, #0fh ; 22 寸自行車周長值 ljmp clear2 ; 轉 clear2 key1: jb p1.3, key2 ; mov 21h, #12h ; 24 寸自行車周長值 ljmp clear2 ; clear2 key2: jb p1.6, key3 ; mov 21h, #14h ; 26 寸自行車周長值 ljmp clear2 ; 轉 clear2 key3: jb p1.7, err ; 四

36、個開關都沒合上,轉出錯處理 mov 21h, #19h ; 28 寸自行車周長值 clear2: setb tr1 ; 開定時器 t1 setb ea ; 開中斷允許 setb ex0 ; 開外中斷 0 setb et1 ; 開定時中斷 t1 setb p3.1 ; 關報警器 lcall viicread ; 將 eeprom 中原里程數(shù)據(jù)調入 內存 ret ; 子程序返回 err: cpl p3.1 ; 輪周長設置出錯,led 燈閃 提醒 all dl5s ; 延時 ljmp clear1 ; 重新初始化,等待輪周長設置開關合上 ; ; ; program start ; ; ; start

37、: lcall clearmen ; 上電初始化 start1: jb p3.0, displays ; p3.0=1,顯示里程 lcall displayv ; 顯示速度 start2: sjmp start1 ; 轉 start1 循環(huán) ; ; ; intex0 program ; ; ; 里程計數(shù)程序,用外中斷 0 實現(xiàn),計數(shù)用 60h-62h 內存單元。 intex0: push acc ; 累加器堆棧保護 push psw ; 狀態(tài)字堆棧保護 inc 60h ; 圈加 1 clr a ; 清 a cjne a, 60h, intex0out ; 計數(shù)沒溢出轉 intex0out in

38、c 61h ; 溢出進位(61h 加 1) cjne a, 61h, intex0out ; 計數(shù)沒溢出轉 intex0out inc 62h ; 溢出進位(62h 加 1) intex0out: lcall viicwrite ; 里程數(shù)據(jù)存入 eeprom setb ex1 ; 開外中斷 1 pop psw ; 狀態(tài)字恢復 pop acc ; 累加器恢復 reti ; 中斷返回 ; ; ; intex1 program ; ; ; 每轉 1 圈時間計數(shù)處理程序,每圈時間放在 68h-6bh 單元中。 intex1: push acc ; 堆棧保護 push psw ; clr ex1 ;

39、關外中斷 1 jnb 00h, intex11 ; 溢出標志為 0 轉 intex11 mov tl1, #0ffh ; 溢出時計時單元賦#0ffh(顯示速度為零) mov th1, #0ffh ; mov 6ch, #0ffh ; mov 6dh, #0ffh ; intex11: mov 68h, tl1 ; 將時間計數(shù)值移入暫存單元 68h-6bh mov 69h, th1 ; mov 6ah, 6ch ; mov 6bh, 6dh ; clr a ; 清 a mov tl1, a ; 計時單元置 0 mov th1, a ; mov 6ch, a ; mov 6dh, a ; clr

40、00h ; 清溢出標志 pop psw ; 堆?;謴?pop acc ; reti ; 中斷返回 ; ; ; intt1 program ; ; ; ; t1 計數(shù)器中斷服務程序。 (計數(shù)器 t1 由外中斷 1 輸入控制,當為高電平時計時開始) intt1: push acc ; 堆棧保護 push psw ; inc 6ch ; 6ch 計時單元加 1 mov a, 6ch ; 移入 a jnz intt11 ; 不等于 0 轉 intt11 inc 6dh ; 進位,6dh 單元加 1 mov a, 6dh ; 移入 a jnz intt11 ; 不等于 0 轉 intt11 setb 0

41、0h ; 計時器溢出,置溢出標志 intt11: pop psw ; 恢復堆棧 pop acc ; reti ; 中斷返回 ; ; ; display s ; ; ; ;里程顯示控制程序 displays: setb p1.0 ; 點亮 led1(顯示里程狀態(tài)) clr p1.1 ; 關閉速度指示燈 setb p3.7 ; 顯示小數(shù)點(最小顯示為 0.1 公里) lcall sss ; 將圈數(shù)轉為公里數(shù) lcall display ; 顯示公里數(shù)據(jù) ljmp start1 ; 跳回 start1 ; ; ; display v ; ; ;速度顯示控制程序 displayv: clr p1.0

42、; 關閉 led1(里程)燈 setb p1.1 ; 點亮 led2(顯示時速狀態(tài)) clr p3.7 ; 關小數(shù)點顯示 lcall vvv ; 每圈時間換算為公里/小時程序 mov a, 71h ; 將十位數(shù)(bcd 碼)值移入 a subb a, #04h ; 與預定報警值比較 jnc waring ; 時速超過 40 時報警 setb p3.1 ; 關報警燈 v1: lcall display ; 顯亮一次(為了改善閃爍) ret ; 子程序返回 waring: clr p3.1 ; 報警燈 led3 點亮(并嗚叫) ajmp v1 ; 轉 v1 退出 ; ; ; viic write

43、; ; ;歸一化 eeprom 存入程序(12m 時鐘) ,存入數(shù)在 50h 起單元 viicwrite: acall wmov9 mov sla, #slaw mov numbyt, #09h lcall wrnbyt ret wmov9: mov 5fh, #50h mov r0, #mtd mov r1, #5fh mov r2, #09h wmov: mov a, r1 mov r0, a inc r0 inc r1 djnz r2, wmov ret ; ; ; viicre ad ; ; ; 歸一化 eeprom 讀出程序(12m 時鐘) ,讀出數(shù)放入 60h-67h 單元 vii

44、cread: mov mtd, #50h mov sla, #slaw mov numbyt, #01h lcall wrnbyt mov sla, #slar mov numbyt, #08h lcall rdnbyt acall rmov8 ret rmov8: mov r0, #mrd mov r1, #60h mov r2, #08h rmov: mov a, r0 mov r1, a inc r0 inc r1 djnz r2, rmov ret ; ; ; viic program ; ; ; i2c 串行歸一化存儲子程序 sta: setb vsda setb vscl nop

45、nop nop nop clr vsda nop clr vsda nop nop nop nop clr vscl ret stop: clr vsda setb vscl nop nop nop nop setb vsda nop nop nop nop clr vsda clr vscl ret mack: clr vsda setb vscl nop nop nop nop clr vscl setb vsda ret mnack: setb vsda setb vscl nop nop nop nop clr vscl clr vsda ret cack: setb vsda set

46、b vscl clr f0 mov c, vsda jnc cend setb f0 cend: clr vscl ret wrbyt: mov r0, #08h wlp: rlc a jc wr1 ajmp wr0 wlp1: djnz r0, wlp ret wr1: setb vsda setb vscl nop nop nop nop clr vscl clr vsda ajmp wlp1 wr0: clr vsda setb vscl nop nop nop nop clr vscl ajmp wlp1 rdbyt: mov r0, #08h rlp: setb vsda setb

47、vscl mov c, vsda mov a, r2 rlc a mov r2, a clr vscl djnz r0, rlp ret wrnbyt: mov r3, numbyt lcall sta mov a, sla lcall wrbyt lcall cack jb f0, wrnbyt mov r1, #mtd wrda: mov a, r1 lcall wrbyt lcall cack jb f0, wrnbyt inc r1 djnz r3, wrda lcall stop ret rdnbyt: mov r3, numbyt lcall sta mov a, sla lcal

48、l wrbyt lcall cack jb f0, rdnbyt rdn: mov r1, #mrd rdn1: lcall rdbyt mov r1, a djnz r3, ack lcall mnack lcall stop ret ack: lcall mack inc r1 sjmp rdn1 ; ; ; display program ; ; ; 顯示程序。顯示 bcd 碼在 70h-73h 單元內,采用共陰 led 數(shù)碼管 display: mov r1, #70h ; 顯示單元首址 mov r2, #0feh ; 掃描字 play: mov a, r2 ; 掃描字入 a mov

49、p2, a ; 放到端口 mov a, r1 ; 取顯示數(shù)據(jù) anl a, #0fh ; 去掉高四位(為 0) mov dptr, #tab ; 取段碼表首址 movc a, a+dptr ; 查顯示數(shù)據(jù)對應段碼 mov p0,a ; 段碼輸出 lcall dl1ms ; 點亮 1 毫秒 inc r1 ; 指向下一顯示數(shù)據(jù)地址 mov a, r2 ; 取掃描字 jnb acc.3, endout ; 已掃描到第四位,轉 endout 退出 rl a ; 循環(huán)左移 mov r2, a ; 放回 r2 ajmp play ; 轉 play 循環(huán) endout: setb p2.0 ; 關掃描 se

50、tb p2.1 ; 關掃描 setb p2.2 ; 關掃描 setb p2.3 ; 關掃描 ret ; 掃描結束 ;共陰段碼表(可顯示 0-f) tab: db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h db 00h ; ; ; sss program ; ; ; 里程處理程序,將自行車圈數(shù)據(jù)換算成公里數(shù) sss: mov 19h, #64h ; 除數(shù)最高位賦值 mov 18h, #00h ; 除數(shù)賦值 mov 17h, #00h ; 除數(shù)賦值 mov 16h, #00h ;

51、 除數(shù)賦值 mov 11h, #00h ; 被除數(shù)賦值 mov 12h, #00h ; 被除數(shù)賦值 mov 13h, 62h ; 被除數(shù)賦值 mov 14h, 61h ; 被除數(shù)賦值 mov 15h, 60h ; 被除數(shù)賦值 lcall divst ; 調除法程序 lcall bcdst ; 調二進制轉 bcd 碼程序 mov a, 25h ; 結果處理,將 25h 數(shù)移入 a anl a, #0fh ; 將高四位置為 0 mov 70h, a ; 放入 70h 單元 mov a, 25h ; 25h 數(shù)移入 a swap a ; 高低四位交換 anl a, #0fh ; 將高四位置為 0 mov 71h, a ; 放入 71h 單元 mov a, 24h ; 24h 數(shù)移入 a an

溫馨提示

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

評論

0/150

提交評論