導航:首頁 > 操作系統 > 單片機多功能電子鍾

單片機多功能電子鍾

發布時間:2022-07-17 14:03:05

A. 單片機電子鍾

願意出錢的找我`~~980100952

B. 以單片機為核心附加外圍電路構成多功能電子時鍾,具有以下功能:時間設置,鬧鍾設置,顯示年、月、日、星

思路:1. 要有頻率穩定的晶振,頻率已知
2. 單片機對晶振振盪周期進行計數,再分層次計數,來顯示秒,分(60秒),時(60分),日(24時),月(30或31日,29日,這里是比較麻煩的),年(365日),星期(7日),年月日星期都要設置初值,並可以改變(調整)。再設計輸出電路(驅動LED數碼管),顯示年、月、日、星期等。
3. 鬧鍾,是一個減法,即從設鬧時開始到指定鬧時間求差,再從設鬧時開始進行減數運算,直到減運算結果為零,啟鬧。從起鬧開始計算鬧鈴時常。當然,還要設計鬧鍾(音頻振盪和揚聲器驅動電路)。
4. 設計還是蠻復雜的。為了省事,可以應用現成的「電子時鍾晶元」,利用單片機控制這個時鍾晶元就可以了。時鍾晶元規格很多,按你的要求選一選,配上單片機,就可以偷懶了。
5. 更省事的辦法,買帶熒光(實際是LED)數碼管的「電子時鍾晶元」(組件),配個單片機做時間設置和鬧鍾控制,那就太簡單了。

C. 用單片機,ds1302做多功能數字時鍾,模擬正確,接好電路後不能工作,求指導。

模擬和實際電路還是有點不同的,protus中有些管腳是省略了的,但實際中一定要有。建議你從以下幾個去查找:
1.首先保證單片機最小系統能工作,可以寫個最最簡單的程序(比如控制P1口的高低電平)來驗證
2.數碼管的顯示驅動電路是否搭建了,實際中單片機不能像protus中那樣直接驅動的
3.P0口是否加了上拉電阻
==

D. 用單片機做一個電子時鍾

這個很簡單啊,兩種思路:1,用單片機定時器來做,優點是外圍電路簡單,只需要一個單片機最小系統,和一個顯示模塊(1602液晶比較好);缺點是:定時不是很准,跑的時間長了會有誤差,而且主要是程序,要寫很多,不過程序不是很難。2,用時鍾晶元,一般都用ds1302,還需要單片機最小系統和顯示模塊,優點是:定時准確,誤差很小,在有備用電池的情況下,即使單片機掉電,也可以維持很長時間,程序相對簡單。缺點是:外圍電路比前者相對復雜一點。如果想做個實際的東西拿來用,建議使用第二種方法,如果是想鍛煉自己的編程能力的話,選第一種吧。祝成功!

E. 單片機電子鍾原理圖,幫我大概解釋一下這個圖的工作原理就可以了,謝謝。帶圖!5分

本電子鍾採用PIC16C55單片機控制,適於溫室的定時恆溫或自來水的定時定壓控制等。PIC16C55單片機工作電壓為2.5~6.25V,功耗低、驅動能力強。本電子鍾可以控制一路負載在24小時內的3次開/關;一個雙限觸發的定時輸出口,既可接傳統的功率保持型繼電器,也可接脈沖繼電器。本機用四位LED數碼管掃描式顯示,還有消隱(省電)工作方式,使用起來非常靈活、方便。

一、 電子鍾工作原理

電子鍾電路見圖1。RB7口是定時指示端,在定時開期間輸出高電平,驅動V1發光,該口也可經緩沖作定時輸出口;RB6是雙限觸發控制的定時輸出口,其工作方式是:在RB7高電平期間,若RB1為高電平,則RB6輸出高電平;若RB0為高電平,RB6輸出低電平;若RB1、RB0同為低電平,RB6保持原態; 同為高電平時,RB6輸出低電平。RB5、RB4用於驅動脈沖繼電器,RB6上升沿觸發RB5輸出高電平開脈沖;在RB6下降沿觸發RB4時,RB4端輸出高電平關脈沖,開/關脈沖的持續時間均為125ms。

圖 1

RB3是消隱控制器,接高電平(即SK1閉合)時,顯示屏及秒閃正常;否則,顯示消隱。顯示消隱時,時鍾及各控制邏輯都正常運行,如忽略RB4至RB7各口的驅動電流,則在3V供電時,整機電流不足20μA,即兩節5號電池可用數月!RB2選擇數碼管極性,RB2為低電平,使用共陰LED;RB2為高電平,則用共陽LED。數碼管的極性是在上電初始化時,根據 RB2口狀態確定的,工作過程中改變RB2的電平則不起作用。

本機設S1~S4四個按鍵,S1是功能選擇鍵,S2是小時增量調整,S3是分鍾增量,S4用於分鍾減量調節,其使用方法為:

上電時,RB5至RB7均為低電平,RB4端送出一個關脈沖,使SK1閉合,整機正常顯示、工作,RC7口送出秒閃脈沖,RC6~RC0送欄位碼。RA3~RA0分別為10時、時、10分、分位的位碼輸出。這時,按一下S2或S3(時增量/ 分增量鍵),可使RB7端置位或復位。

在正常走時期間,秒閃正常;在校對或設置定時時,秒停閃。例如:在正常走時期間,按一下S1鍵,秒閃停止,屏幕顯示J-,表示可以校對時間。這時再按S2~S4中任一鍵,屏幕顯示現在時間,但秒不閃,此刻可按S2~S4校對時鍾。再次按S1,屏幕顯示 1∪,表示可以設定第一次開時間,此時按S2~S4對時間進行查看及設置。繼續按S1,系統顯示1∩,表示可設置第一次關時間……依次進行。設置好系統及 3次開關時間後,整機回到正常顯示狀態,秒閃恢復。

如欲取消某次開/關定時,只需把該次的開與關時間設置成相同值即可。

筆者曾把該時鍾用於定時定壓供水控制系統,RB6端用於驅動繼電器(也可用RB5與RB4兩端驅動脈沖繼電器),RB1端接水壓(水位)的低限輸入,RB0 端接高限輸入,設置好定時,一個簡易的定時定壓自動供水系統即告完成。

二、 編程技巧

PIC16C55單片機程序存儲器只有512位元組,加上採用外接32768Hz晶體振盪方式,時鍾速度較低,因此,統籌好系統的工作時序與人機界面之間的關系是軟體設計成敗的關鍵。本機編程採用如下方案:軟體工作流程見附圖2。

圖 2

PIC16C55單片機的一個機器周期是4個時鍾周期,不難算出,本系統中每秒有8192個機器周期。在編制軟體時,先設定單片機內部定時計數器F1的計數方式為機器周期的64分頻。這樣,每當F1溢出時,系統遞加2秒。平時,系統每128個機器周期內用RC口與RA口驅動掃描一次顯示屏,可保證每秒內掃描64次顯示屏,基本上無閃爍感。而 128個機器周期正是F1的第0位(為便於敘述以下簡記為F1?0)每次下降沿的間隔時間,我們可以編一段程序,當F1?0的下降沿到來時,掃描一次顯示屏,每當F1的低4位為全0時(125ms一次)使系統檢測一次RB口與按鍵狀態,並進行相關處理,部分相關程序如下:

WAIT BTFSC 1,0 ;等待F1?0的下降沿,編程時

GOTO WAIT ;要保證每次下降沿前到此

MOVFW 1

SKPNZ

GOTO CLOCK ;F1=0,滿2秒,轉時鍾處理

ANDLW 0FH ;屏蔽F1高4位

SKPZ

GOTO DISPLAY;F1低4位不為0,轉顯示

MOVLW 0C0H ;滿125mS,使RB口脈沖復位

ANDWF 6,1

MOVLW 0FH ;檢測按鍵

TRIS 7

MOVFW 7

ANDLW 0FH ;保留按鍵數據

SKPZ

GOTO AN;有鍵值,轉按鍵處理

DISPLAY …… ;顯示掃描,定時管理RB口

CLOCK …… ;時鍾,定時處理程序

AN …… ;按鍵管理程序

F. 單片機電子鍾電路解釋原理

我是初中生,嚇解釋一下,
U1是處理器,U3是存儲器,U1 32到39是8線地址,整個LCD工作顯示取決於它。RV1是個可調電阻,它是調節液晶對比度的,RP1 為排阻另一端應該接高電位,8線地址工作只是把電位拉低,X1和X2是兩個晶體振盪器,X1為U1提供工作頻率,X2為U2提供,當然通過內部分頻於倍頻得到需要的工作頻率。
你想知道工作流程,其實這些流程有些不是說一部分一部分工作的,(即使LCD沒有顯示,其實也工作了)幾乎同時,不過還是有先後的,首先U1工作,調取U3里的數據,U3是個最簡單的存儲器。運算後由8線地址輸出給LED。U1的9腳接了個復位開關,按下開關U1即從新啟動。U1的10腳到14腳為調節開關,它會讓U1的計算從某個點開始,於是時間調節才實現。還有就是定時功能,當設定的時間與時間符合,鬧鍾啟動蜂鳴LS1

文化有限,只能說這些了,不全面的地方望指教,畢竟我初中畢業

G. 哪位有基於單片機的多功能數字電子鍾的開題報告

源程序如下:ORG0000H;程序開始入口LJMPSTARTORG0003H;外中斷0中斷程序入口RETIORG000BH;定時器T0中斷程序入口LJMPINTT0;跳至INTTO執行ORG0013H;外中斷1中斷程序入口RETIORG001BH;定時器T1中斷程序入口LJMPINTT1ORG0023H;串列中斷程序入口地址RETI;---------------主程序----------------------;START:MOVR0,#70H;70給R0,清70-7FH顯示內存MOVR7,#0FHCLEARDISP:MOV@R0,#00H;0給R0中的數為地址的內存中存放(70H)INCR0DJNZR7,CLEARDISPMOV78H,#2;默認時間為12:00,鬧鍾5:00MOV79H,#1MOV74H,#2;防止上電時數碼管顯示00小時MOV75H,#1MOV66H,#1;中斷退出時66H為1時,分、時計時單元數據移入顯存標志MOV68H,#1;上電默認鬧鍾開狀態MOV7DH,#6;鬧鍾時十位MOV7CH,#3MOV69H,#0MOV7AH,#0AH;放入"熄滅符"數據MOVTMOD,#11H;設T0、T1為16位定時器MOVTL0,#0B0H;50MS定時初值(T0計時用)MOVTH0,#3CHSETBEA;總中斷開放SETBET0;允許T0中斷SETBTR0;T0定時器開始計時MOVR4,#14H;1秒定時用初值(50MS×20)START1:LCALLDISPLAY;顯示子程序LCALLBEEP;鬧鍾查詢JNBP1.7,SETTIME;P1.7口為0時轉時間調整程序JMPSTART1;P1.7口為1時跳回START1;-----------------------時間鬧鍾調整系統--------------------------;NFLAG:MOVA,68H;設置鬧鍾開關狀態CJNEA,#1,BEE68MOV68H,#0JMPE6BEE68:MOV68H,#1E6:MOV66H,#8;中斷退出66H不為1時分、時計時單元數據移入顯存標志MOV72H,7BHMOV73H,7CHMOV74H,7DHMOV75H,7EHLCALLDDLLCALLDDLMOV72H,68HMOV73H,69HMOV74H,7AHMOV75H,7AHLCALLDDLLCALLDDLMOV66H,#1LJMPSTART1SETTIME:LCALLDDLJBP1.7,NFLAG;鍵按下時間小於1秒,設置鬧鍾開關狀態並查看鬧鍾時間,不關走時,確保准確,大於1秒調時MOVTL1,#0B0H;T1閃爍定時初值MOVTH1,#3CHMOVR2,#06H;進入調時狀態,賦閃爍定時初值MOV66H,#8;調鬧鍾時保持走時,關閉時鍾顯示數據SETBET1;允許T1中斷SETBTR1;開啟定時器T1SET1:LCALLDISPLAY;調用顯示,防止鍵按下無顯示JNBP1.7,SET1;P1.7口為0等待鍵釋放MOVR5,#00H;清設置類型閃爍標志SETN1:INCR5;鬧鍾分調整SET5:LCALLDISPLAYJBP1.7,SET5SEETN1:LCALLDDL;有鍵按下大於1秒分時間連續加(0.5秒加1),小於1秒轉調時狀態JBP1.7,SET6;鍵釋放查詢,鍵釋放自動轉調時MOVR0,#7CHLCALLADD1MOVA,R3CLRCCJNEA,#60H,HHN1HHN1::INCR5;鬧鍾時調整SEET6:LCALLDISPLAYJBP1.7,SEET6SEETNH1:LCALLDDLJBP1.7,SETFMOVR0,#7EHLCALLADD1MOVA,R3CLRCCJNEA,#24H,HOUU1HOUU1::LCALLDISPLAYJBP1.7,SETFLCALLDDLJNBP1.7,SETOUT;短按調時,長按退出CLRET0CLRTR0MOV70H,#00H;設定後的時間從00秒開始走時MOV71H,#00HINCR5SET3:LCALLDISPLAYJBP1.7,SET3SETMM:LCALLDDLJBP1.7,SET4MOVR0,#77HLCALLADD1MOVA,R3CLRCCJNEA,#60H,MMHMMH:JCSETMMLCALLCLR0AJMPSETMMSET4:INCR5SEET4:LCALLDISPLAYJBP1.7,SEET4SETHH:LCALLDDLJBP1.7,SETOUT1MOVR0,#79HLCALLADD1MOVA,R3CLRCCJNEA,#24H,HOUUHOUU::SETBET0SETBTR0;計時開始SETOUT:MOVR5,#00H;清設置類型閃爍標志CLRTR1;關閉T1CLRET1;關T1中斷MOV66H,#1SETOUT2:LCALLDISPLAYJNBP1.7,SETOUT2LJMPSTART1;--------------------------延時1秒鍾-----------------------;DDL:MOV18H,#36DDL0:MOV17H,#239DDL1:LCALLDISPLAYDJNZ17H,DDL1DJNZ18H,DDL0RET;----------------------------T0中斷程序------------------------;INTT0:PUSHACC;打包PUSHPSWCLRET0CLRTR0MOVA,#0B7HADDA,TL0MOVTL0,AMOVA,#3CHADDCA,TH0MOVTH0,ASETBTR0DJNZR4,OUTT0;20次中斷未到中斷退出ADDSS:MOVR4,#14H;20次中斷到(1秒)重賦初值MOVR0,#71H;指向秒計時單元(70-71H)ACALLADD1;調用加1程序(加1秒操作)MOVA,R3;秒數據放入A(R3為2位十進制數組合)CLRC;清進位標志CJNEA,#60H,ADDMMADDMM:JCOUTT01;小於60秒退出ACALLCLR0;等於或大於60秒清0MOVR0,#77H;指向分計時單元(76H-77H)ACALLADD1MOVA,R3CLRCCJNEA,#60H,ADDHHADDHH:JCOUTT0ACALLCLR0MOVR0,#79H;指向小時計時單元(78H-79H)ACALLADD1MOVA,R3CLRCCJNEA,#24H,HOURHOUR:JCOUTT0ACALLCLR0OUTT0:MOVA,66H;查詢標志CJNEA,#1,OUTT01MOV72H,76H;中斷退出時將分、時計時單元數據移入對應顯示單元MOV73H,77HMOV74H,78HMOV75H,79HOUTT01:POPPSW;出棧POPACCSETBET0;開放T0RETI;中斷返回;---------------------------加1程序--------------------------;ADD1:MOVA,@R0;取當前計時單元數據到ADECR0;指向前一地址SWAPA;A中數據高四位與低四位交換ORLA,@R0;前一地址中數據放入A中低四位ADDA,#01H;A加1操作DAA;十進制調整MOVR3,A;移入R3寄存器ANLA,#0FH;高四位變0MOV@R0,A;放回前一地址單元MOVA,R3;取回R3中暫存數據INCR0;指向當前地址單元SWAPA;A中數據高四位與低四位交換ANLA,#0FH;高四位變0MOV@R0,A;數據放入當削地址單元中RETCLR0:CLRCCLRA;清累加器MOV@R0,A;清當前地址單元DECR0;指向前一地址MOV@R0,A;前一地址單元清0RET;子程序返回;-------------------------調時閃爍程序----------------------;INTT1:PUSHACCPUSHPSWMOVTL1,#0B0HMOVTH1,#3CHDJNZR2,INTT1OUT;0.3秒未到退出中斷(50MS中斷6次)MOVR2,#06H;重裝0.3秒定時用初值CPL02H;0.3秒定時到對閃爍標志取反JB02H,FLASH1;02H位為1時顯示單元"熄滅"MOVA,R5CJNEA,#01H,NLJMPNNN1NL:CJNEA,#02H,NL1LJMPNNN1NL1:CJNEA,#03H,NL2LJMPNLLNL2:CJNEA,#04H,INTT1OUTLJMPNLLNLL:MOV72H,76HMOV73H,77HMOV74H,78HMOV75H,79HAJMPINTT1OUTNNN1:MOV72H,7BHMOV73H,7CHMOV74H,7DHMOV75H,7EHINTT1OUT:POPPSW;恢復現場POPACCRETI;中斷退出FLASH1:MOVA,R5CJNEA,#01H,MLLJMPMNN1ML:CJNEA,#02H,ML1LJMPMNN2ML1:CJNEA,#03H,MNLJMPMLLMN:CJNEA,#04H,INTT1OUTLJMPMHLMLL:MOV72H,7AHMOV73H,7AH;顯示單元(72-73H),將不顯示分數據MOV74H,78HMOV75H,79HAJMPINTT1OUTMHL:MOV72H,76HMOV73H,77HMOV74H,7AH;顯示單元(74-75H),小時數據將不顯示MOV75H,7AHAJMPINTT1OUTMNN1:MOV72H,7AHMOV73H,7AH;顯示單元(72-73H),將不顯示鬧鍾分數據MOV74H,7DHMOV75H,7EHAJMPINTT1OUTMNN2:MOV72H,7BHMOV73H,7CHMOV74H,7AHMOV75H,7AH;顯示單元(74-75H),鬧鍾小時數據將不顯示AJMPINTT1OUT;-------------------------顯示-------------------------------;DISPLAY:MOVDPTR,#DISDATAMOVA,70HMOVCA,@A+DPTRMOVP3,ACLRP1.0NOPNOPNOPSETBP1.0MOVA,71HMOVCA,@A+DPTRMOVP3,ACLRP1.1NOPNOPNOPSETBP1.1MOVA,72HMOVCA,@A+DPTRMOVP3,ACLRP1.2NOPNOPNOPSETBP1.2MOVA,73HMOVCA,@A+DPTRMOVP3,ACLRP1.3NOPNOPNOPSETBP1.3MOVA,74HMOVCA,@A+DPTRMOVP3,ACLRP1.4NOPNOPNOPSETBP1.4MOVA,75HMOVCA,@A+DPTRMOVP3,ACLRP1.5NOPNOPNOPSETBP1.5RETBEEP:MOVA,68H;查詢標志CJNEA,#1,BEEREMOVA,78H;查詢鬧鍾時個位CJNEA,7DH,BEEREMOVA,79H;查詢鬧鍾時十位CJNEA,7EH,BEEREMOVA,76H;查詢鬧鍾分個位CJNEA,7BH,BEEREMOVA,77H;查詢鬧鍾分十位CJNEA,7CH,BEEREBB:CLRP1.6LCALLDDLSETBP1.6LCALLDDLJNBP1.7,BEERRBEERE:RETBEERR:SETBP1.6MOV68H,#0LCALLDISPLAYJNBP1.7,BEERRJMPBEEREDISDATA:DB0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H,50H,0FFH;0123456789空白END

H. 如何做一個單片機電子時鍾

這個很簡單啊,兩種思路:1,用單片機定時器來做,優點是外圍電路簡單,只需要一個單片機最小系統,和一個顯示模塊(1602液晶比較好);缺點是:定時不是很准,跑的時間長了會有誤差,而且主要是程序,要寫很多,不過程序不是很難。2,用時鍾晶元,一般都用DS1302,還需要單片機最小系統和顯示模塊,優點是:定時准確,誤差很小,在有備用電池的情況下,即使單片機掉電,也可以維持很長時間,程序相對簡單。缺點是:外圍電路比前者相對復雜一點。如果想做個實際的東西拿來用,建議使用第二種方法,如果是想鍛煉自己的編程能力的話,選第一種吧。祝成功!

I. 基於單片機多功能數字鍾

帶萬年歷的LCD顯示多功能數字鍾

程序清單:

;SMC1602介面程序(MCS51模擬口線方式)

;***************************************************************************

;連線圖:*LCM---8031**LCM---8031**LCM------------8031*

;*DB0---P0.0**DB4---P0.4**RS-------------P2.0*

;*DB1---P0.1**DB5---P0.5**RW-------------P2.1*

;*DB2---P0.2**DB6---P0.6**E--------------P2.2*

;*DB3---P0.3**DB7---P0.7**VLCD接10K可調電阻到GND*

;注:8051的晶振頻率為11.0592MHzR0設置數據存放S8為設置鍵S7為加鍵S4為確認鍵

;**************************************************************************

;P0口液晶顯示

;P2.4位選鍵P2.3加一鍵P2.2返回鍵及報時功能鍵鬧鍾設置P2.0控制顯示鍵

;寄存器clrrs0setbrs1R0R4R5在按鍵中用到延時中用到SETBRS0SETBRS1的R0R1R2

;SETBRS0CLRRS1顯示中用到CLRRS0CLRRS1在鬧鍾調整子程序中用到R1

;*********************************************************************

;

;報時功能P2.6和鬧鍾功能P2.5鬧鍾調整時間功能已經可以設置顯示的切換方式變了再關閉的情況下一切正常運行

;*****************************

RSPINBITP1.2

RWPINBITP1.1

EPINBITP1.0

WEIXUANBITP2.4;位選鍵設置鍵

JIAJIANBITP2.3;加一鍵

JIANJIANBITP2.2;減一鍵

FANHUIBITP2.1;返回鍵

NZKGBITP2.0;鬧鍾設置鍵

SECONTLEQU30H;秒

SECONTHEQU31H;秒

MAOHAOLEQU32H;:

MINIUTLEQU33H;分

MINIUTHEQU34H;分

MAOHAOHEQU35H;:

HOURLEQU36H;時

HOURHEQU37H;時

;*****************************日期部分***************************

DAYLEQU40H;日個

DAYHEQU41H;日十

HENLEQU42H;-

MONTHLEQU43H;yue

MONTHHEQU44H;yue

HENHEQU45H;-

YEAROEQU46H;年

YEARTEQU47H

YEARSEQU48H

YEARFEQU49H

TEMPEQU50H;用做存儲單元顯示子程序(DISPLAY)里用到

BIJIAOEQU51H;加一子程序(JIAYI)中用到

ZDRQOEQU55H;中斷加一程序中用到

ZDRQTEQU56H;中斷加一程序中用到

ZDRQSEQU57H;中斷加一程序中用到

ZDRQFEQU58H;中斷加一程序中用到

DIZHIEQU59H;鍵盤(JIANPAN)子程序里用到

NZBZBIT60H;定時標志位在(鬧鍾開關部分)

;38H到3FH沒用到

BSCSBZBIT39H;報時次數轉換標志(BSCS)里用到

BSCSCCEQU3AH;報時次數存儲(BSCS)里用到

ZDBSBZBIT3BH;整點報時標志(SSBS)里用到

ZMBSBZBIT3CH;整秒閃爍標志(SSBS)里用到

BSKGBZBIT3DH;報時開啟標志(BSKG)里用到

XKQHBZBIT3EH;顯示開啟關閉標志(XIANKONG)里用到

ORG0000H

AJMPMAIN

ORG000BH

AJMPZD

ORG0030H

MAIN:MOVSP,#60H;給堆棧指針賦初值

MOV30H,#05H;秒

MOV31H,#05H;秒

MOV32H,#3AH;:

MOV33H,#09H;分

MOV34H,#05H;分

MOV35H,#3AH;:

MOV36H,#03H;時

MOV37H,#01H;時

;*****************************日期部分***************************

MOV40H,#09H;日個

MOV41H,#02H;日十

MOV42H,#2DH;-

MOV43H,#09H;yue

MOV44H,#00H;yue

MOV45H,#2DH;-

MOV46H,#09H;年

MOV47H,#09H

MOV48H,#09H

MOV49H,#02H

CLRP2.5;鬧鍾

CLRP2.6;整點報時

MOV03H,#00H;鬧鍾分個位

MOV04H,#00H;鬧鍾分十位

MOV06H,#04H;鬧鍾時個位

MOV07H,#01H;鬧鍾時十位

;CLRP1.5

;CLRP1.4

MOVB,#20

MOVTMOD,#01H;定時器工作方式1

MOVTH0,#4CH

MOVTL0,#08H

SETBET0;允許T0中斷

SETBEA;總中斷開放

LCALLLCDRESET;初始化LCD

LCALLDISPSTART;調用顯示初始狀態

SETBTR0;開啟定時器

CLRNZBZ;鬧鍾開啟關閉標志

CLRBSKGBZ;報時開啟關閉標志

CLRXKQHBZ;顯示開啟關閉標志

LOOP:LCALLJIANPAN;按鍵子程序

LCALLDISPLAY;顯示子程序

LCALLNZBF;NAOZHONGBUFENG

LCALLNZBJ;NAOZHONGBIJIAO

LCALLBSKG;BAOSHIKAIGUAN

LCALLBSCS;BAOSHICISHU

LCALLSSBS;閃爍報時

SJMPLOOP

;==============================中斷加一程序===================================

ZD:PUSHACC

MOVTH0,#4CH

MOVTL0,#08H

DJNZB,ZDEND

MOVB,#20

INCSECONTL

SETBZMBSBZ

MOVA,SECONTL

CJNEA,#0AH,ZDEND

MOVSECONTL,#00H

INCSECONTH

MOVA,SECONTH

CJNEA,#06H,ZDEND

MOVSECONTH,#00H

INCMINIUTL

MOVA,MINIUTL

CJNEA,#0AH,ZDEND

MOVMINIUTL,#00H

INCMINIUTH

MOVA,MINIUTH

CJNEA,#06H,ZDEND

MOVMINIUTH,#00H

INCHOURL

SETBBSCSBZ

SETBZDBSBZ

MOVA,HOURL;24小時的判斷

CJNEA,#04H,ZDF

MOVA,HOURH

CJNEA,#02H,ZDEND

MOVHOURL,#00H

MOVHOURH,#00H

LCALLZDRQ

SJMPZDEND

ZDF:CJNEA,#0AH,ZDEND

MOVHOURL,#00H

INCHOURH

ZDEND:POPACC

RETI

;日期部分

ZDRQ:PUSHACC

INCDAYL

;判斷天數28,30,31部分

MOVA,MONTHH;用於判斷月份時為31天30天28天

CJNEA,#01H,LL

MOV55H,#0AH;存放月份的十位轉化為個位是0AH

MOVA,MONTHL

ADDA,55H;月分高低相加用於查表

SJMPLL3

LL:MOVA,MONTHL

ADDA,MONTHH

LL3:MOV56H,A;存放相加後的月份數據

MOVDPTR,#TAB5

MOVCA,@A+DPTR;查十位和天數的十位比較

MOV57H,A

MOVA,56H

MOVDPTR,#TAB6;查個位和天數的個位比較

MOVCA,@A+DPTR

MOV58H,A

MOVA,DAYH

CJNEA,57H,LL2

MOVA,DAYL

CJNEA,58H,LL2

MOVDAYH,#00H

MOVDAYL,#01H

SJMPLL4

LL2:MOVA,DAYL

CJNEA,#0AH,ZDRQEND

MOVDAYL,#00H

INCDAYH

MOVA,DAYH;比較天數是否要進位

CJNEA,57H,ZDRQEND

MOVA,DAYL

CJNEA,58H,ZDRQEND

MOVDAYH,#00H

MOVDAYL,#01H

;月份和年份

LL4:INCMONTHL

MOVA,MONTHL

CJNEA,#03H,ZDRQ1;用於判斷月份時為12月時進位

MOVA,MONTHH

CJNEA,#01H,ZDRQ1

MOVMONTHL,#01H;天數符合要求

MOVMONTHH,#00H

SJMPZDRQ2

ZDRQ1:CJNEA,#0AH,ZDRQEND

MOVMONTHL,#00H

INCMONTHH

SJMPZDRQEND

ZDRQ2:INCYEARO;年的加一

MOVA,YEARO

CJNEA,#0AH,ZDRQEND

MOVYEARO,#00H

INCYEART;年的進位

MOVA,YEART

CJNEA,#0AH,ZDRQEND

MOVYEART,#00H

INCYEARS

MOVA,YEARS

CJNEA,#0AH,ZDRQEND

MOVYEARS,#00H

INCYEARF

MOVA,YEARF

CJNEA,#0AH,ZDRQEND

MOVYEARF,#00H

ZDRQEND:

POPACC

RET

;液晶初始化

;========================初始化程序=======================================

LCDRESET:;初始化程序

LCALLDELAY5MS;延時15MS

LCALLDELAY5MS

LCALLDELAY5MS

MOVA,#38H;顯示模式設置(不檢測忙信號)

LCALLLCDWCN;共三次

LCALLDELAY5MS

MOVA,#38H

LCALLLCDWCN

LCALLDELAY5MS

MOVA,#38H

LCALLLCDWCN

MOVA,#38H;顯示模式設置(以後均檢測忙信號)

LCALLLCDWC

MOVA,#08H;顯示關閉

LCALLLCDWC

MOVA,#01H;顯示清屏

LCALLLCDWC

MOVA,#06H;顯示游標移動設置

LCALLLCDWC

MOVA,#0CH;顯示開及游標設置

LCALLLCDWC

RET

;==============================寫指令===================================

LCDWC:;送控制字子程序(檢測忙信號)

LCALLWAITIDLE

;******寫指令*******;送控制字子程序(不檢測忙信號)

LCDWCN:CLRRSPIN;RS=0RW=0E=高脈沖

CLRRWPIN

MOVP0,A

SETBEPIN;(

NOP;給高電平脈沖

CLREPIN;)

RET

;==========================寫數據=======================================

LCDWD:;寫字元子程序

LCALLWAITIDLE

SETBRSPIN;RS=1RW=0E=高脈沖

CLRRWPIN

MOVP0,A

SETBEPIN

NOP

CLREPIN

RET

;===============================等待控制器空閑==================================

WAITIDLE:

PUSHACC;正常讀寫操作之前必須檢測LCD控制器狀態

MOVP0,#0FFH

lcallDELAY5MS;666666666666666666666666

CLRRSPIN;RS=0RW=1E=高電平

SETBRWPIN

SETBEPIN

lcallDELAY5MS;98

WTD_PA:NOP;DB7:0LCD控制器空閑

JBP0.7,WTD_PA;1LCD控制器忙

CLREPIN

POPACC

RET

;***********************初始狀態子程序*******************************

DISPSTART:;顯示初始狀態子程序

PUSHACC

MOVA,#80H

LCALLLCDWC

MOVDPTR,#TAB;顯示字元

DISP1:CLRA

MOVCA,@A+DPTR

JZDISP2

LCALLLCDWD

INCDPTR

SJMPDISP1

DISP2:MOVA,#0C0H

LCALLLCDWC

MOVDPTR,#TAB1

DISP3:CLRA

MOVCA,@A+DPTR

JZDISP_END

LCALLLCDWD

INCDPTR

SJMPDISP3

DISP_END:

POPACC

RET

;==========================顯示子程序=======================================

DISPLAY:PUSHPSW

PUSHACC

SETBRS0

CLRRS1

MOVA,#85H

LCALLLCDWC

MOVR1,#38H;第一行顯示數據存儲單元的啟始地址

MOVTEMP,#30H;第一行顯示數據存儲單元的結束地址

MOVR6,#2

PLAY:DECR1

CJNER1,#32H,PLY;判斷是否為冒號位

MOVA,MAOHAOL;是者送冒號的ACSI碼

SJMPPLAY1

PLY:CJNER1,#35H,PLY1

MOVA,MAOHAOH

SJMPPLAY1

PLY1:CJNER1,#42H,PLY2;判斷是否為橫杠的位置

MOVA,HENL;是者送橫杠的ACSI碼

SJMPPLAY1

PLY2:CJNER1,#45H,PLY3

MOVA,HENH

SJMPPLAY1

PLY3:MOVA,@R1;用查表法送要顯示的數據

MOVDPTR,#TAB2

MOVCA,@A+DPTR

PLAY1:LCALLLCDWD

MOVA,R1

CJNEA,TEMP,PLAY;判斷第一行是否顯示好了

MOVA,#0C5H

LCALLLCDWC

MOVR1,#4AH;第二行顯示數據存儲單元的啟始地址

MOVTEMP,#40H;第二行的結束地址

DJNZR6,PLAY;R6為0時兩行顯示結束

POPACC

POPPSW

RET

;************************按鍵子程序************************

JIANPAN:clrrs0;鍵盤子程序

setbrs1;鍵盤子程序

JBWEIXUAN,JIAN_ZEND;設置鍵的判斷

LCALLDELAY5MS

JBWEIXUAN,JIAN_ZEND

PUSHACC

JNBWEIXUAN,$

;MOVA,#0FH;開啟游標閃爍設置

;LCALLLCDWCN

fah:JNBNZBZ,JPNZSJ;為「1」鬧鍾為「0」時鍾

LCALLJPXS

MOVR4,#86H;鬧鍾設定時間R4存放顯示位地址

MOVR5,#2;鬧鍾設定時間第一行第二行•••••位置改變次數

MOVDIZHI,#8CH;鬧鍾設定時間第一行結束地址

MOVR0,#06H

SJMPGIVED

JPNZSJ:CLRTR0

MOVR4,#86H;R4存放顯示位地址

MOVR5,#2;第一行第二行•••••位置改變次數

MOVDIZHI,#8DH;第一行結束地址

MOVR0,#36H

GIVED:MOVA,#0FH;開啟游標閃爍設置

LCALLLCDWCN

MOVA,R4

LCALLLCDWC

UPONE:JBFANHUI,UPtwo;返回鍵的判斷

LCALLDELAY5MS

JBFANHUI,UPtwo

JNBFANHUI,$

SJMPGOBACK

JIAN_ZEND:SJMPJIAN_END;中繼跳轉

UPtwo:JBJIAJIAN,IAM;加一鍵的判斷

LCALLDELAY5MS

JBJIAJIAN,IAM

JNBJIAJIAN,$

LCALLJIAYI;調用按鍵加一子程序

;MOVA,#0FH;開啟游標閃爍設置

;LCALLLCDWCN

IAM:JBJIANJIAN,IAM22;減一鍵的判斷

LCALLDELAY5MS

JBJIANJIAN,IAM22

JNBJIANJIAN,$

LCALLJIANYI;調用按鍵減一子程序

AJMPGIVED

IAM22:JBWEIXUAN,UPONE;位選鍵的判斷

LCALLDELAY5MS

JBWEIXUAN,UPONE

JNBWEIXUAN,$

DECR0

INCR4

LCALLJIAN;調用位選比較程序

CJNEr4,#88H,JJ11

DECR0

INCR4

SJMPJJ22

JJ11:CJNEr4,#8BH,JJ22

DECR0

INCR4

JJ22:MOVA,R4

CJNEA,DIZHI,GIVED

JBNZBZ,fah;為「1」鬧鍾為「0」時鍾

MOVR4,#0C5H

MOVDIZHI,#0CFH

MOVR0,#49H

DJNZR5,GIVED

LJMPfah

GOBACK:MOVA,#0CH;關閉游標閃爍設置

LCALLLCDWCN

POPACC

JIAN_END:

SETBTR0

RET

;111111

;1111

JPXS:MOVA,#85H

LCALLLCDWC

MOVR1,#08H;第一行顯示數據存儲單元的啟始地址

JPXS_LL:DECR1

CJNER1,#05H,JPXS_LP

MOVA,#3AH

SJMPJPXS_LY

JPXS_LP:MOVA,@R1;用查表法送要顯示的數據

MOVDPTR,#TAB2

MOVCA,@A+DPTR

JPXS_LY:LCALLLCDWD

CJNER1,#03H,JPXS_LL

RET

;

;

;************************位選比較控製程序************************

;在調整時間時這幾位是符號冒號和橫杠的數據

;在這幾位時跳過到下一位

JIAN:CJNER4,#87H,JIAN5

DECR0

INCR4

SJMPJIANEND

JIAN5:CJNER4,#8AH,JIAN1

DECR0

INCR4

SJMPJIANEND

JIAN1:CJNER4,#0C9H,JIAN2

DECR0

INCR4

SJMPJIANEND

JIAN2:CJNER4,#0CCH,JIANEND

DECR0

INCR4

JIANEND:RET

;************************按鍵加一子程序********************

JIAYI:INC@R0

CJNE@R0,#0AH,JIAYI_END

MOV@R0,#0

CJNER4,#86H,JIAYI55

SJMPJIAYI33

JIAYI55:CJNEr4,#89H,JIAYI11

SJMPJIAYI33

JIAYI11:CJNEr4,#8CH,JIAYI22

SJMPJIAYI33

JIAYI22:CJNER0,#30H,JIAYI_END

JIAYI33:INCR0

INC@R0

CJNE@R0,#06H,JIAYI44

MOV@R0,#0

JIAYI44:DECR0

JIAYI_END:MOVA,#0CH;開啟游標閃爍設置

LCALLLCDWCN

JNBNZBZ,JIAYI88;為「1」鬧鍾為「0」時鍾

LCALLJPXS

SJMPJIAYI99

JIAYI88:LCALLDISPLAY;顯示子程序

JIAYI99:RET

;%%%%%%%%%%%%%%%%%%減一%%%%%%%%%%%%%%%%%%%%%%%%

JIANYI:DEC@R0

CJNE@R0,#00H,JIANYI_END

MOV@R0,#9

CJNER4,#86H,JIANYI55

SJMPJIANYI33

JIANYI55:CJNEr4,#89H,JIANYI11

SJMPJIANYI33

JIANYI11:CJNEr4,#8CH,JIANYI22

SJMPJIANYI33

JIANYI22:CJNER0,#30H,JIANYI_END

JIANYI33:INCR0

DEC@R0

CJNE@R0,#0FFH,JIANYI44

MOV@R0,#5

JIANYI44:DECR0

JIANYI_END:MOVA,#0CH;開啟游標閃爍設置

LCALLLCDWCN

JNBNZBZ,JIANYI88;為「1」鬧鍾為「0」時鍾

LCALLJPXS

SJMPJIANYI99

JIANYI88:LCALLDISPLAY;顯示子程序

JIANYI99:RET

;******************************鬧鍾開關部分************************

NZBF:JBNZKG,NZBF_END

LCALLDELAY5MS

JBNZKG,NZBF_END

JNBNZKG,$

CPLNZBZ

JBNZBZ,NZBF_LL

MOVA,#01H;顯示清屏

LCALLLCDWC

CLRP2.5

LCALLDISPSTART;調用顯示初始狀態

LCALLDISPLAY;調用顯示初始狀態

JBBSKGBZ,NZBF_LP;|

SJMPNZBF_END;|

NZBF_LP:MOVA,#8FH;報時標志顯示位置;|

LCALLLCDWC;|保護報時標志在清屏是不被誤清

MOVA,#25H;顯示報時標志;|

LCALLLCDWD;|

SJMPNZBF_END;|

NZBF_LL:MOVA,#8EH;鬧鍾標志顯示位置

LCALLLCDWC

MOVA,#26H;顯示鬧鍾標志

LCALLLCDWD

NZBF_END:RET

;******************************鬧鍾比較部分************************

NZBJ:JBNZBZ,NZBJ_LL

SJMPNZBJ_END

NZBJ_LL:MOVA,07H

CJNEA,37H,NZBJ_END

MOVA,06H

CJNEA,36H,NZBJ_END

MOVA,04H

CJNEA,34H,NZBJ_END

MOVA,03H

CJNEA,33H,NZBJ_END

SETBP2.5

NZBJ_END:RET

;***************報時開關********************

BSKG:JBFANHUI,BSKG_END

LCALLDELAY5MS

JBFANHUI,BSKG_END

JNBFANHUI,$

CPLBSKGBZ

JBBSKGBZ,BSKG_LL

MOVA,#01H;顯示清屏

LCALLLCDWC

CLRP2.6

LCALLDISPSTART;調用顯示初始狀態

LCALLDISPLAY;調用顯示

JBNZBZ,BSKG_LP;|

SJMPBSKG_END;|

BSKG_LP:MOVA,#8EH;|

LCALLLCDWC;|保護鬧鍾標志在清屏是不被誤清

MOVA,#26H;|

LCALLLCDWD;|

SJMPBSKG_END;|

BSKG_LL:MOVA,#8FH;報時標志顯示位置

LCALLLCDWC

MOVA,#25H;顯示報時標志

LCALLLCDWD

BSKG_END:RET

;*********************報時次數********************

BSCS:JNBBSKGBZ,BSCS_END

JNBBSCSBZ,BSCS_END

MOVA,37H

CJNEA,#01H,BSCS_LL

MOVA,#0AH

SJMPBSCS_LP

BSCS_LL:CJNEA,#02H,BSCS_LP

MOVA,#14H

BSCS_LP:ADDA,36H

RLA

MOVBSCSCC,A

CLRBSCSBZ

BSCS_END:RET

;**********************閃爍報時********************************

SSBS:JNBBSKGBZ,SSBS_END

JNBZDBSBZ,SSBS_END

JNBZMBSBZ,SSBS_END

CPLP2.6

CPLP2.7

CLRZMBSBZ

DJNZBSCSCC,SSBS_END

CLRZDBSBZ

CLRP2.6

SSBS_END:RET

;************************延時子程序(5MS)************************

DELAY5MS:

PUSHPSW

SETBRS0

SETBRS1

MOVR1,#25;延時子程序(5MS)

DL5_PA:MOVR2,#100

DJNZR2,$

DJNZR1,DL5_PA

POPPSW

RET

TAB:DB"TIME:",00h

TAB1:DB"DATE:",00h

TAB2:DB"01234567891"

TAB3:DB0AH,06H,00H,0AH,06H,00H,0AH,03H;用於比較調整時間時的比較

TAB4:DB0AH,04H,00H,0AH,02H,00H,0AH,0AH,0AH,0AH;用於調整日期時的比較

TAB5:DB00H,03H,02H,03H,03H,03H,03H,03H,03H,03H,03H,03H,03H;用於天數十位比較

TAB6:DB00H,02H,09H,02H,01H,02H,01H,02H,02H,01H,02H,01H,02H;用於天數個位比較

閱讀全文

與單片機多功能電子鍾相關的資料

熱點內容
java迭代器遍歷 瀏覽:301
閩政通無法請求伺服器是什麼 瀏覽:48
怎麼做積木解壓神器 瀏覽:203
王者榮耀解壓玩具抽獎 瀏覽:49
12位是由啥加密的 瀏覽:868
程序員編迷你世界代碼 瀏覽:895
php取現在時間 瀏覽:246
單片機高吸收 瀏覽:427
怎麼區分五代頭是不是加密噴頭 瀏覽:244
hunt測試伺服器是什麼意思 瀏覽:510
2013程序員考試 瀏覽:641
畢業論文是pdf 瀏覽:736
伺服器跑網心雲劃算嗎 瀏覽:471
單片機定時器計數初值的計算公式 瀏覽:801
win7控制台命令 瀏覽:567
貓咪成年app怎麼升級 瀏覽:692
360有沒有加密軟體 瀏覽:315
清除cisco交換機配置命令 瀏覽:751
華為刪除交換機配置命令 瀏覽:473
shell打包命令 瀏覽:827