本科畢業(yè)論文基于單片機的電動車蹺蹺板的設計_第1頁
本科畢業(yè)論文基于單片機的電動車蹺蹺板的設計_第2頁
本科畢業(yè)論文基于單片機的電動車蹺蹺板的設計_第3頁
本科畢業(yè)論文基于單片機的電動車蹺蹺板的設計_第4頁
本科畢業(yè)論文基于單片機的電動車蹺蹺板的設計_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機開發(fā)平臺:免費資料下載畢業(yè)論文(設計)題目:基于單片機的電動車蹺蹺板系部自動控制工程系專業(yè)名稱電氣自動化技術班級姓名學號指導教師2007年9月16日單片機開發(fā)平臺:免費資料下載基于單片機的電動車蹺蹺板摘要本設計分為8個模塊,電源模塊、單片機控制模塊、電機驅(qū)動電路模塊、聲光提示模塊、光電對管組成的檢測模塊、四鍵鍵盤模塊、LCD顯示模塊、平衡檢測模塊。選擇步進電機來帶動小車的運動,由LM2576輸出+5V電壓的電源,用STK672-040組成步進電機的驅(qū)動模塊,探測模塊利用一前一后兩個RPR220光電對管元件,用于A、B端檢測并傳出停止信號,利用APR9600芯片和發(fā)光二極管構成聲光提示模塊,平衡檢測模塊利用U型管液體平衡檢測儀中的液體,通過檢測兩邊液位來控制小車的前進后退,利用液體高低獲得平衡高低,并相應的給出信號是本設計的一大特色。本設計可使小車在檢測到信號后自行停止,并相應發(fā)出聲光提示,且在行駛過程中讓小車能自動找到平衡點。關鍵詞:步進電機;單片機AT89S52;U型管液體平衡檢測儀目錄TOC\o"1-4"\h\z\u緒論 11系統(tǒng)設計 21.1設計任務及要求 21.1.1任務 21.1.2要求 21.1.3說明 21.2總體設計方案 31.2.1設計思路 31.2.2方案論證與比較 31.2.3系統(tǒng)組成 52單元電路設計 72.1控制部分電路的設計 72.1.1STK672-040驅(qū)動組成 72.1.2語音錄放芯片 72.1.3鍵盤及單片機控制系統(tǒng) 82.2檢測部分電路的設計 92.2.1U型管液體平衡檢測儀 92.2.2RPR220型光電對管 102.2.3LCD時間顯示模塊 112.3其余部分模塊的設計 112.3.1電源模塊 112.3.2小車實體元件安裝圖 113軟件設計 133.1控制部分的設計 133.2顯示部分的設計 133.2.1基本部分 133.2.2發(fā)揮部分 144系統(tǒng)測試 164.1測試使用的儀器 164.2指標測試和測試結果 164.3結果分析 175結論 18致謝 19附錄A主要電路原理圖 20附錄B源程序清單 21單片機開發(fā)平臺:緒論自動化主要研究的是自動控制的原理和方法,自動化單元技術和集成技術及其在各類控制系統(tǒng)中的應用。本畢業(yè)設計取材于電子設計競賽題目,我們要做的是有關與小車的自動化的控制,要其擁有檢測到信號時自動停止,能夠自動尋找蹺蹺板的平衡點,在整個設計中,共有三人參加設計,隊友龔貴嵩主要顯示程序的編寫、資料的搜尋,石豐琴負責硬件電路的焊接、報告撰寫,本人負責硬件設計、步進電機程序編寫,最終在四天三夜的奮斗后完成設計,并達到競賽要求。

1系統(tǒng)設計1.1設計任務及要求1.1.1任務設計并制作一個電動車蹺蹺板,要求蹺蹺板起始端一側裝有可移動的配重物體,配重物體位置可調(diào)范圍不小于400mm。電動車從起始端出發(fā),按要求自動在蹺蹺板上行駛。1.1.2要求(1)基本要求=1\*GB3①先將蹺蹺板固定為水平狀態(tài),電動車從起始端A位置出發(fā),行駛蹺蹺板的全程(全程的含義:電動車從起始端A出發(fā)至車頭到達蹺蹺板頂端B位置)。停止5秒后,電動車再從蹺蹺板的B端倒退回至蹺蹺板的起始端A,電動車能分別顯示前進和倒退所用的時間。前進行駛在1分鐘內(nèi)、倒退行駛在1.5分鐘內(nèi)完成。=2\*GB3②電動車從起始端A出發(fā),行駛蹺蹺板的全程。停止5秒后,電動車再從蹺蹺板的B端倒退回至蹺蹺板的起始端A,電動車能分別顯示前進和倒退所用的時間。前進行駛在1.5分鐘內(nèi)、倒退行駛在2分鐘內(nèi)完成。(2)發(fā)揮部分=1\*GB3①由參賽隊員將配重物體設定在可移動范圍中的某位置,電動車從起始端A出發(fā),當蹺蹺板達到平衡時,保持時間不小于5秒,同時發(fā)出聲光提示,電動車顯示所用的時間。全過程要求在2分鐘內(nèi)完成。=2\*GB3②在可移動范圍內(nèi)任意設定配重物體的位置(由測試人員指定),電動車從起始端A出發(fā),當蹺蹺板達到平衡時,保持時間不小于5秒,同時發(fā)出聲光提示,電動車顯示所用的時間。全過程要求在2分鐘內(nèi)完成。=3\*GB3③其他。1.1.3說明(1)蹺蹺板長1600mm、寬300mm。為便于攜帶也可將蹺蹺板制成折疊形式。(2)蹺蹺板中心固定在直徑不大于40mm的圓軸上,圓軸兩端支撐在兩個支架上,與支架圓滑接觸。蹺蹺板在圖2所示的平衡狀態(tài)下,蹺蹺板底距地面或桌面的距離為70mm。(3)允許在蹺蹺板面上畫有尋跡線。(4)電動車(含車體上的其它裝置)的外形尺寸規(guī)定:長≤300mm,寬≤200mm。測試過程中電動車外形尺寸不允許變動。(5)電動車不允許采用有線或無線遙控,電動車自身應具備轉彎功能。(6)電動車行駛距離的測量以車尾為基準。(7)平衡狀態(tài)的含義是:當蹺蹺板出現(xiàn)上下擺動,且B端底部與水平狀態(tài)的偏移量≤60mm范圍內(nèi)時,可視為進入平衡狀態(tài)。1.2總體設計方案1.2.1設計思路題目要求設計一個電動車蹺蹺板,要求在電動車可從起始端出發(fā)按要求自動在蹺蹺板上行駛,設計分為幾個部分。為了能控制小車的速度,在直流電機和步進電機之間選擇了后者,通過STK672-040驅(qū)動模塊來控制小車的行駛速度,從而保證小車能進行自我微調(diào);語音報警模塊通過語音錄放芯片APR9600來提示平衡位置的到達;顯示部分采用的是LCD1602模塊,用于顯示走完路程的時間和到達平衡時的時間;U型管液體平衡檢測儀是本設計的一個特色,采用了搖擺遞減算法,依次得到接近與平衡點的位置,讓小車能自動找到平衡點。1.2.2方案論證與比較(1)單片機選擇方案一:采用可編程邏輯器件CPLD作為控制器。CPLD可以實現(xiàn)各種復雜的邏輯功能、規(guī)模大、密度高、體積小、穩(wěn)定性高、I\O資源豐富、易于進行功能擴展。采用并行的輸入輸出方式,提高了系統(tǒng)的處理速度,適合作為大規(guī)??刂葡到y(tǒng)的控制核心。但本系統(tǒng)不需要復雜的邏輯功能,對數(shù)據(jù)的處理速度的要求也不是非常高,而且從使用及經(jīng)濟的角度考慮放棄此方案。方案二:采用凌陽公司的16位單片機,它是16位控制器,具有體積小、驅(qū)動能力高、集成度高、易擴展、可靠性高、功耗低、結構簡單、中斷能力強等特點。處理速度高,尤其用于語音處理和識別等領域。但是當凌陽單片機應用語音處理和辨識時,由于其占用的CPU資源較多而使得凌陽單片機同時處理其他任務的速度和能力降低。方案三:采用使用Atmel公司的AT89S52作為系統(tǒng)的的主控制器,AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。方案選擇:由于本設計要求不高,采用一般的AT89S52即可完成,所以選擇方案三。(2)電機選擇及驅(qū)動選擇方案一:采用直流電機作為執(zhí)行元件。直流電機工作在開環(huán)狀態(tài)時,電路相對簡單,但其定位性能比較差。直流電機工作在閉環(huán)狀態(tài)時,其定位性能精確,但是相對于開環(huán)狀態(tài)又要增加很多檢測器件,使用的元器件多,電路非常復雜。方案二:采用步進電機作為執(zhí)行元件。步進電機是將電脈沖信號轉變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元件。在非超載的情況下,電機的轉速、停止的位置只取決于脈沖信號的頻率和脈沖數(shù),而不受負載變化的影響,即給電機加一個脈沖信號,電機則轉過一個步距角。方案選擇:通過比較認為步進電機的轉換精度高,驅(qū)動電路簡單,非常適合本設計系統(tǒng),并采用兩相混合式步距角為1.8°步進電機,并使用STK672-040芯片驅(qū)動能較好的滿足系統(tǒng)的要求,因此我們選擇了方案二。(3)傳感器模塊方案一:用光敏電阻組成光敏探測器。光敏電阻的阻值可以跟隨周圍環(huán)境光線的變化二變化。當光線照射到白線上面時,光線發(fā)射強烈,光線照射到黑線上面時,光線發(fā)射較弱。因此光敏電阻在白線和和黑線上方時,阻值會發(fā)生明顯的變化。將阻值的變化經(jīng)過比較器就可以輸出高低電平。但是,這種方案受光照影響很大,不能夠穩(wěn)定的工作。方案二:用RPR220型光電對管。RPR220是一種一體化反射型光電探測器,其發(fā)射器是一個砷化鎵紅外發(fā)光二極管,而接受器是一個高靈敏度,硅平面光電三極管。當發(fā)光二極管發(fā)出的光反射回來的時,三極管導通輸出低電平。此光電對管電路簡單,工作性能穩(wěn)定。方案選擇:通過比較,認為本設計相對需要較穩(wěn)定相對電路簡單的傳感器,這樣可以省下一些時間,因此,選擇了方案二。(4)平衡裝置選擇方案一:采用橡膠管中套鋼珠的方法,讓鋼珠在管中隨坡度的增加而來回滾動,從而觸發(fā)信號,讓單片機控制小車的運動,但是經(jīng)過實際檢測,發(fā)現(xiàn)其靈敏度不好,因此放棄此方案。方案二:采用RPR220型光電對管加重錘的方案,RPR220型光電對管的高靈敏度加上重錘的特性,應該能很好的得到信號,在檢測過程中,發(fā)現(xiàn)重錘偏重,本身小車的重量較輕,造成小車傾斜,且重錘在小車上坡和下坡的過程中左右晃動,影響信號的準確性。方案三:U型管液體平衡檢測儀,采用了搖擺遞減算法,通過液面的在U型管中的波動,以檢測小車是否達到平衡點的位置,在沒有達到平衡時,小車能自動尋找平衡位置,直至平衡,該方案準確性強,靈敏度高,而且材料易的。方案選擇:由于準確性靈敏度以及價格的優(yōu)勢,選擇第三種方案。1.2.3系統(tǒng)組成系統(tǒng)主要分為控制和檢測兩大模塊。其中控制部分有STK672-040步進電機驅(qū)動、聲光提示模塊、按鍵處理及單片機的總控制作用。檢測部分由自制U型管液體平衡檢測儀、RPR220型光電對管組成。綜合前述分析,小車控制系統(tǒng)框圖如圖1所示。圖1小車控制系統(tǒng)框圖

2單元電路設計2.1控制部分電路的設計2.1.1STK672-040驅(qū)動組成用于驅(qū)動步進電機的驅(qū)動模塊,如圖2所示。圖2STK672-040驅(qū)動模塊連接圖2.1.2語音錄放芯片采用APR9600語音錄放芯片,價格便宜,有多種手動控制方式,分段管理方便、多段控制時電路簡單、采樣速度及錄放音時間可調(diào)、每個單鍵均有開始停止循環(huán)多種功能等特點。如圖3所示。圖3APR9600語音錄放芯片連接圖2.1.3鍵盤及單片機控制系統(tǒng)基本的四項功能實現(xiàn)鍵,以及AT89S52最小系統(tǒng)圖,如圖4、圖5所示。圖4鍵盤硬件電路圖圖5單片機最小系統(tǒng)圖2.2檢測部分電路的設計2.2.1U型管液體平衡檢測儀U型管液體平衡檢測儀采用了搖擺遞減算法,通過液面的在U型管中的波動,以檢測小車是否達到平衡點的位置,在沒有達到平衡時,小車能自動尋找平衡位置,直至平衡,該方案準確性強,靈敏度高,而且材料易得。如下圖6(a)、圖6(b)所示。圖6(a)水平監(jiān)測原理圖圖6(b)U型管液體平衡檢測儀2.2.2RPR220型光電對管光電對管RPR220的電路圖,如圖7所示。圖7光電對管檢測電路2.2.3LCD時間顯示模塊1602ALCD顯示模塊,如圖8所示。圖8LCD時間顯示模塊2.3其余部分模塊的設計2.3.1電源模塊電源采用的是5v輸出,如圖9所示圖9電源電路圖2.3.2小車實體元件安裝圖由于玩具電動車安裝傳感器不方便,且負載能力差,不易調(diào)速,所以采取了自制電動車的方案。如圖10所示。圖10小車實際元件安裝圖

3軟件設計3.1控制部分的設計控制部分的程序在基本要求中主要完成的是通過檢測信號使小車能自動在B點停止,并延時5S自動返回至A點,在發(fā)揮部分中,則是完成從A點出發(fā),直到小車接收到平衡傳感器傳來的信號,停止在平衡位置。3.2顯示部分的設計顯示部分主要是由1602A完成A點至B點、B點到A點的計時功能,以及在發(fā)揮部分中從A點出發(fā)到平衡點所需的時間。3.2.1基本部分基本部分分為第一行顯示程序,如圖11(a),第二行顯示程序如圖11(b),以便記錄小車的用時。圖11(a)第一行顯示程序:圖11(b)第二行顯示程序3.2.2發(fā)揮部分發(fā)揮部分只有顯示達到平衡的時間(如圖)。總體流程圖圖12發(fā)揮部分時間顯示在整個程序中,只需要檢測按鍵是否按下,通過按鍵來調(diào)用子程序,如圖13。圖12總體流程圖

4系統(tǒng)測試4.1測試使用的儀器蹺蹺板(自制)、游標卡尺、秒表等。4.2指標測試和測試結果由于本次設計需要捍接的器件較多,各器件對于電源電流的需求極大,開始先以5V電源開始調(diào)試,發(fā)現(xiàn)電源模塊容易燒壞,發(fā)熱量異常的大,經(jīng)過思考,因為負載太大,帶動步進電機很困難,于是將電源模塊中的7805換成了LM2975T,發(fā)熱問題得到改善。在開始測試LCD時,總是得不到送去的信號,只有一個簡單的得電信號,開始百思不得其解,后來查詢資料發(fā)現(xiàn),針腳位置弄反,后將其糾正,能正常顯示。在安裝上檢測光電開關之后,有出現(xiàn)的無法檢測的信號的狀況,發(fā)現(xiàn)光電對管已經(jīng)偏向,并未對準蹺蹺板面,無法接收反射的信號,將位置掰正,問題解決。在小車運行當中經(jīng)常有小車無故停車的狀況,等待5S后又自動返回,后經(jīng)過仔細檢查,發(fā)現(xiàn)在蹺蹺板有些地方反射較強,由于光電對管的高靈敏度,造成了”誤判”,后將蹺蹺板底部用墨汁涂抹,問題得到解決。測試方法如下:(1)K1基本部分蹺蹺板在平衡狀態(tài),小車啟動從A點到B點開始,到達B點時延時5秒自動返回;(2)K2基本部分蹺蹺板在正常狀態(tài),小車從A點爬坡至到中點時,下坡至B點,到達B點后,延時5秒自動返回;(3)K3發(fā)揮部分小車從蹺蹺板出發(fā),并開始計時,直到平衡傳感器送來信號,停止計時,讓小車自動停止;(4)K4同K3。測試結果見表1和表2。表1基本要求測試次數(shù)是否成功前進用時返回用時1是7秒147秒142是6秒506秒923是6秒557秒08表2發(fā)揮部分測試次數(shù)到達平衡時間(s)保持時間15秒6410秒26秒399秒4.3結果分析小車輪胎的摩擦力、上坡的速度、光電對管的靈敏度都對整個設計有至關重要的作用,缺一不可。

5結論在基于單片機的電動車翹翹板的設計當中,基本完成了設計任務書中的基本要求。在調(diào)試的實驗中小車能夠準確的停車和返回,而且測量精度上滿足指標的要求。通過此次設計對步進電機有了深刻的認識,能夠?qū)λM行一些基本的控制,在設計當中,對一些芯片也有了深刻的認識,能夠運用這些芯片設計電路。畢業(yè)設計是??茖W習階段一次非常難得的理論與實際相結合的機會,通過這次比較完整的電動車翹翹板設計,我擺脫了單純的理論知識學習狀態(tài),和實際設計的結合鍛煉了我的綜合運用所學的專業(yè)基礎知識,解決實際工程問題的能力,同時也提高我查閱文獻資料、集成手冊以及電腦制圖等其他專業(yè)能力水平,而且通過對整體的掌控,對局部的取舍,以及對細節(jié)的斟酌處理,都使我的能力得到了鍛煉,經(jīng)驗得到了豐富,并且意志品質(zhì)力,抗壓能力及耐力也都得到了不同程度的提升。雖然畢業(yè)設計內(nèi)容繁多,過程繁瑣,但我的收獲卻更加豐富。各種系統(tǒng)的適用條件,各種芯片的選擇,各種電路的設計,我都是隨著設計的不斷深入而不斷熟悉并學會應用的。和老師的溝通交流更使我茅塞頓開,舉個簡單的例子:在制作5V電源的時候剛開始我一直用的是7805做的,但是由于功率太小不能帶動電動車,總是把7805燒掉,經(jīng)過老師的指導,選用了大功率芯片LM2576-5.0來做,才解決了這個問題。PAGE20致謝本論文是在導師凌澤明老師的悉心指導下完成的.沒有導師的指引,沒有父母和朋友的幫助和支持,我在大學的學術成長肯定會大打折扣。當我打完畢業(yè)論文的最后一個字符,涌上心頭的不是長途跋涉后抵達終點的欣喜,而是源自心底的誠摯謝意。論文工作的每一步工作都得到了凌老師的無微不至的關懷,在關鍵的時候?qū)煘槲抑更c迷津.在此,我以這樸素的語言來表達我對凌老師衷心的感謝和崇高的敬意。

附錄A主要電路原理圖附錄B源程序清單(1)控制程序清單ORG0000HAJMPMAIN;跳轉到主程序ORG000BH;中斷入口AJMPST0;初始化***********MAIN:CLKBITP1.0CWBBITP1.1RESETBITP1.2ENBITP1.3ONESBITP3.1ONESTOPBITP3.2TWOSBITP3.3TWOSTOPBITP3.4THREESBITP3.5THREESTOPBITP3.6FUWEIBITP3.7LIGHTBITP1.7PINGHENGBITP2.6PINGHENG1BITP2.7SETBENCLRRESETMOVR7,#00HSETBEASETBET0;***********;開中斷;*************ZHONG:MOVTH0,#0A0HMOVTL0,#15HMOVTMOD,#01HSETBTR0;主程序***********MAIN1:JNBP2.0,REQUST1JNBP2.1,REQUST2JNBP2.2,REQUST3JNBP2.3,REQUST44AJMPMAIN;要求1************REQUST1:CLRONESSETBCWBZHEN1G:SETBCLKCALLDELAYCLRCLKCALLDELAYJNBP1.4,STOPAJMPZHEN1GFANG:CLRCWBFANGA:SETBCLKCALLDELAYCLRCLKCALLDELAYJNBP1.5,STOP1LJMPFANGA;****************STOP:CLRONESTOPCALLLDELAYAJMPFANGSTOP1:CLRTWOSTOPCLRENLJMPMAINSTOP2:CLRONESTOPCALLLDELAYCLRTWOSAJMPFANG2STOP3:CLRLIGHTCLRTHREESTOPCALLLDELAYSETBLIGHT;LJMPFANG3LJMPSTOP1;要求2*************REQUST2:CLRONESSETBCWBZHEN1G1:SETBCLKCALLDELAYCLRCLKCALLDELAYJNBP1.4,STOP2AJMPZHEN1G1FANG2:CLRCWBFANGB:SETBCLKCALLDELAYCLRCLKCALLDELAYJNBP1.5,STOP1LJMPFANGBREQUST44:LJMPREQUST4;要求3************REQUST3:SETBFUWEICLRTHREESCALLONEDELAYCLRTHREESSETBCWBZHENG2:SETBCLKCALLSLOWDELAYCLRCLKCALLSLOWDELAYCJNER7,#255,ZHENG2LJMPSTOP3;要求4*******************REQUST4:SETBFUWEICLRTHREESCALLONEDELAYCLRTHREESSETBCWBZHENG4:SETBCLKCALLSLOWDELAYCLRCLKCALLSLOWDELAYJNBP2.6,ZHENG4JNBP2.7,FANG4CALLONEDELAYJNBP2.6,ZHENG4JNBP2.7,FANG4LJMPSTOP3FANG4:SETBFUWEICLRTHREESCALLONEDELAYCLRTHREESCLRCWBFANG5:CALLSLOWDELAYCLRCLKCALLSLOWDELAYJNBP2.6,ZHENG4JNBP2.7,FANG4CALLONEDELAYJNBP2.6,ZHENG4JNBP2.7,FANG4LJMPSTOP3;中斷程序ST0:INCR7MOVTH0,#0A0HMOVTL0,#15HMOVTMOD,#01HSETBTR0RETI;步進電機速度控制DELAY:MOVR0,#10DELAY1:MOVR1,#20DELAY2:NOPNOPNOPDJNZR1,DELAY2DJNZR0,DELAY1RET;延時控制LDELAY:MOVR0,#15LDELAY1:MOVR1,#255LDELAY2:MOVR2,#255LDELAY3:NOPNOPNOPDJNZR2,LDELAY3DJNZR1,LDELAY2DJNZR0,LDELAY1RET;延時一秒子程序ONEDELAY:MOVR0,#30ONEDELAY1:MOVR1,#100ONEDELAY2:NOPDJNZR1,ONEDELAY2DJNZR0,ONEDELAY1RET;控制單片機慢速運行SLOWDELAY:MOVR0,#20SLOWDELAY1:MOVR1,#16SLOWDELAY2:NOPNOPNOPDJNZR1,SLOWDELAY2DJNZR0,SLOWDELAY1RETEND(2) 顯示程序清單;;晶振11.0592M;定時器0,方式1;計時中斷程序每隔10ms中斷一次;小車前進開始觸發(fā)k1;小車前進停止觸發(fā)k2;小車后退開始觸發(fā)k3;小車后退停止觸發(fā)k4;TLOWEQU0CH;定時器初值THIGHEQU0DCHMINEQU31HSECEQU32HSEC0EQU33H;10ms計數(shù)值XEQU36H;LCD地址變量K1EQUP3.1;前進開始計時K2EQUP3.2;前進停止計時K3EQUP3.3;后退開始計時K4EQUP3.4;后退停止計時K5EQUP3.5;平衡開始計時K6EQUP3.6;結束平衡計時RSEQUP2.0;LCD控制端口定義RWEQUP2.1ENEQUP2.2;ORG0000HJMPSTART1ORG0BHJMPT0_INT;START1:CALLSET_LCD1;屏幕初始化JNBK1,START2;有低電平信號則跳轉JNBK2,START2;有低電平信號則跳轉JNBK3,START2;有低電平信號則跳轉JNBK4,START2;有低電平信號則跳轉JNBK5,START3;有低電平信號則跳轉JBK6,START1;高電平返回等待信號輸入START3:LJMPFIVE;跳轉至發(fā)揮部分計時START2:JMPSTART;跳轉至基本部分計時SJMP$;等待START:MOVSP,#60HCLRENCALLSET_LCD;LCD初始化CALLINIT;初始化變量CALLINIT_TIMER;初始化定時器LOOP:CALLCONV1;時間計數(shù)處理JNBK2,LOP1;為0則停止JBK1,LOOP;等待低電平SETBTR0;啟動計時JMPLOOPLOP1:CALLINIT;初始化變量CALLINIT_TIMER;初始化定時器JBK3,LOP1;為高電平則返回CLRTR0LOOP23:CALLCONV2;時間計數(shù)第二行處理JNBK4,LOP22;有低電平則停止SETBTR0;第二行的計時開始JMPLOOP23;返回等待LOP22:CLRTR0;停止第二行的計時SJMP$;循環(huán)等待LOP2:CLRTR0;JMPSTART;;LOOP1:JBK4,LOOP2;判清零鍵是否按下JMPSTARTLOOP2:RET;LMESS1:DB"A-->B",0;LCD第一行顯示消息LMESS2:DB"B-->A",0;LCD第二行顯示消息LMESS5:DB"MADEBY",0LMESS6:DB"YBZY",0;INIT:;初始化控制變量CLRAMOVSEC0,AMOVSEC,AMOVMIN,ACLRTR0RET;INIT_TIMER:;初始化定時器接口MOVTMOD,#11H;設置定時器0工作模式為模式1MOVIE,#8AH;啟用定時器0中斷產(chǎn)生MOVTL0,#TLOWMOVTH0,#THIGHRET;T0_INT:PUSHACC;定時器0計時中斷程序MOVTL0,#TLOWMOVTH0,#THIGHINCSEC0MOVA,SEC0;10ms計數(shù)值加1CJNEA,#100,TTMOVSEC0,#0INCSEC;秒加1MOVA,SECCJNEA,#60,TTINCMIN;分加1MOVSEC,#0MOVA,MINCJNEA,#60,TTMOVSEC0,#0MOVSEC,#0;秒、分、時單元清0MOVMIN,#0TT:POPACCRETI;;在第一行顯示數(shù)字;SHOW_DIG1:;在LCD的第二行顯示數(shù)字MOVB,#10;設置被除數(shù)DIVAB;結果A存商數(shù),B存余數(shù)ADDA,#30H;A為十位數(shù),轉換為字符PUSHB;B放入堆棧暫存MOVB,X;設置LCD顯示的位置CALLLCDP1;由LCD顯示出來POPB;MOVA,B;B為個位數(shù)ADDA,#30H;轉換為字符INCX;LCD顯示位置加1MOVB,X;設置LCD顯示的位置CALLLCDP1;由LCD顯示出來RET;;在第二行顯示數(shù)字;SHOW_DIG2:;在LCD的第二行顯示數(shù)字MOVB,#10;設置被除數(shù)DIVAB;結果A存商數(shù),B存余數(shù)ADDA,#30H;A為十位數(shù),轉換為字符PUSHB;B放入堆棧暫存MOVB,X;設置LCD顯示的位置CALLLCDP2;由LCD顯示出來POPB;MOVA,B;B為個位數(shù)ADDA,#30H;轉換為字符INCX;LCD顯示位置加1MOVB,X;設置LCD顯示的位置CALLLCDP2;由LCD顯示出來RET;;轉換為ASCII碼并顯示(第一行);CONV1:MOVA,MIN;加載分鐘數(shù)據(jù)MOVX,#7;設置位置CALLSHOW_DIG1;顯示數(shù)據(jù)INCX;MOVA,#':';MOVB,X;CALLLCDP1;MOVA,SEC;加載秒數(shù)數(shù)據(jù)INCX;設置位置CALLSHOW_DIG1;顯示數(shù)據(jù)INCX;MOVA,#':';MOVB,X;CALLLCDP1;MOVA,SEC0;加載微秒數(shù)數(shù)據(jù)INCX;設置位置CALLSHOW_DIG1;顯示數(shù)據(jù)RET;;轉換為ASCII碼并顯示(第二行);CONV2:MOVA,MIN;加載分鐘數(shù)據(jù)MOVX,#7;設置位置CALLSHOW_DIG2;顯示數(shù)據(jù)INCX;MOVA,#':';MOVB,X;CALLLCDP2;MOVA,SEC;加載秒數(shù)數(shù)據(jù)INCX;設置位置CALLSHOW_DIG2;顯示數(shù)據(jù)INCX;MOVA,#':';MOVB,X;CALLLCDP2;MOVA,SEC0;加載微秒數(shù)數(shù)據(jù)INCX;設置位置CALLSHOW_DIG2;顯示數(shù)據(jù)RET;;LCD初值;SET_LCD1:;對LCD做初始化設置及測試CLRENCALLINIT_LCD;初始化LCDMOVR5,#10CALLDELAYMOVDPTR,#LMESS5;指針指到顯示消息1MOVA,#1;顯示在第一行CALLLCD_PRINTMOVDPTR,#LMESS6;指針指到顯示消息2MOVA,#2;顯示在第二行CALLLCD_PRINTRET;;LCDCONTROL;SET_LCD:;對LCD做初始化設置及測試CLRENCALLINIT_LCD;初始化LCDMOVR5,#10CALLDELAYMOVDPTR,#LMESS1;指針指到顯示消息1MOVA,#1;顯示在第一行CALLLCD_PRINTMOVDPTR,#LMESS2;指針指到顯示消息2MOVA,#2;顯示在第二行CALLLCD_PRINTRET;INIT_LCD1:;LCD控制指令初始化MOVA,#38H;雙列顯示,字形5*7點陣CALLWCOM;calldelay1MOVA,#0CH;開顯示,顯示光標,光標不閃爍CALLWCOM;calldelay1MOVA,#01H;清除LCD顯示屏CALLWCOM;calldelay1RET;ENABLE:;寫指令CLRRS;RS=L,RW=L,E=高脈沖CLRRW;D0-D7=指令碼SETBENACALLDELAY1CLRENRET;LCD_PRINT:;在LCD的第一行或第二行顯示字符CJNEA,#1,LINE2;判斷是否為第一行LINE1:MOVA,#80H;設置LCD的第一行地址CALLWCOM;寫入命令CALLCLR_LINE;清除該行字符數(shù)據(jù)MOVA,#80H;設置LCD的第一行地址CALLWCOM;寫入命令JMPFILLLINE2:MOVA,#0C0H;設置LCD的第二行地址CALLWCOM;寫入命令CALLCLR_LINE;清除該行字符數(shù)據(jù)MOVA,#0C0H;設置LCD的第二行地址CALLWCOMFILL:CLRA;填入字符MOVCA,@A+DPTR;由消息區(qū)取出字符CJNEA,#0,LC1;判斷是否為結束碼RETLC1:CALLWDATA;寫入數(shù)據(jù)INCDPTR;指針加1JMPFILL;繼續(xù)填入字符RET;CLR_LINE:;清除該行LCD的字符MOVR0,#24CL1:MOVA,#''CALLWDATADJNZR0,CL1RET;DE:MOVR7,#250;延時500微秒DJNZR7,$RET;EN1:CLRRWSETBEN;短脈沖產(chǎn)生啟用信號CALLDECLRENCALLDERET;INIT_LCD:;8位I/O控制LCD接口初始化MOVP0,#38H;雙列顯示,字形5*7點陣callenablecalldelay1MOVP0,#38H;雙列顯示,字形5*7點陣callenablecalldelay1MOVP0,#38H;雙列顯示,字形5*7點陣callenablecalldelay1CALLINIT_LCD1RET;WCOM:;以8位控制方式將命令寫至LCDMOVP0,A;寫入命令callenableRET;WDATA:;以8位控制方式將數(shù)據(jù)寫至LCDMOVP0,A;寫入數(shù)據(jù)SETBRS;設置寫入數(shù)據(jù)CALLEN1RET;;第一行顯示字符;LCDP1:;在LCD的第行顯示字符PUSHACC;MOVA,B;設置顯示地址ADDA,#080H;設置LCD的第二行地址CALLWCOM;寫入命令POPACC;由堆棧取出ACALLWDATA;寫入數(shù)據(jù)RET;;第二行顯示字符;LCDP2:;在LCD的第二行顯示字符PUSHACC;MOVA,B;設置顯示地址ADDA,#0C0H;設置LCD的第二行地址CALLWCOM;寫入命令POPACC;由堆棧取出ACALLWDATA;寫入數(shù)據(jù)RET;DELAY:;延時10MSMOVR6,#50D1:MOVR7,#100DJNZR7,$DJNZR6,D1DJNZR5,DELAYRET;DELAY1:;延時5MSMOVR6,#25D2:MOVR7,#100DJNZR7,$DJNZR6,D2RETFIVE:MOVSP,#60HCLRENCALLFSET_LCDCALLFINIT;初始化變量CALLFINIT_TIMER;初始化定時器FLOOP:CALLFCONV2;時間計數(shù)處理JNBK6,FLOP1;為0則停止JBK5,FLOOP;等待低電平SETBTR0JMPFLOOPFLOP1:CALLFINIT;初始化變量CALLFINIT_TIMER;初始化定時器JBK6,FLOP1CLRTR0SJMP$JMPFIVE;LMESS3:DB"GOODLUCK!",0;LCD第一行顯示LMESS4:DB"",0;LCD第二行顯示;FINIT:;初始化控制變量CLRAMOVSEC0,AMOVSEC,AMOVMIN,ACLRTR0RET;FINIT_TIMER:;初始化定時器接口MOVTMOD,#11H;設置定時器0工作模式為模式1MOVIE,#8AH;啟用定時器0中斷產(chǎn)生MOVTL0,#TLOWMOVTH0,#THIGHRET;FT0_INT:PUSHACC;定時器0計時中斷程序MOVTL0,#TLOWMOVTH0,#THIGHINCSEC0MOVA,SEC0;10ms計數(shù)值加1CJNEA,#100,FTTMOVSEC0,#0INCSEC;秒加1MOVA,SECCJNEA,#60,FTTINCMIN;分加1MOVSEC,#0MOVA,MINCJNEA,#60,FTTMOVSEC0,#0MOVSEC,#0;時間顯示單元清0MOVMIN,#0FTT:POPACCRETI;;在第二行顯示數(shù)字;FSHOW_DIG2:;在LCD的第二行顯示數(shù)字MOVB,#10;設置被除數(shù)DIVAB;結果A存商數(shù),B存余數(shù)ADDA,#30H;A為十位數(shù),轉換為字符PUSHB;B放入堆棧暫存MOVB,X;設置LCD顯示的位置CALLFLCDP2;由LCD顯示出來POPB;MOVA,B;B為個位數(shù)ADDA,#30H;轉換為字符INCX;LCD顯示位置加1MOVB,X;設置LCD顯示的位置CALLFLCDP2;由LCD顯示出來RET;;轉換為ASCII碼并顯示(第二行);FCONV2:MOVA,MIN;加載分鐘數(shù)據(jù)MOVX,#4;設置位置CALLFSHOW_DIG2;顯示數(shù)據(jù)INCX;MOVA,#':';MOVB,X;CALLFLCDP2;MOVA,SEC;加載秒數(shù)數(shù)據(jù)INCX;設置位置CALLFSHOW_DIG2;顯示數(shù)據(jù)INCX;MOVA,#':';MOVB,X;CALLFLCDP2;MOVA,SEC0;加載微秒數(shù)數(shù)據(jù)INCX;設置位置CALLFSHOW_DIG2;顯示數(shù)據(jù)RET;;LCDCONTROL;FSET_LCD:;對LCD做初始化設置及測試CLRENCALLFINIT_LCD;初始化LCDMOVR5,#10CALLFDELAYMOVDPTR,#LMESS3;指針指到顯示消息1MOVA,#1;顯示在第一行CALLFLCD_PRINTMOVDPTR,#LMESS4;指針指到顯示消息2MOVA,#2;顯示在第二行CALLFLCD_PRINTRET;FINIT_LCD1:;LCD控制指令初始化MOVA,#38H;雙列顯示,字形5*7點陣CALLFWCOM;callFDELAY1MOVA,#0CH;開顯示,顯示光標,光標不閃爍CALLFWCOM;callFDELAY1MOVA,#01H;清除LCD顯示屏CALLFWCOM

溫馨提示

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

評論

0/150

提交評論