課程設(shè)計論文基于89C51單片機的電子時鐘_第1頁
課程設(shè)計論文基于89C51單片機的電子時鐘_第2頁
課程設(shè)計論文基于89C51單片機的電子時鐘_第3頁
課程設(shè)計論文基于89C51單片機的電子時鐘_第4頁
課程設(shè)計論文基于89C51單片機的電子時鐘_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、摘要單片計算機即單片微型計算機。由ram ,rom,cpu構(gòu)成,定時,計數(shù)和多種接口于一體的微控制器。它體積小,成本低,功能強,廣泛應(yīng)用于智能產(chǎn)業(yè)和工業(yè)自動化上。而51系列單片機是各單片機中最為典型和最有代表性的一種。這次課程設(shè)計通過對它的學(xué)習(xí),應(yīng)用,從而達到學(xué)習(xí)、設(shè)計、開發(fā)軟、硬的能力。 本設(shè)計主要設(shè)計了一個基于89c51單片機的電子時鐘。并在數(shù)碼管上顯示相應(yīng)的時間。并通過一個控制鍵用來實現(xiàn)時間的調(diào)節(jié)和是否進入省電模式的轉(zhuǎn)換。應(yīng)用proteus的isis軟件實現(xiàn)了單片機電子時鐘系統(tǒng)的設(shè)計與仿真。該方法仿真效果真實、準(zhǔn)確,節(jié)省了硬件資源。關(guān)鍵字:單片機;子時鐘;鍵盤控制。目錄摘要.1一 需求分

2、析.41引言41.1 編寫目的41.2項目背景41.3參考資料42系統(tǒng)任務(wù)概述42.1目標(biāo)42.2用戶的特點52.3假定和約束53需求規(guī)定53.1軟件功能的規(guī)定53.2對性能的規(guī)定53.2.1精度53.2.2 時間特性要求53.2.3可靠性53.2.4 靈活性64運行環(huán)境規(guī)定6 4.1設(shè)備.6 4.2系統(tǒng)及軟件.6二、系統(tǒng)設(shè)計介紹.62.1 設(shè)計目的.62.2功能要求說明.62.3 模塊設(shè)計.7三、電子時鐘.7 3.1 電子時鐘簡介.7 3.2 電子時鐘的本特點.7 3.3 子時鐘的基本原理.8四、單片機的相關(guān)知識.84.1單片機的簡介.8 4.2單片機的發(fā)展史.84.2.1 4位單片機 .8

3、4.2.2 8位單片機.84.2.3 16位單片機.94.2.4 32位單片機.94.2.5 64位單片機.9 4.3單片機的特點.9 4.4 89c51單片機介紹.10五、各部分電路分析.12 5.1 顯示模塊.125.2 運算模塊.125.3 校時模塊.135.4整體功能.13六、程序調(diào)試.13七、硬件電路圖.14八、仿真效果圖.15九、程序調(diào)試圖.16十、程序流程圖.16十一、程序清單.18十二、參考文獻.26一、需求分析1、引言隨著生活節(jié)奏的加快和網(wǎng)絡(luò)的發(fā)展,教師、學(xué)生對電腦軟件用于學(xué)習(xí)越來越重視,希望獲取軟件應(yīng)用的過程簡單,方便,快速。因而,用電腦完成學(xué)習(xí)中設(shè)計數(shù)字電子鐘應(yīng)用是十分重

4、要的。 1.1 編寫目的 在對課程設(shè)計進行了全面細致的分析后明確了該電子鐘 “做什么”, 編寫這份分析報告的目的是將分析結(jié)果條理清晰的展示出來,它說明了本產(chǎn)品實現(xiàn)的各種計時功能以及各種功能的適用范圍,方便以后更好的開展具體工作。本分析報告主要提交給老師和其他同學(xué)參考,以達到最終滿足用戶的要求,讓用戶滿意。1.2項目背景項目名稱:單片機電子時鐘項目提出者:楊超項目開發(fā)者:楊超用戶:學(xué)生1.3參考資料 1、謝自美電子線路設(shè)計·實驗·測試 華中理工大學(xué)出版社2、劉湘濤江世明單片機原理與應(yīng)用2、電子時鐘概述2.1目標(biāo)本設(shè)計可細化為兩個子系統(tǒng):時鐘系統(tǒng)和秒表系統(tǒng)。在這個設(shè)計中以電子時

5、鐘設(shè)計為主,在此基礎(chǔ)上稍加變換以得到一個電子秒表。也可以將時鐘與秒表合二為一,并且在同時使用時互不影響。即可在時鐘與秒表之間任意切換,而不影響走時、計秒。 電子時鐘主要工作過程為:在xd12鍵盤上選定3個鍵分別作為小時. 分. 秒的調(diào)校鍵。每按一次鍵,對應(yīng)的顯示值便加1。分. 秒加到59后變?yōu)?0;小時加到23后再按鍵即變?yōu)?0.再調(diào)校時均不向上一單位進位(例如分加到59后變?yōu)?0;但小時不發(fā)生改變)。電子秒表的主要工作過程為:分、秒各占用2位顯示,1/10秒、1/100秒各占用1位顯示。設(shè)定二個鍵分別作啟動停止、清零。2.2用戶的特點本軟件的最終用戶可分為操作人員、維護人員。其中,要求操作人

6、員對計算機、相關(guān)軟件有一定了解,可以無障礙的使用本系統(tǒng)提供給操作人員操作權(quán)限內(nèi)的各種功能。 要求維護人員是對本系統(tǒng)有較深的了解,同時對系統(tǒng)相關(guān)信息及工作流程有所了解的技術(shù)人員,并且能分析編程程序。2.3假定和約束本系統(tǒng)由自己承接設(shè)計,是非專業(yè)的設(shè)計技術(shù)人員,只是學(xué)習(xí)了相關(guān)課程有關(guān)知識,由于此課程設(shè)計開發(fā)時間有限,我只能利用有限的課余時間進行系統(tǒng)需求分析報告。而且考慮到作為在校生,自己沒有此類開發(fā)經(jīng)驗,所以,在設(shè)計過程中不可避免的出現(xiàn)考慮不全面,技術(shù)不成熟等問題,設(shè)計的系統(tǒng)相對比較簡單。3、需求規(guī)定3.1軟件功能的規(guī)定產(chǎn)品主要實現(xiàn)以下功能:電子鐘:通過計數(shù)方式進行滿六十秒分鐘進一,滿六十分小時進

7、一,滿二十四小時小時清零。從而達到計時的功能,是人民日常生活補課缺少的工具。電子秒表:分、秒各占用2位顯示,1/10秒、1/100秒各占用1位顯示。設(shè)定二個鍵分別作啟動停止、清零。3.2對性能的規(guī)定3.2.1精度開機時時鐘時從000000開始計時的,到235959時在回到0000003.2.2時間特性要求在中斷服務(wù)程序里,必須對秒、分和時的單元內(nèi)的數(shù)值進行判斷,當(dāng)秒加到60時,分必須加1 、秒清零;當(dāng)分加到60時,時加1、分清零。當(dāng)時加到24時,直接清零。然后轉(zhuǎn)到調(diào)用處。3.2.3可靠性由于此系統(tǒng)由自己設(shè)計管理,所以,不會出現(xiàn)不運行或是死機等現(xiàn)象,可靠性高。3.2.4 靈活性在運用此設(shè)計中的電

8、子時鐘時可以改變其程序設(shè)計來改變其相應(yīng)的輸入、輸出設(shè)計要求,以完成各種不同用戶的需求。4、運行環(huán)境規(guī)定4.1 設(shè)備鍵盤、鼠標(biāo)及安裝相應(yīng)軟件的電腦等4.2 系統(tǒng)及軟件1. 操作系統(tǒng):使用windows xp 或 windows 7等系統(tǒng)2. 應(yīng)用軟件:keil uvision2、proteus7.2sp6二、系統(tǒng)設(shè)計介紹2.1、設(shè)計目的用89c51單片機cpu及接口電路設(shè)計并實現(xiàn)顯示時間的實時時鐘。2.2、功能要求說明(1)在zy15mcu12bd型綜合單片機試驗箱的硬件結(jié)構(gòu)上編寫軟件完成設(shè)計。(2)程序的首地址應(yīng)使目標(biāo)機可以直接運行,即從0000h開始。在主程序的開始部分必須設(shè)置一個合適的棧底

9、。程序放置的地址須連續(xù)且靠前,不要在中間留下大量的空間地址,以使目標(biāo)機可以使用較少的硬件資源。(3)6位led數(shù)碼管從左到右分別顯示時. 分. 秒(各占用2位),采用24小時標(biāo)準(zhǔn)計時制。開始計時時為000000,到235959后變成000000。(4)在xd12鍵盤上選定3個鍵分別作為小時. 分. 秒的調(diào)校鍵。每按一次鍵,對應(yīng)的顯示值便加1。分. 秒加到59后變?yōu)?0;小時加到23后再按鍵即變?yōu)?0.再調(diào)校時均不向上一單位進位(例如分加到59后變?yōu)?0;但小時不發(fā)生改變)。(5)另設(shè)三個鍵,分別作小時、分、秒的減1調(diào)校。(6)在以上設(shè)計的基礎(chǔ)上,修改程序制作一個電子秒表。分、秒各占用2位顯示,

10、1/10秒、1/100秒各占用1位顯示。設(shè)定二個鍵分別作啟動停止、清零。(7)在做完(6)后,將時鐘與秒表合二為一,并且在同時使用時互不影響。即可在時鐘與秒表之間任意切換,而不影響走時、計秒。(8)軟件設(shè)計必須使用8031片內(nèi)定時器,采用定時中斷結(jié)構(gòu),不得使用軟件延時法。(9)上機調(diào)試程序。(10)寫出設(shè)計報告。2.3 模塊設(shè)計六位數(shù)碼管顯示模塊89c51運算模塊計算模塊校時模塊圖1 系統(tǒng)模塊三、電子時鐘3.1、電子時鐘簡介1957年,ventura發(fā)明了世界上第一個電子表,從而奠定了電子時鐘的基礎(chǔ),電子時鐘開始迅速發(fā)展起來?,F(xiàn)代的電子時鐘是基于單片機的一種計時工具,采用延時程序產(chǎn)生一定的時間

11、中斷,用于一秒的定義,通過計數(shù)方式進行滿六十秒分鐘進一,滿六十分小時進一,滿二十四小時小時清零。從而達到計時的功能,是人民日常生活補課缺少的工具。3.2、電子時鐘的基本特點 現(xiàn)在高精度的計時工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘、石英鐘、石英表都采用了石英技術(shù),因此走時精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)試,數(shù)字式電子鐘用集成電路計時時,譯碼代替機械式傳動,用led顯示器代替指針顯示進而顯示時間,減小了計時誤差,這種表具有時、分、秒顯示時間的功能,還可以進行時和分的校對,片選的靈活性好。3.3、電子時鐘的基本原理 該電子時鐘由89c51,button,六段數(shù)碼管等構(gòu)成,采用晶振電路作

12、為驅(qū)動電路,由延時程序和循環(huán)程序產(chǎn)生的一秒定時,達到時分秒的計時,六十秒為一分鐘,六十分鐘為一小時,滿二十四小時為一天。而電路中唯一的一個控制鍵卻擁有多種不同的功能,按下又松開,可以實現(xiàn)屏蔽數(shù)碼管顯示的功能,達到省電的目的;直接按下不松開,則可以通過按鍵實現(xiàn)分鐘的累加,每按一次分鐘加一;而連續(xù)兩次按下按鍵不放松,則可實現(xiàn)小時的調(diào)節(jié),同樣每按一次小時加一。四、單片機的相關(guān)知識 4.1、單片機的簡介單片機全稱為單片機微型計算機(single chip microsoftcomputer)。從應(yīng)用領(lǐng)域來看,單片機主要用來控制,所以又稱為微控制器(microcontroller unit)或嵌入式控制

13、器。單片機是將計算機的基本部件微型化并集成在一塊芯片上的微型計算機。4.2、單片機的發(fā)展史4.2.1 4位單片機 1975年,美國德克薩斯儀器公司首次推出4位單片機tms-1000;此后,各個計算機公司競相推出四位單片機。日本松下公司的mn1400系列,美國洛克威爾公司的pps/1系列等。四位單片機的主要應(yīng)用領(lǐng)域有:pc機的輸入裝置,電池充電器,運動器材,帶液晶顯示的音/視頻產(chǎn)品控制器,一般家用電器的控制及遙控器,電子玩具,鐘表,計算器,多功能電話等。 4.2.2 8位單片機 1972年,美國intel公司首先推出8位微處理器8008,并于1976年9月率先推出mcs-48系列單片機。在這以后

14、,8位單片機紛紛面市。例如,莫斯特克和仙童公司合作生產(chǎn)的3870系列,摩托羅拉公司生產(chǎn)的6801系列等。隨著集成電路工藝水平的提高,一些高性能的8位單片機相繼問世。例如,1978年摩托羅拉公司的mc6801系列及齊洛格公司的z8系列,1979年nec公司的upd78xx系列。這類單片機的尋址能力達64kb,片內(nèi)rom容量達4-8kb,片內(nèi)除帶有并行io口外,還有串行io口,甚至還有ad轉(zhuǎn)化器功能。8位單片機由于功能強,被廣泛用于自動化裝置、智能儀器儀表、智能接口、過程控制、通信、家用電器等各個領(lǐng)域。4.2.3 16位單片機 1983年以后,集成電路的集成度可達幾十萬只管/片,各系列16位單片機

15、紛紛面市。這一階段的代表產(chǎn)品有1983年intel公司推出的mcs-96系列,1987年intel推出了80c96,美國國家半導(dǎo)體公司推出的hpc16040,nec公司推出的783xx系列等。16位單片機主要用于工業(yè)控制,智能儀器儀表,便攜式設(shè)備等場合。4.2.4 32位單片機 隨著高新技術(shù)只智能機器人,光盤驅(qū)動器,激光打印機,圖像與數(shù)據(jù)實時處理,復(fù)雜實時控制,網(wǎng)絡(luò)服務(wù)器等領(lǐng)域的應(yīng)用與發(fā)展,20世紀(jì)80年代末推出了32位單片機,如motorlora公司的mc683xx系列,intel的80960系列,以及近年來流行的arm系列單片機。32位單片機是單片機的發(fā)展趨勢,隨著技術(shù)的發(fā)展及開發(fā)成本和產(chǎn)

16、品價格的下降,將會與8位單片機并駕齊驅(qū)。4.2.5 64位單片機 近年來,64位單片機在引擎控制,智能機器人,磁盤控制,語音圖像通信,算法密集的實時控制場合已有應(yīng)用,如英國inmos公司的transputer t800是高性能的64位單片機。4.3 單片機的特點 (1)、單片機的存儲器rom和ram時嚴(yán)格區(qū)分的。rom稱為程序存儲器,只存放程序,固定常數(shù),及數(shù)據(jù)表格。ram則為數(shù)據(jù)存儲器,用作工作區(qū)及存放用戶數(shù)據(jù)。 (2)、采用面向控制的指令系統(tǒng)。為滿足控制需要,單片機有更強的邏輯控制能力,特別是單片機具有很強的位處理能力。(3)、單片機的i/o口通常時多功能的。由于單片機芯片上引腳數(shù)目有限,

17、為了解決實際引腳數(shù)和需要的信號線的矛盾,采用了引腳功能復(fù)用的方法,引腳處于何種功能,可由指令來設(shè)置或由機器狀態(tài)來區(qū)分。(4)、單片機的外部擴展能力很強。在內(nèi)部的各種功能部件不能滿足應(yīng)用的需求時,均可在外部進行擴展,與許多通用的微機接口芯片兼容,給應(yīng)用系統(tǒng)設(shè)計帶來了很大的方便。4.4、89c51單片機介紹 vcc:電源。gnd:接地。p0口:p0口為一個8位漏級開路雙向i/o口,每腳可吸收8ttl門電流。當(dāng)p1口的管腳第一次寫1時,被定義為高阻輸入。p0能夠用于外部程 序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在fiash編程時,p0 口作為原碼輸入口,當(dāng)fiash進行校驗時,p0輸出原碼

18、,此時p0外部必須被拉高。p1口:p1口是一個內(nèi)部提供上拉電阻的8位雙向i/o口,p1口緩沖器能接收輸出4ttl門電流。p1口管腳寫入1后,被內(nèi)部上拉為高,可用作 輸入,p1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在flash編程和校驗時,p1口作為第八位地址接收。 p2口:p2口為一個內(nèi)部上拉電阻的8位雙向i/o口,p2口緩沖器可接收,輸出4個ttl門電流,當(dāng)p2口被寫“1”時,其管腳被內(nèi)部上拉電阻 拉高,且作為輸入。并因此作為輸入時,p2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。p2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存 儲器進行存取時,p2口輸出地

19、址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,p2口輸出其特殊功能寄存器 的內(nèi)容。p2口在flash編程和校驗時接收高八位地址信號和控制信號。圖2 89c51單片機 p3口:p3口管腳是8個帶內(nèi)部上拉電阻的雙向i/o口,可接收輸出4個ttl門電流。當(dāng)p3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,p3口將輸出電流(ill)這是由于上拉的緣故。p3口也可作為at89c51的一些特殊功能口,如下表所示:口管腳 備選功能p3.0 rxd(串行輸入口)p3.1 txd(串行輸出口)p3.2 /int0(外部中斷0)p3

20、.3 /int1(外部中斷1)p3.4 t0(記時器0外部輸入)p3.5 t1(記時器1外部輸入)p3.6 /wr(外部數(shù)據(jù)存儲器寫選通)p3.7 /rd(外部數(shù)據(jù)存儲器讀選通)p3口同時為閃爍編程和編程校驗接收一些控制信號。rst:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持rst腳兩個機器周期的高電平時間。ale/prog:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在flash編程期間,此引腳用于輸入編程脈沖。在平時,ale 端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器 時,

21、將跳過一個ale脈沖。如想禁止ale的輸出可在sfr8eh地址上置0。此時, ale只有在執(zhí)行movx,movc指令是ale才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ale禁止,置位無效。 psen:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/psen有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/psen信號將不出現(xiàn)。ea/vpp:當(dāng)/ea保持低電平時,則在此期間外部程序存儲(0000h-ffffh),不管是否有內(nèi)部程序存儲器。注意加密方式1時, /ea將內(nèi)部鎖定為reset;當(dāng)/ea端保持高電平時,此間內(nèi)部程序存儲器。在flash編程期間,此引腳

22、也用于施加12v編程電源(vpp)。五、各部分電路分析此實時時鐘的設(shè)計與實現(xiàn),主要采用了6只led數(shù)碼管,8031內(nèi)部二進制16位定時器/計數(shù)器,可編程中斷控制器8031等芯片,包括顯示模塊,運算模塊和校時模塊三大功能模塊。5.1、顯示模塊用8255控制,用數(shù)碼管的顯示功能來設(shè)計。顯示部分硬件用六只led為顯示管,這些led發(fā)光二極管的陰極是互相連接在一起的,所以稱為共陰極數(shù)碼管。通過在這8只發(fā)光二極管的陽極加+5 v或0 v的電壓使不同的二極管發(fā)光,形成不同的數(shù)字。該模塊主要是將運算模塊和校時模塊運算出來并存放在內(nèi)存單元里的十六進制表示的時位、分位和秒位數(shù)值轉(zhuǎn)化為十進制,并通過8只數(shù)碼管顯示

23、出來。該模塊實現(xiàn)的硬件是dvcc8086jh實驗箱中的led單元,采用軟件譯碼,即在程序中設(shè)置一個段選碼表。cpu直接往led輸出八段代碼,省去了硬件譯碼器。a0a3作為8段數(shù)據(jù)輸出口,經(jīng)74ls07驅(qū)動后到達各led。只要做到每送一次段選碼時也送一次位掃描碼,并且每送一次位掃描碼后,位碼中的0右移一位作為下一次的位掃描碼,即可實現(xiàn)由左向右使6只led依次出現(xiàn)數(shù)字顯示。5.2、運算模塊該模塊的主要功能是對時、分、秒的運算,并把運算出的最終結(jié)果存到事先已經(jīng)開辟的內(nèi)存單元里,以便顯示模塊即時地顯示出來。該模塊可以細分為秒定時模塊和運算模塊。秒定時模塊負責(zé)提供中斷信號,由于cpu運算模塊中的指令消耗

24、一定的時間,所以中斷信號最好通過硬件來實現(xiàn)。本實驗中用8031定時器/計數(shù)器,但因為8031供的信號的周期是毫秒級的,因此必須通過軟件的方法在運算模塊中設(shè)置一個統(tǒng)計中斷次數(shù)的變量,并且這一變量必須事先在內(nèi)存里開辟存儲單元。中斷信號是8031工作方式為方式1,產(chǎn)生一個50ms的脈沖信號。運算模塊負責(zé)時、分、秒的計算,該模塊主要通過8031的ir1號中斷來實現(xiàn),但由于每50ms一次中斷請求,所以在中斷服務(wù)程序必須利用已申請內(nèi)存單元26h來統(tǒng)計中斷請求的次數(shù),只有當(dāng)26h的值為20時,才能讓秒單元內(nèi)的數(shù)值加1。在中斷服務(wù)程序里,必須對秒、分和時的單元內(nèi)的數(shù)值進行判斷,當(dāng)秒加到60時,分必須加1 、秒

25、清零;當(dāng)分加到60時,時加1、分清零。當(dāng)時加到24時,直接清零。然后轉(zhuǎn)到調(diào)用處。5.3、校時模塊該模塊主要功能是修改時、分、秒內(nèi)存單元的數(shù)值。每按一次鍵,對應(yīng)的顯示值便加1。分、 秒加到59后變?yōu)?0;小時加到23后再按鍵即變?yōu)?0.再調(diào)校時均不向上一單位進位(例如分加到59后變?yōu)?0;但小時不發(fā)生改變)。注意:在主程序中對時間進行調(diào)校前應(yīng)關(guān)閉中斷,以防在調(diào)校過程中定時中斷服務(wù)程序也對時間進行修改而造成混淆。5.4. 整體功能在6塊led數(shù)碼管上能實現(xiàn)數(shù)字時鐘的時、分、秒顯示和電子秒表的顯示,并能對時、分、秒進行加1校對、減1校對和清零。本實驗中06鍵、0a鍵、0e鍵是分別對時、分、秒的加1校

26、對;05鍵、09鍵、0d鍵時分別對時、分、秒的減1校對;07是電子秒表的清零鍵,0b是電子秒表的啟動/停止鍵,0e鍵是數(shù)字時鐘/電子秒表的切換鍵。并且開機時時鐘時從000000開始計時的,到235959時在回到000000.六、程序調(diào)試將編寫好的源程序輸入電腦,編譯后出現(xiàn)很多錯誤,這些錯誤有許多時平時的實驗遇到過的,例如:輸入的分號格式不正確,零和字母o弄混淆了,loop5出現(xiàn)了幾次,cjne寫成了cjnz等等,幸好這些錯誤在平時的實驗中遇到了,所以改錯誤很容易,但同時也說明了,平時的錯誤現(xiàn)在還在換,證明錯誤我還沒有完全的改正,這點我以后一定要注意了。爭起錯誤換了兩次就不能在換了。除了常見的錯

27、誤外,還有幾條錯誤時我從來沒有遇到過的,如:ljmp跳轉(zhuǎn)指令跳不回指定的位置,是因為跳轉(zhuǎn)的長度大于ljmp跳轉(zhuǎn)的長度,最后只好設(shè)置跳轉(zhuǎn)兩次后才能跳到指定的位置。經(jīng)過多次的修改和向別人請教,錯誤都拍除了,編譯通過了,但功能沒有達到設(shè)計的要求,第一、小時加1鍵加到23時還可以向上加而不是回到00.第二、時鐘走到235959時不能回到000000的狀態(tài)。這兩個錯誤都出現(xiàn)在小時的位置,說明小時鍵很特殊,的確,小時鍵當(dāng)小于23時個位遇到10要進位,當(dāng)大于23時個位遇到4時要進位,小時的十位也是一樣,要判斷兩次,才能實現(xiàn)完整的功能。最后,經(jīng)過幾天在機房的努力,終于實現(xiàn)了時鐘的全部要求。在前期的程序編寫和幾

28、天的上機調(diào)試,使我又獲得了很多新的知識,因為前期編寫程序時查了很多資料學(xué)到了很多知識,這幾天的調(diào)試更時獲得很新的知識,因為程序中又很多的錯誤,為了修改錯誤必須看書或向別人請教,在這個過程中無意識的獲得了很多知識。同時也使我對單片機更感興趣了,這點我覺得很重要,因為興趣使最好的老師,相信在以后的單片機相關(guān)的學(xué)習(xí)中會表現(xiàn)的更好。七、硬件電路圖圖3 總體電路圖元件清單:名稱數(shù)值數(shù)量名稱數(shù)值數(shù)量電容c30pf2c08321電容e22uf174ls373174l240174ls1381led274hc02389c511c08081名稱數(shù)值數(shù)量名稱數(shù)值數(shù)量晶振12mhz18255a1電建167406874

29、086電位器10kw1電阻100w8數(shù)碼管17411八、仿真效果圖圖4 仿真效果圖九、程序調(diào)試圖5 程序設(shè)計調(diào)試圖十、程序流程圖初始化 設(shè)置堆棧定時器及打開相應(yīng)中斷調(diào)用顯示子程序調(diào)用鍵盤掃描子程序圖6主程序流程圖是否有鍵按下 是延時12ms是否有鍵按下是否第0列有鍵按下 是是否為第0行是flag取反 否是否為第1行 否是否為第2行是跑表清零 否跑表暫停是否第1行右鍵按下 圖7 鍵盤掃描流程圖是否為第0行是秒加1 否是否為第1行是分加1 否是否為第2行是小時加1 否是否第2行右鍵按下是否松手 否 是否為第0行是秒減1調(diào)用顯示程序 是否為第1行是分減1 是是否為第2行是小時減1返回flag=? =

30、1 =0跑表數(shù)據(jù)地址r021h r0 odfh r2數(shù)字鐘數(shù)據(jù)首地址r031h r0 odfh r2 查表取出數(shù)據(jù)并顯示inc r0 rr r2 否是否顯示完一遍即r0第四位是否為7 是返回圖8 顯示程序流程圖十一、程序清單 flag equ 20h.0 ;數(shù)字鐘秒表切換標(biāo)志位 dsec equ 38h ;數(shù)字鐘秒計數(shù)單元 dmin equ 39h ;數(shù)字鐘分計數(shù)單元 dhour equ 3ah ;數(shù)字鐘時計數(shù)單元 mssum equ 28h ;跑表1/10,1/100秒計數(shù)單元 secsum equ 29h ;跑表秒計數(shù)單元 minsum equ 2ah ;跑表分計數(shù)單元 org 0000h

31、 ; sjmp start ; org 000bh ljmp int_t0 ;跳轉(zhuǎn)到數(shù)字鐘中斷服務(wù)程序 org 001bh ljmp int_t1;跳轉(zhuǎn)到跑表中斷服務(wù)程序start:setb ea setb et1 setb et0 mov tmod,#11h mov th1,#(65535-5000)/256 mov tl1,#(65535-5000) mod 256 mov th0,#(65535-50000)/256 mov tl0,#(65535-50000) mod 256 setb tr0 setb tr1 mov dptr,#4003h ;初始化8255 mov a,#81h m

32、ovx dptr,a mov sp ,#50h ;堆棧設(shè)置 mov r3,#0 mov r7,#0main: lcall disp;主程序 lcall scan sjmp mainscan: mov dptr,#4002h;鍵盤掃描子程序 mov a,#0fh movx dptr,a movx a,dptr anl a,#0fh cjne a,#0fh,keyscan ;有鍵按下,跳轉(zhuǎn)到鍵盤檢測 ljmp done keyscan:inc r7 ;延時12ms,去抖動 lcall disp cjne r7,#10,keyscan mov r7,#0 mov a,#0fh ;再次檢測,確認(rèn)是否有

33、鍵按下 mov dptr,#4002h movx dptr,a movx a,dptr anl a,#0fh cjne a,#0fh,keys0 ljmp donekeys0: mov a,#0efh ;第0列按鍵檢測 movx dptr,a movx a,dptr ;讀回數(shù)據(jù)key00:jb acc.0,key01 ;第0列第0行檢測 cpl flag ;數(shù)字鐘跑表顯示標(biāo)志位取反 ljmp next1 ;跳到松手檢測key01:jb acc.1,key02 ;第0列第1行檢測 cpl tr1 ;管定時器1 ljmp next1key02:jb acc.2,keys1 ;第0列第2行檢測 mo

34、v 21h,#0 mov 22h,#0 ;跑表計數(shù)單元清零 mov 23h,#0 mov 24h,#0 mov 25h,#0 mov 26h,#0 mov mssum,#0 mov secsum,#0 mov minsum,#0 sjmp next1 ;轉(zhuǎn)到松手檢測keys1:mov a,#0dfh ;第1列按鍵檢測 movx dptr,a movx a,dptrkey10:jb acc.0,key11 ;第1列第0行檢測 inc dsec;數(shù)字鐘秒計數(shù)加1 mov a,dsec cjne a,#60,next1 ;秒是否到了60,沒有則跳到松手檢測 mov dsec,#0 ;到了60,清零

35、ljmp next1;跳到松手檢測key11:jb acc.1,key12;第1列第1行檢測 inc dmin;分加1 mov a,dmin cjne a,#60,next1 ;是否到60 mov dmin,#0 ljmp next1key12:jb acc.2,keys2 ;第1列第2行檢測 inc dhour ;小時加1 mov a,dhour cjne a,#24,next1;是否到24 mov dhour,#0 ljmp next1keys2:mov a,#0bfh;第2列按鍵檢測 movx dptr,a movx a,dptrkey20:jb acc.0,key21 ;第2列第0行檢

36、測 dec dsec;數(shù)字鐘秒計數(shù)減1 mov a,dsec cjne a,#0ffh,next1;是否為ffh,若是,則給秒計數(shù)賦值59 mov dsec,#59 ljmp next1key21:jb acc.1,key22;第2列第1行檢測 dec dmin;分減1 mov a,dmin cjne a,#0ffh,next1 mov dmin,#59 ljmp next1key22:jb acc.2,done;第2列第2行檢測 dec dhour;小時減1 mov a,dhour cjne a,#0ffh,next1 mov dhour,#23next1:lcall disp;松手檢測,調(diào)

37、用顯示程序,防止數(shù)碼管熄滅 mov dptr,#4002h movx a,dptr;讀回按鍵數(shù)據(jù) anl a,#0fh;屏蔽高四位 cjne a,#0fh,next1;若鍵任然按下,繼續(xù)檢測done: ret;鍵盤掃描程序結(jié)束,返回到主程序delay:mov 27h,#100;0.2ms延時 djnz 27h,$ ret disp: jnb flag,nn;flag為0,顯示數(shù)字鐘,為1顯示跑表 mov r0,#21h;跑表顯示數(shù)據(jù)首地址 mov r2,#0dfh;數(shù)碼管為選 sjmp disp1;跳到顯示程序段nn: mov r0,#31h;數(shù)字鐘顯示數(shù)據(jù)首地址 mov r2,#0dfh d

38、isp1:mov dptr,#table;數(shù)碼管驅(qū)動代碼首地址 mov a, r0 movc a,a+dptr;查出要顯示數(shù)據(jù)的代碼 mov dptr,#4001h;段選地址給dptr movx dptr,a;送段選值 mov a,r2;位選值給a mov dptr,#4000h;位選地址給dptr movx dptr,a;送位選值 lcall delay;延時0.2ms rr a;位選指向下一位 mov r2,a mov a,#0ffh;關(guān)位選 movx dptr,a inc r0;段選指向下一位 mov a,r0 anl a,#0fh cjne a,#07h,disp1;是否6位數(shù)碼管全顯

39、示了一遍,沒有則繼續(xù)顯示 ret;顯示子程序返回int_t0: mov th0,#(65535-50000)/256;給t0重賦初值 mov tl0,#(65535-50000) mod 256 push acc;保存acc,psw進入中斷前的值 push psw inc r5 cjne r5,#20,next3;是否到了一秒 mov r5,#0;到了一秒,r5清零 inc dsec ;秒位加1 mov a,dsec cjne a,#60,next3;秒位是否到了60 mov dsec,#0;到了60,清零 inc dmin;向分鐘為進1 mov a,dmin cjne a,#60,next3;分鐘為是否到了60 mov

溫馨提示

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

最新文檔

評論

0/150

提交評論