版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、單片機原理及應用課程設計題 目自行車里程計/速度計二級學院電子信息與電氣工程學院班 級姓 名學 號指導教師設計時間2010-6-212010-7-2目錄、概述1、設計目的12、課題簡介1二、系統(tǒng)設計1、總體設計方案22、硬件部分簡介3(a) at89c51芯片簡介3(b) 硬件設計43、軟件部分5(a) 初始化程序6(b) 主程序8(0中斷程序9(d) 里程、速度處理程序11(e) 顯示子程序14(f) 延吋子程序16三、調(diào)試171、硬件調(diào)試172、軟件調(diào)試17四、操作說明19五、參考文獻20六、心得體會21七、附錄221、元器件清單222、整體原理圖233、完整程序244、實物圖33自行車里
2、程計/速度計的設計一.概述1、設計目的本設計采用at89c51單片機作控制,利用霍爾元件等器件設計一個可用 led數(shù)碼管顯示當前自行車行駛的距離及速度并具有超速報警功能的口行車 里程/速度表,使其作為口行車的一種輔助工具,讓口行車的功用更強大,給 人們帶來更多的方便。2、課題簡介自行車被發(fā)明及使用到現(xiàn)在已有兩百多年的歷史,在這兩百年間人類在 不斷的嘗試與研發(fā)過程中,自行車發(fā)展的目的也從最早的代步工具轉(zhuǎn)換成休 閑娛樂的用途,隨著生活水平的捉高,人們希望自行車的功能更強大,而里 程計/速度計正滿足了這個需求?,F(xiàn)在先進的里程/速度計不僅能顯示實時的 速度和里程,還顯示時間,甚至具有測量騎車人的心跳、
3、顯示騎車人熱量消 耗等功能。由于時間有限,本設計完成的功能減為兩個,即測量并通過led數(shù)碼管 進行動態(tài)顯示當前的速度和里程,并在超速時發(fā)岀警報。要求達到的各項指標及實現(xiàn)方法如下:1. 利用霍爾傳感器產(chǎn)生里程數(shù)的脈沖信號。2. 對脈沖信號進行計數(shù)。實現(xiàn):利用單片機自帶的計數(shù)器t1對霍爾傳感器脈沖信號進行計數(shù)。3. 對數(shù)據(jù)進行處理,要求用led顯示里程總數(shù)和即時速度。實現(xiàn):利用軟件編程,對數(shù)據(jù)進行處理得到需要的數(shù)值。最終實現(xiàn)目標:自行車的速度里程表具有里程、速度測試與顯示功能,采用 單片機作控制,顯示電路可顯示里程及速度。二、系統(tǒng)設計1、總體設計方案采用at89c51芯片,用霍爾元件將車輪的轉(zhuǎn)速轉(zhuǎn)
4、換成電脈沖,經(jīng)過處理 后送入單片機。里程及速度的測量,是經(jīng)過at89c51的定吋/計數(shù)器測出總 的脈沖數(shù)和每轉(zhuǎn)一圈的時間,再經(jīng)過單片機的計算得出,計算結(jié)果通過led 顯示器顯示出來。傳感器是獲取自然或生產(chǎn)領(lǐng)域中信息的關(guān)鍵器件,是現(xiàn)代信息系統(tǒng)和各 種設備不可缺少的信息采集工具。磁傳感器是一種將磁學量信號轉(zhuǎn)變?yōu)殡娦?號的器件或裝置。隨著信息產(chǎn)業(yè)、工業(yè)自動化、醫(yī)療儀器等的e速發(fā)展和計 算機應用的普及,需耍大量的傳感器將被測或被控的非電信號轉(zhuǎn)換成可與計 算機兼容的電信號。作為輸入信號,這就給磁傳感器的快速發(fā)展提供了機遇, 形成了磁傳感器的產(chǎn)業(yè)。其中最具代表的磁傳感器就是霍爾傳感器,在自動 檢測系統(tǒng)中,
5、利用霍爾傳感器測轉(zhuǎn)數(shù)是一種最基木的測量工作。單片機是本次設計的核心部件,它是信號從采集到輸出的橋梁,而口包描計 算、定時、信息處理等功能當輪子每轉(zhuǎn)一圈,通過開關(guān)型霍爾元件傳感器采集到一個脈沖信號,并 從引腳12即p3. 2外部中斷0端輸入,傳感器每獲取一個脈沖信號即對系統(tǒng) 提供一次計數(shù)中斷。每次中斷代表車輪轉(zhuǎn)動一圈,中斷數(shù)n輪圈的周長為l 的乘積為里程值。計數(shù)器t1計算每轉(zhuǎn)一圈所用的時間t,就可以計算出即 時速度j當里程鍵按下時,里程指示燈亮,led切換顯示當前里程,與當 速度鍵按下時,速度指示燈亮,led切換顯示當前速度,若自行車超速,系 統(tǒng)發(fā)岀報警信號,指示燈閃爍。里程數(shù)據(jù)自動記憶,也可用
6、于電動自行車、 摩托車、汽車等機動車儀表上。設計包描碩件、軟件兩部分,碩件電路包wat89c51單片機的外圍電路 以及l(fā)ed顯示電路等,這里對硬件部分只做簡單介紹,主要闡述的是軟件部 分的設計,包括數(shù)據(jù)初始化程序的設計、主程序的設計、處理了程序的設計、 顯示子程序的設計;最后針對仿真過程遇到的問題進行了具體說明與分析, 對本次設計進行總結(jié)。2、硬件部分介紹 (a)at89c51芯片簡介at89c51是一種帶4k字節(jié)閃存可編程可擦除的只讀存儲器即為(fperom一flash programmable and erasable read only memory)的低電 壓、高性能cmos 8位微處
7、理器,俗稱單片機。管腳說明:vcc:供電電壓。gnd:接地。p0 口: p0 口為一個8位漏級開路雙向i/o 口,每腳可吸收8ttl f j電 流。當p1 口的管腳第一次寫1時,被定義為高阻輸入。p0能夠用于外部程 序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在f1ash編程時,p0 口作為原碼輸入口,當fiash進行校驗時,p0輸出原碼,此時p0外部必須 被拉高。p1 口 : p1 口是一個內(nèi)部提供上拉電阻的8位雙向1/0 口,p1 口緩沖器 能接收輸出4ttl門電流。p1 口管腳寫入1后,被內(nèi)部上拉為高,可用作輸 入,p1 口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。
8、在flash編程和校驗時,p1 口作為第八位地址接收。p2 口 : p2 口為一個內(nèi)部上拉電阻的8位雙向1/0 口,p2 口緩沖器可接 收,輸岀4個ttl門電流,當p2 口被寫“1”時,其管腳被內(nèi)部上拉電阻 拉高,且作為輸入。p3 口 : p3 口管腳是8個帶內(nèi)部上拉電阻的雙向i/o 口,可接收輸岀4 個ttl |'j電流。p3 口也可作為at89c51的一些特殊功能口,如下表所示:p3.0 rxd (串行輸入口)p3.1 txd (串行輸出口)p3.2/int0 (外部中斷0)p3.3/int1 (外部中斷1)p3.4 t0 (記時器0外部輸入)p3.5t1 (記時器1外部輸入)p3
9、.6/wr (外部數(shù)據(jù)存儲器寫選通)p3.7/rd (外部數(shù)據(jù)存儲器讀選通)rst:復位輸入。當振蕩器復位器件時,要保持rst腳兩個機器周期的 高電平時間。ale/prog:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存 地址的地位字節(jié)。在flash編程期間,此引腳用于輸入編程脈沖。/psen:外部程序存儲器的選通信號。在由外部程序存儲器取指期間, 每個機器周期兩次/psen有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的 /psen信號將不出現(xiàn)。3(b)硬件設計自行車里程計/速度計電路原理圖見附錄。本次設計信號的捕獲采用的是霍爾傳感器。霍爾器件具有許多優(yōu)點,它們的 結(jié)構(gòu)牢固、體積小、重量輕、
10、壽命長、安裝方便、功耗小、頻率高(可達1mhz)、 耐震動、不怕灰塵、油污、水汽及煙霧等的污染或腐蝕?;魻柧€性器件的精度高、 線性度好;霍爾開關(guān)器件無觸點、無磨損、輸出波形清晰、無抖動、無回跳、位 置重復精度高。取用齊種補償和保護措施的霍爾器件工作溫度范圍寬,可達一 55°c150°c。xtal1和xtal2分別為反向放大器的輸入和輸出。該反向放大 器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時 鐘源驅(qū)動器件,xtal2應不接。由于輸入至內(nèi)部時鐘信號要通過一個二分頻 觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低 電平要求的寬度。p0 口
11、作為輸岀口用于顯示歷程狀態(tài)和速度狀態(tài)。由于p0 口沒有上拉電阻, 因此作為輸出口時要加上上拉電阻來驅(qū)動led數(shù)碼管的點亮。接于引腳10即 p3.2、rxd的開關(guān)用于控制改變顯示的方式,當開關(guān)閉合時,顯示速度;開關(guān)打 開時顯示里程。第12腳即外部屮斷0用于對輪子圈數(shù)的計數(shù)輸入,輪子每轉(zhuǎn)一 圈,霍爾傳感器輸出一個低電平脈沖。第i三腳即外部屮斷1用于控制定時器 t1的啟停,當輸入為0時關(guān)閉定時器。此控制信號是將輪子圈數(shù)的計數(shù)脈沖經(jīng) 二分頻后形成,這樣,每次定時器t1的開啟時間剛好為轉(zhuǎn)一圈的時間,根據(jù)輪 子的周長就可以計算出自行車的速度。p1.4 口和p1.5 口用于eepr0m存儲器 24c01的存
12、取控制。11腳輸出用于超速時的報警,此時蜂鳴器發(fā)出聲音,同時 led燈閃爍。led數(shù)碼管采用四位相連的共陰極數(shù)碼管,片選信號分別通過三極管接 至21-24管腳即p2. 0-p2. 4 口,從而實現(xiàn)里程和速度的動態(tài)顯示。自行車的速度里程表的硬件電路設計是基礎(chǔ)部分,它包括信號的捕獲、放大、 整形,單片機的計算處理,數(shù)碼管的實時顯示和單片機外圍基本電路的設計,兩 大主要器件就是傳感器和單片機。3、軟件部分模塊化結(jié)構(gòu)設計即是根據(jù)要求和碩件設計的結(jié)構(gòu),將整個系統(tǒng)的功能分成許 多小的功能模塊,再根據(jù)這些小的功能模塊進行程序編寫的過程。這樣的設計方 法,使得系統(tǒng)的整個功能和各部分的功能趨于明朗化。當系統(tǒng)出現(xiàn)
13、問題,就叮以 根據(jù)功能設置找出問題的根源,從而更快地解決問題。所以說,在整個設計過程 中,軟件設計必須與皺件設計緊密地結(jié)合在一起。軟件設計包括初始化程序、主程序、行車過程中里程和速度計算子程序、延 時子程序、中斷服務子程序、顯示子程序等。系統(tǒng)軟件總體流程圖如圖3所示總體設計思路:首先進行初始化,選擇車輪周長,p3.0是用于里程和速度切 換的,低電平為顯示速度,高電平為顯示里程。根據(jù)p3.0的狀態(tài)來決定顯示內(nèi) 容,p3.0=l時,轉(zhuǎn)到計算速度子程序并進行顯示;p3.0=0吋,轉(zhuǎn)到計算里程子程 序并進行顯示。p1.0和p1.1 口分別用于顯示里程狀態(tài)和速度狀態(tài)。pl.2、p1.3、 p1.6和p1
14、.7 口分別用于設置輪圈的大小,低電平有效。中斷0用于對輪子圈數(shù) 的計數(shù)輸入,輪子每轉(zhuǎn)一圈,霍爾傳感器輸出一個低電平脈沖。將根據(jù)里程寄存 器中的內(nèi)容計算和判斷出行駛里程數(shù)。中斷1用于控制定時器t1的啟/停,當輸 入為0時關(guān)閉定時器。此控制信號是將輪子圈數(shù)的計數(shù)經(jīng)二分頻后形成。這樣, 每次定時器t1的開啟吋間剛好為轉(zhuǎn)一圈的吋間,根據(jù)輪子的周長就可以計算出 自行車的速度。計算速度顯示速度圖3. 1 系統(tǒng)整體流程圖主要內(nèi)存單元及用處:50h: eeprom器件尋址字節(jié)存放單元51h:eeprom傳送字節(jié)數(shù)存放單元30h: eeprom發(fā)送數(shù)據(jù)緩沖單元40h: eeprom讀岀數(shù)據(jù)存放單元oaoh:
15、eeprom尋址字節(jié)寫入0a1h: eeprom尋址字節(jié)讀出62h: dptr計數(shù)擴展高8位6ch:定時器t1計數(shù)擴展高8位6dh:定時器t1計數(shù)擴展高816位60h、61h、62h:里程計數(shù)單元68h、69h、6ah、6bh:存放自行車每圈時間數(shù) 70h、71h、72h、73h:顯示bcd碼數(shù)據(jù)存放用 11h15h:存放被除數(shù)16h19h:存放除數(shù)(a)初始化程序初始化程序主要完成以下工作:將t1設為外部控制定時器方式;外部屮斷0及 外部小斷1設為邊沿觸發(fā)方式;將部分內(nèi)存單元清0;設置輪子周長;開小斷及 定時器;將eepr0m中的數(shù)據(jù)調(diào)入內(nèi)存。clearmen訓0vtmod, #90h;t1
16、為16位外部控制定時器movsp, #75h;堆棧從75h開始setbpxo;外部小斷0優(yōu)先級為1setbito;外部小斷0用邊沿觸發(fā)setbit1;外部小斷1用邊沿觸發(fā)clra;清人mov20h, a;清內(nèi)存小特定單元mov6ch,a;清內(nèi)存小特定單元mov6dh, a;清內(nèi)存小特定單元mov70h, a;清內(nèi)存小特定單元mov71h, a;清內(nèi)存小特定單元mov72h, a;清內(nèi)存小特定單元mov73h, a;清內(nèi)存小特定單元mov60h,a;清內(nèi)存小特定單元mov61h, a;清內(nèi)存小特定單元mov62h, a;清內(nèi)存小特定單元mov63h,a;清內(nèi)存小特定單元deca;a%0ffhmo
17、v68h,a;內(nèi)存置數(shù)據(jù)offhmov69h,a;內(nèi)存置數(shù)據(jù)offhmov6ah, a;內(nèi)存置數(shù)據(jù)offhmov6bh,a;內(nèi)存置數(shù)據(jù)offhmovpl, a;p1 口置 1clear1: jbpl. 2, key1;根據(jù)p1.2設置狀態(tài)mov21h, #ofhljmpclear2;轉(zhuǎn)clear2key1:jbpl. 3, key2;根據(jù)p1.3設置狀態(tài)mov21h, #12hljmpclear2key2:jbpl. 6, key3;根據(jù)p1.6設置狀態(tài)mov21h, #14hljmpclear2key3:jbpl. 7, err;根據(jù)p1.7設置狀態(tài)mov 21h,#19hclear2:se
18、tbtri;開定吋器t1setbea;開中斷允許setbexo;開外中斷0setbet1;開定時中斷t1setbp3. 1;關(guān)報警器lcallviicread;將eepromi |'原里程數(shù)據(jù)調(diào)入內(nèi)存reterr:cplp3. 1;未設置車輪周長,開始報警lcalldl5s;延吋5sljmpclear1;重新初始化初始化具體過程:首先對pl. 2口的內(nèi)容進行查詢,若p1.2=0,則說明p1.2口接的 按鈕被按下,即選擇第一種車輪周長,同吋將周長存入21h單元內(nèi);若p1.2=l, 則第一個按鈕沒被按下,再對pl3口的內(nèi)容進行查詢,內(nèi)容為0則將其周長值存 入21h中,不為0則掃描p1. 6
19、,內(nèi)容為0則將其周長值存入21h中,不為0則掃描p1.7, 若p1.7為0則將其周長值存入21h中,不為0則說明沒有選擇車輪直徑,此時開始 報警,并調(diào)用延時子程序。接著再從pl2口掃描,如此循環(huán),直到有鍵按下后停 止報警。圖3.2初始化程序流程圖(b)主程序主程序根據(jù)p3. 0 口的開關(guān)狀態(tài)選擇里程速度顯示。start:lcallclearmen;上電初始化start1:jbp3. 0, displays;p3. 0=1,顯示里程lcalldisplayv;p3. 0二0,顯示速度start2:sjmpstart1;循環(huán)圖3.3 主程序流程圖(c)用外部中斷0實現(xiàn)的里程計數(shù)程序定時中斷是為滿足
20、定吋或計數(shù)的需耍而設置的。在單片機內(nèi)部有兩個定吋/ 計數(shù)器,以對其中的計數(shù)結(jié)構(gòu)進行計數(shù)的方法,來實現(xiàn)定吋或計數(shù)功能。當結(jié)構(gòu) 發(fā)生計數(shù)溢岀吋,即表明定吋吋間或計數(shù)值已滿,這吋就以計數(shù)溢出信號作為中 斷請求,去置位一個溢出標志,作為單片機接受中斷請求的標志。這種中斷請求 是在單片機芯片內(nèi)部發(fā)生的,因此無須在芯片上設置引入端。定時/計數(shù)器控制寄存器tcon是8位寄存器,地址為旳h,可以位尋址。其 高4位用于定吋/計數(shù)器中斷控制,低4位借給外部中斷,用做中斷標志和觸發(fā) 方式選擇位。木設計采用定時中斷,對自行車的里程和速度進行計數(shù)。pushaccpushpswinc6011clracjnea,60h,i
21、ntexooutinc6111cjnea,61h,intexooutinc6211intexo:intexoout:lcall viicwritesetb ex1;累加器堆棧保護;狀態(tài)字堆棧保護;圈數(shù)加1;清人;計數(shù)器沒溢出轉(zhuǎn)intexoout;溢出進位(6111加1);計數(shù)器沒溢出轉(zhuǎn)intexoout;溢出進位(6211加1);里程數(shù)據(jù)存入eeprom;開外部中斷1pop pswpop accreti;狀態(tài)字恢復 ;累加器恢復 川|斷返回;每轉(zhuǎn)一圈時間計數(shù)處理程序,每圈時間放在68h6bh單元(1intex1:pushacc;累加器堆棧保護pushpsw;狀態(tài)字堆棧保護clrexi;關(guān)外部中
22、斷1jnbooh,intex11;溢出標志為0轉(zhuǎn)intex11movtl1, #0ffh;溢出時計時單元賦#offh(顯示速度為零)movth1, #0ffhmov6ch, #0ffhmov6dh, #0ffhintex11:mov68h, tl1;將時間計數(shù)值移入暫存單元68h-6bhmov69h, th1mov6ah,6chmov6bh, 6dhclramovtl1,a;計數(shù)單元置零movth1, amov6ch,amov6dh, aclrooh;清溢出標志poppsw;狀態(tài)字堆?;謴蚿opacc;累加器堆?;謴蛂eti;屮斷返回;t1計數(shù)器中斷服務程序。(計數(shù)器t1由外部中斷1輸入控制,
23、當為高電平時計時開始)intt1:pushacc;累加器堆棧保護pushpsw;狀態(tài)字堆棧保護inc6ch;6c計時單元加1mova, 6ch;6c單元內(nèi)容移入ajnzintt11;不為0,轉(zhuǎn)intt11inc6dh;進位,6dh單元加1mova, 6dh;移入ajnzintt11;不為0,轉(zhuǎn)intt11setbooh;計時器溢出,置溢出標志位intt11:poppsw;狀態(tài)字堆棧恢復popacc;累加器堆?;謴?0圖3.4屮斷流程圖(d) 里程、速度處理程序里程處理程序外屮斷0服務程序用于對單片機p3. 2 口輸入的圈脈沖進行計數(shù),為十六進制計 數(shù)器。60h為低位,62h為高位。每次計數(shù)一次
24、后,對里程數(shù)據(jù)進行一次存儲操 作。當車輪每轉(zhuǎn)一圈,通過霍爾元件將脈沖數(shù)輸入單片機內(nèi),通過計數(shù)器計出脈沖數(shù),再用乘法子程序算出里程數(shù)。sss:mov 19h,#64h除數(shù)最高位賦值mov 18h,#00h除數(shù)賦值mov 17h,#00h除數(shù)賦值mov 16h,#00h除數(shù)賦值mov 11h, #00h被除數(shù)賦值mov 12h, #00h被除數(shù)賦值mov13h,62h;被除數(shù)賦值mov14h,61h;被除數(shù)賦值mov15h, 60h;被除數(shù)賦值lcall divst;調(diào)除法程序lcall bcdst;跳到二進制轉(zhuǎn)bcd碼程序mova, 25h;將25卅內(nèi)容移入aanla, #ofh;高四位為0mo
25、v70h, a;移入70hmova, 25h;將25h內(nèi)容移入aswapa;交換高低字節(jié)anla, #ofh;高四位為0mov71h, a;移入71hmova, 24h;將24h內(nèi)容移入aanla, #ofh;高四位為0mov72h, a;移入72hmova, 24h;將24h內(nèi)容移入aswapa;交換高低字節(jié)anla, #ofh;高四位為0mov73h, a;移入73hret開始v;返回)圖3.5里程處理程序流程圖速度處理程序外中斷1服務程序用于處理輪子轉(zhuǎn)動一圈后的計時數(shù)據(jù)。當標志位(00h)為1 時,計數(shù)溢出,放入最大時間值(為#offh);當標志位為0時,將計數(shù)單元(tl1、th1、6c
26、h、6dh)的值放入68h6bh單元。定時器計出每轉(zhuǎn)一圈所用的時間,用鬥行車車輪的周長除以時間就得出鬥行車的速度。18h,68h17h,69hvvv:movmovmov 16h,6ahmov 11h, itoohmov 12h,#00hmov 13h,#36hmov 14h,#oeehmov 15h,#80hlcall divstmov 14h,#00hlcall bcdstmov a,25hanl a,#ofhmov 70h, amov a, 25hswap aanl a,#ofhmov 71h, amov 72h,#00hmov 73h,#00hret;除數(shù)賦值 ;除數(shù)賦值 ;除數(shù)賦值 ;
27、被除數(shù)賦值 ;被除數(shù)賦值 ;被除數(shù)賦值 ;被除數(shù)賦值 ;被除數(shù)賦值 ;調(diào)除法程序 ;舍去一位 ;跳到二進制轉(zhuǎn)bcd碼程序 ;以下將速度值放入顯示單元 ;高四位為0;放入70h內(nèi);再取數(shù);高低字節(jié)交換 ;高四位為0 ;放入71h內(nèi) ;72h 為 0 ;73h 為 0;子程序返回12圖3. 6速度處理程序流程圖13(e) 顯示子程序采用動態(tài)掃描顯示接口電路,動態(tài)顯示接口電路是把所有顯示器的8個筆劃 段a-h同名端連在一起,而每一個顯示器的公共極com各口獨立地受1/0線控制。 cpu向字段輸岀口送出字型碼時,所有顯示器接收到相同的字型碼,但究競是哪 個顯示器亮,則取決于com端??梢圆捎梅謺r的方法
28、,輪流控制各個顯示器的 com端,使各個顯示器輪流點亮。在輪流點亮掃描過程中,每位顯示器的點亮時 間是極為短暫的(約1ms),由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應, 盡管實際上各位顯示器并菲同時點亮,但只要掃描的速度足夠快,給人的印象就 是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感。本設計p2.0、p2.1、p2.2、p2. 3信號一起組成位選通的位選信號,p0.0 p0. 7信號一起組成段碼選通的段選信號,通過軟件編程,先把所要顯示的數(shù)據(jù) 放入存儲單元,然后把數(shù)據(jù)送入段選通對應的地址,再選通某一個led,逐步完 成四個led的顯示。;里程顯示控制程序displays:setb pl. 0;點亮l
29、ed1clrpl. 1;關(guān)閉速度指示燈setbp3. 7lcallssslcalldisplayljmpstart1;速度顯示程序displayv:clrp1.0setbpl. 1clrp3. 7lcallvwmova, 71hsubba, #04hjncwaringsetbp3. 1vi:lcallretdisplaydisplay:movrl, #70hmovr2, #ofehplay:mova, r2movp2, amova, r1anla, #ofhmovdptr, #tabmovca, ©a+dptrmovpo,alcall dl1msincr1mova, r2jnbacc
30、. 3, endoutrlamov r2,aajmp playend0ut:setbp2.0setb p2. 1setb p2. 2setb p2. 3ret;共陰極段碼表tab:db;將圈數(shù)轉(zhuǎn)為公里數(shù);顯示公里數(shù)據(jù);跳回 start 1;關(guān)閉led1 (里程指示燈);點亮led2 (速度指示燈);每圈吋間換算為km/h程序;將i位數(shù)(bcd碼)值植入a;與預定報警值比較;時速超過40時報警;關(guān)報警燈;顯亮一次;子程序返回;顯示單元首址;掃描字;掃描字送入a;放到端口 p2;取顯示數(shù)據(jù);高四位清0;取段碼表首址;查顯示數(shù)據(jù)對應段碼14;段碼輸出;點亮ims;指向下一顯示數(shù)據(jù)地址;取掃描字;已掃
31、描到第四位,轉(zhuǎn)end0ut退出;循環(huán)左移;放回r2;轉(zhuǎn)卩口丫循環(huán);關(guān)掃描;關(guān)掃描;關(guān)掃描;關(guān)掃描3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h;子程序返回db 7fh, 6fh,77h,7ch,39h,5eh,79h,71hdb oohv返回圖3. 5顯小程序流程圖(f)延時子程序;lms延時程序 利用循環(huán)實現(xiàn)延時dl1ms:mov r6,#14hdl1:mov r7,#19hdl2:djnz r7,dl2;循環(huán)19h次djnz r6,dl1;循環(huán)14h次ret;出錯閃爍利用延時255msdl5s:mov r5,#offhdl3:lcall dl1ms;調(diào)用1ms
32、延時djnz r5,dl3;循環(huán)255次ret二、調(diào)試1. 硬件調(diào)試硬件調(diào)試時,我們首先檢查了接線,對照電路原理圖,確保準確無謀。其次 是檢查各個焊點是否有虛焊的情況,檢查無謀后,接通經(jīng)穩(wěn)壓后的5v電源。硬 件的修改可在元器件參數(shù)方面調(diào)整,如電阻的阻值等。2. 軟件調(diào)試先用keil軟件輸入完整的程序,進行編譯。首先,新建一個項口選擇at89c51,新建一個文件,將程序輸入,輸完后 保存,保存時需加后綴名.asm。然后將文件添加到新建的工程下。進行檢錯和編譯,窗口如圖3.2所示。ision3fie edrt view proc! debug flosh petipherols toois svc
33、s vvndow help q r總電血aaxs target 1 £富proj«ct workpxq-b target 1-口 soiree group 1 園 llyy.asm就聲 他©©戲兇s5start1: jb p30.displayslcall displayvstart2:sjmp start1/intexo program"intexo: push accpush psvihc 6ohclr asirnutationl 520 clbuild target 'target 1 assembling llyyasm lin
34、kingprogram size: ddta-80 xdata-0 code-874 creating hex file from h 111""lir1 - 0 error(s)r 0 warning(s)-build c<»mmar>d find in fites /圖3.1 keil編譯窗口編譯無謀后即可運行,運行時可從peripherals屮調(diào)出輸出口 pop3來觀察 筑d出情況。運行時窗口如圖3.1所示。圖3.2keil運行窗口17接著再使用proteus仿真軟件進行仿真。首先新建一個文件,選擇所需的 元件并排列好,根據(jù)電路原理圖進行布線。當
35、完成原理圖布線后,利用proteusisis編輯環(huán)境所提供的電器規(guī)則檢查命令對設計進行檢查,并根據(jù)系統(tǒng)提供的錯誤檢查報告修改原理圖。直到通過電器規(guī)則檢查為止。然后在keil中生成hex 文件,雙擊at89c51芯片,將完整的程序灌入芯片,單擊左下角的開始箭頭即 可開始模擬仿真。在仿真過程中遇到過一些問題,針對這些問題做了些軟件方面的調(diào)整。剛開始仿真吋,p0u是灰色的,數(shù)碼管沒有點亮。經(jīng)檢查是rtltpo 口內(nèi)部 沒有上拉電阻,因此,必須另外加上,上拉電阻一段接p0 口,另一端直接接到 電源的正集。接上后數(shù)碼管點亮,但顯示的是亂碼經(jīng)過仔細的檢查,發(fā)現(xiàn)了程序 中的錯誤,硬件中選用的是共陰極數(shù)碼管,
36、而程序中錯用了共陽極的段碼表,從 而造成了應該點亮的部分沒亮,而不該點亮的部分反而亮了的錯誤情況。18四、操作說明本設計為自行車里程計/速度計,實現(xiàn)了里程速度計的基本功能。接通電源后,由于未選擇車輪周長,蜂鳴器報警提示,同時led燈d3閃爍, 直到有鍵按下。當按下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ù)碼管顯示當前的里程值,此時若按下開關(guān)sw7則數(shù)碼管顯示當 前的速度值,當超速時蜂鳴器報
37、警。19五、參考文獻1 單片機原理及應用技術(shù) 范力旻主編電子工業(yè)出版社2 單片機原理及其接口技術(shù)(第二版)胡汗才編著 北京大學出版社3 51系列單片機設計實列樓然苗李光飛編著北航出版社4 單片微機測控系統(tǒng)設計大全 土福瑞編著 北航出版社5 例說8051張義和編著人民郵電出版社6 傳感器應用技術(shù)141例松井邦彥,梁瑞林編著科學出版社,7 單片機設計教程孫惠芹編著電子工業(yè)出版社8 單片機及應用系統(tǒng)設計原理與實踐劉海成編著北京航空航天大學出版 社9 單片機原理與應用系統(tǒng)設計歐偉明編著電子工業(yè)出版社10 單片機原理與應用實例仿真李泉溪主編北京航空航天大學出版社11 單片機原理與應用技術(shù)實踐盧勝利編箸機
38、械工業(yè)出版社12 單片機實踐應用與技術(shù)馬長林,陳怡,程利民編著清華大學出版社20六、心得體會通過兩周的時間,我們較成功的完成了這次課程設計。剛開始選課題的時候,對各個課題都不了解,難易程度也不太清楚,前面選 的幾個課題有的比較簡單,有的又和其他的組沖突,所以課題定的比較晚,后來 感覺對這個方面還是比較感興趣的,而且它的實際用途也比較大。通過查閱一些 資料,我們確定了總體方案。接下來就是采購元器件了,i大i為以前沒買過,沒什 么經(jīng)驗,買的時候也沒仔細看,回來后發(fā)現(xiàn)元器件都比較舊,特別是89c51芯片, 引腳都發(fā)黑了,只好去換了一個。接卜來的幾犬就是焊接電路了,由于我們選的 電路比較復雜,所以焊接
39、也是一項大工程。開始我們把所有元件都焊在了一塊板 子上,排列比較緊湊,結(jié)果導線全部接好以后,板子上密密麻麻的全是線,顯得 很亂。調(diào)試的時候,結(jié)果不止確,經(jīng)過一些改動和調(diào)整仍不見起色,看著這么多 線不知從何下手,后來正負極之間發(fā)生短路現(xiàn)象。我們不得不放棄這塊板子,準 備重新做。于是我們重新買了一套兀件,不同的是,這次買了兩塊板子,根據(jù)上 一次的經(jīng)驗教訓,我們準備將電路分兩部分,其中一塊板了上只有最小系統(tǒng),兩 塊板子通過排線相互連接。這樣焊接出來的板子看起來就清晰的多,而且,兩個 人一起焊,每人一塊板子焊得更快,效率更高。經(jīng)過一天的調(diào)試,結(jié)果終于正確 t,看到止確的結(jié)果很開心。由于焊接兩次,浪費了
40、較多時間,因此時間比較緊張,做得比較辛苦。這次的課程設計我學到了很多知識,也有了一些經(jīng)驗。不論是在動手動腦方 而,都使我受益良多。21七、附錄1、元器件清單序號名稱代號型號數(shù)量1-4-h ii.心hu189c5112-4-h ii.心hu3tc402413芯片u2at24c0114電阻r1,r21kq25電阻r3, r4, r7, r8, r9, rio, rll, r12, r134. 7kq96電阻r25, r26, r278. 2kq37電阻r15, r16, r17, r18, r19, r20, r21, r221.8kq88電阻r24, r6330 q29電容c2, c333pf2
41、10電容cllouf111二極 管q1,q2, q3, q4, q78550512三極管q5, q6, q88050313發(fā)光 二極 管d1,d2, d35mm紅色314晶振xi12miiz115四位 共陰 極數(shù) 碼管7seg-mpx4-cc116蜂鳴 器lsisreaker117按鍵開關(guān)sw1, sw2, sw3, sw4, sw5, sw6, sw7sw-spst718pcb板219導線若干2、電路原理圖1918xtm1x17u2r5tpsena1eiap1.0 p1.1p1.2pi.3pi.4pi.s "6 pl.7sw-spsivccpo.o 心 p0.1/ad1 p0.2a
42、o2 p03'aw p0a'ad4 p0.5ad5 p0.6ad6 p0.7/ad7p2.ga8p2.i.a9 p2.2a1op2.4a12p25a13 »2.6'au p2.7.'a15p3.qtqp3 1jxo p3ainto p33.1mt1p3 4top3s/dr151.6k2!22五-21 -2l 玄-il12zji zs -jfi.(71/ isw spstcixmr6803360664024vccvccdivccsw7r23sw$pstls1mrspfakfrw24u1aw “壬仝丄«3 一舉mg _ledd2ledv24go1
43、sw2bw spstsw1sw-spstswgstsw4sw-spstxtal?po.1.'ad1 p0.2ad2 p03ad3 p0.va54r5tpo.tk'adip0.6'ad&p0.7,'ad7p2oa8p2.2'a10psenp2.3'a11aifp2.4a12e*p2.5a13 p26a14p2.7.'a15pi.o pi.ip3qz p$"xopi.2p3ainfop1.3p3a1nt1p1.4p3 4-10pi-5 pl ftp3yn< vpup3勵aib9c51r263完整程序vsdaequpl.
44、 5vsclequpl. 4slaequ50hnumbytequ51hmtdequ30hmrdequ4011slawequoaohslarequ0a1hdphhequ62hth1hequ6chtiiihiiequ6di1;program input;orgoooohljmpstartorg0003hljmptntexoorgooobiiret1org0013hljmpintex1org001bhljmpintt1org0023hret iorg002bhrett;program clear;»»»»»»»»
45、7;»»»»»»»匕屯初始化程序clearmen: movtmod, #9011movsp, #75hsetbpxosetbitosetbtt1clramov20h, amov6cii, amov6dh, amov70h, amov71h, amov72h, amov7311, amov60h, amov61h, amov62h, amov63h, adecamov68h, amov69h, amov6ah, amov6bh, amovpl, aclear1: jbpl. 2, key1mov21h, #ofhljmpcle
46、ar2key1:jbpl. 3, key2mov2111, #1211ljmpclear2key2:jbpl. 6, key3mov21h, #14hljmpclear2key3:jbpl. 7, errmov21h,#19hclear2: setbtrisetbeasetbexosetbet1setbp3. 1lcall viicreadreterr:cpl p3. 1lcall dl5sljmp clear1;program start;start:start1:lcall clearmen jbp3. 0, displaysstart2:lcall displayvsjmpstart1&
47、#187;»»»»»»»»»»»»»»»»» ;tntexo program;fintexo:9 t t t t tpush9 9 9 9accpushpswinc60hclracjnea,60h,1ntexooutinc61hcjnea, 61h, intexoouttnc62hintexoout:lcall viicwritesetbexipoppswpopaccrett;intex1program;tntex1:push
48、accpushpswclrexijnbooh,intex11movtl1,#offhmovth1,#offhmov6cii, #offhmov6dh, #offhintex11:mov68h, tl1mov69h,th1mov6ah,6chmov6bii, 6dhclramovtl1, amovth1, amov6ch, amov6dii, aclroohpoppswpopaccreti;intt1 program;intt1:push accpush pswtnc 6chmov a, 6ciijnz intt11inc 6dhmov a, 6dhjnz tntt11setb ooh1ntt1
49、1: pop pswpop accretidisplay sdisplays:setb p1.0clr pl. 1setb p3. 7lcall ssslcall displayljmp start1display v ;displayv:clr pl.0setb pl. 1clr p3.7lcall vwmov a, 71hsubb a, #04hjnc waringsetb p3. 1vi:lcall display27viicwrite:acall wm0v9movsla, #slawmovnumbyt, #09hlcallwrnbytretwmov9:mov5fii, #5011movro, #mtdmovrl, #5fhmovr2, #09hwmov:mova, r1movr0, aincroincr1djnzr2,
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 購銷合同的變更規(guī)定
- 飼料旺季購銷合同
- 商務秘書共同研發(fā)合同
- 房屋買賣合同應注意的風險防范
- 全面機械購銷合同全文
- 冰柜超市設備購銷合同
- 專業(yè)人員外包服務合同
- 紅磚多孔磚定制購銷合同
- 招商服務合同成長
- 授權(quán)融資借款合同模板
- 小區(qū)智能化安防項目設計總體說明
- 法律法規(guī)知識測試題庫(共200題)
- 教科版科學四年級上冊第三單元核心素養(yǎng)目標教案(含反思)
- 抗菌藥物臨床應用評估與持續(xù)改進制度
- 《網(wǎng)絡營銷》試題及答案2
- 2024-2025學年語文六年級上冊統(tǒng)編版期末綜合測試卷
- 醫(yī)學英語學習通超星期末考試答案章節(jié)答案2024年
- 骨科護理年會
- 學前兒童健康教育活動設計智慧樹知到答案2024年云南國防工業(yè)職業(yè)技術(shù)學院
- 部編版五年級語文上冊全冊1-8單元知識要點復習
- 2023年四川宜賓五糧液股份有限公司招聘考試真題
評論
0/150
提交評論