基于單片機(jī)的多功能電子時(shí)鐘設(shè)計(jì)_secret90068_第1頁(yè)
基于單片機(jī)的多功能電子時(shí)鐘設(shè)計(jì)_secret90068_第2頁(yè)
基于單片機(jī)的多功能電子時(shí)鐘設(shè)計(jì)_secret90068_第3頁(yè)
基于單片機(jī)的多功能電子時(shí)鐘設(shè)計(jì)_secret90068_第4頁(yè)
基于單片機(jī)的多功能電子時(shí)鐘設(shè)計(jì)_secret90068_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、機(jī) 電 工 程 系課 程 設(shè) 計(jì) 報(bào) 告題目: 數(shù)字時(shí)鐘課程設(shè)計(jì) 專 業(yè): 通信技術(shù) 班 級(jí): 07通信 學(xué) 號(hào): 0706090111 姓 名: 指導(dǎo)老師: 時(shí) 間:2010年1月10日目錄一、 設(shè)計(jì)目的、設(shè)計(jì)題目3二、 設(shè)計(jì)任務(wù)、功能描述.3三、 硬件原理分析.3四、 軟件設(shè)計(jì).71 地址空間分配.72 軟件整體架構(gòu)分析.82.1總體架構(gòu)說明:設(shè)計(jì)思路.82.2主程序功能描述及分析、主程序流程圖.92.3各子程序功能描述及子程序入口出口、各程序流程圖.9五、 程序清單.12一、 設(shè)計(jì)題目:數(shù)字時(shí)鐘。設(shè)計(jì)的時(shí)鐘能夠?qū)崿F(xiàn)日常的時(shí)鐘顯示,同時(shí)具有時(shí)鐘調(diào)整、兩個(gè)鬧鐘及正點(diǎn)報(bào)時(shí)功能。二、 設(shè)計(jì)任務(wù)、

2、功能描述整體設(shè)計(jì)任務(wù):本電子時(shí)鐘設(shè)計(jì)首要的工作是結(jié)合以往所學(xué)的單片機(jī)程序編寫理論和編寫規(guī)則來編寫電子時(shí)鐘的軟件部分,編寫時(shí)要結(jié)合所配的AT89S52芯片的管腳功能和其他硬件電路,該部分運(yùn)用keil單片機(jī)軟件來完成。在編寫完軟件并檢測(cè)完正確后再編譯成.hex載入用Isis仿真軟件布好的仿真硬件中運(yùn)行檢測(cè)程序是否正確,并調(diào)試。待這一切工作做好后再利用已焊接好的小系統(tǒng)板硬件電路來實(shí)踐實(shí)現(xiàn)軟件功能與硬件的結(jié)合。此步驟要用progisp單片機(jī)燒寫軟件來實(shí)現(xiàn)。在硬件設(shè)計(jì)上:(1)用四個(gè)電位按鍵來實(shí)現(xiàn)對(duì)電子時(shí)鐘的調(diào)試工作,當(dāng)按第一下總控鍵時(shí)進(jìn)入時(shí)鐘的調(diào)整狀態(tài),有兩個(gè)電位按鍵分別來調(diào)整時(shí)鐘的分和時(shí),在調(diào)整時(shí)秒

3、正常運(yùn)行;當(dāng)按第二下總控鍵時(shí)時(shí)鐘進(jìn)入鬧鐘一設(shè)置,有兩個(gè)電位按鍵分別來調(diào)整時(shí)鐘的分和時(shí)的設(shè)定,另外有一個(gè)時(shí)鐘控鍵來實(shí)現(xiàn)鬧鐘是否開啟;當(dāng)按第三下總控鍵時(shí)時(shí)鐘進(jìn)入鬧鐘二設(shè)置,其余操作同鬧鐘一設(shè)置操作,當(dāng)按第四下總控鍵時(shí)時(shí)鐘退出調(diào)整模式進(jìn)入正常時(shí)鐘走勢(shì)。(2)用兩個(gè)四位數(shù)碼管來實(shí)現(xiàn)設(shè)計(jì)的顯示部分,其演示模式是: 時(shí)時(shí)-分分-秒秒 該數(shù)碼管組合的功能管腳是八個(gè)位選擇連接芯片的p2引腳,八個(gè)顯示管位并聯(lián)再接入到芯片p0引腳。從而在功能上區(qū)分開,實(shí)現(xiàn)數(shù)碼管的顯示功能。 (3)用一個(gè)led燈和電阻組成的簡(jiǎn)易電路結(jié)合設(shè)計(jì)來實(shí)現(xiàn)正點(diǎn)報(bào)時(shí)的功能,當(dāng)時(shí)鐘走到正點(diǎn)時(shí),該led燈便能夠閃爍五秒剛好是五下,之后進(jìn)入暗的狀態(tài)

4、,等到下一個(gè)整點(diǎn)到來。 (4)用一個(gè)喇叭和三極管等配件組成一個(gè)鬧鐘電路,再與芯片的p1.0引腳連接。當(dāng)時(shí)鐘到設(shè)定的報(bào)時(shí)點(diǎn)時(shí)便會(huì)發(fā)出“嘟嘟嘟嘟.的聲音來實(shí)現(xiàn)鬧鐘功能。 (5)用一個(gè)按鍵和其他部件組成的復(fù)位電路與芯片連接來實(shí)現(xiàn)整個(gè)程序及硬件的重新復(fù)位功能。三、 硬件原理分析電路設(shè)計(jì)分析電路原理設(shè)計(jì)是基于小系統(tǒng)包括電源電路、復(fù)位電路、按鍵電路、時(shí)鐘電路、數(shù)碼管顯示驅(qū)動(dòng)電路、輸出控制電路。電源部分是用電池來提供的3v-5v,晶體振蕩器采用的是12MHz的石英晶體振蕩器。總體硬件設(shè)計(jì)框圖如下:主 控制器AT89S52系列單片機(jī)芯片電源復(fù)位電路按鍵電路時(shí)鐘振蕩電路七段數(shù)碼管數(shù)碼管顯示驅(qū)動(dòng)電路輸出控制電路1

5、.1復(fù)位電路 本次設(shè)計(jì)采用按鍵電平復(fù)位,按鍵電平復(fù)位相當(dāng)于按復(fù)位鍵后,復(fù)位端通過電阻與Vcc電源接通;1.2振蕩器和時(shí)鐘電路設(shè)計(jì)1.21振蕩器和時(shí)鐘電路工作原理 80C51系列單片機(jī)內(nèi)部有一個(gè)高增益反相放大器,用于構(gòu)成振蕩器,但要形成時(shí)鐘,外部還需附加電路。XTAL1引腳為反相放大器和時(shí)鐘發(fā)生電路的輸入端,XTAL2引腳為反相放大器的輸出端。片內(nèi)時(shí)鐘發(fā)生器實(shí)質(zhì)是個(gè)2分頻的觸發(fā)其輸入來自振蕩器的fosc,輸出為2相時(shí)鐘信號(hào),即節(jié)拍信號(hào)P1、P2,器頻率為fosc2。2個(gè)節(jié)拍為1個(gè)狀態(tài)時(shí)鐘S。狀態(tài)時(shí)鐘再3分頻后為ALE信號(hào),其頻率為fosc6,狀態(tài)時(shí)鐘6分頻后為機(jī)器周期信號(hào),器頻率為fosc12。

6、特殊功能寄存器PCON的PD位可以控制振蕩器的工作,當(dāng)PD=0時(shí),振蕩器停止工作,單片機(jī)進(jìn)入低功耗工作狀態(tài),復(fù)位后,PD=0,振蕩器正常工作。1.22 本次設(shè)計(jì)采用常用的內(nèi)部時(shí)鐘方式接法:通過在引腳XTAL1和XTAL2兩端跨接晶體或陶瓷諧振器,再利用芯片內(nèi)部的振蕩電路,就構(gòu)成了穩(wěn)定的自激振蕩器,其發(fā)出的脈沖直接送入內(nèi)部時(shí)鐘電路,如圖所示,外接晶振時(shí),C5和C6的值通常選擇為20-30pf。C5、C6對(duì)頻率有微調(diào)作用,影響振蕩的穩(wěn)定性和起振速度。所采用的晶體或陶瓷諧振器得頻率選擇0-2433MHz。為了減小寄生電容,更好的保證振蕩器穩(wěn)定、可靠的工作,諧振器和電容贏盡可能與單片機(jī)芯片靠近安裝。1

7、.3電源 因?yàn)樵撾娐匪桦妷簽?-5v,可直接用電池供應(yīng)或也可以用直流電源供應(yīng),但需經(jīng)過變壓才行。1.4數(shù)碼管顯示電路 采用LED共陽極數(shù)碼管的發(fā)光二極管接到高電平(電壓為5V),用LED動(dòng)態(tài)掃描顯示方式,在單片機(jī)電路里,芯片的驅(qū)動(dòng)電流很小,一般為微安級(jí)別的,要通過三極管(可驅(qū)動(dòng)電流為毫安級(jí)別,甚至更大)來驅(qū)動(dòng)LED(正常工作電流為幾十毫安)發(fā)光,本設(shè)計(jì)由P2端口掃描數(shù)碼管的選通,P0口送數(shù)據(jù)顯示。1.5按鍵電路S1按鍵接在P3.0口,用于切換正常走時(shí)、調(diào)時(shí)間、設(shè)定鬧鐘;S2按鍵接在P3.1口,用于調(diào)整時(shí)鐘分加一和調(diào)鬧鐘時(shí)間分加一的功能;S3按鍵接在P3.2口,用于調(diào)整時(shí)鐘時(shí)加一和調(diào)鬧鐘時(shí)加一

8、的功能;S4按鍵接在P3.3口,用于設(shè)定是否開啟鬧鐘。1.6輸出控制電路 在P1.1和P1.0端口分別接一個(gè)發(fā)光二極管,用于整點(diǎn)報(bào)時(shí),和一個(gè)蜂鳴器,用于響鬧鈴。1.7整體布局圖四、 軟件設(shè)計(jì)分析1、地址空間及端口分配30h37h地址空間分別分配給led1、led2、led3、led7、led4、led8、led5、led6.用于數(shù)碼管顯示。38h地址空間分配給gn,定義38h空間為按鍵次數(shù)讀取的緩存空間。3bh地址空間分配給nk1,定義3bh空間是鬧鐘開啟開關(guān)按鍵次數(shù)讀取緩存空間。39h地址空間分配給nao1f,用于存儲(chǔ)調(diào)整鬧鐘一分加一按鍵次數(shù)讀取緩存。3ah地址空間分配給nao1s,用于存儲(chǔ)

9、調(diào)整鬧鐘一時(shí)加一按鍵次數(shù)讀取緩存。3dh地址空間分配給nao2f,用于存儲(chǔ)調(diào)整鬧鐘二分加一按鍵次數(shù)讀取緩存。3eh地址空間分配給nao2s,用于存儲(chǔ)調(diào)整鬧鐘二時(shí)加一按鍵次數(shù)讀取緩存。50h地址空間用于存放50ms中斷寄存。51h地址空間用與存放秒的十位和個(gè)位。52h地址空間用與存放分的十位和個(gè)位。53h地址空間用與存放時(shí)的十位和個(gè)位。p1.1端口分配給zdled ,定義燈接到p1.1.利用setb和clr zdled控制燈的亮暗起到整點(diǎn)報(bào)時(shí)顯示作用。p1.0 端口分配給nb,定義蜂鳴器接到p1.0 利來實(shí)現(xiàn)鬧腫p0端口分配給數(shù)碼管顯示控制p2端口分配給數(shù)碼管選擇顯示控制。2、總體架構(gòu)說明該時(shí)鐘

10、程序設(shè)計(jì)思路如下:(1)、在程序頭將設(shè)計(jì)中的一些固定空間進(jìn)行分配并注釋。(2)、初始化程序,如設(shè)定時(shí)鐘初始顯示005956 以便一開始就能進(jìn)入整點(diǎn)報(bào)時(shí)狀態(tài),顯示該功能;設(shè)定使用定時(shí)器1;將一些未到時(shí)鐘設(shè)計(jì)功能的功能端口關(guān)閉等。(3)開始主程序進(jìn)行程序掃描,先掃描拆字子程序,將分配好的時(shí)分秒等高地位的數(shù)字調(diào)入到顯示子程序中。顯示子程序通過分配的空間對(duì)應(yīng)口將拆字子程序的內(nèi)容在七段數(shù)碼管上顯示相應(yīng)的時(shí)分秒,再調(diào)用走時(shí)程序使時(shí)鐘進(jìn)行讀秒等工作。進(jìn)入按鍵掃描,判斷按鍵是否有變動(dòng),若有就根據(jù)設(shè)計(jì)程序?qū)ο鄳?yīng)的按鍵按入次數(shù)而進(jìn)行實(shí)現(xiàn)相應(yīng)的功能。如進(jìn)入時(shí)間調(diào)整、鬧鐘一設(shè)置、鬧鐘開啟與否等。進(jìn)入鬧鐘一、二的判斷,

11、在時(shí)分上與設(shè)置的鬧鈴時(shí)間吻合的話就做相對(duì)應(yīng)的判斷,再依據(jù)是否有開啟鬧鐘而進(jìn)行響鈴與否,如果有響鈴則設(shè)置其一直響鈴知道有人為按取消按鍵取消鬧鈴。進(jìn)入整點(diǎn)報(bào)時(shí)掃描,判斷是否在時(shí)分上都進(jìn)入了整點(diǎn),如果是就報(bào)時(shí)顯示燈閃爍五下(5s),然后就退出整點(diǎn)報(bào)時(shí),等到下一個(gè)整點(diǎn)的到來。最后返回主程序頭重新依次掃描。顯示過程設(shè)有消隱,按鍵設(shè)有去斗。(4)、子程序部分。在主程序的調(diào)用下依據(jù)不同的子程序工能而編寫子程序,有多級(jí)嵌套。這些子程序包括顯示子程序、拆字子程序、延時(shí)子程序、走時(shí)間子程序、整點(diǎn)報(bào)時(shí)子程序、按鍵處理子程序、調(diào)時(shí)間子程序、鬧鐘設(shè)置子程序、鬧鐘子程序、鬧鐘開啟子程序。3、各子程序功能及出入口地址(1)

12、各子程序功能: 顯示子程序:將拆分好的高低位時(shí)分秒拆分碼放入相對(duì)應(yīng)的數(shù)碼管,調(diào)用tab選通相應(yīng)的七段數(shù)碼顯示時(shí)分秒當(dāng)前數(shù)字。 拆字子程序:將空間51h、52h、53h內(nèi)的秒時(shí)分拆成高低字節(jié)分配到,30h、31h、33h、34h、36h、37h實(shí)現(xiàn)時(shí)分秒的顯示。 延時(shí)子程序:該子程序是為了實(shí)現(xiàn)八個(gè)七段數(shù)碼管顯示的順序顯示選通時(shí)間,2ms的顯示時(shí)間頻率是的顯示效果穩(wěn)定,同時(shí)作為按鍵開關(guān)掃描判斷去抖走時(shí)間子程序:該程序功能是使得秒程序走動(dòng),走到59后進(jìn)位分,后變00從新開始計(jì)時(shí),分走到59后進(jìn)位時(shí),分從新開始00計(jì)時(shí),時(shí)走到23,分走到59,秒走到59后進(jìn)入從新日期周期計(jì)時(shí)。整點(diǎn)報(bào)時(shí)子程序:在達(dá)到整

13、點(diǎn)時(shí)該程序的功能實(shí)現(xiàn)報(bào)時(shí),報(bào)時(shí)以led燈閃爍顯示為報(bào)時(shí)信號(hào)。按鍵處理子程序:該程序進(jìn)行按鍵處理的功能判斷分別是有調(diào)試按鍵處理,鬧鐘設(shè)置按鍵處理,鬧鐘開啟與否按鍵處理。調(diào)時(shí)間子程序:該程序功能實(shí)現(xiàn)時(shí)間的調(diào)整。調(diào)鬧鐘子程序:該程序鬧鐘程序設(shè)計(jì)與按鍵結(jié)合實(shí)現(xiàn)鬧鐘設(shè)置調(diào)整的功能。鬧鐘開啟子程序:該功能實(shí)現(xiàn)鬧鐘開啟與否而達(dá)到鬧鐘響鈴功能。4、程序流程圖開始調(diào)用拆字節(jié)子程序調(diào)用延時(shí)顯示時(shí)分秒調(diào)用按鍵子程序調(diào)用鬧鐘1.2判斷鬧鐘調(diào)用鬧鐘子程序調(diào)用整點(diǎn)報(bào)時(shí)子程序結(jié)束,循環(huán)子程序Led1r0tabdptr查表#07r2,顯示控制#0fehr3,秒個(gè)位顯示ar0,a+dptra,查表#0ffhp2消隱ap0,顯示

14、當(dāng)前文字R3a,ap2,選通相應(yīng)數(shù)碼管Inc r0,指向下一位顯示ar3,保存下一位選碼延時(shí)2ms顯示當(dāng)前數(shù)字R2-1=?0拆字子程序YN(一)主程序流程圖(二)顯示子程序顯示鬧鐘二A=?#3顯示鬧鐘二的時(shí)分秒Lcall bcd處理led3,led6顯示顯示鬧鐘一時(shí)分秒顯示鬧鐘一調(diào)用bcd調(diào)用bcdACC、PSW入棧保存Chaizi1.顯示A=?#2retbcd程序retYYN(三)拆字子程序T1.重新賦值Th1#3chTl1.50h,重新賦值,再定時(shí)1sPSW .ACC出棧reti50h-1=?051h=?6052h=?6053h=?24YYYYNNNN(四)走時(shí)間子程序#0FFa,ap1調(diào)

15、用延時(shí)ret#0gngn+1gna P2.0=?1P2.0=?1調(diào)用延時(shí)P2.0=?1a=?4調(diào)時(shí)間程序NYNYYNNY(五)按鍵處理五、 程序清單; 初始化 ; led1 equ 30h ;定義30h = 第8個(gè)數(shù)碼管(最右邊第1個(gè)數(shù)碼管)的顯示內(nèi)容 =LED1=秒的個(gè)位 led2 equ 31h ;定義31h = 第7個(gè)數(shù)碼管顯示內(nèi)容 =LED2=秒的十位 led3 equ 32h ;定義32h = 第6個(gè)數(shù)碼管顯示內(nèi)容 =LED3=時(shí)分秒中間的一個(gè)橫桿 led7 equ 33h ;定義33h = 第5個(gè)數(shù)碼管顯示內(nèi)容 =LED7=分的個(gè)位 led4 equ 34h ;定義34h = 第4

16、個(gè)數(shù)碼管顯示內(nèi)容 =LED4=分的十位 led8 equ 35h ;定義35h = 第3個(gè)數(shù)碼管顯示內(nèi)容 =LED8=時(shí)分秒中間的一個(gè)橫桿 led5 equ 36h ;定義36h = 第2個(gè)數(shù)碼管顯示內(nèi)容 =LED5=時(shí)的個(gè)位 led6 equ 37h ;定義37h = 第1個(gè)數(shù)碼管顯示內(nèi)容 =LED6=時(shí)的十位 gn equ 38h ;定義38h空間為按鍵次數(shù)讀取的緩存空間 bssj equ 3fh ; zdled bit p1.1 ;定義燈接到p1.1.利用setb和clr zdled控制燈的亮暗 nb bit p1.0 ;定義蜂鳴器接到p1.0 利來實(shí)現(xiàn)鬧鈴響 nk1 equ 3bh n

17、ao1f equ 39h nao1s equ 3ah nao2f equ 3dh nao2s equ 3eh org 00h ; 這句話把下面那條指令定位到(燒寫到)00h這個(gè)地址去 sjmp main ;這里是單片機(jī)復(fù)位后運(yùn)行的第一條指令, 這句話使單片機(jī)跳到main那里繼續(xù)執(zhí)行程序 org 001bh ;這句話把下面那條指令定位到(燒寫到)001b這個(gè)地址去. ljmp zoushijian ;這句話是定時(shí)器50毫秒定時(shí)到之后,TH0,TL0記數(shù)到FFFFH時(shí)單片機(jī)自動(dòng)跳到 這里運(yùn)行,我們?cè)侔阉絲oushijian 繼續(xù)執(zhí)行,因?yàn)檫@個(gè)時(shí)候主程序已經(jīng)暫停運(yùn)行,我們稱主程序發(fā)生了中斷,而z

18、uoshijian就是中斷服務(wù)主程序. org 40h ;把主程序main定位到40h這個(gè)地址 main: mov sp,#5FH;設(shè)置堆棧指針,存放進(jìn)入50ms中斷時(shí)的PC值 mov 50h,#01;50h存放定時(shí)器中斷的次數(shù),現(xiàn)在定時(shí)器每50ms中斷一次,所以 ;賦初值20,利用djnz減,減到0時(shí)自然就是1秒到了 mov 51h,#55;51h存放秒的十位和個(gè)位,現(xiàn)在給32h等于十進(jìn)制的50,相當(dāng)于一開始讓 ;第7個(gè),第8個(gè)數(shù)碼管顯示50秒,盡快到達(dá)整點(diǎn),利于調(diào)試整點(diǎn)報(bào)時(shí). mov 52h,#59;52h存放分的十位和個(gè)位,現(xiàn)在給3bh等于十進(jìn)制的59,相當(dāng)于一開始讓 ;第4個(gè),第5個(gè)數(shù)

19、碼管顯示59分,盡快到達(dá)整點(diǎn),利于調(diào)試整點(diǎn)報(bào)時(shí). mov 53h,#00;53h存放小時(shí)的十位和個(gè)位,現(xiàn)在給00h等于十進(jìn)制的00,相當(dāng)于一開始讓 ;第1個(gè),第2個(gè)數(shù)碼管顯示00小時(shí), mov tmod,#10h;使定時(shí)器1工作在工作模式1,即16位定時(shí)器工作模式 mov th1,#3ch;65536us-50000us=15536微秒,剛好是3cb0h,這樣定時(shí)器1每50ms進(jìn)入中斷一次 mov tl1,#0afh setb zdled ; 還沒到整點(diǎn),先讓燈暗 mov a,#0 mov r1,a mov bssj,#10 clr rs0 clr rs1 clr gn clr nao1f c

20、lr nao1s clr nk1 setb nb setb tr1 ;開啟定時(shí)器1,使TH1,TL1不斷加1 setb et1 ;開啟定時(shí)器1中斷,使TH1,TL1加到FFFF時(shí)讓單片機(jī)自動(dòng)跳到001bh去執(zhí)行,如果不 開啟這個(gè)中斷標(biāo)志,那么即使單片機(jī)TH1,TL1記數(shù)到FFFF,單片機(jī)也不會(huì)跳到001bh去的. setb ea ;開啟總中斷; 主程序 ;l5: nop lcall chaizi;把當(dāng)前的時(shí)分秒的值(即53h51h的內(nèi)容)按照十位,個(gè)位拆到35h30h中 lcall display;把拆好的時(shí)分秒的十位,個(gè)位分別顯示到相應(yīng)的數(shù)碼管上面. lcall anjian ;理按鍵 lc

21、all xiang1 ;判斷鬧鐘 lcall xiang2 lcall nk ;設(shè)置鬧鐘是否開 lcall zdbs ;整點(diǎn)報(bào)時(shí) sjmp l5;主循環(huán)結(jié)束,又跳到主循環(huán)開始處;顯示子程序,把拆好的時(shí)分秒的十位,個(gè)位分別顯示到相應(yīng)的數(shù)碼管上面 ;入口地址:r2、r3;出口地址:p0、p2display:mov r0,#led1;從LED1開始顯示,即從第8個(gè)數(shù)碼管秒的個(gè)位開始 mov dptr,#tab mov r2,#08;8個(gè)數(shù)碼管同時(shí)顯示 mov r3,#0feh;選通第8個(gè)數(shù)碼管,關(guān)閉其他的數(shù)碼管disp_1: mov a,r0;把當(dāng)前要顯示的數(shù)放到A里面 movc a,a+dptr;

22、得到當(dāng)前要顯示數(shù)的7段碼 mov p2,#0ffh ;關(guān)掉所有數(shù)碼管顯示,消隱,把殘留在數(shù)碼管上面的亂碼消去 mov p0,a;顯示當(dāng)前的數(shù),運(yùn)行到這里,人的眼睛應(yīng)該看到顯示內(nèi)容 mov a,r3;位選給A mov p2,a;選通相應(yīng)的數(shù)碼管 rl a;得到新的位選碼 inc r0;指針指向下一個(gè)要顯示的內(nèi)容 mov r3,a;保存下一個(gè)位選碼,以便選通下一個(gè)數(shù)碼管. lcall delay;延時(shí)4毫秒顯示當(dāng)前的數(shù)碼管 djnz r2,disp_1;跳回去,進(jìn)入下一個(gè)數(shù)碼管的顯示 rettab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0

23、bfh,0ffh,8ch,3fh,7fh; 采用除法指令實(shí)現(xiàn)的拆字程序 ;入口地址:38h、;出口地址:30h38h、3bhchaizi: mov a,gn ;顯示鬧鐘二 cjne a,#3,chaizi2 mov a,nao2f mov b,#10 div ab mov led2,a mov led1,b mov a,nao2s mov b,#10 div ab mov led4,a mov led7,b mov led5,#02h mov led6,#0ch retchaizi2:mov a,gn ;顯示鬧鐘一 cjne a,#2,chaizi1 mov a,nao1f mov b,#10

24、 div ab mov led2,a mov led1,b mov a,nao1s mov b,#10 div ab mov led4,a mov led7,b mov led5,#01h mov led6,#0ch lcall bcd retchaizi1:mov a,51h;把51h這個(gè)秒的數(shù)值拆成個(gè)位和十位 mov b,#10 div ab mov led2,a;秒的十位進(jìn)入LED2保存 mov led1,b;秒的個(gè)位進(jìn)入LED1保存 mov a,52h;把52h這個(gè)分的數(shù)值拆成個(gè)位和十位 mov b,#10 div ab mov led4,a;分的十位進(jìn)入LED4保存 mov led7

25、,b;分的個(gè)位進(jìn)入LED7保存 mov a,53h;把53h這個(gè)時(shí)的數(shù)值拆成個(gè)位和十位 mov b,#10 div ab mov led6,a;時(shí)的十位進(jìn)入LED6保存 mov led5,b;時(shí)的個(gè)位進(jìn)入LED5保存 lcall bcd1 lcall bcd2;處理第3個(gè)和第6個(gè)數(shù)碼管的顯示 retbcd1: mov a,gn cjne a,#0,l3 cjne r1,#0,l3 mov a,50h;讀取50ms中斷的次數(shù),看看經(jīng)過了幾次50ms的中斷 cjne a,#09,l1l1: jc l3 mov a,nk1 cjne a,#1,k_1 mov led3,#0dh retk_1: mo

26、v led3,#0bh;沒到0.5秒,顯示橫桿 ret ;是否經(jīng)過了0.5秒(即是否經(jīng)過了10次的50ms中斷)l3: mov a,nk1 cjne a,#1,k_2 mov led3,#0eh retk_2: mov led3,#0ah;已經(jīng)到了0.5秒,讓兩個(gè)橫桿消失,這樣造成兩個(gè)橫桿一閃一閃效果 retbcd2: mov a,gn cjne a,#0,l13 cjne r1,#0,l13 mov a,50h;讀取50ms中斷的次數(shù),看看經(jīng)過了幾次50ms的中斷 cjne a,#09,l11l11: jc l13 mov a,nk1 cjne a,#1,k_11 mov led8,#0dh

27、 retk_11: mov led8,#0bh;沒到0.5秒,顯示橫桿 ret ;是否經(jīng)過了0.5秒(即是否過了10次50ms中斷)l13: mov a,nk1 cjne a,#1,k_21 mov led8,#0eh retk_21: mov led8,#0ah;已經(jīng)到了0.5秒,讓兩個(gè)橫桿消失,這樣造成兩個(gè)橫桿一閃一閃效果 ret; 延時(shí)程序 ;;入口地址:r6、r7;出口地址:r6delay: mov r6,#5 ;這是一個(gè)(1+1+2)*100+2+1)*5=2015微秒=2毫秒的延時(shí)程序 dl2: mov r7,#100 ;1微秒 dl1: nop ;1 微秒 nop ;1微秒 dj

28、nz r7,dl1 ;2微秒 djnz r6,dl2 ;2微秒 ret; 走時(shí)間 ;;入口地址:acc、psw;出口地址:acczoushijian: PUSH acc ;0E0H就是A,見課本44頁(yè),因?yàn)檫@個(gè)時(shí)候SP=5fh,故把A的值保存在5fh里面去 PUSH psw ;因?yàn)?D0H就是PSW(見課本44頁(yè)),此時(shí)SP=60H,所以這句話是把PSW的值保存到60h中去 mov th1,#3ch ;重新給定時(shí)器賦初值,讓它再定時(shí)50ms mov tl1,#0afh djnz 50h,l2 ;判斷是否到了1秒沒有,50h減到0表示已經(jīng)進(jìn)行了20次的50ms,剛好1秒 mov 50h,#20

29、;已經(jīng)到1秒,重新賦次數(shù),再定時(shí)記數(shù)一秒 inc 51h mov a,51h ;從51h讀取秒的值(包含十位,個(gè)位) cjne a,#60,l2 ;判斷是否到60秒,沒到60秒,中斷返回退到主程序 mov 51h,#0 ;到60秒,重新從0秒加起,分鐘加1 inc 52h mov a,52h ;讀取分鐘 cjne a,#60,l2 ;判斷是否到了60分鐘,沒到60分鐘,中斷返回退到主程序 mov 52h,#0 ;到60分鐘,重新從0分鐘加,小時(shí)加1 inc 53h mov a,53h ;讀取小時(shí)值 cjne a,#24,l2 ;判斷是否到了24小時(shí),沒到24小時(shí)街卸戲禱贗說街鞒絳? mov 5

30、3h,#0 ;到了24小時(shí),重新清零小時(shí),從00小時(shí)又開始新一天定時(shí)l2: POP psw ;把放在60h的東西放回到PSW里面,因?yàn)檫@個(gè)時(shí)候SP=60h,0D0H就是PSW POP acc ;把放在60h的東西放回到PSW里面,因?yàn)檫@個(gè)時(shí)候SP=5fh,0E0H就是A reti ;PC指針變回進(jìn)入中斷時(shí)的下一條指令的值; 整點(diǎn)報(bào)時(shí)子程序 ?報(bào)時(shí)時(shí)間為 5 秒 ;;入口地址:51h、52h;出口地址:p1.1zdbs: mov a,52h cjne a,#0,zdbs_1 mov a,50h cjne a,#10,zdbs_2zdbs_2: jc zdbs_3 mov a,51h cjne a

31、,#5,zdbs_4zdbs_4: jnc zdbs_1 clr p1.1 retzdbs_3: mov a,51h cjne a,#5,zdbs_5zdbs_5: jnc zdbs_1 setb p1.1 ret ;打開整點(diǎn)報(bào)時(shí)的指示燈zdbs_1: setb zdled ret; 按鍵處理 ;;入口地址:38h、p3;出口地址:p3.0anjian: mov a,#0ffh mov p3,a ;0000給P1口上拉高電頻 jb p3.0,js_1 lcall delay jb p3.0,js_1a_1: jnb p3.0,a_1 lcall delay jnb p3.0,a_1 inc g

32、n mov a,gn cjne a,#4,js_1 mov gn,#0 retfanhui: ret; 調(diào)時(shí)間 ;;入口地址:38h、52h、53h;出口地址:38h、p3.1、p3.2js_1: mov a,gn cjne a,#1,jn1_1js1_2: jb p3.1,js2_2 lcall delay jb p3.1,js2_2js1_1: jnb p3.1,js1_1 lcall delay jnb p3.1,js1_1 inc 52h mov a,52h cjne a,#60,anjian mov 52h,#0 retjs2_2: jb p3.2,jn1_1 lcall delay jb p3.2,jn1_1js2_1: jnb p3.2,js2_1 lcall delay jnb p3.2,js2_1 inc 53h mov a,53h cjne a,#24,anjian mov 53h,#0 ret; 調(diào)鬧鐘一 ;;入口地址:38h;出口地址:p3.1、p3.2jn1_1: mov a,gn cjne a,#2,en1_1 jb p3.1,jn1_3 lcall delay jb p3.1,jn1_3jn1_2: jnb p3.1,jn1_2 lcall delay jnb p3.1,jn1_2 inc nao1f mov a,nao1f cjn

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論