




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
PAGEPAGE4單片機電子時鐘設(shè)計一、作品功能介紹該作品是個性化電子鐘設(shè)計,技術(shù)上主要用單片機(AT89S52)主控,6位LED數(shù)碼顯示,分別顯示“小時:分鐘:秒”。該作品主要用于24小時計時顯示,能整時報時,能作為秒表使用,能定時鬧鈴1分鐘。功能介紹:(1)上電以后自動進(jìn)入計時狀態(tài),起始于00:00:00。(2)設(shè)計鍵盤調(diào)整時間,完成時間設(shè)計,并設(shè)置鬧鐘。(3)定時時間為1/100秒,可采用定時器實現(xiàn)。(4)采用LED數(shù)碼管顯示,時、分,秒采用數(shù)字顯示。(5)采用24小時制,具有方便的時間調(diào)校功能。(6)具有時鐘和秒表的切換功能。 使用方法:開機后時鐘在00:00:00起開始計時。長按P3.2進(jìn)入調(diào)分狀態(tài):分單元閃爍,按P3.2加1,按P3.3減1.再長按P3.2進(jìn)入時調(diào)整狀態(tài),時單元閃爍,加減調(diào)整同調(diào)分.按長按退出調(diào)整狀態(tài)。(2)按P3.3進(jìn)入設(shè)定鬧時狀態(tài):12:00:,可進(jìn)行分設(shè)定,按P3.4分加1,再按P3.2為時調(diào)整,按P3.4時加1,按P3.3調(diào)鬧鐘結(jié)束.在鬧鈴時可按P3.2停鬧,不按鬧鈴1分鐘。(3)按下P3.4進(jìn)入秒表狀態(tài):再按P3.4秒表又啟動,按P3.4暫停,再按P3.4秒表清零,按P3.4退出秒表回到時鐘狀態(tài)。二、電路原理圖如原理圖所示,硬件系統(tǒng)主要由單片機最小應(yīng)用系統(tǒng)、LED數(shù)碼管顯示模塊、電源模塊、晶振模塊、按鍵模塊等組成。電子時鐘原理圖各個模塊設(shè)計1.單片機系統(tǒng)AT89S52AT89S52概述:是一款非常適合單片機初學(xué)者學(xué)習(xí)的單片機,它完全兼容傳統(tǒng)的8051,8031的指令系統(tǒng),他的運行速度要比8051快最高支持達(dá)33MHz的晶體震蕩器,在此系統(tǒng)中使用12MHz的晶振。AT89S52具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復(fù)位為止……主要性能:與MCS-51單片機產(chǎn)品兼容、8K字節(jié)在系統(tǒng)可編程Flash存儲器、1000次擦寫周期、全靜態(tài)操作:0Hz~33Hz、三級加密程序存儲器、32個可編程I/O口線、三個16位定時器/計數(shù)器八個中斷源、全雙工UART串行通道、低功耗空閑和掉電模式、掉電后中斷可喚醒、看門狗定時器、雙數(shù)據(jù)指針、掉電標(biāo)識符。2、顯示模塊LED數(shù)碼管是由發(fā)光二極管構(gòu)成的,亦稱半導(dǎo)體數(shù)碼管。將條狀發(fā)光二極管按照共陰極(負(fù)極)或共陽極(正極)的方法連接,組成“8”字,再把發(fā)光二極管另一電極作筆段電極,就構(gòu)成了LED數(shù)碼管。若按規(guī)定使某些筆段上的發(fā)光二極管發(fā)光,就能顯示從0~9的…系列數(shù)字。同熒光數(shù)碼管(VFD)、輝光數(shù)碼管(NRT)相比,它具有:體積小、功耗低、耐震動、壽命長、亮度高、單色性好、發(fā)光響應(yīng)的時間短,能與TTL、CMOS電路兼容等的數(shù)顯器件。+、-分別表示公共陽極和公共陰極。a~g是7個筆段電極,DP為小數(shù)點。另有一種字高為7.6mm的超小型LED數(shù)碼管,管腳從左右兩排引出,小數(shù)點則是獨立的。本系統(tǒng)利用6位LED數(shù)碼管顯示時間,共陰極結(jié)構(gòu)。LED數(shù)碼管由7段發(fā)光二極管組成,當(dāng)要顯示某個數(shù)字時只要將數(shù)字所對應(yīng)的引腳送入低電平。3.按鍵模塊本設(shè)計中主要有三個控制按鍵,按鍵功能為:(1)P3.2為調(diào)時間模式,長按P3.2進(jìn)入調(diào)分狀態(tài):分單元閃爍,按P3.2加1,按P3.3減1.再長按P3.2進(jìn)入時調(diào)整狀態(tài),時單元閃爍,加減調(diào)整同調(diào)分.按長按退出調(diào)整狀態(tài)。(2)按P3.3進(jìn)入設(shè)定鬧時狀態(tài):12:00:,可進(jìn)行分設(shè)定,按P3.4分加1,再按P3.2為時調(diào)整,按P3.4時加1,按P3.3調(diào)鬧鐘結(jié)束.在鬧鈴時可按P3.2停鬧,不按鬧鈴1分鐘。(3)按下P3.4進(jìn)入秒表狀態(tài):再按P3.4秒表又啟動,按P3.4暫停,再按P3.4秒表清零,按P3.4退出秒表回到時鐘狀態(tài)。4.晶振模塊在AT89S51芯片內(nèi)部有一個高增益反相放大器,其輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。而在芯片內(nèi)部,XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個穩(wěn)定的自激振蕩器。時鐘電路產(chǎn)生的振蕩脈沖經(jīng)過觸發(fā)器進(jìn)行二分頻之后,才成為單片機的時鐘脈沖信號。晶振電路 三、程序設(shè)計源程序代碼;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AT89S52時鐘程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*****************************************************************定時器T0、T1溢出周期為50MS,T0為秒計數(shù)用,T1為調(diào)整時閃爍及秒表定時用,P3.2、P3.3、P3.4為調(diào)整按鈕,P0口為字符輸出口,P2為掃描口,P1.2為蜂嗚器口,采用共陽顯示管。50H-55H為鬧鐘定時單元,60H-65H為秒表計時單元,70H-75H為顯示時間單元,76H-79H為分時計時單元。03H標(biāo)志=0時鐘閃爍,=1秒表,05H=0,不鬧鈴,=1要鬧鈴.07H每秒改變一次,用作間隔嗚叫.*****************************************************************DISPFIRSTEQU30H;顯示首址存放單元BELLEQUP1.2CONBSEQU2FH;存放報時次數(shù)CLOCKEQU2DH****************************************中斷入口程序****************************************ORG0000H;程序執(zhí)行開始地址LJMPSTART;跳到標(biāo)號START執(zhí)行ORG0003H;外中斷0中斷程序入口RETI;外中斷0中斷返回ORG000BH;定時器T0中斷程序入口 LJMPINTT0;跳至INTTO執(zhí)行ORG0013H;外中斷1中斷程序入口 RETI;外中斷1中斷返回 ORG001BH;定時器T1中斷程序入口 LJMPINTT1;跳至INTT1執(zhí)行 ORG0023H;串行中斷程序入口地址RETI;串行中斷程序返回****************************************以下程序開始;;****************************************整點報時用QQQQ:MOVA,#10HMOVB,79HMULABADDA,78HMOVCONBS,ABSLOOP:LCALLDS21MSLCALLDL1SLCALLDL1SLCALLDL1SDJNZCONBS,BSLOOPCLR08H;清整點報時標(biāo)志AJMPSTART1****************************************主程序開始;;****************************************START:LCALLST;上電顯示00:00:00MOVR0,#00H ;清00H-7FH內(nèi)存單元MOVR7,#80H ;CLEARDISP:MOV@R0,#00H ;INCR0;DJNZR7,CLEARDISP;MOV20H,#00H ;清20H(標(biāo)志用)MOV55H,#1MOV54H,#2MOV7AH,#0AH;放入"熄滅符"數(shù)據(jù)MOV TMOD,#11H;設(shè)T0、T1為16位定時器MOVTL0,#0B0H ;50MS定時初值(T0計時用)MOVTH0,#3CH ;50MS定時初值MOVTL1,#0B0H ;50MS定時初值(T1閃爍定時用)MOVTH1,#3CH ;50MS定時初值SETBEA;總中斷開放SETBET0;允許T0中斷SETBTR0;開啟T0定時器MOVR4,#14H;1秒定時用計數(shù)值(50MS×20)MOVDISPFIRST,#70H;顯示單元為70-75H;以下主程序循環(huán)START1:LCALLDISPLAY;調(diào)用顯示子程序JNB P3.2,SETMM1;P3.2口為0時轉(zhuǎn)時間調(diào)整程序JNBP3.3,TSFUN;定時鬧鈴設(shè)定JNBP3.4,FUNPT;秒表功能(STOP,RUN,CLR)JB08H,QQQQAJMPSTART1;P3.2口為1時跳回START1FUNPT:LJMPFUNPTTSTART12:LJMPSTART1以下鬧鈴時間設(shè)定程序,按P3.3進(jìn)入設(shè)定TSFUN:LCALLDS20MSJBP3.3,START1;WAIT113:JNBP3.3,WAIT113;等待鍵釋放JB05H,CLOSESP;鬧鈴已開的話,關(guān)鬧鈴MOVDISPFIRST,#52H;進(jìn)入鬧鈴設(shè)定程序,顯示52-55H鬧鐘定時單元DSWAIT:SETBEALCALLDISPLAYJNBP3.4,DSFINC;分加1JNBP3.2,DSDEC;分減1JNBP3.3,DSSFU;進(jìn)入時調(diào)整AJMPDSWAITCLOSESP:CLR05H;關(guān)鬧鈴標(biāo)志CLRBELL AJMPSTART1DSSFU:LCALLDS20MS;消抖JBP3.3,DSWAITLJMPDSSFUNN;進(jìn)入時調(diào)整;SETMM1:LJMPSETMM;轉(zhuǎn)到時間調(diào)整程序SETMMDSFINC:LCALLDS20MS;消抖JBP3.4,DSWAITDSWAIT12:LCALLDISPLAY;等鍵釋放JNBP3.4,DSWAIT12CLREAMOVR0,#53H;LCALLADD1;鬧鈴設(shè)定分加1MOV A,R3;分?jǐn)?shù)據(jù)放入ACLRC;清進(jìn)位標(biāo)志CJNEA,#60H,ADDHH22;ADDHH22:JC DSWAIT;小于60分時返回ACALLCLR0;大于或等于60分時分計時單元清0AJMPDSWAITDSDEC:LCALLDS20MS;消抖JBP3.2,DSWAITDSWAITEE:LCALLDISPLAY;等鍵釋放JNBP3.2,DSWAITEECLREAMOVR0,#53H;LCALLsub1;鬧鈴設(shè)定分減1LJMPDSWAIT;以下秒表暫停\清零功能程序;按下P3.4切換秒表功能,再按開始計時,暫?;蚯?,最后按P3.4退出秒表回到時鐘計時FUNPTT:LCALLDS20MSJBP3.4,START12WAIT22:JNBP3.4,WAIT21CPL03HJNB03H,TIMFUNMOVDISPFIRST,#60H;顯示秒表數(shù)據(jù)單元MOV60H,#00HMOV61H,#00HMOV62H,#00HMOV63H,#00HMOV64H,#00HMOV65H,#00HMOVTL1,#0F0H ;10MS定時初值MOVTH1,#0D8H ;10MS定時初值WAIT88:LCALLDS20MSJBP3.4,WAIT81WAIT99:JNBP3.4,WAIT99SETBTR1;T1運行控制軟件SETBET1;T1溢出中斷允許WAIT33:LCALLDS20MSJBP3.4,WAIT31WAIT44:JNBP3.4,WAIT41CLRET1CLRTR1WAIT55:LCALLDS20MSJBP3.4,WAIT51WAIT66:JNBP3.4,WAIT61MOV60H,#00HMOV61H,#00HMOV62H,#00HMOV63H,#00HMOV64H,#00HMOV65H,#00HTIMFUN:MOVDISPFIRST,#72H;顯示時鐘數(shù)據(jù)單元CLRET1CLRTR1AJMPFUNSS11FUNSS11:AJMPSTART1;以下鍵等待釋放時顯示不會熄滅用WAIT21:LCALLDISPLAYAJMPWAIT22WAIT31:LCALLDISPLAYAJMPWAIT33WAIT41:LCALLDISPLAYAJMPWAIT44WAIT51:LCALLDISPLAYAJMPWAIT55WAIT61:LCALLDISPLAYAJMPWAIT66WAIT81:LCALLDISPLAYAJMPWAIT88WAIT91:LCALLDISPLAYAJMPWAIT99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1秒計時程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T0中斷服務(wù)程序INTT0:PUSHACC;累加器入棧保護PUSHPSW;狀態(tài)字入棧保護CLRET0;關(guān)T0中斷允許CLRTR0;關(guān)閉定時器T0MOVA,#0B7H;中斷響應(yīng)時間同步修正ADDA,TL0;低8位初值修正MOVTL0,A;重裝初值(低8位修正值)MOVA,#3CH;高8位初值修正ADDCA,TH0;MOVTH0,A;重裝初值(高8位修正值)SETBTR0;開啟定時器T0DJNZR4,OUTT0;20次中斷未到中斷退出ADDSS:MOV R4,#14H;20次中斷到(1秒)重賦初值CPL07H;鬧鈴時間隔嗚叫用MOV R0,#71H;指向秒計時單元(71H-72H)ACALLADD1;調(diào)用加1程序(加1秒操作)MOVA,R3;秒數(shù)據(jù)放入A(R3為2位十進(jìn)制數(shù)組合)CLR C;清進(jìn)位標(biāo)志CJNEA,#60H,ADDMM;ADDMM:JC OUTT0;小于60秒時中斷退出ACALLCLR0;大于或等于60秒時對秒計時單元清0MOV R0,#77H;指向分計時單元(76H-77H)ACALLADD1;分計時單元加1分鐘MOV A,R3;分?jǐn)?shù)據(jù)放入ACLRC;清進(jìn)位標(biāo)志CJNEA,#60H,ADDHH;ADDHH:JC OUTT0;小于60分時中斷退出ACALLCLR0;大于或等于60分時分計時單元清0LCALLDS20MS;正點報時SETB08HMOV R0,#79H;指向小時計時單元(78H-79H)ACALLADD1;小時計時單元加1小時MOVA,R3;時數(shù)據(jù)放入ACLRC;清進(jìn)位標(biāo)志CJNEA,#24H,HOUR;HOUR:JCOUTT0;小于24小時中斷退出ACALLCLR0;大于或等于24小時小時計時單元清0OUTT0:MOV72H,76H;中斷退出時將分、時計時單元數(shù)據(jù)移MOV73H,77H;入對應(yīng)顯示單元MOV74H,78H;MOV75H,79H;LCALLBAOJPOP PSW;恢復(fù)狀態(tài)字(出棧)POPACC;恢復(fù)累加器SETBET0;開放T0中斷RETI;中斷返回;****************************************;;閃動調(diào)時程序\秒表功能程序;;;****************************************;T1中斷服務(wù)程序,用作時間調(diào)整時調(diào)整單元閃爍指示或秒表計時INTT1:PUSHACC;中斷現(xiàn)場保護PUSHPSW;JB03H,MMFUN;=1時秒表MOVTL1,#0B0H;裝定時器T1定時初值MOVTH1,#3CH ;DJNZR2,INTT1OUT ;0.3秒未到退出中斷(50MS中斷6次)MOVR2,#06H ;重裝0.3秒定時用初值CPL02H ;0.3秒定時到對閃爍標(biāo)志取反JB02H,FLASH1 ;02H位為1時顯示單元"熄滅"MOV72H,76H;02H位為0時正常顯示MOV73H,77H;MOV74H,78H;MOV75H,79H;INTT1OUT:POPPSW ;恢復(fù)現(xiàn)場POPACC;RETI;中斷退出FLASH1:JB01H,FLASH2;01H位為1時,轉(zhuǎn)小時熄滅控制MOV72H,7AH;01H位為0時,"熄滅符"數(shù)據(jù)放入分MOV73H,7AH;顯示單元(72H-73H),將不顯示分?jǐn)?shù)據(jù)MOV74H,78H;MOV75H,79H;AJMPINTT1OUT;轉(zhuǎn)中斷退出FLASH2:MOV72H,76H;01H位為1時,"熄滅符"數(shù)據(jù)放入小時MOV73H,77H;顯示單元(74H-75H),小時數(shù)據(jù)將不顯示MOV74H,7AH;MOV75H,7AH;AJMPINTT1OUT;轉(zhuǎn)中斷退出;MMFUN:CLRTR1MOVA,#0F7H;中斷響應(yīng)時間同步修正,重裝初值(10ms)ADDA,TL1;低8位初值修正MOVTL1,A;重裝初值(低8位修正值)MOVA,#0D8H;高8位初值修正ADDCA,TH1;MOVTH1,A;重裝初值(高8位修正值)SETBTR1;開啟定時器T1MOV R0,#61H;指向秒計時單元(71H-72H)ACALLADD1;調(diào)用加1程序(加1秒操作)CLRC;MOVA,R3;JZFSS1;加1后為00,C=0AJMPOUTT01;加1后不為00,C=1FSS1:ACALLCLR0;大于或等于60秒時對秒計時單元清0MOV R0,#63H;指向分計時單元(76H-77H)ACALLADD1;分計時單元加1分鐘MOV A,R3;分?jǐn)?shù)據(jù)放入ACLRC;清進(jìn)位標(biāo)志CJNEA,#60H,ADDHH1;ADDHH1:JC OUTT01;小于60分時中斷退出LCALLCLR0;大于或等于60分時分計時單元清0MOV R0,#65H;指向小時計時單元(78H-79H)ACALLADD1;小時計時單元加1小時OUTT01:POP PSW;恢復(fù)狀態(tài)字(出棧)POPACC;恢復(fù)累加器RETI;中斷返回****************************************;;加1子程序;;;****************************************ADD1:MOV A,@R0;取當(dāng)前計時單元數(shù)據(jù)到ADEC R0;指向前一地址SWAPA;A中數(shù)據(jù)高四位與低四位交換ORL A,@R0;前一地址中數(shù)據(jù)放入A中低四位ADD A,#01H;A加1操作DA A;十進(jìn)制調(diào)整MOVR3,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;子程序返回;****************************************;;分減1子程序;;;****************************************;SUB1:MOV A,@R0;取當(dāng)前計時單元數(shù)據(jù)到ADEC R0;指向前一地址SWAPA;A中數(shù)據(jù)高四位與低四位交換ORL A,@R0;前一地址中數(shù)據(jù)放入A中低四位JZSUB11DEC A;A減1操作SUB111:MOVR3,A;移入R3寄存器ANL A,#0FH;高四位變0CLR C;清進(jìn)位標(biāo)志SUBBA,#0AHSUB1111:JC SUB1110MOV @R0,#09H;大于等于0AH,為9SUB110: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;子程序返回;SUB11:MOVA,#59HAJMPSUB111SUB1110:MOVA,R3;移入R3寄存器ANL A,#0FH;高四位變0MOV@R0,AAJMPSUB110;****************************************;;時減1子程序;;;****************************************SUBB1:MOV A,@R0;取當(dāng)前計時單元數(shù)據(jù)到ADEC R0;指向前一地址SWAPA;A中數(shù)據(jù)高四位與低四位交換ORL A,@R0;前一地址中數(shù)據(jù)放入A中低四位JZSUBB11;00減1為23(小時)DEC A;A減1操作SUBB111:MOVR3,A;移入R3寄存器ANL A,#0FH;高四位變0CLR C;清進(jìn)位標(biāo)志SUBBA,#0AH;時個位大于9為9SUBB1111:JC SUBB1110;MOV @R0,#09H;大于等于0AH,為9SUBB110:MOV A,R3;取回R3中暫存數(shù)據(jù)INC R0;指向當(dāng)前地址單元SWAP A;A中數(shù)據(jù)高四位與低四位交換ANL A,#0FH;高四位變0MOV @R0,A;時十位數(shù)數(shù)據(jù)放入RET;子程序返回;SUBB11:MOVA,#23HAJMPSUBB111SUBB1110:MOVA,R3;時個位小于0A不處理ANL A,#0FH;高四位變0MOV@R0,A;個位移入AJMPSUBB110;****************************************;;清零程序;;;****************************************;對計時單元復(fù)零用CLR0:CLR A;清累加器MOV @R0,A;清當(dāng)前地址單元DEC R0;指向前一地址MOV @R0,A;前一地址單元清0RET;子程序返回;;****************************************;;時鐘時間調(diào)整程序;;;****************************************;當(dāng)調(diào)時按鍵按下時進(jìn)入此程序SETMM:CLR ET0;關(guān)定時器T0中斷CLR TR0;關(guān)閉定時器T0LCALL DL1S;調(diào)用1秒延時程序LCALLDS20MS;消抖JB P3.2,CLOSEDIS;鍵按下時間小于1秒,關(guān)閉顯示(省電)MOV R2,#06H;進(jìn)入調(diào)時狀態(tài),賦閃爍定時初值MOV70H,#00H;調(diào)時時秒單元為00秒MOV71H,#00HSETB ET1;允許T1中斷SETB TR1;開啟定時器T1SET2:JNB P3.2,SET1;P3.2口為0(鍵未釋放),等待SETB 00H;鍵釋放,分調(diào)整閃爍標(biāo)志置1SET4:JB P3.2,SET3;等待鍵按下LCALL DL05S;有鍵按下,延時0.5秒LCALLDS20MS;消抖JNB P3.2,SETHH;按下時間大于0.5秒轉(zhuǎn)調(diào)小時狀態(tài)MOV R0,#77H;按下時間小于0.5秒加1分鐘操作LCALL ADD1;調(diào)用加1子程序MOV A,R3;取調(diào)整單元數(shù)據(jù)CLR C;清進(jìn)位標(biāo)志CJNE A,#60H,HHH;調(diào)整單元數(shù)據(jù)與60比較HHH:JC SET4;調(diào)整單元數(shù)據(jù)小于60轉(zhuǎn)SET4循環(huán)LCALL CLR0;調(diào)整單元數(shù)據(jù)大于或等于60時清0CLR C;清進(jìn)位標(biāo)志AJMP SET4;跳轉(zhuǎn)到SET4循環(huán)CLOSEDIS:SETB ET0;省電(LED不顯示)狀態(tài)。開T0中斷SETB TR0;開啟T0定時器(開時鐘)CLOSE:JB P3.2,CLOSE;無按鍵按下,等待。LCALLDS20MS;消抖JB P3.2,CLOSE;是干擾返回CLOSE等待WAITH:JNB P3.2,WAITH;等待鍵釋放LJMP START1;返回主程序(LED數(shù)據(jù)顯示亮)SETHH:CLR 00H;分閃爍標(biāo)志清除(進(jìn)入調(diào)小時狀態(tài))SETB01H;小時調(diào)整標(biāo)志置1SETHH1:JNB P3.2,SET5;等待鍵釋放SET6:JB P3.2,SET7;等待按鍵按下LCALL DL05S;有鍵按下延時0.5秒LCALLDS20MS;消抖JNB P3.2,SETOUT;按下時間大于0.5秒退出時間調(diào)整MOV R0,#79H;按下時間小于0.5秒加1小時操作LCALL ADD1;調(diào)加1子程序MOV A,R3;CLR C;CJNE A,#24H,HOUU;計時單元數(shù)據(jù)與24比較HOUU:JC SET6;小于24轉(zhuǎn)SET6循環(huán)LCALL CLR0;大于或等于24時清0操作AJMP SET6;跳轉(zhuǎn)到SET6循環(huán)SETOUT:JNB P3.2,SETOUT1;調(diào)時退出程序。等待鍵釋放LCALLDS20MS;消抖JNB P3.2,SETOUT;是抖動,返回SETOUT再等待CLR 01H;清調(diào)小時標(biāo)志CLR 00H;清調(diào)分標(biāo)志CLR 02H;清閃爍標(biāo)志CLR TR1;關(guān)閉定時器T1CLR ET1;關(guān)定時器T1中斷SETB TR0;開啟定時器T0SETB ET0;開定時器T0中斷(計時開始)LJMP START1;跳回主程序SET1:LCALLDISPLAY;鍵釋放等待時調(diào)用顯示程序(調(diào)分)AJMPSET2;防止鍵按下時無時鐘顯示SET3:LCALLDISPLAY;等待調(diào)分按鍵時時鐘顯示用JNBP3.3,FUNSUB;減1分操作AJMPSET4;調(diào)分等待SET5:LCALLDISPLAY;鍵釋放等待時調(diào)用顯示程序(調(diào)小時)AJMPSETHH1;防止鍵按下時無時鐘顯示SET7:LCALLDISPLAY;等待調(diào)小時按鍵時時鐘顯示用JNBP3.3,FUNSUBB;小時減1操作AJMPSET6;調(diào)時等待SETOUT1:LCALLDISPLAY;退出時鐘調(diào)整時鍵釋放等待AJMPSETOUT;防止鍵按下時無時鐘顯示;FUNSUB,分減1程序FUNSUB:LCALLDS20MS;消抖JBP3.3,SET41;干擾,返回調(diào)分等待FUNSUB1:JNBP3.3,FUNSUB1;等待鍵放開MOV R0,#77H;LCALLSUB1;分減1程序LJMPSET4;返回調(diào)分等待;SET41:LJMPSET4;;FUNSUBB,時減1程序;FUNSUBB:LCALLDS20MS;消抖JBP3.3,SET61;干擾,返回調(diào)時等待FUNSUBB1:JNBP3.3,FUNSUBB1;等待鍵放開MOV R0,#79H;LCALLSUBB1;時減1程序LJMPSET6;返回調(diào)時等待;SET61:LJMPSET6;***************************************;;顯示程序;;;***************************************;顯示數(shù)據(jù)在70H-75H單元內(nèi),用六位LED共陽數(shù)碼管顯示,P0口輸出段碼數(shù)據(jù),P2口作;掃描控制,每個LED數(shù)碼管亮1MS時間再逐位循環(huán)。DISPLAY:MOV R1,DISPFIRST;指向顯示數(shù)據(jù)首址MOV R5,#0FEH;掃描控制字初值PLAY:MOV A,R5;掃描字放入AMOV P2,A;從P2口輸出MOV A,@R1;取顯示數(shù)據(jù)到AMOV DPTR,#TAB;取段碼表地址MOVC A,@A+DPTR;查顯示數(shù)據(jù)對應(yīng)段碼MOV P0,A;段碼放入P1口MOVA,R5;JBACC.2,LOOP5;小數(shù)點處理CLRP0.7;LOOP5:JBACC.4,LOOP6;小數(shù)點處理CLRP0.7;LOOP6:LCALL DL1MS;顯示1MSINC R1;指向下一地址MOV A,R5;掃描控制字放入AJNB ACC.5,ENDOUT;ACC.5=0時一次顯示結(jié)束RL A;A中數(shù)據(jù)循環(huán)左移MOV R5,A;放回R5內(nèi)MOV P0,#0FFHAJMP PLAY;跳回PLAY循環(huán)ENDOUT:MOVP2,#0FFH;一次顯示結(jié)束,P2口復(fù)位MOV P0,#0FFH;P0口復(fù)位RET;子程序返回TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH;共陰段碼表"0""1""2""3""4""5""6""7""8""9""不亮"“A”“-”;;****************************;SDISPLAY,上電顯示子程序;****************************;不帶小數(shù)點顯示,有“A”“-”顯示功能SDISPLAY:MOVR1,DISPFIRSTMOV R5,#0FEH;掃描控制字初值SPLAY:MOV A,R5;掃描字放入AMOV P2,A;從P2口輸出MOV A,@R1;取顯示數(shù)據(jù)到AMOV DPTR,#TABS;取段碼表地址MOVC A,@A+DPTR;查顯示數(shù)據(jù)對應(yīng)段碼MOV P0,A;段碼放入P1口MOVA,R5;LCALL DL1MS;顯示1MSINC R1;指向下一地址MOV A,R5;掃描控制字放入AJNB ACC.5,ENDOUTS;ACC.5=0時一次顯示結(jié)束RL A;A中數(shù)據(jù)循環(huán)左移MOV R5,A;放回R5內(nèi)AJMP SPLAY;跳回PLAY循環(huán)ENDOUTS:MOVP2,#0FFH;一次顯示結(jié)束,P2口復(fù)位MOV P0,#0FFH;P0口復(fù)位RET;子程序返回TABS:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0C6H,0BFH,88H;顯示數(shù)"0123456789不亮C-A";內(nèi)存數(shù)"01234567890AH0BH0CH0DH"STAB:DB0AH,0AH,0AH,0AH,0AH,09H,06H,04H,02H,00H,00H,06H,00H,01H,03H,0AHDB0AH,09H,01H,0CH,06H,00H,0CH,09H,00H,00H,02H,0AH,0AH,0AH,0AH,0AH;注:0A不亮,0B顯示“A”,0C顯示“-”;*************************************;以下是鬧鈴時間設(shè)定程序中的時調(diào)整程序;*************************************DSSFUNN:LCALLDISPLAY;等待鍵釋放JNBP3.3,DSSFUNNWAITSS:SETBEALCALLDISPLAYJNBP3.4,FFFF;時加1鍵JNBP3.2,DDDD;時減1JNBP3.3,OOOO;鬧鈴設(shè)定退出鍵AJMPWAITSSOOOO:LCALLDS20MS;消抖JBP3.3,WAITSSDSSFUNNM:LCALLDISPLAY;鍵釋放等待JNBP3.3,DSSFUNNMMOVDISPFIRST,#72HLJMPSTART1FFFF:LCALLDS20MS;消抖JBP3.4,WAITSSDSSFUNMM:LCALLDISPLAY;鍵釋放等待JNBP3.4,DSSFUNMMCLREAMOVR0,#55HLCALLADD1MOV A,R3;CLRC;CJNEA,#24H,ADDHH33N;ADDHH33N:JC WAITSS;小于24點返回ACALLCLR0;大于等于24點清零AJMPWAITSSDDDD:LCALLDS20MS;消抖;JBP3.2,WAITSSDSSFUNDD:LCALLDISPLAY;鍵釋放等待JNBP3.2,DSSFUNDDCLREAMOVR0,#55HLCALLSUBB1LJMPWAITSS;*********************;以下是鬧鈴判斷子程序;*********************BAOJ:MOVA,79H;從時十位、個位、分十位、分個位順序比較CJNEA,55H,BBAOMOVA,78HCLRCBB3:CJNEA,54H,BBAOMOVA,77HCLRCCJNEA,53H,BBAOMOVA,76HCLRC;CJNEA,52H,BBAO;CLRC;CLRBELL;RETBB2:CJNEA,52H,BBAOJNB07H,BBAO;07H在1秒到時會取反CLRBELL;時分相同時嗚叫(1秒間隔叫)RET;
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版高中語文文言文精講教案集
- 公司運輸私人雇傭合同
- 填充墻冬季施工方案
- 英語口語中的常用語禮貌表達(dá)與應(yīng)用教學(xué)教案
- 杭州注漿加固施工方案
- 專業(yè)藝術(shù)創(chuàng)作成果合同
- 三農(nóng)村電商市場定位與運營策略手冊
- 鋼平臺搭建施工方案
- 加固河堤木樁施工方案
- 管道聚氨酯保溫施工方案
- 新蘇教版科學(xué)六年級下冊全冊教案(含反思)
- 火災(zāi)自動報警系統(tǒng)檢查表
- 高速公路橋頭跳車判別和處治
- 骨髓細(xì)胞圖譜
- 建筑工程分部分項工程劃分表(新版)
- 勃利縣大四站鎮(zhèn)侵蝕溝治理工程施工組織設(shè)計
- 公路瀝青路面設(shè)計標(biāo)準(zhǔn)規(guī)范
- 普通高中歷史課程標(biāo)準(zhǔn)(2022年版2023年修訂)解讀
- 第9課《呵護我們的鼻子》課件
- 加油站春季安全教育培訓(xùn)
- 《統(tǒng)計學(xué)原理賈俊平》課件
評論
0/150
提交評論