位LED顯示單片機(jī)控制電子鐘計(jì)數(shù)器_第1頁
位LED顯示單片機(jī)控制電子鐘計(jì)數(shù)器_第2頁
位LED顯示單片機(jī)控制電子鐘計(jì)數(shù)器_第3頁
位LED顯示單片機(jī)控制電子鐘計(jì)數(shù)器_第4頁
位LED顯示單片機(jī)控制電子鐘計(jì)數(shù)器_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、6位LED顯示單片機(jī)控制電子鐘/計(jì)數(shù)器    這是我們?cè)O(shè)計(jì)的單片機(jī)電子鐘/計(jì)時(shí)器學(xué)習(xí)板,它采用6位LED數(shù)碼管顯示時(shí)、分、秒,以24小時(shí)計(jì)時(shí)方式??梢酝ㄟ^按鍵實(shí)現(xiàn)時(shí)分調(diào)整、秒表時(shí)鐘功能轉(zhuǎn)換、省電(關(guān)閉顯示)等功能。我們能提供的完整的匯編語言源程序清單及電路原理設(shè)計(jì)圖有助于學(xué)習(xí)者進(jìn)行分析和進(jìn)行實(shí)驗(yàn)驗(yàn)證 產(chǎn)品1:6位LED顯示單片機(jī)控制電子鐘/計(jì)數(shù)器成品板 成品每套84元    硬件參數(shù)板上資源:MCU STC89C52、6位Led顯示、3位按鍵。電源部分為5V直流電壓,需要穩(wěn)壓、濾波電路,不能接反! 

2、60;  51單片機(jī)做的電子鐘在很多地方都有介紹, 對(duì)于單片機(jī)學(xué)習(xí)者來說這個(gè)程序基本上是一道門檻,掌握了電子鐘程序, 基本上可以說51單片機(jī)就掌握了80%。常見的電子鐘程序由顯示部分、計(jì)算部分、時(shí)鐘調(diào)整部分構(gòu)成,本產(chǎn)品硬件上完全支持倒計(jì)時(shí)器,客戶只要自己修改程序就能實(shí)現(xiàn)倒計(jì)時(shí)功能。    為了實(shí)現(xiàn)LED顯示器的數(shù)字顯示,可以采用靜態(tài)顯示法和動(dòng)態(tài)顯示法。由于靜態(tài)顯示法需要數(shù)據(jù)鎖存器等硬件,接口復(fù)雜一些??紤]時(shí)鐘顯示只有六位,且系統(tǒng)沒有其它復(fù)雜的處理任務(wù),所以決定采用動(dòng)態(tài)掃描法實(shí)現(xiàn)LED的顯示。單片機(jī)采用易購的AT89S51系列,這樣單片機(jī)可具有足

3、夠的空余硬件資源實(shí)現(xiàn)其它的擴(kuò)充功能,硬件系統(tǒng)的總體構(gòu)成如下圖所示:    該板采用AT89S51單片機(jī),最小化應(yīng)用設(shè)計(jì),采用共陽七段LED顯示器,P0口輸出段碼數(shù)據(jù),P2.0P2.5做列掃描輸出,P1.0,P1.2,P1.3,接三個(gè)按鍵開關(guān),用以調(diào)時(shí)及功能設(shè)置。為了提高共陽數(shù)碼管的驅(qū)動(dòng)電壓,用9012做電源驅(qū)動(dòng)輸出。采用12M晶振,有利于提高秒計(jì)時(shí)的精度。     本設(shè)計(jì)中,計(jì)時(shí)采用定時(shí)器T0中斷完成,其余狀態(tài)循環(huán)調(diào)用顯示子程序,當(dāng)端口開關(guān)按下時(shí),轉(zhuǎn)入相應(yīng)功能程序。其主程序執(zhí)行流程圖見下左圖:  

4、;      數(shù)碼管顯示的數(shù)據(jù)存放在內(nèi)存單元70H75H中。其中70H71H存放秒數(shù)據(jù),72H73H存放分?jǐn)?shù)據(jù),74H75H存放時(shí)數(shù)據(jù),每一地址單元內(nèi)均為十進(jìn)制BCD碼。由于采用軟件動(dòng)態(tài)掃描實(shí)現(xiàn)數(shù)據(jù)顯示功能,顯示用十進(jìn)制BCD碼數(shù)據(jù)的對(duì)應(yīng)段碼存放在ROM表中。顯示時(shí),先取出70H75H某一地址中的數(shù)據(jù),然后查得對(duì)應(yīng)的顯示用段碼,并從P0口輸出,P2口將對(duì)應(yīng)的數(shù)碼管選中供電,就能顯示該地址單元的數(shù)據(jù)值。     定時(shí)器T0用于時(shí)間計(jì)時(shí)。定時(shí)溢出中斷周期可分別設(shè)為50mst和10ms。中斷進(jìn)入后,先判斷是時(shí)鐘計(jì)時(shí)還是秒

5、表計(jì)時(shí),時(shí)鐘計(jì)時(shí)累計(jì)中斷20次(即1s)時(shí),對(duì)秒計(jì)數(shù)單元進(jìn)行加1操作,秒表計(jì)時(shí)每10ms進(jìn)行加1操作。時(shí)鐘計(jì)數(shù)單元地址分別在70H71H(秒)、76H77H(分)和78H79H(時(shí)),最大計(jì)時(shí)值為23時(shí)59分59秒。而秒表計(jì)數(shù)單元地址也在70H71H(0.01毫秒)、76H77H(秒)和78H79H(分),最大計(jì)時(shí)值為99分59.99秒。7AH單元內(nèi)存放“熄滅符”數(shù)據(jù)(#0AH)。在計(jì)數(shù)單元中采用十進(jìn)制BCD碼計(jì)數(shù),滿60(秒表功能時(shí)有100)進(jìn)位,T0中斷服務(wù)程序執(zhí)行流程見上圖右     T1中斷服務(wù)程序用于指示調(diào)整單元數(shù)字的亮閃。在時(shí)間調(diào)整狀態(tài)下,每

6、過0.3S將對(duì)應(yīng)單元的顯示數(shù)據(jù)換成“熄滅符”數(shù)據(jù)(#0AH)。這樣在調(diào)整時(shí)間時(shí),對(duì)應(yīng)調(diào)整單元的顯示數(shù)據(jù)會(huì)間隔閃亮。    調(diào)時(shí)功能程序的設(shè)計(jì)方法是:按下P1.0口按鍵,若按下時(shí)間短于1 s則進(jìn)入省電狀態(tài)(數(shù)碼管不亮,時(shí)鐘不停);否則進(jìn)入調(diào)分狀態(tài),等待操作,此時(shí)計(jì)時(shí)器停止走動(dòng)。當(dāng)再按下按鈕時(shí),若按下時(shí)間短于0.5s,則時(shí)間加1分;若按下時(shí)間長于0.5s,則進(jìn)入小時(shí)調(diào)整狀態(tài)。在小時(shí)調(diào)整狀態(tài)下,當(dāng)按鍵按下的時(shí)間長于0.5s時(shí),退出調(diào)整狀態(tài),時(shí)鐘繼續(xù)走動(dòng)。P1.1口按鍵在調(diào)時(shí)狀態(tài)下可實(shí)現(xiàn)減1功能。    使用方法:按下K1按鍵,如果

7、按下時(shí)間小于1秒,就會(huì)進(jìn)入省電模式,這時(shí)數(shù)碼管熄滅但是時(shí)鐘仍然運(yùn)行。如果按下K1按鍵時(shí)間大于1秒,就會(huì)進(jìn)入調(diào)分狀態(tài),此時(shí)計(jì)時(shí)器停止走動(dòng)等待操作,這時(shí)中間的兩位00會(huì)閃爍,這時(shí)當(dāng)按下K1按鍵時(shí)間小于0.5秒時(shí),時(shí)間信息就會(huì)加1(單位分鐘);若時(shí)間大于0.5秒,這時(shí)左邊的兩位00會(huì)閃爍,進(jìn)入小時(shí)調(diào)整,在小時(shí)調(diào)整狀態(tài)下按下S6按鍵時(shí)間小于0.5秒時(shí),時(shí)間信息就會(huì)加1(單位小時(shí)),如果按下按鍵時(shí)間大于0.5S時(shí),就會(huì)退出調(diào)整狀態(tài),時(shí)鐘繼續(xù)走動(dòng)。配件:采用PL2303芯片的USB轉(zhuǎn)TTL串口模塊 每個(gè)15元 含一根4芯杜邦連接線  你還可以另外購買我們的PL2303模塊,就能實(shí)現(xiàn)ST

8、C芯片的在線程序下載。只要連接3根線:一根串口入R連接單片機(jī)的P3.1TXD、一根串口出D連接單片機(jī)的P3.0 RXD、一根地線-連接單片機(jī)的電源地即可。    然后將PL2303的USB轉(zhuǎn)串口模塊插入電腦的USB口(已經(jīng)安裝好2303的驅(qū)動(dòng)),然后在STC編程軟件界面中選擇單片機(jī)型號(hào)STC89C52RC,選擇COM6(具體按電腦實(shí)際虛擬出的串口號(hào))波特率選擇9600,點(diǎn)擊“OPEN FILE”選擇你的燒寫文件,點(diǎn)擊“下載”按鈕,然后接通超聲波測距成品學(xué)習(xí)板的電源,3秒左右就能完成程序下載并運(yùn)行。以下是部分匯編源程序,購買我們產(chǎn)品后我們可以通過電子郵件將

9、完整的單片機(jī)匯編源程序和燒寫文件發(fā)送給客戶。 ; AT89S51時(shí)鐘程序 ;(該程序不全,不要直接使用。購買產(chǎn)品后提供全部程序和圖紙); 定時(shí)器T0、T1溢出周期為50MS,T0為秒計(jì)數(shù)用, T1為調(diào)整時(shí)閃爍用,; P1.0、P1.1、P1.2為調(diào)整按鈕,P0口 為字符輸出口,采用共陽顯示管。; 中斷入口程序 ;ORG 0000H ;程序執(zhí)行開始地址LJMP START ;跳到標(biāo)號(hào)START執(zhí)行ORG 0003H ;外中斷0中斷程序入口RETI ;外中斷0中斷返回ORG 000BH ;定時(shí)器T0中斷程序入口LJMP INTT0 ;跳至INTTO執(zhí)行ORG 0013H ;外中斷1中斷程序入口RE

10、TI ;外中斷1中斷返回ORG 001BH ;定時(shí)器T1中斷程序入口LJMP INTT1 ;跳至INTT1執(zhí)行ORG 0023H ;串行中斷程序入口地址RETI ;串行中斷程序返回 ; 主 程 序 ;START: LCALL ST ;上電顯示年月日及班級(jí)學(xué)號(hào)MOV R0,#70H ;清70H-7AH共11個(gè)內(nèi)存單元MOV R7,#0BH ;CLEARDISP: MOV R0,#00H ;INC R0 ;DJNZ R7,CLEARDISP ;MOV 20H,#00H ;清20H(標(biāo)志用)MOV 7AH,#0AH ;放入"熄滅符"數(shù)據(jù)MOV TMOD,#11H ;設(shè)T0、T1為

11、16位定時(shí)器MOV TL0,#0B0H ;50MS定時(shí)初值(T0計(jì)時(shí)用)MOV TH0,#3CH ;50MS定時(shí)初值MOV TL1,#0B0H ;50MS定時(shí)初值(T1閃爍定時(shí)用)MOV TH1,#3CH ;50MS定時(shí)初值SETB EA ;總中斷開放SETB ET0 ;允許T0中斷SETB TR0 ;開啟T0定時(shí)器MOV R4,#14H ;1秒定時(shí)用初值(50MS×20)START1: LCALL DISPLAY ;調(diào)用顯示子程序JNB P1.0,SETMM1 ;P1.0口為0時(shí)轉(zhuǎn)時(shí)間調(diào)整程序JNB P1.1,FUNSS ; 秒表功能,P1.1按鍵調(diào)時(shí)時(shí)作減1加能JNB P1.2,

12、FUNPT ;STOP,PUSE,CLRSJMP START1 ;P1.0口為1時(shí)跳回START1SETMM1: LJMP SETMM ;轉(zhuǎn)到時(shí)間調(diào)整程序SETMMFUNSS: LCALL DS20MSJB P1.1,START1WAIT11: JNB P1.1,WAIT11CPL 03HMOV 70H,#00HMOV 71H,#00HMOV 76H,#00HMOV 77H,#00HMOV 78H,#00HMOV 79H,#00HAJMP START1FUNPT: LCALL DS20MSJB P1.2,START1WAIT22: JNB P1.2,WAIT21CLR ET0CLR TR0WA

13、IT33: JB P1.2,WAIT31LCALL DS20MSJB P1.2,WAIT33WAIT66: JNB P1.2,WAIT61MOV R0,#70H ;清70H-79H共10個(gè)內(nèi)存單元MOV R7,#0AH ;CLEARP: MOV R0,#00H ;INC R0 ;DJNZ R7,CLEARP ;WAIT44: JB P1.2,WAIT41LCALL DS20MSJB P1.2,WAIT44WAIT55: JNB P1.2,WAIT51SETB ET0SETB TR0AJMP START1WAIT21: LCALL DISPLAYAJMP WAIT22WAIT31: LCALL

14、DISPLAYAJMP WAIT33WAIT41: LCALL DISPLAYAJMP WAIT44WAIT51: LCALL DISPLAYAJMP WAIT55WAIT61: LCALL DISPLAYAJMP WAIT66 ; 1秒計(jì)時(shí)程序 ;T0中斷服務(wù)程序INTT0: PUSH ACC ;累加器入棧保護(hù)PUSH PSW ;狀態(tài)字入棧保護(hù)CLR ET0 ;關(guān)T0中斷允許CLR TR0 ;關(guān)閉定時(shí)器T0JB 03H,FSSMOV A,#0B7H ;中斷響應(yīng)時(shí)間同步修正ADD A,TL0 ;低8位初值修正MOV TL0,A ;重裝初值(低8位修正值)MOV A,#3CH ;高8位初值修正A

15、DDC A,TH0 ;MOV TH0,A ;重裝初值(高8位修正值)SETB TR0 ;開啟定時(shí)器T0DJNZ R4, OUTT0 ;20次中斷未到中斷退出ADDSS: MOV R4,#14H ;20次中斷到(1秒)重賦初值MOV R0,#71H ;指向秒計(jì)時(shí)單元(71H-72H)ACALL ADD1 ;調(diào)用加1程序(加1秒操作)MOV A,R3 ;秒數(shù)據(jù)放入A(R3為2位十進(jìn)制數(shù)組合)CLR C ;清進(jìn)位標(biāo)志CJNE A,#60H,ADDMM ;ADDMM: JC OUTT0 ;小于60秒時(shí)中斷退出ACALL CLR0 ;大于或等于60秒時(shí)對(duì)秒計(jì)時(shí)單元清0MOV R0,#77H ;指向分計(jì)時(shí)

16、單元(76H-77H)ACALL ADD1 ;分計(jì)時(shí)單元加1分鐘MOV A,R3 ;分?jǐn)?shù)據(jù)放入ACLR C ;清進(jìn)位標(biāo)志CJNE A,#60H,ADDHH ;ADDHH: JC OUTT0 ;小于60分時(shí)中斷退出ACALL CLR0 ;大于或等于60分時(shí)分計(jì)時(shí)單元清0MOV R0,#79H ;指向小時(shí)計(jì)時(shí)單元(78H-79H)ACALL ADD1 ;小時(shí)計(jì)時(shí)單元加1小時(shí)MOV A,R3 ;時(shí)數(shù)據(jù)放入ACLR C ;清進(jìn)位標(biāo)志JB 03H,OUTT0 ;秒表時(shí)最大數(shù)為99CJNE A,#24H,HOUR ;HOUR: JC OUTT0 ;小于24小時(shí)中斷退出ACALL CLR0 ;大于或等于24

17、小時(shí)小時(shí)計(jì)時(shí)單元清0OUTT0: MOV 72H,76H ;中斷退出時(shí)將分、時(shí)計(jì)時(shí)單元數(shù)據(jù)移MOV 73H,77H ;入對(duì)應(yīng)顯示單元MOV 74H,78H ;MOV 75H,79H ;POP PSW ;恢復(fù)狀態(tài)字(出棧)POP ACC ;恢復(fù)累加器SETB ET0 ;開放T0中斷RETI ;中斷返回;秒表計(jì)時(shí)程序(10MS加1),低2位為0.1、0.01秒,中間2位為秒,最高位為分。;最大計(jì)數(shù)值為99FSS: MOV A,#0F7H ;中斷響應(yīng)時(shí)間同步修正,重裝初值(10ms)ADD A,TL0 ;低8位初值修正MOV TL0,A ;重裝初值(低8位修正值)MOV A,#0D8H ;高8位初值

18、修正ADDC A,TH0 ;MOV TH0,A ;重裝初值(高8位修正值)SETB TR0 ;開啟定時(shí)器T0MOV R0,#71H ;指向秒計(jì)時(shí)單元(71H-72H)ACALL ADD1 ;調(diào)用加1程序(加1秒操作)CLR C ;MOV A,R3 ;JZ FSS1 ;加1后為00,C=0SETB C ;加1后不為00,C=1FSS1: AJMP ADDMM ;省略; 加1子 程 序 ;ADD1: MOV A,R0 ;取當(dāng)前計(jì)時(shí)單元數(shù)據(jù)到ADEC R0 ;指向前一地址SWAP A ;A中數(shù)據(jù)高四位與低四位交換ORL A,R0 ;前一地址中數(shù)據(jù)放入A中低四位ADD A,#01H ;A加1操作DA

19、A ;十進(jìn)制調(diào)整MOV R3,A ;移入R3寄存器ANL A,#0FH ;高四位變0MOV R0,A ;放回前一地址單元MOV A,R3 ;取回R3中暫存數(shù)據(jù)INC R0 ;指向當(dāng)前地址單元SWAP A ;A中數(shù)據(jù)高四位與低四位交換ANL A,#0FH ;高四位變0MOV R0,A ;數(shù)據(jù)放入當(dāng)削地址單元中RET ;子程序返回省略; 延時(shí)程序 ;1MS延時(shí)程序,LED顯示程序用DL1MS: MOV R6,#14H #產(chǎn)品2:采用AT89C2051的6位LED電子鐘(計(jì)數(shù)器)一、原理說明:1、顯示原理:    顯示部分主要器件為2位共陽紅色數(shù)碼管,驅(qū)動(dòng)采用

20、PNP型三極管驅(qū)動(dòng),各端口配有限流電阻,驅(qū)動(dòng)方式為掃描,占用P1.0P1.6端口。冒號(hào)部分采用4個(gè)3.0的紅色發(fā)光,驅(qū)動(dòng)方式為獨(dú)立端口驅(qū)動(dòng),占用P1.7端口。2、鍵盤原理:    按鍵S1S3采用復(fù)用的方式與顯示部分的P3.5、P3.4、P3.2口復(fù)用。其工作方式為,在相應(yīng)端口輸出高電平時(shí)讀取按鍵的狀態(tài)并由單片機(jī)支除抖動(dòng)并賦予相應(yīng)的鍵值。3、迅響電路及輸入、輸出電路原理:    迅響電路由有源蜂鳴器和PNP型三極管組成。其工作原理是當(dāng)PNP型三極管導(dǎo)通后有源蜂鳴器立即發(fā)出定頻聲響。驅(qū)動(dòng)方式為獨(dú)立端口驅(qū)動(dòng),占用P3.

21、7端口。輸出電路是與迅響電路復(fù)合作用的,其電路結(jié)構(gòu)為有源蜂鳴器,5.1K定值電阻R6,排針J3并聯(lián)。當(dāng)有源蜂鳴器無迅響時(shí)J3輸出低電平,當(dāng)有源蜂鳴器發(fā)出聲響時(shí)J3輸出高電平,J3可接入數(shù)字電路等各種需要。驅(qū)動(dòng)方式為迅響復(fù)合輸出,不占端口。    輸入電路是與迅響電路復(fù)合作用的,其電路結(jié)構(gòu)是在迅響電路的PNP型三極管的基極電路中接入排針J2。引腳排針可改變單片機(jī)I/O口的電平狀態(tài),從而達(dá)到輸入的目的。驅(qū)動(dòng)方式為復(fù)合端口驅(qū)動(dòng),占用P3.7端口。4、單片機(jī)系統(tǒng):    本產(chǎn)品采用AT89C2051為核心器件(AT89C2

22、051燒寫程序必須借助專用編程器,我們提供的單片機(jī)已經(jīng)寫入程序),并配合所有的必須的電路,只具有上電復(fù)位的功能,無手動(dòng)復(fù)位功能。二、使用說明:1、功能按鍵說明: S1為功能選擇按鍵,S2為功能擴(kuò)展按鍵,S3為數(shù)值加一按鍵。2、功能及操作說明:操作時(shí),連續(xù)短時(shí)間(小于1秒)按動(dòng)S1,即可在以上的6個(gè)功能中連續(xù)循環(huán)。中途如果長按(大于2秒)S1,則立即回到時(shí)鐘功能的狀態(tài)。1、時(shí)鐘功能:上電后即顯示10:10:00 ,寓意十全十美。2、校時(shí)功能:短按一次S1,即當(dāng)前時(shí)間和冒號(hào)為閃爍狀態(tài),按動(dòng)S2則小時(shí)位加1,按動(dòng)S3則分鐘位加1,秒時(shí)不可調(diào)。3、鬧鐘功能:短按二次S1,顯示狀態(tài)為22:10:00,冒

23、號(hào)為長亮。按動(dòng)S2剛小時(shí)位加1,按動(dòng)S3則分鐘位加1,秒時(shí)不可調(diào)。當(dāng)按動(dòng)小時(shí)位超過23時(shí)則會(huì)顯示-:-:-,這個(gè)表示關(guān)閉鬧鐘功能。鬧鈴聲為蜂鳴器長鳴3秒鐘。4、倒計(jì)時(shí)功能:短按三次S1,顯示狀態(tài)為 0,冒號(hào)為長滅。按動(dòng)S2則從低位依此顯示高位,按動(dòng)S3則相應(yīng)位加1,當(dāng)S2按到第6次時(shí)會(huì)在所設(shè)定的時(shí)間狀態(tài)下開始倒計(jì)時(shí),再次按動(dòng)S2將再次進(jìn)入調(diào)整功能,并且停止倒計(jì)時(shí)。5、秒表功能:短按四次S1,顯示狀態(tài)為00:00:00,冒號(hào)為長亮。按動(dòng)S2則開始秒表計(jì)時(shí),再次按動(dòng)S2則停止計(jì)時(shí),當(dāng)停止計(jì)時(shí)的時(shí)候按動(dòng)S3則秒表清零。6、計(jì)數(shù)器功能:短按五次S1,顯示狀態(tài)為00:00:00,冒號(hào)為長滅,按動(dòng)S2則計(jì)

24、數(shù)器加1,按動(dòng)S3則計(jì)數(shù)器清零。采用AT89C2051的6位LED電子鐘(計(jì)數(shù)器)散件每套28元以下是部分C語言源程序,購買產(chǎn)品后可以向我們索要完整的單片機(jī)C語言源程序、燒寫文件和說明書。#include<REG2051.H>code senen_seg10=0x81,0xe7,0x92,0xa2,0xe4,0xa8,0x88,0xe3,0x80,0xa0; /P1.7(冒號(hào))口高電平bit key1_enter=0,key2_enter=0,key3_enter=0,countdown_mark=0,stopwatch_mark=0,count_mark=0,bell_mark=

25、0; /狀態(tài)標(biāo)志unsigned char program=0,program_variable=0,count_bit=0,count=0;unsigned char hour=10,minute=10,second=0; /時(shí)間變量unsigned char delayed_hour=22,delayed_minute=10,delayed_second=0; /定時(shí)變量 unsigned char count_hour=0,count_minute=0,count_second=0; /計(jì)時(shí)計(jì)數(shù)變量unsigned int count_time=0,count_count=0; void

26、 delay(unsigned int t) /延時(shí)子程序 unsigned int i,j;for(i=0;i<t;i+)for(j=0;j<10;j+); void time0_init(void) /定時(shí)計(jì)數(shù)0器初始化EA=0; TR0=0;TMOD=0x02;TH0=0x4;TL0=0x4;ET0=1;TR0=1;EA=1;static void timer0_isr(void) interrupt TF0_VECTOR using 1 /定時(shí)計(jì)數(shù)0器中斷函數(shù)count_time+; /時(shí)鐘計(jì)時(shí)程序if(count_time>=4020)count_time=0;se

27、cond+;if(second>=60)second=0;minute+;if(minute>=60)minute=0;hour+;if(hour>=24)hour=0;if(delayed_hour=hour && delayed_minute=minute && second<4) P3_7=0;else P3_7=1;if(countdown_mark=1) /倒計(jì)時(shí)程序count_count+;if(count_count>=4000 && (count_second!=0|count_minute!=0|c

28、ount_hour!=0)count_count=0;count_second-;if(count_second>=60)count_second=59;count_minute-;if(count_minute>=60)count_minute=59;count_hour-;if(count_hour>=100) count_hour=99;if(count_second=0&&count_minute=0&&count_hour=0&&count_count<=12000) P3_7=0;else P3_7=1;if(

29、count_count>=15000) count_count=14000; if(stopwatch_mark=1) /秒表程序count_count+;if(count_count>=40)count_count=0;count_second+;if(count_second>=100)count_second=0;count_minute+;if(count_minute>=60)count_minute=0;count_hour+;if(count_hour>=60) count_hour=0;unsigned char show_key (void)un

30、signed char x=0,y=0;switch (program)case 0: P1&=senen_segsecond%10; /時(shí)鐘秒的個(gè)位break;case 1: if(count_time>=2000) P1&=senen_segsecond%10; /校正秒的個(gè)位break;case 2: if(delayed_hour=24) P1=0xfe; /鬧鐘秒的個(gè)位else P1&=senen_segdelayed_second%10; break;case 3: if(count_bit>=0) P1&=senen_segcount_

31、second%10;/倒計(jì)時(shí)秒的個(gè)位else P1=0xff;break;case 4: P1&=senen_segcount_second%10; /秒表秒的個(gè)位break;case 5: P1&=senen_segcount_second%10; /計(jì)數(shù)器個(gè)位break;P3_3=0;delay(10);if(P3_5=0) /功能鍵1識(shí)別key1_enter=1;if(count<=254)count+;if(P3_4=0) key2_enter=1; /功能鍵2識(shí)別if(P3_2=0) key3_enter=1; /功能鍵3識(shí)別 P3_3=1;P1|=0xff;s

32、witch (program) case 0: P1&=senen_segsecond/10; /時(shí)鐘秒的十位break;case 1: if(count_time>=2000) P1&=senen_segsecond/10; /校正秒的十位break;case 2: if(delayed_hour=24) P1=0xfe; /鬧鐘秒的十位else P1&=senen_segdelayed_second/10; break;case 3: if(count_bit>=1) P1&=senen_segcount_second/10;/倒計(jì)時(shí)秒的十位el

33、se P1=0xff;break;case 4: P1&=senen_segcount_second/10; /秒表秒的十位break;case 5: P1&=senen_segcount_second/10; /計(jì)數(shù)器十位break; P3_1=0;delay(10);P3_1=1;P1|=0xff;switch (program) case 0: P1&=senen_segminute%10; /時(shí)鐘分的個(gè)位break;case 1: if(count_time>=2000) P1&=senen_segminute%10; /校正分的個(gè)位break;c

34、ase 2: if(delayed_hour=24) P1=0xfe; /鬧鐘分的個(gè)位else P1&=senen_segdelayed_minute%10; break;case 3: if(count_bit>=2) P1&=senen_segcount_minute%10;/倒計(jì)時(shí)分的個(gè)位else P1=0xff;break;case 4: P1&=senen_segcount_minute%10; /秒表分的個(gè)位break;case 5: P1&=senen_segcount_minute%10; /計(jì)數(shù)器百位break;P3_2=0;delay(

35、10);P3_2=1;P1|=0xff;switch (program)case 0: P1&=senen_segminute/10; /時(shí)鐘秒的個(gè)位break;case 1: if(count_time>=2000) P1&=senen_segminute/10; /校正秒的個(gè)位break;case 2: if(delayed_hour=24) P1=0xfe; /鬧鐘秒的個(gè)位else P1&=senen_segdelayed_minute/10; break;case 3: if(count_bit>=3) P1&=senen_segcount_

36、minute/10;/倒計(jì)時(shí)秒的個(gè)位else P1=0xff;break; case 4: P1&=senen_segcount_minute/10; /秒表秒的個(gè)位break;case 5: P1&=senen_segcount_minute/10; /計(jì)數(shù)器千位break;P3_5=0;delay(10);P3_5=1;P1|=0xff;switch (program)case 0: P1&=senen_seghour%10; /時(shí)鐘時(shí)的個(gè)位break;case 1: if(count_time>=2000) P1&=senen_seghour%10;

37、 /校正時(shí)的個(gè)位break;case 2: if(delayed_hour=24) P1=0xfe; /鬧鐘時(shí)的個(gè)位else P1&=senen_segdelayed_hour%10; break;case 3: if(count_bit>=4) P1&=senen_segcount_hour%10;/倒計(jì)時(shí)時(shí)的個(gè)位else P1=0xff;break;case 4: P1&=senen_segcount_hour%10; /秒表時(shí)的個(gè)位break;case 5: P1&=senen_segcount_hour%10; /計(jì)數(shù)器萬位break;P3_0=0

38、;delay(10);if(P3_4=1 && key2_enter=1)x=3; /確認(rèn)功能鍵2識(shí)別,返回3key2_enter=0;P3_0=1;P1|=0xff;switch (program) case 0: P1&=senen_seghour/10; /時(shí)鐘時(shí)的個(gè)位break;case 1: if(count_time>=2000) P1&=senen_seghour/10; /校正時(shí)的個(gè)位break;case 2: if(delayed_hour=24) P1=0xfe; /鬧鐘時(shí)的個(gè)位else P1&=senen_segdelayed

39、_hour/10; break;case 3: if(count_bit>=5)P1&=senen_segcount_hour/10; /倒計(jì)時(shí)時(shí)的個(gè)位else P1=0xff;break;case 4: P1&=senen_segcount_hour/10; /秒表時(shí)的個(gè)位break;case 5: P1&=senen_segcount_hour/10; /計(jì)數(shù)器萬位break;P3_4=0;delay(10);if(P3_5=1 && key1_enter=1) /確認(rèn)功能鍵1識(shí)別,執(zhí)行退出或進(jìn)入下一個(gè)功能if(count>=127) x

40、=1; /確認(rèn)功能鍵1為長按,返回1else x=2; /確認(rèn)功能鍵1為短按,返回2key1_enter=0;count=0;if(P3_2=1 && key3_enter=1)x=4; /確認(rèn)功能鍵3識(shí)別,返回4key3_enter=0; P3_4=1;P1|=0xff;if(program<=1 && count_time>=2000) P1&=0xff; /校時(shí)和顯示功能時(shí)鐘時(shí)冒號(hào)閃爍if(program<=1 && count_time<=2000) P1&=0x7f;if(program=2) P

41、1&=0x7f; /設(shè)置鬧鐘功能時(shí)冒號(hào)長亮if(program=3) P1&=0xff; /設(shè)置倒計(jì)時(shí)功能時(shí)冒號(hào)長滅if(program=4) P1&=0x7f; /設(shè)置秒表功能時(shí)冒號(hào)長亮if(program=5) P1&=0xff; /設(shè)置計(jì)數(shù)時(shí)冒號(hào)長滅y=x;x=0;return y;void main() /主程序P1=0xff; P3=0xff;time0_init();while(1)switch(program)case 0: while(program=0) /時(shí)鐘菜單switch(show_key()case 0: break;case 1: p

42、rogram=0;break;case 2: program=1;break;break; /校時(shí)菜單case 1: while(program=1)switch(show_key()case 0: break;case 1: program=0;break;case 2: program=2;break;case 3: hour+;if(hour>=24)hour=0;break;case 4: minute+;if(minute>=60)minute=0;break;break;case 2: while(program=2) /鬧鐘菜單switch(show_key()cas

43、e 0: break;case 1: program=0;break;case 2: program=3;break;case 3: delayed_hour+;if(delayed_hour>=25)delayed_hour=0;break;case 4: delayed_minute+;if(delayed_minute>=60)delayed_minute=0;break;break;case 3: while(program=3) /倒計(jì)時(shí)菜單switch(show_key()case 0: break;case 1: program=0;break;case 2: program=4;break;case 3: count_bit+;if(count_bit>=7)count_bit=0;break;case 4: swi

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論