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;用於天數個位比較