版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、畢業(yè)設(shè)計(jì)說明書作 者: 學(xué) 號(hào):學(xué) 院: 機(jī)械電子工程學(xué)院 專 業(yè): 電氣自動(dòng)化題 目: 基于單片機(jī)設(shè)計(jì)LED顯示電子鐘畢業(yè)設(shè)計(jì)中文摘要目 錄1 引言 . 2 整體設(shè)計(jì)思路 . 3 主要元件的使用方法 . 3.1 AT89C51單片機(jī): . 3.2 7407驅(qū)動(dòng)器: . 3.3數(shù)碼管: . 4 電路設(shè)計(jì) . 4.1整體設(shè)計(jì) . 4.2 分塊設(shè)計(jì) . 42.1 輸入部分 . 42.2 輸出部分(顯示電路) . 42.3 晶振與復(fù)位電路: . 5 程序設(shè)計(jì) . 5.1程序思路 . 5.2程序設(shè)計(jì)步驟 . 5.3程序的主要模塊 . 5.3.1延遲程序 . 5.3.2 中斷服務(wù)子程序: . 5.3.3
2、 主程序 . 5.3.4顯示程序 . 5.3.5 鬧鈴程序和定時(shí)程序 . 5.4程序調(diào)試 . 6 功能仿真 . 6.1 軟件介紹 . 6.1.1PROTEUS . 6.1.2MedWin . 6.2仿真過程: . 6.2.1仿真圖的繪制 . 6.2.2功能的實(shí)現(xiàn) . 7 實(shí)際電路的實(shí)現(xiàn) . 8 日歷功能的實(shí)現(xiàn) . 9 電子鐘設(shè)計(jì)中遇到的問題及其解決方法 . 結(jié)論 . 參考文獻(xiàn) . 致謝 . 附錄A 整體電路圖 . 附錄B 完整程序 . 1 引言單片機(jī)因?qū)⑵渲饕M成部分集成在一個(gè)芯片上而得名,就是把中央處理器、隨機(jī)存儲(chǔ)器、只讀存儲(chǔ)器、中斷系統(tǒng)、定時(shí)器/計(jì)數(shù)器以及I/O接口電路等部件集成在一個(gè)芯片
3、上1。單片機(jī)自20世紀(jì)70年代問世以來,以其極高的性能價(jià)格比,受到人們的重視和關(guān)注,應(yīng)用很廣、發(fā)展很快。單片機(jī)具有體積小、功能多、價(jià)格低廉、使用方便、系統(tǒng)設(shè)計(jì)靈活等優(yōu)點(diǎn)2。因此,它應(yīng)用廣泛前景美好,它的實(shí)用性大大地提高了我對(duì)畢業(yè)設(shè)計(jì)的興趣。在我國,單片機(jī)的開發(fā)應(yīng)用已有15年左右,已經(jīng)形成一支龐大的技術(shù)開發(fā)隊(duì)伍,為我國單片機(jī)應(yīng)用積累了豐富的經(jīng)驗(yàn)。隨著電子技術(shù)、計(jì)算機(jī)芯片技術(shù)和微電子技術(shù)的飛速發(fā)展促進(jìn)了單片機(jī)技術(shù)一日千里的變化3。隨著半導(dǎo)體技術(shù)的飛速發(fā)展,以及移動(dòng)通信、網(wǎng)絡(luò)技術(shù)、多媒體技術(shù)在嵌入式系統(tǒng)設(shè)計(jì)中的應(yīng)用,單片機(jī)從4位、8位、16位到32位,其發(fā)展歷程一直受到廣大電子愛好者的極大關(guān)注。單片
4、機(jī)功能越來越強(qiáng)大,價(jià)格卻不斷下降的優(yōu)勢(shì)無疑成為嵌入式系統(tǒng)方案設(shè)計(jì)的首選,同時(shí)單片機(jī)應(yīng)用領(lǐng)域的擴(kuò)大也使得更多人加入到基于單片機(jī)系統(tǒng)的開發(fā)行列中,推動(dòng)著單片機(jī)技術(shù)的創(chuàng)新進(jìn)步。然而傳統(tǒng)的單片機(jī)系統(tǒng)開發(fā)除了需要購置諸如仿真器、編程器、示波器等價(jià)格不菲的電子設(shè)備外,開發(fā)過程也較繁瑣。來自英國Labcenter Electronics公司的Proteus軟件很好地詮釋了利用現(xiàn)代EDA工具方便快捷開發(fā)單片機(jī)系統(tǒng)的優(yōu)勢(shì)。它包括PROTEUS VSM(Virtual System Modelling)、PROTEUS PCB DESIGN兩大組成部分,在PC機(jī)上就能實(shí)現(xiàn)原理圖電路設(shè)計(jì)、電路分析與仿真、單片機(jī)代碼
5、級(jí)調(diào)試與仿真、系統(tǒng)測(cè)試與功能驗(yàn)證以及形成PCB文件的完整嵌入式系統(tǒng)設(shè)計(jì)與研發(fā)過程。單片機(jī)系統(tǒng)作為一種典型的嵌入式系統(tǒng),其系統(tǒng)設(shè)計(jì)包括硬件電路設(shè)計(jì)和軟件編程設(shè)計(jì)兩個(gè)方面, 其調(diào)試過程一般分為軟件調(diào)試、硬件測(cè)試、系統(tǒng)調(diào)試3個(gè)過程。如果采用單片機(jī)系統(tǒng)的虛擬仿真軟件Proteus,則不用制作具體的電路板也能夠完成以上工作。數(shù)字鐘是采用數(shù)字電路實(shí)現(xiàn)對(duì)時(shí),分,秒,數(shù)字顯示的計(jì)時(shí)裝置,由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地?cái)U(kuò)展了鐘表的報(bào)時(shí)功能。數(shù)字鐘已成為人們?nèi)粘I钪械谋匦杵罚瑥V泛應(yīng)用于家庭、車站、碼頭、
6、劇院、辦公室等場(chǎng)所,給人們的生活、學(xué)習(xí)、工作帶來極大的方便4。不僅如此,在現(xiàn)代化的進(jìn)程中,也離不開電子鐘的相關(guān)功能和原理,比如機(jī)械手的控制、家務(wù)的自動(dòng)化、定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、自動(dòng)起閉路燈、定時(shí)開關(guān)烘箱、通斷動(dòng)力設(shè)備、甚至各種定時(shí)電氣的自動(dòng)啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。而且是控制的核心部分。因此,研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實(shí)的意義。電子鐘在工業(yè)控制和日常生活中是很重要的,它不僅可以用于計(jì)時(shí)、提醒又可用于對(duì)機(jī)器的控制,在自動(dòng)化的過程中必然有電子鐘的參與,因此電子鐘的應(yīng)用會(huì)越來越廣泛。而且向著精確、低功耗、多功能發(fā)展?;趩纹瑱C(jī)設(shè)計(jì)的數(shù)字鐘精
7、確度較高, 因?yàn)樵诔绦虻膱?zhí)行過程中, 任何指令都不影響定時(shí)器的正常計(jì)數(shù),即便程序很長也不 會(huì)影響中斷的時(shí)間。從而,使數(shù)字鐘的精度僅僅取決于單片機(jī)的產(chǎn)生機(jī)器周期電路和定時(shí)器硬件電路的精確度。另外,程序較為簡(jiǎn)潔,具有可靠性和較好的可讀性。如果我們想將它應(yīng)用于實(shí)時(shí)控制之中,只要對(duì)上述程序和硬件電路稍加修改,便可以得到實(shí)時(shí)控制的實(shí)用系統(tǒng),從而應(yīng)用到實(shí)際工作與生產(chǎn)中去。數(shù)字電子鐘的設(shè)計(jì)方法有多種,例如,可用中小規(guī)模集成電路組成電子鐘, 也可以利用專用的電子鐘芯片配以顯示電路及其所需要的外圍電路組成電子鐘還可以利用單片機(jī)來實(shí)現(xiàn)電子鐘等等。這些方法都各有特點(diǎn), 其中,利用單片機(jī)實(shí)現(xiàn)的電子鐘具有編程靈活, 便
8、于功能擴(kuò)充, 精確度高等特點(diǎn)?;谝陨戏治?,在此次設(shè)計(jì)中,我選擇的是利用單片機(jī)制作電子鐘。電子鐘的設(shè)計(jì)本身包括程序的設(shè)計(jì)和硬件電路的設(shè)計(jì)6。我的思路是,先進(jìn)行電路的整體設(shè)計(jì),再根據(jù)電路進(jìn)行編程,在編程的過程中,對(duì)電路進(jìn)行微調(diào),以更好地配合程序。在設(shè)計(jì)完成后,進(jìn)行程序調(diào)試,調(diào)試軟件選擇MedWin,調(diào)試成功后,再根據(jù)電路圖畫出仿真圖,將軟件裝入單片機(jī)芯片,利用Proteus軟件進(jìn)行仿真,仿真中的錯(cuò)誤通過改正程序中的邏輯錯(cuò)誤和電路中的設(shè)計(jì)不當(dāng)進(jìn)行排除,這個(gè)過程是很艱難的但也是很重要的。若仿真可以實(shí)現(xiàn),則硬件電路的實(shí)現(xiàn)就可以有條不紊地進(jìn)行。2 整體設(shè)計(jì)思路這部分主要介紹工作安排和整體設(shè)計(jì)的思想。工作
9、過程規(guī)劃如下:5圖2.1 整體設(shè)計(jì)思路針對(duì)要實(shí)現(xiàn)的功能,擬采用AT89C51單片機(jī)進(jìn)行設(shè)計(jì),AT89C51 單片機(jī)是一款低功耗,高性能CMOS8位單片機(jī),片內(nèi)含4KB在線可編程(ISP)的可反復(fù)擦寫1000次的Flash只讀程序存儲(chǔ)器,器件采用高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS- 51指令系統(tǒng)及80C51引腳結(jié)構(gòu)7。這樣,既能做到經(jīng)濟(jì)合理又能實(shí)現(xiàn)預(yù)期的功能。在程序方面,采用分塊設(shè)計(jì)的方法,這樣既減小了編程難度、使程序易于理解,又能便于添加各項(xiàng)功能。程序可分為鬧鐘的聲音程序、顯示程序、鬧鐘顯示程序、調(diào)時(shí)顯示、定時(shí)程序。運(yùn)用這種方法,關(guān)鍵在于各模塊的兼容和配合,若各模塊不匹配會(huì)出現(xiàn)意想不
10、到的錯(cuò)誤。本電子鐘設(shè)計(jì)主要是依照?qǐng)D2.1中的流程做出來的,時(shí)間分配比較均勻。首先,在編程之前必須了解硬件結(jié)構(gòu)尤其是各引腳的用法,以及內(nèi)部寄存器、存儲(chǔ)單元的用法,否則,編程無從下手,電路也無法設(shè)計(jì)。這是前期準(zhǔn)備工作。第二部分是硬件部分:依據(jù)想要的功能分塊設(shè)計(jì)設(shè)計(jì),比如輸入需要開關(guān)電路,輸出需要顯示驅(qū)動(dòng)電路和數(shù)碼管電路等。第三部分是軟件部分:先學(xué)習(xí)理解匯編語言的編程方法再根據(jù)設(shè)計(jì)的硬件電路進(jìn)行分塊的編程調(diào)試,最終完成程序設(shè)計(jì)。第四部分是軟件畫圖部分:設(shè)計(jì)好電路后進(jìn)行畫圖,包括電路圖和仿真圖的繪制。第五部分是軟件仿真部分:軟硬件設(shè)計(jì)好后將軟件載入芯片中進(jìn)行仿真,仿真無法完成時(shí)檢查軟件程序和硬件電路并
11、進(jìn)行修改直到仿真成功。第六部分是硬件實(shí)現(xiàn)部分:連接電路并導(dǎo)入程序檢查電路,若與設(shè)計(jì)的完全一樣一般能實(shí)現(xiàn)想要的功能。最后進(jìn)行功能擴(kuò)展,本設(shè)計(jì)加進(jìn)了日期顯示與調(diào)整功能。3 主要元件的使用方法下面就本次設(shè)計(jì)中用到的主要元件的所有功能進(jìn)行簡(jiǎn)單的介紹,包括AT89C51單片機(jī)、74LS07芯片、以及數(shù)碼管的特性和用法。3.1 AT89C51單片機(jī)8:該單片機(jī)功能強(qiáng)大,不僅能滿足設(shè)計(jì)的需要,也可以在設(shè)計(jì)要求的基礎(chǔ)上進(jìn)行一些擴(kuò)展。單片機(jī)的結(jié)構(gòu)如下:圖3.1.1 單片機(jī)引腳圖在使用時(shí)VCC接電源電壓,GND接地。P0,P1,P2,P3可作為輸入或輸出端口,RST是復(fù)位輸入,接復(fù)位電路。XTAL1和XTAL2接
12、復(fù)位電路。這些可以在硬件設(shè)計(jì)部分體現(xiàn)出來。3.2 7407驅(qū)動(dòng)器:7407是集電極開路六正相高壓驅(qū)動(dòng)器,1入2出,3進(jìn)4出,5進(jìn)6出,9進(jìn)8出,11進(jìn)10出,13進(jìn)12出,7接地,14接高電平。7407引腳圖:9圖3.2.1 7407引腳圖3.3數(shù)碼管使用共陰極數(shù)碼管時(shí)將6個(gè)數(shù)碼管 按相同功能連接起來,3與8相連,當(dāng)選通端所接管腳為低電平時(shí)該數(shù)碼管選通。單片機(jī)的P2口作為選通端,連接各 數(shù)碼管的3、8引腳輪流顯示,連接時(shí)要加7407和上拉電阻。單片機(jī)的P1口作為功能段,通高電 平的引腳會(huì)使相應(yīng)段亮起,同樣的也要與7407和電阻連接使用。64 電路設(shè)計(jì)4.1整體設(shè)計(jì)此次設(shè)計(jì)主要是應(yīng)用單片機(jī)來設(shè)計(jì)
13、電子時(shí)鐘,硬件部分主要分以下電路模塊:顯示電路用六個(gè)數(shù)碼管分別顯示小時(shí)(年份)、分鐘(月份)和秒(日),通過動(dòng)態(tài)掃描進(jìn)行顯示,從而避免了譯碼器的使用,使電路更加簡(jiǎn)單。單片機(jī)采用AT89C51系列,這種單片機(jī)應(yīng)用簡(jiǎn)單,適合電子鐘設(shè)計(jì)。電路的總體設(shè)計(jì)框架如下:圖4.1.1 電路模塊圖4.2 分塊設(shè)計(jì)這部分介紹各模塊電路的設(shè)計(jì)方法和成果,主要分為:輸入部分、輸出部分、復(fù)位和晶振電路。42.1 輸入部分在電子鐘的輸入部分,設(shè)置相應(yīng)的置數(shù)功能,通過外部設(shè)備的輸入,如按鍵,實(shí)現(xiàn)時(shí)間的修改10-11。除此之外,調(diào)整鬧鈴、定時(shí)、日期時(shí)也需要按鍵進(jìn)行輸入。在選用輸入端口時(shí),將P3引腳與按鍵相連進(jìn)行輸入12。設(shè)計(jì)
14、的輸入部分如下:圖4.2.1 輸入部分各按鍵功能在后面的部分將會(huì)介紹到42.2 輸出部分(顯示電路)該部分電路圖如下所示:圖4.2.2 顯示部分在實(shí)際電路中采用單個(gè)數(shù)碼管相連進(jìn)行顯示,先把數(shù)碼管的1、2、4、5、6、7、9、10對(duì)應(yīng)相連,然后把各晶體管的3和8引腳各自相連,P1.6P1.0分別接ag,P2作為選通端P2.0P2.5分別從左到右接各數(shù)碼管的3、8端。采用 動(dòng)態(tài)顯示, 即一位一位地輪流點(diǎn)亮各位顯示器18,因此P2.0P2.5輪流置0。持續(xù)時(shí)間為1ms,這點(diǎn)在程序部分還會(huì)晶振與復(fù)位電路:圖4.2.3 晶振與復(fù)位電路 講到。 42.35 程序設(shè)計(jì)5.1程序思路圖5.1.1 程序設(shè)計(jì)思路
15、結(jié)合電路,程序的總體思路是17:1、點(diǎn)復(fù)位鍵后,進(jìn)行時(shí)間顯示,從0時(shí)0分0秒開始。2、按下按鍵1時(shí),進(jìn)行調(diào)時(shí),此時(shí)按下4調(diào)整時(shí),按下5調(diào)整分,若2秒鐘未按鍵,則不再等待,恢復(fù)走時(shí),持續(xù)按鍵時(shí)大約0.3秒步進(jìn)1,下同。3、按下2鍵時(shí)進(jìn)行鬧鈴調(diào)整,用4、5鍵分別調(diào)時(shí)和分,此時(shí)只有前四位進(jìn)行顯示,即鬧鈴功能精確到分,2秒鐘無按鍵則返回時(shí)間顯示,時(shí)間到達(dá)鬧鈴所定時(shí)間時(shí)P0.7輸出高電平,蜂鳴器響,按下按鍵2或3時(shí)蜂鳴器停止。4、按3鍵時(shí)進(jìn)行定時(shí)的設(shè)定,同樣,分別通過4、5調(diào)整分和秒,若兩秒未按鍵則不進(jìn)行定時(shí),設(shè)定之后再次按下3鍵則進(jìn)行倒計(jì)時(shí),倒計(jì)時(shí)時(shí)間未到時(shí)若按下1鍵則進(jìn)行時(shí)間顯示;若倒計(jì)時(shí)時(shí)間到則P
16、0.7為高電平,蜂鳴器響。定時(shí)的最大值為59分59秒。在程序設(shè)計(jì)時(shí),盡量改進(jìn)算法,算法的改進(jìn)可以使相對(duì)誤差減小12,或者可以使占用空間減小14。另外,分塊的設(shè)計(jì)思想要貫穿始終,整個(gè)程序較為繁雜,某些程序段會(huì)反復(fù)用到,因此采取的方法是寫出多個(gè)程序段,通過跳轉(zhuǎn)指令進(jìn)行調(diào)用。5.2程序設(shè)計(jì)步驟在程序設(shè)計(jì)過程中,我遇到了很多困難,這部分也是讓我學(xué)到很多東西的地方。首先,我學(xué)習(xí)了定時(shí)器的相關(guān)知識(shí),計(jì)數(shù)器的使用是很重要的組成部分的工作方式有:方式0:不推薦方式1:16位計(jì)數(shù)器,常用方式2:自動(dòng)重裝初值的8位定時(shí)/計(jì)數(shù)器方式3:T0相當(dāng)于兩個(gè)獨(dú)立的8位定時(shí)/計(jì)數(shù)器此程序采用方式1,方式1的定時(shí)時(shí)間t為t=(
17、216-M)*12/fosc。其中M為定時(shí)器初值,fosc為12MHz,若M為0則t=65536*12/2*106=65.536ms。因此可取50ms為計(jì)時(shí)單位16,初值M應(yīng)為50*10-3*106=216-M。M=15536=11110010110000=3CB0。即定時(shí)器初值為TH0=03CH,TL0=0B0H。定時(shí)器中斷20次為一秒,這部分在中斷程序中用到。其次,我參看了文獻(xiàn)中的設(shè)計(jì)思路,做到胸有成竹后再進(jìn)行具體的程序書寫工作。認(rèn)真學(xué)習(xí)了教科書中關(guān)于匯編語言編程的問題,熟悉了匯編語言的編程方法和語法習(xí)慣。第三步就是進(jìn)行具體的程序編寫工作。5.3程序的主要模塊5.3.1延遲程序在動(dòng)態(tài)掃描時(shí)
18、,必然用到延遲程序,這里使用延遲1ms的程序,此程序需要反復(fù)調(diào)用。此段程序是很簡(jiǎn)單的,但就是在這段簡(jiǎn)單的程序上,也會(huì)出現(xiàn)問題,若用D_1MS:MOV R7,#500阿DJNZ R7,$RET則會(huì)出現(xiàn)警告,因?yàn)镽7是8位寄存器,所能存儲(chǔ)的最大值應(yīng)為255,所以應(yīng)改為:D_1MS:MOV R7,#2 15,在這個(gè)設(shè)計(jì)中選擇計(jì)數(shù)器T0。T0D_5:MOV R2,#250DJNZ R2,$DJNZ R7,D_5RET5.3.2 中斷服務(wù)子程序:中斷服務(wù)程序中,總體思路是:由于初值是3CB0H,所以裝滿定時(shí)器需要50ms的時(shí)間,從而20次中斷為一秒,一秒之后,判斷是否到60秒,若不到則秒加一,然后返回,
19、若到,則秒賦值為0,分加一,依次類推。包括日期顯示的功能也是如此。另外,由于要實(shí)現(xiàn)倒計(jì)時(shí)功能,因此在中斷程序中還要加入減一的寄存器,需要時(shí)將其進(jìn)行顯示。基于以上考慮,以R3為倒計(jì)時(shí)中的秒,R4為倒計(jì)時(shí)的分,當(dāng)秒加1時(shí)R3減一,減到0之后,秒賦值為59,分減一,直到分為0。再顯示走時(shí)部分。流程框圖如下:圖5.3.1 中斷程序思路5.3.3 主程序主程序主要對(duì)按鍵進(jìn)行掃描,以及判斷定時(shí)和鬧鈴時(shí)間是否已到,若到則調(diào)用聲音程序,該段程序如下:MAIN:JNB P3.0,DATETZ;按下0鍵時(shí),顯示日期并可對(duì)日期進(jìn)行調(diào)整JNB P3.1,ZSTZ1;按下1鍵時(shí),顯示時(shí)間,并可調(diào)時(shí)JNB P3.2,NL
20、TZ1;按下2鍵進(jìn)行鬧鈴設(shè)置JNB P3.3,DSTZ;按下3鍵進(jìn)行定時(shí)設(shè)置ACALL DISP;MOV A, HOUR;SUBB A, 38H;JZ FEN;AJMP DSPD2;FEN:MOV A, MINUTE;SUBB A, 37H;JZ SHENGYIN1;DSPD2:MOV A, R4;JZ S_PD;AJMP MAIN;S_PD:MOV A, R3;JZ SHENGYIN1;AJMP MAIN;5.3.4顯示程序6個(gè)晶體管輪流進(jìn)行顯示,分別顯示1ms,這依賴的是人們視覺的惰性,該段程序如下:DISP:;走時(shí)的顯示程序,包括調(diào)時(shí)時(shí)的顯示MOV DPTR,#LEDTABMOV A,S
21、ECONDMOV B,#10DIV AB;A存十位B存?zhèn)€位MOVC A,A+DPTRMOV P1,ACLR SEC_SACALL D_1MS;顯示秒十位SETB SEC_SMOV A,BMOVC A,A+DPTRMOV P1,ACLR SEC_GACALL D_1MS;顯示秒個(gè)位SETB SEC_G以此類推,進(jìn)行時(shí)和分的顯示RET另外,調(diào)鬧鈴和定時(shí)時(shí)間、進(jìn)行日期顯示時(shí),有各自的顯示程序,但不能成為獨(dú)立子程序,分別柔和在鬧鈴、定時(shí)、和日期程序中。5.3.5 鬧鈴程序和定時(shí)程序這兩段程序分別包含了各自的顯示、調(diào)整程序。程序思路是對(duì)照,走時(shí)部分的程序,進(jìn)行編寫,包括顯示程序,與顯示時(shí)間的程序是相似的
22、,鬧鈴和定時(shí)的調(diào)整程序與走時(shí)調(diào)整程序相似。5.4程序調(diào)試程序?qū)懲暌院蟊仨氝M(jìn)行調(diào)試,以驗(yàn)證程序是否正確。在程序調(diào)試時(shí),出現(xiàn)了很多問題,比如跳轉(zhuǎn)距離過長、打錯(cuò)字母、邏輯有錯(cuò)等,發(fā)現(xiàn)問題后,利用兩天時(shí)間進(jìn)行了改正,但即使編譯通過,最后也不一定能夠?qū)崿F(xiàn)功能。以為程序的調(diào)試只能檢查出語法錯(cuò)誤,而不能檢查出邏輯的錯(cuò)誤。要真正把程序?qū)憣?duì),要通過仿真發(fā)現(xiàn)并且改正錯(cuò)誤。6 功能仿真這部分工作可能遇到的困難是很多的,程序龐大很可能出現(xiàn)各種問題。在仿真工作中,首先要對(duì)仿真軟件有足夠的了解并能夠正確熟練地運(yùn)用6.1 軟件介紹在這部分工作中用到了medwin3和Proteus兩個(gè)軟件,其中Medwin3用來編譯程序并生
23、成hex文件,裝入Proteus仿真圖的芯片中,通過仿真結(jié)果一步步進(jìn)行調(diào)整最后達(dá)到預(yù)期的功能。6.1.1PROTEUSPROTEUS軟件是目前世界上最先進(jìn)、最完整的嵌入式系統(tǒng)設(shè)計(jì)與仿真平臺(tái),可以實(shí)現(xiàn)數(shù)字電路、模擬電路及微控制器系統(tǒng)與外設(shè)的混合電路系統(tǒng)的電路仿真、軟件仿真、系統(tǒng)協(xié)同仿真和PCB設(shè)計(jì)等功能,是目前唯一能夠?qū)Ω鞣N處理器進(jìn)行實(shí)時(shí)仿真、調(diào)試與測(cè)試的EDA工具。微控制器系統(tǒng)相關(guān)的仿真需建立編譯和調(diào)試環(huán)境,可選擇MedWin V3 軟件。該軟件支持眾多不同公司的芯片,集編輯、編譯和程序仿真等于一體,同時(shí)還支匯編和C語言的程序設(shè)計(jì)。Proteus的界面友好易學(xué),在調(diào)試程序、軟件仿真方面有很強(qiáng)大
24、的功能。 其革命性的功能是:將電路仿真和微處理器仿真進(jìn)行協(xié)同,直接在基于原理圖的虛擬原型上進(jìn)行處理器編程調(diào)試,并進(jìn)行功能驗(yàn)證,通過動(dòng)態(tài)器件如電機(jī)、LED、LCD、開關(guān)等,實(shí)時(shí)看到運(yùn)行后的輸入、輸出的效果。Proteus為我們建立了完備的電子設(shè)計(jì)開發(fā)環(huán)境。6.1.2MedWinMedWin可以用來編寫匯編語言程序并進(jìn)行編譯、產(chǎn)生代碼并裝入仿真器以便于仿真,在輸出文件夾中會(huì)產(chǎn)生hex文件,將該hex文件導(dǎo)入仿真圖的單片機(jī)芯片中即可進(jìn)行仿真。使用時(shí)點(diǎn)擊“項(xiàng)目管理新建項(xiàng)目”就可以建立編程的平臺(tái),然后選擇項(xiàng)目管理中的新建文件就可以建立asm文件,在這個(gè)文件中可以進(jìn)行程序的編寫,程序編寫完畢后可點(diǎn)擊“項(xiàng)目
25、管理編譯匯編”看其是否有錯(cuò),有錯(cuò)時(shí),在下面的窗口會(huì)提示出錯(cuò)的行以及錯(cuò)誤原因。改正無誤后可產(chǎn)生代碼并裝入,將hex文件導(dǎo)入單片機(jī)中即可進(jìn)行仿真6.2仿真過程:通常在仿真過程中會(huì)遇到很大的麻煩。在程序匯編通過之后程序不一定是正確的,比如我剛開始進(jìn)行仿真時(shí)數(shù)碼管并不進(jìn)行顯示,結(jié)果發(fā)現(xiàn)應(yīng)該是置零的置一了,應(yīng)該置一的置零了。改正之后發(fā)現(xiàn)雖然走時(shí)程序正常了,但是調(diào)時(shí)中出現(xiàn)了大量的問題,更不要說鬧鈴和定時(shí)程序了。在整個(gè)畢業(yè)設(shè)計(jì)的過程中程序的修改貫穿始終,在修改的過程中一定要條理清晰,認(rèn)真細(xì)心。6.2.1仿真圖的繪制在使用Proteus進(jìn)行仿真時(shí),仿真圖不用畫出數(shù)碼管驅(qū)動(dòng)程序,其他部分與設(shè)計(jì)的硬件圖相仿。繪制
26、結(jié)果如下: 圖6.2.1 仿真圖6.2.2功能的實(shí)現(xiàn)在繪制仿真圖之后,要向單片機(jī)裝入程序,從而使單片機(jī)開始工作并帶動(dòng)整個(gè)電路工作,裝入過程為:點(diǎn)擊單片機(jī),選擇所編譯程序的輸出hex文件,確定即可。此時(shí)單片機(jī)會(huì)按照程序所設(shè)定的功能進(jìn)行工作,在仿真過程中會(huì)遇到各種問題,在第九章會(huì)具體講到。這里列出仿真結(jié)果:(1)走時(shí)仿真:圖6.2.2 走時(shí)狀態(tài)下的仿真結(jié)果(2)鬧鐘設(shè)定的仿真:圖6.2.3 鬧鈴仿真結(jié)果可見所定鬧鐘時(shí)間為10點(diǎn)15分。(3)定時(shí)鐘倒計(jì)時(shí)的仿真:圖6.2.3 倒計(jì)時(shí)仿真可見,倒計(jì)時(shí)進(jìn)行到3分3秒。7 實(shí)際電路的實(shí)現(xiàn)在仿真無誤后,開始進(jìn)行實(shí)際電路的搭接。搭接時(shí)先不用芯片實(shí)物,而用仿真器
27、替代。按照電路圖,先把數(shù)碼管按照對(duì)應(yīng)的管腳連接起來,然后接驅(qū)動(dòng)電路等,接好之后把程序裝入仿真器,通電運(yùn)行,再對(duì)電路進(jìn)行調(diào)試。在根據(jù)電路圖搭接好各個(gè)器件后,一個(gè)很重要的問題就是檢查各器件是否完全工作。下面介紹檢驗(yàn)方法: 導(dǎo)線看似不用太費(fèi)力氣去檢驗(yàn),但一個(gè)成功的實(shí)驗(yàn)需要前期充分的準(zhǔn)備,比如在我的實(shí)驗(yàn)過程中,由于導(dǎo)線繁多,而且使用舊導(dǎo)線進(jìn)行實(shí)際電路的連接,所以就出現(xiàn)了導(dǎo)線不通的情況,因此驗(yàn)證過程中不要放過小問題。數(shù)碼管的檢測(cè):拆除89C51芯片,先分別給芯片P2對(duì)應(yīng)的導(dǎo)線加低電平,再分別給P1對(duì)應(yīng)的導(dǎo)線加高電平,使每個(gè)數(shù)碼管的每一筆段都能亮。若出錯(cuò),先檢查電路的連接再換一下器件試試,對(duì)于此電路問題出
28、在7407的連接方法的問題比較大。這部分需要重點(diǎn)驗(yàn)證。隨后,按下復(fù)位鍵看9引腳是否為低電平,是則沒有錯(cuò)誤。通過以上工作,硬件仿真無誤后,可以用單片機(jī)芯片代替仿真器進(jìn)行最后的實(shí)現(xiàn)工作,用easyPRO80B編程器將程序下載到芯片中,具體步驟為:先進(jìn)行擦除,然后查空,查空無誤后打開所需的hex文件,然后進(jìn)行編程、校驗(yàn)。這時(shí)程序載入了芯片中,就可以實(shí)現(xiàn)相應(yīng)的功能了。實(shí)驗(yàn)結(jié)果如下:圖7.1 走時(shí)顯示實(shí)物圖這里要說的是,軟件仿真成功和硬件電路實(shí)現(xiàn)之間是有很大差別的,在做軟件仿真時(shí),沒有驅(qū)動(dòng)的問題,沒有芯片和器件質(zhì)量的問題,也沒有電線導(dǎo)電的問題,沒有工作條件的問題,但在實(shí)際電路中這些因素都要考慮。常常會(huì)出
29、現(xiàn)這種情況:軟件仿真實(shí)現(xiàn)了,但實(shí)際電路沒有任何功能。在電子鐘硬件實(shí)現(xiàn)過程中,就出現(xiàn)了很多問題,有引腳接錯(cuò)的問題,也有插線松動(dòng)或電線不通的問題,這些問題都是需要耐心和細(xì)心認(rèn)真解決的。8 日歷功能的實(shí)現(xiàn)在加入其它功能時(shí),我想到了很多可能達(dá)到的功能,比如加入備用電源、夜間亮燈功能、多個(gè)鬧鈴的功能、顯示日期功能等。然后我進(jìn)行了理論上的驗(yàn)證,加入備用電源可避免因停電而造成的電路全部失靈20,21,但受到實(shí)驗(yàn)條件的影響未選擇對(duì)這個(gè)功能進(jìn)行實(shí)現(xiàn)。夜間亮燈功能對(duì)程序要求不高,但在電路中要加入傳感器,把光的照度測(cè)出來后,低于某一值時(shí),燈亮,從而使得夜間時(shí)也能看到時(shí)間顯示,雖然程序簡(jiǎn)單,但由于要加入傳感器,容易受
30、到干擾,各項(xiàng)工作投入時(shí)間較長,考慮到時(shí)間有限,也沒有采納這個(gè)方案。鬧鈴的功能和日期的功能的實(shí)現(xiàn)都是比 較容易的,做了權(quán)衡之后我選擇了后者,因?yàn)槿掌诠δ苤饕婕八惴ê统绦虻奶D(zhuǎn)、調(diào)用等,更能加深對(duì)單片機(jī)的認(rèn)識(shí)和理解。在設(shè)計(jì)的開始階段,我主要考慮了日期的邏輯算法19。首先,要考慮年份是不是閏年,閏年的判斷方法是:將年份除以100,若能整除,則將年份除以400,若還能整除,則為閏年,若不能,則為平年;若不能被100整除,則判斷是否能被4整除,若能,則為閏年,若不能則為平年。只有2月與平、閏年相關(guān),因此在閏年和平年的子程序中,要判斷是不是2月,若是則在相應(yīng)的年中進(jìn)行日期的增加,若不是則轉(zhuǎn)入平時(shí)的月份。
31、其中1、3、5、7、8、10、12月是每月31天,4、6、9、11月為每月30天。在電路方面有兩種方法:(1)可以增加6個(gè)數(shù)碼管用來顯示日期,但這樣顯然電路更復(fù)雜;(2)用按鍵的輸入決定6個(gè)數(shù)碼管顯示日期還是時(shí)間,這種情況下,只需加一個(gè)按鍵即可,不用增加數(shù)碼管。最終的按鍵控制為:按下1鍵時(shí),顯示日期,并且用4、5、6鍵分別調(diào)整年、月、日;按下2鍵時(shí),進(jìn)行走時(shí)和時(shí)間調(diào)整;3鍵位鬧鈴鍵;4鍵為定時(shí)鍵。這樣實(shí)現(xiàn)功能的好處是:(1)電路簡(jiǎn)單,若同時(shí)顯示日期和時(shí)間,則需要的引腳很多,需要加入譯碼器對(duì)引腳進(jìn)行擴(kuò)展。采用按鍵決定顯示時(shí)間或日期的方法避免了這個(gè)問題;(2)節(jié)約空間,節(jié)約成本。程序思路如下:圖8
32、.1 擴(kuò)展部分思路由于在前面的工作中積累了較多的經(jīng)驗(yàn),對(duì)匯編語言已經(jīng)相當(dāng)熟悉,因此在實(shí)現(xiàn)日歷功能時(shí),程序設(shè)計(jì)顯得相當(dāng)容易。按鍵如圖8.2所示,按鍵功能如下:按下按鍵1時(shí),顯示日期并且允許對(duì)日期進(jìn)行調(diào)整;按下按鍵2時(shí),顯示時(shí)間并且允許對(duì)時(shí)間進(jìn)行調(diào)整;按下按鍵3時(shí),顯示鬧鐘所設(shè)定的時(shí)間并允許通過5、6鍵對(duì)鬧鐘進(jìn)行設(shè)定;按下按鍵4時(shí),顯示定時(shí)功能所設(shè)定的時(shí)間并允許對(duì)其進(jìn)行設(shè)定,再次按下時(shí),開始倒計(jì)時(shí)過程,并進(jìn)行倒計(jì)時(shí)過程的顯示,在顯示日期時(shí),該鍵可對(duì)年份進(jìn)行調(diào)整;按鍵5、6可對(duì)時(shí)間顯示時(shí)的時(shí)、分或日期顯示時(shí)的月、日進(jìn)行調(diào)整。按鍵形式:圖8.2 按鍵圖示實(shí)驗(yàn)成果如下:圖8.2 日期顯示實(shí)物圖圖中顯示的
33、日期為10年5月27日。9 電子鐘設(shè)計(jì)中遇到的問題及其解決方法在電子鐘設(shè)計(jì)中程序比較長,遇到了各種各樣的問題,比如跳轉(zhuǎn)距離過長出現(xiàn)語法錯(cuò)誤。因此修改程序的時(shí)間很長,有語法錯(cuò)誤,也有仿真時(shí)功能無法實(shí)現(xiàn)的問題,在此不能一一說明,只能對(duì)個(gè)別問題加以闡述。由于在走時(shí)調(diào)整、鬧鈴調(diào)整及定時(shí)設(shè)定時(shí),按下鍵時(shí)每0.2秒步進(jìn)1,這就需要每0.2秒對(duì)按鍵輸入進(jìn)行一次掃描,因此開始時(shí),我用的是延遲0.2秒再返回按鍵掃描程序的方法,但是可以想到,進(jìn)行單純的延遲時(shí),不會(huì)有顯示,在仿真時(shí)功能沒有實(shí)現(xiàn)。后來我采用的是反復(fù)調(diào)用若干次顯示程序以實(shí)現(xiàn)延遲,較好地解決了這個(gè)問題。雖然現(xiàn)在回過頭來發(fā)現(xiàn)這個(gè)問題很簡(jiǎn)單,但當(dāng)時(shí)是百思不得
34、其解。我從中學(xué)到:任何簡(jiǎn)單的事情都會(huì)有出錯(cuò)的可能,有些時(shí)候人的思路中的一些錯(cuò)誤是自己難以發(fā)現(xiàn)的,在工作和生活中要多對(duì)自己的想法提出質(zhì)疑。不光是這種明顯的問題很多,有些細(xì)微的問題也一樣出現(xiàn)了,但解決起來并不容易。在最后的硬件實(shí)現(xiàn)階段發(fā)現(xiàn)蜂鳴器不響,此時(shí)連接方法是蜂鳴器直接連接在了P0.7引腳。考慮到單片機(jī)的輸出電流比較小,雖然P0.7引腳的電平已經(jīng)達(dá)到2V以上,也無法驅(qū)動(dòng)蜂鳴器。于是我設(shè)想加上驅(qū)動(dòng)電路。作此修改之后,蜂鳴器發(fā)出響聲,但是又遇到了新的問題:蜂鳴器無法停止響聲!看上去這個(gè)問題很簡(jiǎn)單,只要有停止鬧鈴的按鍵輸入時(shí),在程序中加一句將P0.7置零的語句就可以了。但事實(shí)并不是這么簡(jiǎn)單。通過苦思
35、冥想,發(fā)現(xiàn)在主程序中,對(duì)“定時(shí)時(shí)間是否已到”是不斷進(jìn)行掃描的,而倒計(jì)時(shí)是在中斷服務(wù)子程序中進(jìn)行的,當(dāng)?shù)褂?jì)時(shí)為0分0秒時(shí),主程序判斷出來后會(huì)不停地調(diào)用聲音程序:MAIN:JNB P3.0,DATETZ;按下0鍵時(shí),顯示日期并可對(duì)日期進(jìn)行調(diào)整JNB P3.1,ZSTZ1;按下1鍵時(shí),顯示時(shí)間,并可調(diào)時(shí)JNB P3.2,NLTZ1;按下2鍵進(jìn)行鬧鈴設(shè)置JNB P3.3,DSTZ;按下3鍵進(jìn)行定時(shí)設(shè)置ACALL DISP;MOV A,HOUR;SUBB A,38H;JZ FEN;AJMP DSPD2;FEN:MOV A,MINUTE;SUBB A,37H;JZ SHENGYIN1;DSPD2:MOV
36、A,R4;JZ S_PD;AJMP MAIN;S_PD:MOV A,R3;JZ SHENGYIN1;AJMP MAIN;蜂鳴器響聲不停是不可避免的,因?yàn)镽3和R4是在中斷程序中變化的,隨著時(shí)間的推移必然都為0,在此情況下即使按下了聲音停止鍵,由于程序跳回主程序,又會(huì)不斷地調(diào)用聲音程序。基于這個(gè)想法要達(dá)到的效果是:按下聲 音停止鍵之后,不再進(jìn)行定時(shí)時(shí)間是否為0的判斷。要實(shí)現(xiàn)這個(gè)想法就要引入新的參數(shù),這里,試用3CH作為判斷的因子。當(dāng)點(diǎn)擊定時(shí)開始后,將3CH賦值為1,在主程序中判斷3CH如果不為0,就進(jìn)行倒計(jì)時(shí)是否到0的判斷。蜂鳴器響后,點(diǎn)擊3鍵時(shí),將3CH賦值為0,這樣在主程序中就不進(jìn)行這個(gè)判斷
37、,因此蜂鳴器就不會(huì)響。當(dāng)然這個(gè)解決問題的過程不是一下子解決的在這個(gè)過程中,我進(jìn)行了相當(dāng)多的嘗試和摸索,最終找到了這個(gè)解決途徑。這個(gè)問題解決后,發(fā)現(xiàn)鬧鈴也有相同的問題,聲音會(huì)持續(xù)一分鐘,在此期間即使按下停止鍵,聲音也不會(huì)停。發(fā)現(xiàn)這個(gè)問題后,可以看出,這個(gè)問題解決起來比上個(gè)問題要簡(jiǎn)單得多,因?yàn)轸[鐘程序沒有涉及到中斷服務(wù)子程序。因此考慮按下停止鍵時(shí),修改判斷所用的參數(shù)比如38H,即在clr P0.7的同時(shí)加一句DEC 38H,當(dāng)再進(jìn)行判斷時(shí),蜂鳴器就不會(huì)再響了。結(jié)論本文介紹的是利用AT89C51單片機(jī)設(shè)計(jì)的有調(diào)時(shí)、定時(shí)、鬧鈴功能的電子鐘。并詳細(xì)說明了軟件和硬件設(shè)計(jì)方法及仿真、硬件實(shí)現(xiàn)。在設(shè)計(jì)過程中可
38、以看出,匯編語言有著其獨(dú)特的魅力,它簡(jiǎn)單易學(xué),語法錯(cuò)誤容易糾正;用單片機(jī)實(shí)現(xiàn)電子鐘的設(shè)計(jì)是比較方便和易于實(shí)現(xiàn)的。通過電子鐘的設(shè)計(jì)和制作,加深了對(duì)單片機(jī)的理解,能夠更熟練地應(yīng)用單片機(jī)實(shí)現(xiàn)預(yù)期的功能,對(duì)今后的工作有很大的幫助。電子鐘各項(xiàng)功能的實(shí)現(xiàn),為自動(dòng)控制的實(shí)現(xiàn)打下了理論基礎(chǔ),獲得了實(shí)現(xiàn)方法。當(dāng)然,該電子鐘還有很多不足之處,比如鬧鐘不能關(guān)閉,且只能定一個(gè)鬧鐘。在今后的工作中還要對(duì)此加以研究,盡量實(shí)現(xiàn)更多的功能。在今后的其他工作中,也可以把這次設(shè)計(jì)中的收獲運(yùn)用進(jìn)去,這是我此次畢業(yè)設(shè)計(jì)得到的最大財(cái)富。參考文獻(xiàn)1 H.G.Cragon.The Elements of Single-Chip Micro
39、computer Architecture.Computer,1980 (13)27412 潘永雄.新編單片機(jī)原理與應(yīng)用. 第2版.西安:西安電子科技大學(xué)出版社20063 何立民.我國單片機(jī)應(yīng)用技術(shù)發(fā)展趨勢(shì)及展望.自動(dòng)化與儀表,1992(1):154 向繼文,廖立新.基于AT89S51 的電子鐘系統(tǒng)設(shè)計(jì).機(jī)電產(chǎn)品開發(fā)與創(chuàng)新,2007(2):62635 張靜.基于單片機(jī)數(shù)字鐘的設(shè)計(jì).辦公自動(dòng)化雜志,2006(89):456 樊金榮,謝智文.數(shù)字倒計(jì)時(shí)秒表的設(shè)計(jì)與實(shí)現(xiàn).中南民族大學(xué)計(jì)算機(jī)科學(xué)學(xué)院院報(bào),2005(1): 6263 7 魏立峰,王寶興.單片機(jī)原理與應(yīng)用技術(shù)M.北京:北京大學(xué)出版社,20
40、06.8 馬立國. AD7888與AT89C51單片機(jī)接口應(yīng)用技術(shù).集成電路通訊,2007(25):33349 10 Andy Morell. Countdown Timer.Electronics,2003(29):32111 Mark E.Buccini.Digital countdown timer never needs battery replacement. END,2005 (11):7980 12 周興華.一款電路極簡(jiǎn)的單片機(jī)電子鐘設(shè)計(jì)詳解.電子制作,2003(10):3113 郭長立.DDJ-型多功能單片機(jī)計(jì)時(shí)器的改進(jìn)設(shè)計(jì).儀表技術(shù),2004(4):293014 何宏森.多功
41、能智能電子鐘的設(shè)計(jì).兵工自動(dòng)化,2005(4):828415 張景元陳平.一種基于單片機(jī)的多功能數(shù)字鐘. 微計(jì)算機(jī)信息( 嵌入式與SOC)2005 (21):13616 劉盛雄,周 奇,韋云隆.基于單片機(jī)的數(shù)字式電子鐘的設(shè)計(jì)與制作.重 慶工學(xué)院學(xué)報(bào),2006(8):91 17 盧超.基于單片機(jī)的數(shù)字電子鐘的設(shè)計(jì)與制作.大慶師范學(xué)院學(xué)報(bào),2006(5):4918 劉建英.基于單片機(jī)的時(shí)鐘設(shè)計(jì).內(nèi)蒙古石油化工,2005(1):1319 何宏森.多功能智能電子鐘的設(shè)計(jì).兵工自動(dòng)化,2005(4):8320 蔡希彪,曹洪奎,芳琳.單片機(jī)電子時(shí)鐘系統(tǒng)的設(shè)計(jì)與仿真.中國科技信息,2007(4):61632
42、1 Scott Edwards. Crystal-Controlled Oscillator Is Heartbeat of 60-hour Timer. The Nuts and Volts of BASIC Stamps,1996(1):95103致謝時(shí)光荏苒,大學(xué)時(shí)光轉(zhuǎn)眼逝去,在大學(xué)的4年中我不但學(xué)到了知識(shí),還認(rèn)識(shí)了很多值得珍惜的老師和同學(xué)。在即將離校的日子,我更加珍惜這所剩無幾的日子,認(rèn)真地完成了畢業(yè)設(shè)計(jì),在這個(gè)過程中,張存善老師給了我極大的幫助,不僅是知識(shí)上的,更有很多心理上的支持,他引導(dǎo)我在各種雜事比較多的情況下能踏踏實(shí)實(shí)做點(diǎn)屬于自己的工作,讓我學(xué)會(huì)了自主學(xué)習(xí)。畢業(yè)設(shè)計(jì)是大學(xué)生活中
43、最后階段的工作,是真正考驗(yàn)我們能力的一項(xiàng)教學(xué)內(nèi)容,在這個(gè)過程中我認(rèn)真思考,不斷嘗試,收獲了很多在平時(shí)的課堂上收獲不到的東西。畢業(yè)設(shè)計(jì)即將結(jié)束,我會(huì)吸取畢業(yè)設(shè)計(jì)中的經(jīng)驗(yàn)和教訓(xùn),在今后的工作中少走彎路。夏天即將來臨,我們也即將離校,回首過去的日子,大學(xué)的確教給了我們很多東西。此刻,我十分感謝母校、感謝老師們對(duì)我的教誨。雖然有很多不舍,但我依然會(huì)昂首走向新的生活,不辜負(fù)老師的培養(yǎng)。附錄A 整體電路圖圖附A附錄B 完整程序HOU_S BIT P2.0;第一個(gè)數(shù)碼管HOU_G BIT P2.1;第二個(gè)數(shù)碼管MIN_S BIT P2.2;第三個(gè)數(shù)碼管MIN_G BIT P2.3;第四個(gè)數(shù)碼管SEC_S B
44、IT P2.4;第五個(gè)數(shù)碼管SEC_G BIT P2.5;第六個(gè)數(shù)碼管DAY EQU 39H;日期MONTH EQU 3AH;月份YEAR EQU 3BH;年份SECOND EQU 30H;秒MINUTE EQU 31H;分HOUR EQU 32H;時(shí)TIM_1 EQU 33H;TIM_2 EQU 34H;ORG 0000HLJMP CHUSHIORG 000BHLJMP TIMER0ORG 30HCHUSHI:;初始化MOV SECOND,#0;MOV MINUTE,#0;MOV HOUR,#0;時(shí)間的初值為000000MOV DAY,#1;MOV MONTH,#1;MOV YEAR,#1;
45、日期的初值為000000SETB HOU_S;SETB HOU_G;SETB MIN_S;SETB MIN_G;SETB SEC_S;SETB SEC_G;初始狀態(tài)為1,都不顯示MOV R0,#0;MOV R1,#12;鬧鈴初始化MOV R3,#0;MOV R4,#1;存儲(chǔ)定時(shí)時(shí)間,點(diǎn)擊定時(shí)開始后,從所存時(shí)間開始倒計(jì)時(shí)MOV R5,#0;MOV R6,#0;設(shè)定定時(shí)時(shí)間所用寄存器MOV 38H,#12;MOV 37H,#0;存儲(chǔ)所定鬧鈴,以便判斷是否鬧鈴時(shí)間到CLR P0.7;MOV TIM_1,#10;執(zhí)行完后經(jīng)歷0.5秒MOV TIM_2,#2;執(zhí)行完后經(jīng)歷1秒ANL TMOD,#0F0H
46、ORL TMOD,#01H;定時(shí)器0為模式1MOV TH0,#03CHMOV TL0,#0B0H;裝入初值SETB ET0;SETB TR0;SETB EA;允許中斷MAIN:JNB P3.0,DATETZ;按下0鍵時(shí),顯示日期并可對(duì)日期進(jìn)行調(diào)整JNB P3.1,ZSTZ1;按下1鍵時(shí),顯示時(shí)間,并可調(diào)時(shí)JNB P3.2,NLTZ1;按下2鍵進(jìn)行鬧鈴設(shè)置JNB P3.3,DSTZ;按下3鍵進(jìn)行定時(shí)設(shè)置ACALL DISP;調(diào)用顯示程序FMQPD:;判斷定時(shí)是否到零、鬧鈴時(shí)間是否已到MOV A,HOUR;SUBB A,38H;JZ FEN;判斷時(shí)是否到鬧鈴所定時(shí)間,若到,則對(duì)分進(jìn)行判斷,若不到,
47、則對(duì)定時(shí)進(jìn)行判斷 AJMP DSPDKQFEN:MOV A,MINUTE;SUBB A,37H;JZ SHENGYIN1;時(shí)和分都到鬧鈴時(shí)間則蜂鳴器響DSPDKQ:;判斷是否應(yīng)該進(jìn)行定時(shí)時(shí)間的判斷MOV A,3CH;3CH是引入的判斷因子,當(dāng)其為0時(shí)不對(duì)定時(shí)時(shí)間是否到0進(jìn)行判斷,從而不開啟蜂鳴器JNZ DSPD2;當(dāng)3CH不是0時(shí),跳轉(zhuǎn)到定時(shí)判斷程序 AJMP MAINDSPD2:MOV A,R4;JZ S_PD;AJMP MAIN;S_PD:MOV A,R3;JZ SHENGYIN1;AJMP MAIN;DSTZ:AJMP DSTZ1;DATETZ:AJMP DATETZ1;SHENGYIN
48、1:MOV 3CH,#1SETB P0.7AJMP MAINZSTZ1:MOV 35H,#60;MOV 36H,#10;ZSTZ2:ACALL DISP;DJNZ 35H,ZSTZ2;JNB P3.0,DATETZ;按下0鍵時(shí),顯示日期并可對(duì)日期進(jìn)行調(diào)整JNB P3.1,ZSTZ1;按下1鍵時(shí),顯示時(shí)間,并可調(diào)時(shí)JNB P3.2,NLTZ1;按下2鍵進(jìn)行鬧鈴設(shè)置 JNB P3.3,DSTZ;按下3鍵進(jìn)行定時(shí)設(shè)置 JNB P3.4,H_T;JNB P3.5,M_T;DJNZ 36H,ZSTZ2;AJMP MAIN;H_T:ACALL DISP;INC HOUR;MOV A,HOUR;CJNE A
49、,#24,ZSTZ1;MOV HOUR,#0;AJMP ZSTZ1;M_T:ACALL DISP;INC MINUTE;MOV A,MINUTE;CJNE A,#60,ZSTZ1;MOV MINUTE,#0;AJMP ZSTZ1;NLTZ1:CLR P0.7;DEC 38HMOV 35H,#100;MOV 36H,#10;NLTZ2:ACALL ONE;ACALL TWO;DJNZ 35H,NLTZ2;JNB P3.0,DATETZ;按下0鍵時(shí),顯示日期并可對(duì)日期進(jìn)行調(diào)整 JNB P3.1,ZSTZ1;按下1鍵時(shí),顯示時(shí)間,并可調(diào)時(shí) JNB P3.2,NLTZ1;按下2鍵進(jìn)行鬧鈴設(shè)置JNB P3.3,DSTZ;按下3鍵進(jìn)行定時(shí)設(shè)置JNB P3.4,NLXS2;JNB P3.5
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游行業(yè)智慧景區(qū)建設(shè)與管理優(yōu)化方案
- 濱湖九年級(jí)期中數(shù)學(xué)試卷
- 初三滬科版數(shù)學(xué)試卷
- 醫(yī)療設(shè)計(jì)院設(shè)備工程師勞動(dòng)合同
- 3D打印公司技術(shù)人才合同范例
- 農(nóng)業(yè)觀測(cè)農(nóng)網(wǎng)施工合同
- 城市綜合體拆遷商業(yè)布局規(guī)劃
- 面包房裝飾施工合同
- 短期工作人員管理辦法
- 企業(yè)制度評(píng)審與優(yōu)化指導(dǎo)
- 七年級(jí)數(shù)學(xué)資料培優(yōu)匯總精華
- 器樂Ⅰ小提琴課程教學(xué)大綱
- 主債權(quán)合同及不動(dòng)產(chǎn)抵押合同(簡(jiǎn)化版本)
- 服裝廠安全生產(chǎn)責(zé)任書
- JGJ202-2010建筑施工工具式腳手架安全技術(shù)規(guī)范
- 液壓爬模系統(tǒng)作業(yè)指導(dǎo)書
- 2018-2019學(xué)年北京市西城區(qū)人教版六年級(jí)上冊(cè)期末測(cè)試數(shù)學(xué)試卷
- SFC15(發(fā)送)和SFC14(接收)組態(tài)步驟
- LX電動(dòng)單梁懸掛說明書
- 旅行社公司章程53410
- 螺桿式制冷壓縮機(jī)操作規(guī)程完整
評(píng)論
0/150
提交評(píng)論