版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、單片機(jī)課程設(shè)計1新穎的60秒旋轉(zhuǎn)電子鐘余水寶數(shù)理與信息工程學(xué)院2006年5月新穎的60秒旋轉(zhuǎn)電子鐘任 務(wù) 書一、 任務(wù) 設(shè)計一款基于AT89C2051單片機(jī)的電子鐘。二、設(shè)計要求1、 基本要求 用4只LED數(shù)碼管輸出顯示時和分。 可通過按鍵設(shè)置鬧鐘功能,且停鬧無須手工操作。 可通過按鍵設(shè)置分校時。 月計時誤差小于45秒。 寫出詳細(xì)的設(shè)計報告。 給出全部電路和源程序。2、 發(fā)揮部分 用60只LED發(fā)光管旋轉(zhuǎn)顯示,模擬“秒針”的行走。 模擬“秒針”行走的“嘀噠”聲。 增加室溫檢測和顯示功能(可與時間交替顯示)。 增加停(掉)電保護(hù)功能。 提高計時精度,使年計時誤差小于30秒。 增加日自動校準(zhǔn)功能,
2、使得該電子鐘“永無誤差”。 增加紅黃綠三色變色裝飾。 可通過按鍵設(shè)置一天兩鬧(比如早晨、中午各一次)。新穎的60秒旋轉(zhuǎn)電子鐘目前市場上提供的無論是機(jī)械鐘還是石英鐘在晚上無照明的情況下都是不可見的。要知道當(dāng)前的時間,必須先開燈,故較為不便。現(xiàn)在市場上也出現(xiàn)了一些電子鐘,它以六只LED數(shù)碼管來顯示時分秒,與傳統(tǒng)的以指針顯示秒的方式不同,違背了人們傳統(tǒng)的習(xí)慣與理念,而且這類電子鐘一般是采用大型顯示器件,適用于銀行、車站等公共場所,且外觀設(shè)計欠美觀,很少進(jìn)入百姓家庭。此外,無論是機(jī)械鐘、石英鐘還是電子鐘,都存在著共同的問題:時間誤差。針對以上存在的問題,我們設(shè)計了一款采用LED顯示器件顯示的電子時鐘,
3、有效克服了時鐘存在的誤差問題,并能在夜間不必其它照明就能看到時間,且以60只發(fā)光管實現(xiàn)秒顯示,接近于傳統(tǒng)的秒針來顯示秒的形式,用戶容易接受,而且美觀大方。另加七只裝飾用的LED燈,使整個時鐘顯的相當(dāng)美觀新穎,故還可作為室內(nèi)裝飾用。1 系統(tǒng)主要功能 電子鐘的外觀如圖1所示。周邊60只發(fā)光管順時旋轉(zhuǎn)來顯示秒,中間四只LED數(shù)碼管用于顯示時間,中下方的七只LED燈順時旋轉(zhuǎn),供裝飾用。 其主要功能有:整點報時;四只LED數(shù)碼管顯示當(dāng)前時分;每隔一秒鐘周邊的60只LED發(fā)光管旋轉(zhuǎn)一格,裝飾用的LED每隔一秒旋轉(zhuǎn)一次。當(dāng)發(fā)生停電事件時,由后備電池供電,系統(tǒng)進(jìn)入低功耗狀態(tài),所有顯示部件停止顯示,這樣即延長了
4、電池的壽命,同時又保證了CPU繼續(xù)計數(shù),不至于因停電而時鐘停止運行。當(dāng)恢復(fù)供電后,系統(tǒng)自動恢復(fù)工作狀態(tài),不影響計時。圖1 多功能電子鐘外觀圖2 系統(tǒng)的硬件構(gòu)成及功能電腦鐘的原理框圖如圖2所示。它由以下幾個部件組成:單片機(jī)89C2051、電源、時分顯示部件、60秒旋轉(zhuǎn)譯碼驅(qū)動電路。時分顯示采用動態(tài)掃描,以降低對單片機(jī)端口數(shù)的要求,同時也降低系統(tǒng)的功耗。時分顯示模塊、60秒旋轉(zhuǎn)譯碼驅(qū)動電路以及顯示驅(qū)動都通過89C2051的I/O口控制。電源部分:電源部分有二部分組成。一部分是由220V的市電通過變壓、整流穩(wěn)壓來得到+5V電壓,維持系統(tǒng)的正常工作;另一部分是由3V的電池供電,以保證停電時正常走時。正
5、常情況下電池是不提供電能的,以保證電池的壽命。具體電路參見“新穎的60秒旋轉(zhuǎn)電子鐘參考電路原理圖”。 圖2 電子鐘系統(tǒng)原理框圖21 AT89C2051單片機(jī)及其引腳說明AT89C2051單片機(jī)是51系列單片機(jī)的一個成員,是8051單片機(jī)的簡化版。內(nèi)部自帶2K字節(jié)可編程FLASH存儲器的低電壓、高性能COMS八位微處理器,與Intel MCS-51系列單片機(jī)的指令和輸出管腳相兼容。由于將多功能八位CPU和閃速存儲器結(jié)合在單個芯片中,因此,AT89C2051構(gòu)成的單片機(jī)系統(tǒng)是具有結(jié)構(gòu)最簡單、造價最低廉、效率最高的微控制系統(tǒng),省去了外部的RAM、ROM和接口器件,減少了硬件開銷,節(jié)省了成本,提高了系
6、統(tǒng)的性價比。AT89C2051是一個有20個引腳的芯片,引腳配置如圖3所示。與8051相比,AT89C2051減少了兩個對外端口(即P0、P2口),使它最大可能地減少了對外引腳下,因而芯片尺寸有所減小。AT89C2051芯片的20個引腳功能為: 圖3 AT89C2051引腳配置 圖4 CD4017引腳圖VCC 電源電壓。GND 接地。RST 復(fù)位輸入。當(dāng)RST變?yōu)楦唠娖讲⒈3?個機(jī)器周期時,所有I/O引腳復(fù)位至“1”。XTAL1 反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2 來自反向振蕩放大器的輸出。P1口 8位雙向I/O口。引腳P1.2P1.7提供內(nèi)部上拉,當(dāng)作為輸入并被外部下拉
7、為低電平時,它們將輸出電流,這是因內(nèi)部上拉的緣故。P1.0和P1.1需要外部上拉,可用作片內(nèi)精確模擬比較器的正向輸入(AIN0)和反向輸入(AIN1),P1口輸出緩沖器能接收20mA電流,并能直接驅(qū)動LED顯示器;P1口引腳寫入“1” 后,可用作輸入。在閃速編程與編程校驗期間,P1口也可接收編碼數(shù)據(jù)。P3口 引腳P3.0P3.5與P3.7為7個帶內(nèi)部上拉的雙向I/0引腳。P3.6在內(nèi)部已與片內(nèi)比較器輸出相連,不能作為通用I/O引腳訪問。P3口的輸出緩沖器能接收20mA的灌電流;P3口寫入“1”后,內(nèi)部上拉,可用輸入。P3口也可用作特殊功能口,其功能見表1。P3口同時也可為閃速存儲器編程和編程校
8、驗接收控制信號。表1 P3口特殊功能P3口引腳特殊功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2(外部中斷0)P3.3(外部中斷1)P3.4T0(定時器0外部輸入)P3.5T1(定時器1外部輸入)22 60秒旋轉(zhuǎn)譯碼驅(qū)動原理按常規(guī)傳統(tǒng)設(shè)計,需60進(jìn)制譯碼驅(qū)動電路才能實現(xiàn)60秒旋轉(zhuǎn)譯碼驅(qū)動,若用六片十進(jìn)制計數(shù)譯碼器構(gòu)成六十進(jìn)制計數(shù)譯碼電路,則電路連線多(需要120根連線),硬件電路龐大,開銷大。為此,我們巧妙地采用了兩片CD4017進(jìn)行六十進(jìn)制計數(shù)譯碼,實現(xiàn)60秒旋轉(zhuǎn)譯碼驅(qū)動。既減少了電路的復(fù)雜程度又可降低了成本。圖4為CD4017功能引腳圖,圖5為其時序圖。圖5 CD40
9、17時序圖CD4017集成電路是十進(jìn)制計數(shù)/時序譯碼器,共有10個譯碼輸出Q0Q9;每個譯碼輸出通常處于低電平,且在時鐘脈沖由低到高的上升沿輸出高電平;每個高電平輸出維持1個時鐘周期;每輸入10個時鐘脈沖,輸出一個進(jìn)位脈沖,因此進(jìn)位輸出信號可作為下一級計數(shù)器的時鐘信號。在清零輸入端(R)加高電平或正脈沖時,只有輸出端Q0為高電平,其余各輸出端均為低電平“0”。為實現(xiàn)對發(fā)光二極管的驅(qū)動,將每一個譯碼輸出端口接一只發(fā)光二極管,并將二極管串聯(lián)限流電阻后接地。當(dāng)譯碼端口Q0Q9中任一端口為高電平,則對應(yīng)的發(fā)光二極管點亮,如圖6(左)所示。仔細(xì)考查CD4017的功能,可發(fā)現(xiàn)其10個輸出的高電平是相互排斥
10、的,即任一時刻只有一只發(fā)光二極管點亮,因此可將圖6(左)電路進(jìn)一步簡化為如圖6(右)所示,從而簡化電路設(shè)計。圖6 CD4017控制發(fā)光二極管原理圖在本電子鐘設(shè)計中,每秒點亮一個發(fā)光二極管,循環(huán)點亮一周共需60個發(fā)光二極管,若用上述的6片CD4017實現(xiàn)驅(qū)動,顯然電路復(fù)雜。為此我們選用兩片CD4017和一片6反相器,采用“縱橫雙譯碼”技術(shù),巧妙地實現(xiàn)60秒旋轉(zhuǎn)譯碼驅(qū)動,其中一片接成10進(jìn)制,一片接成6進(jìn)制,實現(xiàn)610=60的功能,具體連接方法如圖7所示。圖7 發(fā)光二極管“縱橫雙譯碼”循環(huán)點亮LED原理圖將周期為1秒的輸入脈沖作為其中一片CD4017的時鐘脈沖,而此片的級聯(lián)進(jìn)位輸出端(QC)作為另
11、一片的時鐘輸入,并將Q6與復(fù)位端相連。在兩片譯碼輸出端交叉點上接入發(fā)光二極管,構(gòu)成610矩陣。根據(jù)CD4017時序特點,在初始狀態(tài),作為高位(縱)的CD4017譯碼器輸出端口Q0處于高平,經(jīng)反相器反相后為低電平。當(dāng)作為低位(橫)的CD4017譯碼器輸出端口Q0Q9依次輸出高電平后,則對應(yīng)的二極管LD1LD10依次點亮;此后由于QC端的進(jìn)位,高位CD4017譯碼輸出端口Q1輸出高電平,反相后輸出低電平,當(dāng)?shù)臀坏腃D4017譯碼輸出端口Q0Q9依次輸出高電平后,二極管LD11LD20依次點亮。如此往復(fù),直至高位Q6向復(fù)位端輸入高電平,CD4017復(fù)位,60秒循環(huán)點亮重新開始。23 時分顯示部件由于
12、系統(tǒng)要顯示的內(nèi)容較簡單,顯示量不多,所以選用數(shù)碼管既方便又經(jīng)濟(jì)。LED有共陰極和共陽極兩種。如圖8所示。二極管的陰極連接在一起,通常此公共陰極接地,而共陽極則將發(fā)光二極管的陽極連接在一起,接入+5V的電壓。一位顯示器由8個發(fā)光二極管組成,其中7個發(fā)光二極管構(gòu)成字型“8”的各個筆劃(段)ag,另一個小數(shù)點為dp發(fā)光二極管。當(dāng)在某段發(fā)光二極管施加一定的正向電壓時,該段筆劃即亮;不加電壓則暗。為了保護(hù)各段LED不被損壞,需外加限流電阻。圖8 LED數(shù)碼管結(jié)構(gòu)原理圖眾所周知,LED顯示數(shù)碼管通常由硬件7段譯碼集成電路,完成從數(shù)字到顯示碼的譯碼驅(qū)動。本系統(tǒng)采用軟件譯碼,以減小體積,降低成本和功耗,軟件譯
13、碼的另一優(yōu)勢還在于比硬件譯碼有更大的靈活性。所謂軟件譯碼,即由單片機(jī)軟件完成從數(shù)字到顯示碼的轉(zhuǎn)換。從LED數(shù)碼管結(jié)構(gòu)原理可知,為了顯示字符,要為LED顯示數(shù)碼管提供顯示段碼,組成一個“8”字形字符的7段,再加上1個小數(shù)點位,共計8段,因此提供給LED數(shù)碼管的顯示段碼為1個字節(jié)。各段碼位與顯示段的對應(yīng)關(guān)系如表2。表2 各段碼位的對應(yīng)關(guān)系段碼位D7D6D5D4D3D2D1D0顯示段dpgfedcba需說明的是當(dāng)用數(shù)據(jù)口連接LED數(shù)碼管adp引腳時,不同的連接方法,各段碼位與顯示段有不同的對應(yīng)關(guān)系。通常數(shù)據(jù)口的D0位與a段連接,D1位與b段連接,D7位與dp段連接,如表2所示,表3為用于LED數(shù)碼管
14、顯示的十六進(jìn)制數(shù)和空白字符與P的顯示段碼。表3 LED顯示段碼字型共陽極段碼共陰極段碼字型共陽極段碼共陰極段碼0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3BOH4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H空白FFH00H880H7FHP8CH73H注:(1)本表所列各字符的顯示段碼均為小數(shù)點不亮的情況。 (2)“空白”字符即沒有任何顯示。根據(jù)AT89C2051單片機(jī)灌電流能力強(qiáng),拉電流能力弱的特點,我們選用共陽數(shù)碼管。將AT89C2051的P1.0P1.7分別與共陽數(shù)碼管的ag及
15、dp相連,高電平的位對應(yīng)的LED數(shù)碼管的段暗,低電平的位對應(yīng)的LED數(shù)碼管的段亮,這樣,當(dāng)P0口輸出不同的段碼,就可以控制數(shù)碼管顯示不同的字符。例如:當(dāng)P0口輸出的段碼為1100 0000,數(shù)碼管顯示的字符為0。數(shù)碼管顯示器有二種工作方式,即靜態(tài)顯示方式和動態(tài)掃描顯示方式。為節(jié)省端口及降低功耗,本系統(tǒng)采用動態(tài)掃描顯示方式。動態(tài)掃描顯示方式需解決多位LED數(shù)碼管的“段控”和“位控”問題,本電路的“段控”(即要顯示的段碼的控制)通過P0口實現(xiàn);而每一位的公共端,即LED數(shù)碼管的“位控”,則由P3口控制。這種連接方式由于多位字段線連在一起,因此,要想顯示不同的內(nèi)容,必然要采取輪流顯示的方式,即在某一
16、瞬間,只讓其中的某一位的字位線處于選通狀態(tài),其它各位的字位線處于斷開狀態(tài),同時字段線上輸出這一位相應(yīng)要顯示字符的字段碼。在這一瞬時,只有這一位在顯示,其他幾位則暗。在本系統(tǒng)中,字位線的選通與否是通過PNP三極管的導(dǎo)通與截止來控制,即三極管處于“開關(guān)”狀態(tài)。系統(tǒng)的時分顯示部件由4只7段共陽LED數(shù)碼管構(gòu)成,前兩只用于時的顯示,后兩只用于分的顯示。值得一提的是,在設(shè)計中需要實現(xiàn)時與分之間的兩個閃爍點,為此,將第三只LED數(shù)碼管倒置擺放,這樣就形成了兩個很自然的閃爍點。與此同時,為了能使兩點顯示能夠形象的表示時鐘“秒”的變化,設(shè)計時,將兩個點由P1.7單獨控制,每隔一秒使P1.7發(fā)送一個正脈沖,從而
17、實現(xiàn)了兩個點的閃爍顯示,閃爍周期為一秒。3 系統(tǒng)的軟件構(gòu)成及功能本系統(tǒng)的軟件系統(tǒng)主要可分為主程序和定時器中斷程序兩大模塊。在程序過程中,加入了抗干擾措施。下面對部分模塊作介紹。31 系統(tǒng)主程序設(shè)計主程序的功能是完成系統(tǒng)的初始化,在顯示時間之前,對系統(tǒng)是否停電狀態(tài)進(jìn)行檢測;若停電,將系統(tǒng)進(jìn)入低功耗狀態(tài),用電池電壓維持單片機(jī)計時工作,但此時不顯示時間,用節(jié)省用電;若不停電,則將時分發(fā)送顯示。程序流程如圖9所示。32 中斷程序設(shè)計中斷程序(如圖10所示)完成時間計數(shù),時間調(diào)整,誤差消除等功能。中斷采用AT89C2051內(nèi)部T0中斷實現(xiàn),定時時間為125ms,當(dāng)時間到達(dá)125ms8,即1分鐘時,分計數(shù)
18、緩沖器MINBUFFER增加1,到達(dá)1小時,則時計數(shù)緩沖器HOURBUFFER增加1,并將分、時的個位、十位放入顯示緩沖器。當(dāng)分計數(shù)緩沖器和時計數(shù)緩沖器分別到達(dá)60min、24h時,則對它們清零,以便從新計數(shù)。在中斷設(shè)計中,還通過軟件實現(xiàn)了累計誤差消除功能,使整個系統(tǒng)時間的精確度得到保證。圖9 系統(tǒng)主程序流程圖圖10 定時中斷程序4 結(jié)束語上述電子鐘,無論在外觀上還是功能上都實現(xiàn)了較為完善的設(shè)計。特別值得一提的是本系統(tǒng)在精度上的設(shè)計,突破傳統(tǒng)的方法,對可能產(chǎn)生的積累誤差采用“抵消法”,從而有效地降低了時間誤差。由于計數(shù)時產(chǎn)生的積累誤差所導(dǎo)致的時間誤差,是所有的電子計時系統(tǒng)共同存在的問題。但在目
19、前市場上的電子時鐘產(chǎn)品,如計算機(jī)中的時鐘,手機(jī)中的時鐘等并沒有有效的采取消除誤差的措施。本系統(tǒng)設(shè)計的消除積累誤差來減少時間誤差的軟件方法,并不需要任何的硬件,因此在不增加成本的情況下,可以普遍用于所有的電子時鐘產(chǎn)品。新穎60秒旋轉(zhuǎn)電子鐘材料清單名稱型號數(shù)量 單片機(jī)AT89C20511 數(shù)字集成芯片CD40172 數(shù)字集成芯片CD40691超高亮數(shù)碼管共陽 尺寸0.5inch4高亮發(fā)光二極管3紅、透明13高亮發(fā)光二極管3綠、透明50 普通二極管IN40014 普通二極管IN41482 穩(wěn)壓二極管C4V7( 4.7V)1 三極管90125 三極管90131 輕觸按鍵?。ǔ叽?6mm5.5)3 蜂鳴
20、器5 V1 晶振6M(小體積)1 底座14腳1 底座16腳2 底座20腳1 底座40腳1 電阻220歐姆,1/8瓦8 電阻4.7K,1/8瓦5 電阻100歐姆,1/8瓦1 電阻10k,1/8瓦4 電阻270歐姆,1/8瓦1 電容100微法/25伏2 電容220微法/25伏1 電容30P 瓷片3 電容104(0.1微法)3 變壓器5 V/100 M A1 電源線150cm1 固定腳銅3套 PCB線路板直徑1151 新穎的60秒旋轉(zhuǎn)電子鐘參考電路原理圖電子鐘PCB實物圖儀器設(shè)備: 單片機(jī)仿真器(帶AT89C2051仿真頭); 焊接實驗工具箱一套; 5V電源(有變壓器時可不用); 制板設(shè)備(廠家制板
21、時可不用)。電子鐘整體實物圖60秒旋轉(zhuǎn)電子鐘部分參考程序清單 ALARMHBUFF2 EQU 77H ;鬧鈴時間的時十位計時綬沖 ALARMHBUFF1 EQU 76H ;鬧鈴時間的時個位計時綬沖 ALARMMBUFF2 EQU 75H ;鬧鈴時間的分十位計時綬沖 ALARMMBUFF1 EQU 74H ;鬧鈴時間的分個位計時綬沖 HBUFF2 EQU 73H ;時十位計時綬沖 HBUFF1 EQU 72H ;時個位計時綬沖 MBUFF2 EQU 71H ;分十位計時綬沖 MBUFF1 EQU 70H ;分個位計時綬沖 DP EQU 6FH ;控制數(shù)碼管點的亮暗 NUM EQU 78H ;前四
22、秒還是后四秒計數(shù) SBUFF EQU 79H ;秒十進(jìn)制計時綬沖(低四位對應(yīng)個位,高四位對應(yīng)十位) MBUFF EQU 7AH ;分十進(jìn)制計時綬沖 HBUFF EQU 7BH ;時十進(jìn)制計時綬沖 ALARMMBUFF EQU 7CH ;鬧鈴時間的分十進(jìn)制計時綬沖 ALARMHBUFF EQU 7DH ;鬧鈴時間的時十進(jìn)制計時綬沖 NUMT1 EQU 67H ;用于控制時間調(diào)整時按鍵p3.2一次按下時,計數(shù)器T1中斷的次數(shù) NUMT2 EQU 68H ;用于控制時間調(diào)整時按鍵p3.3一次按下時,計數(shù)器T1中斷的次數(shù) KEYNUMT1 EQU 69H ;用于存儲NUMT1已經(jīng)計數(shù)到第幾個半秒 KE
23、YNUMT2 EQU 6AH ;用于存儲NUMT1已經(jīng)計數(shù)到第幾個半秒 STOREKEYNUMT2 EQU 6BH ;用于存儲當(dāng)前KEYNUMT1的值,以和下次做比較,看是否有變化 STOREKEYNUMT1 EQU 6CH ;用于存儲當(dāng)前KEYNUMT2的值,以和下次做比較,看是否有變化 ORG 0000H AJMP START ORG 000BH MOV TH0 , #0BH ;設(shè)置計數(shù)初值 ,R4用來存儲低位的初值 MOV TL0 , R4 AJMP INTERT0 ORG 001BH AJMP INTERT1 ORG 0040HSTART: MOV NUMT1 , #00H MOV N
24、UMT2 , #00H MOV KEYNUMT1 , #00H MOV KEYNUMT2 , #00H MOV STOREKEYNUMT2 , #00H MOV STOREKEYNUMT1 , #00H MOV NUM , #8 MOV DPTR , #TAB MOV ALARMHBUFF , #18H ;置鬧鈴時間初始值為18:55 MOV ALARMMBUFF , #55H MOV ALARMHBUFF2, #01H MOV ALARMHBUFF1, #08H MOV ALARMMBUFF2 , #05H MOV ALARMMBUFF1 , #05H MOV HBUFF2, #01H ;置
25、鬧鐘時間為18:53 MOV HBUFF1, #08H MOV MBUFF2 , #05H MOV MBUFF1 , #03H MOV HBUFF , #18H MOV MBUFF , #53H MOV SBUFF , #3CH ;置初始秒為60,計時時減 MOV TCON , #05H ;下降沿觸發(fā) MOV TMOD , #11H ;初始化定時器,T0 ,T1 16位計時 MOV TH0 , #0BH ;設(shè)置計數(shù)初值,125ms計時 MOV TL0 , #0DBH MOV TH1 , #3CH ;T1置初值,進(jìn)行100ms計時,用于調(diào)整時間 MOV TL1 , #0B0H MOV IE ,
26、#82H ;開T0中斷 SETB PT0 ;T0中斷優(yōu)先級最高 SETB TR0 ;允許T0計數(shù) SETB P3.2 SETB P3.3START1: MOV A , HBUFF ; 顯示時,7點以前及21點以后亮度調(diào)暗 SUBB A , #7H JC START2 MOV A , HBUFF SUBB A , #21H JNC START2 ACALL DISPLAY ACALL ZDBS AJMP START3START2: ACALL NIGHTDISPLAYSTART3: MOV A ,ALARMHBUFF ;檢測是否是定鬧時間 CJNE A , HBUFF , START4 MOV
27、A , ALARMMBUFF CJNE A , MBUFF ,START4 MOV C, DP ;若是定鬧時間,則利用dp的值來決定蜂鳴 MOV P3.2, C MOV A , SBUFF JNZ START1 ;若還沒到1分鐘,則繼續(xù)蜂鳴 SETB P3.2START4: JNB P3.2,ADJUSTTIME1 ;循環(huán)等待中斷,并檢測是否鍵按下,若是,則進(jìn)入相應(yīng)程序 JNB P3.3,ADJUSTTIME2 AJMP START1 AJMP START1 ;* ;*int0中斷子程序* ;*ADJUSTTIME1:NOP MOV KEYNUMT1 ,#00H MOV TH1 , #3CH
28、;T1置初值,進(jìn)行100ms計時,用于調(diào)整時間 MOV TL1 , #0B0H SETB ET1 ;開T1中斷 SETB PT1 ;設(shè)T1中斷優(yōu)先級最高 SETB TR1 ;允許T1計時 MOV STOREKEYNUMT1 , KEYNUMT1 ;存儲當(dāng)前次KEYNUMT1的值TIME1_1:ACALL DISPLAY MOV A , KEYNUMT1 CJNE A , STOREKEYNUMT1,TIME1_2 ;若當(dāng)前KEYNUMT1的值與上一次的值不等,則時間加1分,否則繼續(xù)循環(huán),等等至半分鐘 AJMP TIME1_3TIME1_2:MOV STOREKEYNUMT1 , KEYNUMT
29、1 ;加1后存儲當(dāng)前的KEYNUMT1的值 ACALL ADDBUFF0 ;分加1TIME1_3:JNB P3.2,TIME1_1 ;若p3.2已關(guān),則退出增時,否則繼續(xù)循環(huán) CLR ET1 CLR PT1 CLR TR1 AJMP START1;*;*時間增1分*;*ADDBUFF0:MOV A , MBUFF ; 若按鍵小于1s,則分增1 ADD A , #1 DA A MOV MBUFF , A ANL A , #0FH MOV MBUFF1 , A MOV A , MBUFF SWAP A ANL A , #0FH MOV MBUFF2 , A MOV A , MBUFF CJNE A
30、 , #60H , ADDBUFF1 MOV MBUFF , #00H MOV MBUFF2 , #00H MOV MBUFF1 , #00H MOV A , HBUFF ;時增1 ADD A , #1 DA A MOV HBUFF , A ANL A , #0FH MOV HBUFF1 , A MOV A , HBUFF SWAP A ANL A , #0FH MOV HBUFF2 , A MOV A , HBUFF CJNE A , #24H , ADDBUFF1 ;若沒到24小時,則不必初值置0 MOV HBUFF , #00H MOV HBUFF2 , #00H MOV HBUFF1
31、, #00HADDBUFF1:RET;*;*int1中斷子程序*;* ADJUSTTIME2: NOP ACALL DL100MS MOV C , P3.3 JC TIME2_6 ;如果(P3.3按鍵100ms以上) 則不做處理 MOV KEYNUMT2 , #00H ;否則進(jìn)入定鬧設(shè)置 MOV STOREKEYNUMT2 , KEYNUMT2 ;記錄當(dāng)前NUMT2的數(shù)據(jù),以看下次有沒改變TIME2_1:NOP MOV TH1 , #3CH ;T1置初值,進(jìn)行100ms計時,用于調(diào)整時間 MOV TL1 , #0B0H SETB ET1 ;開T1中斷 SETB PT1 ;設(shè)T1中斷優(yōu)先級最高
32、SETB TR1 ;允許T1計時TIME2_2:ACALL ALARMDISPLAY MOV A , KEYNUMT2 CJNE A , STOREKEYNUMT2 ,TIME2_3 AJMP TIME2_4TIME2_3: MOV STOREKEYNUMT2 , KEYNUMT2 MOV A , ALARMMBUFF ; 若按鍵小于1s,則分增1 ADD A , #1 DA A MOV ALARMMBUFF , A ANL A , #0FH MOV ALARMMBUFF1 , A MOV A , ALARMMBUFF SWAP A ANL A , #0FH MOV ALARMMBUFF2 ,
33、 A MOV A , ALARMMBUFF CJNE A , #60H , TIME2_4 MOV ALARMMBUFF , #00H MOV ALARMMBUFF2 , #00H MOV ALARMMBUFF1 , #00H MOV A , ALARMHBUFF ;時增1 ADD A , #1 DA A MOV ALARMHBUFF , A ANL A , #0FH MOV ALARMHBUFF1 , A MOV A , ALARMHBUFF SWAP A ANL A , #0FH MOV ALARMHBUFF2 , A MOV A , ALARMHBUFF CJNE A , #24H ,
34、TIME2_4 ;若沒到24小時,則初值不必置0 MOV ALARMHBUFF , #00H MOV ALARMHBUFF2 , #00H MOV ALARMHBUFF1 , #00HTIME2_4:NOP JNB P3.3,TIME2_2 ;若按鍵已經(jīng)未按,則退出循環(huán) CLR ET1 CLR TR1 MOV KEYNUMT2 , #00H MOV NUMT2 , #00H MOV R2 , #10 ; 直到p3.3 20s鐘內(nèi)都是未按,此時復(fù)原數(shù)據(jù),即退出設(shè)置TIME2_7:MOV R1 , #200 TIME2_5:ACALL ALARMDISPLAY ACALL DL1MS JNB P3
35、.3 , TIME2_1 DJNZ R1 , TIME2_5 DJNZ R2 , TIME2_7TIME2_6:CLR ET1 CLR PT1 CLR TR1 LJMP START1;*;*T1中斷子程序*;*INTERT1:NOP MOV TH1 , #3CH ;T1置初值,進(jìn)行100ms計時,用于調(diào)整時間 MOV TL1 , #0B0H PUSH ACC PUSH PSW CLR ET0 CLR ET1 ;關(guān)T1中斷 MOV A , NUMT1 INC A MOV NUMT1 , A ;中斷一次則相應(yīng)的增加NUMT1 CJNE A , #5 , INTERT1NEXT ;每中斷五次,即半秒
36、,都增加KEYNUMT1 MOV A ,KEYNUMT1 INC A MOV KEYNUMT1 , A MOV NUMT1 , #00H ;NUMT1已經(jīng)是5了,則處理過KEYNUMT1后,重置NUMT1INTERT1NEXT:NOP MOV A , NUMT2 ;中斷一次則相應(yīng)的增加NUMT1 INC A MOV NUMT2 , A CJNE A, #5,ENDINTERT1 ;每中斷五次,即半秒,都增加KEYNUMT1 MOV A , KEYNUMT2 INC A MOV KEYNUMT2 , A MOV NUMT2 , #00H ;NUMT1已經(jīng)是5了,則處理過KEYNUMT1后,重置N
37、UMT1ENDINTERT1: SETB ET1 SETB ET0 POP ACC POP PSW RETI ;* ;* 整點報時 * ;*ZDBS: MOV A , MBUFF ;在整點時,響半秒 JNZ ZDBSEND MOV A , SBUFF CJNE A , #3CH , ZDBSEND CLR P3.2 ACALL DL0FIVE SETB P3.2ZDBSEND:RET ;* ;*定鬧顯示子程序* ;*ALARMDISPLAY: MOV P1 ,#0FFH ;使時的十位亮 MOV A , ALARMHBUFF2 MOVC A , A+DPTR SETB ACC.7 MOV P1
38、, A CLR P3.0 ACALL DL1MS SETB P3.0 MOV A , ALARMHBUFF1 ;使時的個位亮 MOVC A , A+DPTR MOV C , DP MOV ACC.7 , C MOV P1 , A CLR P3.1 ACALL DL1MS SETB P3.1 MOV A ,ALARMMBUFF2 ;使分的十位亮 MOVC A , A+DPTR MOV C , DP MOV ACC.7 , C MOV P1 , A CLR P3.4 ACALL DL1MS SETB P3.4 MOV A , ALARMMBUFF1 ;使時的個位亮 MOVC A , A+DPTR
39、SETB ACC.7 MOV P1,A CLR P3.5 ACALL DL1MS SETB P3.5 RET;*;*晚上顯示子程序*;* ;降低顯示的占空比,數(shù)碼管進(jìn)入節(jié)能NIGHTDISPLAY: NOP MOV P1 ,#0FFH MOV A , HBUFF2 MOVC A , A+DPTR SETB ACC.7 MOV P1 , A CLR P3.0 ACALL DL1MS ;亮1ms SETB P3.0 ACALL DL1MS ACALL DL1MS ;暗2ms MOV A , HBUFF1 MOVC A , A+DPTR MOV C , DP MOV ACC.7 , C MOV P1 , A CLR P3.1 ACALL DL1MS SETB P3.1 ACALL DL1MS ACALL DL1MS MOV A ,MBUFF2 MOVC A , A+DPTR MOV C , DP MOV ACC.7 , C MOV P1 , A CLR P3.4 ACALL DL1MS SETB P3.4 ACALL DL1MS ACALL DL1MS MOV A , MBUFF1 MOVC A , A+DP
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 修路土方回填合同范例
- 加固鋼板包工合同范例
- 溫室大棚租賃合同范例
- 專利權(quán)質(zhì)押合同范例
- 工資流水證明合同范例
- 水源供應(yīng)合同范例
- 工程房抵押合同范例
- 水暖清包工合同范例
- 公司簽訂 長期合同范例
- 護(hù)理賠款合同范例
- 多金屬廢料高效綜合回收利用產(chǎn)業(yè)升級項目環(huán)評報告書
- 石方開挖的環(huán)保措施
- 商洛市商州區(qū)金礦煤礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 中國鐵塔股份有限公司代維交接指南(2017年)
- 常用藥物皮試配制法和藥物過敏反應(yīng)的急救措施
- 醫(yī)學(xué)微生物學(xué)知到章節(jié)答案智慧樹2023年山東第一醫(yī)科大學(xué)
- 印刷通用質(zhì)量檢驗標(biāo)準(zhǔn)
- 電子測量技術(shù)基礎(chǔ)課后答案
- 大興調(diào)查研究研討發(fā)言材料學(xué)習(xí)心得體會中心組3篇
- 培訓(xùn)學(xué)?;馂?zāi)應(yīng)急預(yù)案
- 面試評分表完整版
評論
0/150
提交評論