一個(gè)帶農(nóng)歷顯示的電子萬(wàn)年歷_第1頁(yè)
一個(gè)帶農(nóng)歷顯示的電子萬(wàn)年歷_第2頁(yè)
一個(gè)帶農(nóng)歷顯示的電子萬(wàn)年歷_第3頁(yè)
一個(gè)帶農(nóng)歷顯示的電子萬(wàn)年歷_第4頁(yè)
一個(gè)帶農(nóng)歷顯示的電子萬(wàn)年歷_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

;寄存器配置:(時(shí)間和II期)

;第3組(18?1FH)(RSkRSO=11)RO?R3,公歷年月日;

;R4?R7,時(shí)間的時(shí)、分、秒、百分之?秒(0.01秒)

;第2組(10?17H)(RSI、RS0-10)計(jì)算農(nóng)歷日期存儲(chǔ)中間臨時(shí)數(shù)據(jù)

;第1組(08?OFH)(RSKRS0=01)鍵盤處理程序存儲(chǔ)

;鬧鐘設(shè)置狀態(tài):R4、R5設(shè)置時(shí)間時(shí)、分,R6、R7計(jì)算分鐘數(shù)

;萬(wàn)年歷狀態(tài):R0?R3查看的公歷年月日,R6、R7農(nóng)歷月日,R4、R5總天數(shù)

;時(shí)間設(shè)置時(shí):直接在第3組寄存器操作

;第0組(00-07H)(RSI、RSO=OO)計(jì)算中間值臨時(shí)存儲(chǔ)器

;總天數(shù)、星期、當(dāng)天分鐘計(jì)數(shù)器、農(nóng)歷日期寄存器

;30H、31H一一距1925.1.1日總天數(shù)

;32H一一高四位星期幾,低四位與33H當(dāng)天的分鐘數(shù)

;34?37H一—農(nóng)歷年月日

;寄存器配置:(鬧鐘),兩個(gè)字節(jié)為一個(gè)單位

;低地址最高位表示是否設(shè)置鬧鐘,低四位與27H為鬧鐘時(shí)間(當(dāng)天的分鐘數(shù))

;鬧鐘1:28H、29H,星期一到五鬧鐘

;鬧鐘2:2AH、2BH,配置與鬧鐘1相同

;鬧鐘3:2CH、2DH,為每日鬧鐘

;鬧鐘4:2EH、2FH,為一次性鬧鐘

;運(yùn)行狀態(tài)寄存器:27H單元,00H,正常的時(shí)間顯示模式

;IxH,鬧鈴設(shè)置模式,0?1位第幾個(gè)鬧鐘(0?3號(hào)),第3位設(shè)置時(shí)(0)和分(1)

;2xH,萬(wàn)年歷查看模式,0?3分別加減10年、1年、1月、1日,1有效

;4xH,忖間日期設(shè)置,低四位都是0設(shè)置年,第0?3位分別為1時(shí)設(shè)置月、日、時(shí)、分

(加減1)

;方波信號(hào):位地址的07H、06H分別為1秒和0.5秒等脈寬信號(hào),用于控制設(shè)置時(shí)閃爍顯示

;顯示緩沖區(qū):6F?7F單元,分別為星期、年月日、時(shí)分、農(nóng)歷月日,星期1個(gè)單元、年4

個(gè)單元、其余2個(gè)單元

;在計(jì)算過(guò)程中所示用的位寄存器:

;在計(jì)算農(nóng)歷時(shí)用00H位(位地址)表示是否閏月

;y年m月的天數(shù)用25H單元存儲(chǔ)臨時(shí)數(shù)據(jù),01H位(位地址)表示當(dāng)月是29天或30天

;05H計(jì)時(shí)滿一天后或者調(diào)整日期后請(qǐng)求進(jìn)行農(nóng)歷日期計(jì)算標(biāo)志為

;04H調(diào)整小時(shí)或分鐘后重新計(jì)算當(dāng)天分鐘數(shù)請(qǐng)求標(biāo)識(shí)

;06H、07H周期1秒和0.5秒的方波信號(hào),前者用于秒閃爍,后者調(diào)整項(xiàng)閃爍

ORG0000H

;開(kāi)機(jī)及復(fù)位后從第一行起運(yùn)行

LJMP0080H;INITTHECLOCK

ORG0003H

;INTO中斷服務(wù)程序,若有鍵按下則產(chǎn)轉(zhuǎn)入鍵處理

LJMPTIIEKEYDOWNSERVER;90011

ORG000BH

;定時(shí)/計(jì)數(shù)器0中斷服務(wù)程序,預(yù)計(jì)每10毫秒產(chǎn)生一次中斷

LJMPSETTIMEVALUE;0300H

ORG001BH

;定時(shí)/計(jì)數(shù)器1中斷服務(wù)程序,用于延時(shí)5秒后將狀態(tài)寄存器復(fù)位為00H

PUSHA

DEC03H

MOVA,03H

JNZTIMER1RET

;按鍵后16秒中如果沒(méi)有其他按鍵操作,自動(dòng)轉(zhuǎn)換為時(shí)間顯示狀態(tài)

MOVA,27H

JZTIMER1SERVERRET;如果是狀態(tài)0,直接返回

TIMER1STATE1:

JNB3CH,TIMER1STATE2

PUSHPSW;如果是在鬧鐘設(shè)置狀態(tài)下調(diào)用鬧鐘設(shè)置程序

MOVPSW,#000010006

LCALLSETALARMTIME

POPPSW

AJMPTIMER1SERVERRET

TIMER1STATE2:

JNB3DH,TIMER1STATE3

AJMPTIMER1SERVERRET;如果在萬(wàn)年歷查看方式下直接換到時(shí)間顯示狀態(tài)

TIMER1STATE3:

JNB3EH,T1MER1SERVERRET

;如果在時(shí)間設(shè)置狀態(tài)下,更改當(dāng)前分鐘數(shù)

SETB05H;設(shè)置農(nóng)歷日期計(jì)算請(qǐng)求標(biāo)識(shí)

JNB04H,TIMER1SERVERRET

PUSHPSW

PUSHB

MOVPSW,#00011000B;

MOVA,R4;如果調(diào)整了時(shí)間,重新計(jì)算當(dāng)天分鐘數(shù)

MOVB,#60

MULAB

ADDA,R5

MOV33H,A

MOVA,B

ADDCA,#0

MOV32H,A

MOVR6,#0;秒清零

CLR04H

POPB

POPPSW

;AJMPTIMER1SERVERRET

TIMER1SERVERRET:

MOV27H,#0011

CLRTRI

TIMER1RET:

POPA

RETI

ORG0080H

INITTHECLOCK:

MOVSP,#3811

JNB08H,INITRESET

MOVPSW,#000110006;使用3組寄存器(0、1、2、3四組寄存器)

MOVR7,#00;初始時(shí)間:00:00:00,00

MOVR6,#00

MOVR5,#00

MOVR4,#00

MOVR3,#15;初始日期:2000.1.1

MOVR2,#12

MOVRI,#0D4H

MOVRO,#7

MOV33H,#0;初始當(dāng)天分鐘計(jì)數(shù)器,32H高4位為星期

MOV32H,#0

MOV27H,#0

SETB08H;標(biāo)識(shí)上電啟動(dòng),在復(fù)位啟動(dòng)時(shí)不初始化時(shí)間日期

SETB05H;

INITRESET:

MOVPSW,#00H

MOVR0,#28H

LOOPINIT:

MOV@R0,#00

INCR0

CJNER0,#30H,LOOPINIT

CLRPl.7

CLRP2.2

MOVIE,#10001011B;開(kāi)定時(shí)/計(jì)數(shù)器0、1中斷,開(kāi)外部中斷0,關(guān)其余中斷

SETB1T0;設(shè)置INTO為負(fù)邊沿觸發(fā)

MOVIP,#00000010B;設(shè)置定時(shí)/計(jì)數(shù)器0的中斷優(yōu)先級(jí)為高

MOVTMOI),#000100108;定義定時(shí)/計(jì)數(shù)器0計(jì)數(shù)模式,與INTO無(wú)關(guān),計(jì)數(shù)模式為8位自動(dòng)

重裝模式

;定義定時(shí)/計(jì)數(shù)器1計(jì)數(shù)模式,與INT1無(wú)關(guān),計(jì)數(shù)模式為16位計(jì)數(shù)

模式

MOVTHO,#6;擬計(jì)數(shù)脈沖頻率為25K,計(jì)數(shù)滿250時(shí)間為10毫秒

MOVTLO,#6

SETBTRO;啟動(dòng)定時(shí)/計(jì)數(shù)器0

MOVPSW,#000000008

MOVP2,#11111111B

;顯示字符、鬧鈴檢測(cè)比較循環(huán)程序

DISPLAYPREPARATIVE:

JNB05H,LUNARDATETODISPLAY

CLR05H

PUSHPSW;計(jì)算農(nóng)歷日期

MOVPSW,#000100008

ACALLSETLUNARDATE

POPPSW

LUNARDATETODISPLAY:

LCALLALARMCLOCK;鬧鈴檢測(cè)及服務(wù)程序

MOVDPTR,#0F90H;數(shù)字1?9的共陰極顯示碼首地址

MOVA,27H;取運(yùn)行狀態(tài)寄存器,以選擇顯示方式

JNZDISABNORMAL

DISPLAYNORMAL:

MOVA,32H;正常時(shí)間顯示模式下,取星期顯示碼

SWAPA

ANLA,#OFH

JNZDISWEEKDAY

MOVA,#8

DISWEEKDAY:

MOVCA,?A+DPTR

MOV6FH,A

MOVRO,#19H;取年分顯示碼,共4位

MOVRI,#70H

ACALLDISYEARCODE

MOVRO,#1AII;取日期(月日)顯示碼,共4位

ACALLDISCODE

INCRO;取時(shí)間(時(shí)分)顯示碼,共4位

ACALLDISCODE

MOVRO,#36H;取農(nóng)歷日期(月日)顯示碼,共4位

ACALLDISCODE

AJMPDISPLAYRUN

DISABNORMAL:;設(shè)置及萬(wàn)年歷模式下,顯示方式

JB3CH,DISSTATE1XH

JB3DH,DISSTATE2XH

JB3EH,DISSTATE3XH

JB3FH,DISSTATE4XH

AJMPDISPLAYPREPARATIVE

DISSTATE3XH:

AJMPJMPDISSTATE3XH

DISSTATE4XH:

AJMPJMPDISSTATE4XH

DISSTATE1XH:;狀態(tài)1(設(shè)置鬧鐘),星期欄顯示鬧鐘號(hào)(廣4),鬧鈴標(biāo)志亮,時(shí)間欄顯示,

其余不顯示

MOVA,27H;取狀態(tài)字

ANLA,#000001118

INCA

MOVCA,?A+DPTR

MOV6FH,A;在星期一欄顯示鬧鐘號(hào)(1-4)

MOVRI,#70H;陽(yáng)歷的年月日日期都不顯示,送顯示碼00H到顯示緩沖區(qū)

L00PDISSTATE1XH:

MOV?R1,#0

INCRI

CJNERI,#78H,L00PDISSTATE1XH

DECRI

MOVR0,#OCH;時(shí)間時(shí),分顯示碼,第1組寄存器R4、R5

ACALLDISCODE

INCR1

L00PDISSTATE1XH1:;農(nóng)歷日期蘭不顯示,送顯示碼00H到顯示緩沖區(qū)

MOV@R1,#0

INCRI

CJNERI,#80H,L00PDISSTATE1XH1

JB07H,DISSTATE1XHFLICKER

AJMPDISPLAYRUN

DISSTATE1XHFLICKER:;設(shè)置時(shí)的閃爍顯示

JB3BH,DISSTATE1XHFLICKERMINUTE

MOV78H,#0;時(shí)消隱

MOV79H,#0

AJMPDISPLAYRUN

DISSTATE1XHFLICKERMINUTE:

MOV7AH,#0;分消隱

MOV7BH,no

AJMPDISPLAYRUN

DISSTATE2XH:;狀態(tài)2(萬(wàn)年歷),時(shí)間欄不顯示,只顯示陰陽(yáng)歷日期及星期

MOVA,26H;取星期顯示碼,高4位

ANLA,#OFOH

SWAPA

JNZDISSTATE2XHWEEKDAY

MOVA,#8

DISSTATE2XHWEEKDAY:

MOVCA,?A+DPTR

MOV6FH,A

MOVRO,#09H;取年顯示碼,共4位

MOVRI,#70H

ACALLDISYEARCODE

MOVRO,#0AH;取日期(月日)顯示碼,共4位

ACALLDISCODE

L00PDISSTATE2XH:;時(shí)間不顯示,送0為顯示碼

INCR1

MOV@R1,#0

CJNERI,#7BH,L00PDISSTATE2XH

MOVRO,#OEH;取陰歷(月日)顯示碼,共4位

;M0VRI,#7BH

ACALLDISCODE

JB07H,DISSTATE2XHFLICKER

AJMPDISPLAYRUN

DISSTATE2XHFLICKER:

JB38H,DISSTATE2XHFLICKERYEAR10

JB39H,DISSTATE2XHFL1CKERYEAR1

JB3AH,DISSTATE2XHFLICKERM0NTH

JB3BH,DISSTATE2XHFL1CKERDATE

AJMPDISPLAYRUN

DISSTATE2XHFL1CKERYEAR10:

MOV72H,#0

AJMPDISPLAYRUN

DISSTATE2XHFLICKERYEAR1:

MOV73H,#0

AJMPDISPLAYRUN

DISSTATE2XHFLICKERM0NTH:

MOV74H,#0

MOV75H,#0

AJMPDISPLAYRUN

DISSTATE2XHFLICKERDATE:

MOV76H,#0

MOV77H,#0

AJMPDISPLAYRUN

JMPDISSTATE3XH:;狀態(tài)3(設(shè)置時(shí)間日期),不顯示農(nóng)歷的日期和星期

MOV6FH,#0;星期,不顯示

MOVRO,#19H;取年分顯示碼,共4位

MOVRI,#70H

ACALLDISYEARCODE

MOVRO,#1AH;取日期(月日)顯示碼,共4位

ACALLDISCODE

INCRO;取時(shí)間(時(shí)分)顯示碼,共4位

ACALLDISCODE

L00PDISSTATE3XH:;時(shí)間不顯示,送0為顯示碼

INCR1

MOV@R1,#0

CJNERI,#7FH,L00PDISSTATE3XH

JB07H,DISSTATE3XIIFLICKER

AJMPDISPLAYRUN

DISSTATE3XHFLICKER:

JB38H,DISSTATE3XHFLICKERYEAR

JB3911,DISSTATE3XIIFLICKERM0NTII

JB3AH,DISSTATE3XHFLICKERDATE

JB3BH,DISSTATE3XHFLICKERI10UR

;DISSTATE3XHFLICKERINUTE:

MOV7AH,#0

MOV7BH,#0

AJMPDISPLAYRUN

DISSTATE3XHFLICKERYEAR:

MOV70H,#0

MOV71H,#0

MOV72H,#0

MOV73H,#0

AJMPDISPLAYRUN

DISSTATE3XHFL1CKERM0NTH:

MOV74H,#0

MOV75H,#0

AJMPDISPLAYRUN

D1SSTATE3XHFL1CKERDATE:

MOV76H,#0

MOV77H,#0

AJMPDISPLAYRUN

DISSTATE3XHFLICKERH0UR:

MOV78H,#0

MOV79H,#0

AJMPDISPLAYRUN

JMPDISSTATE4XH:

AJMPDISPLAYNORMAL

;AJMPDISPLAYRUN

DISPLAYRUN:;顯示碼送顯示驅(qū)動(dòng)器

MOVC,06H

MOVP2.0,C;

MOVC,07H

MOVP2.1,C;

MOVPO,6FH

SETBP2.2

ACALLDELAY

CLRP2.2

MOVRO,#70H

MOVR2,#0

LOOPDISPLAY:

MOVPO,?RO

MOVA,R2

SWAPA

ANLP2,#OFH

ORLP2,A

CLRP2.3

ACALLDELAY

SETBP2.3

INCRO

INCR2

CJNER2,#16,LOOPDISPLAY

LJMPDISPLAYPREPARATIVE

DELAY:

;顯示延遲

;((2*R6+1)*R7+1)機(jī)器周期

MOVR7,#5

LOOPDALAY:

MOVR6,#100

L00PDALAY1:

DJNZR6,L00PDALAY1

DJNZR7,LOOPDALAY

RET

DISYEARCODE:

MOVA,@R0;計(jì)算年的顯示碼

CLRC

SUBBA,#ODOH;(2000->7D0H)

MOVB,A

DECRO

MOVA,@R0

SUBBA,#07H

JNCDISYEAR2000

INCRO

MOVA,?RO

CLRC

SUBBA,#06CH;(1900->76CH)

MOVB,A

;MOVA,18H

;SUBBA,#07H

MOVA,#1

MOVCA,@A+DPTR

MOV@R1,A

MOVA,#9

MOVCA,?A+DPTR

INCRI

MOV@R1,A

AJMPDISYEAR1O

DISYEAR2000:

MOVA,#2

MOVCA,?A+DPTR

MOV@R1,A

MOVA,#0

MOVCA,@A+DPTR

INCRI

MOV@R1,A

DISYEAR10:

MOVA,B

MOVB,#10

DIVAB

MOVCA,@A+DPTR

INCRI

MOV@R1,A

MOVA,B

MOVCA,@A+DPTR

INCRI

MOV@R1,A

RET

D1SC0DE:

MOVA,@R0

MOVB,#10

DIVAB

MOVCA,?A+DPTR

INCRI

MOV@R1,A

MOVA,B

MOVCA,?A+DPTR

INCRI

MOV@R1,A

INCRO

MOVA,@R0

MOVB,#10

DIVAB

MOVCA,?A+DPTR

INCRI

MOV@R1,A

MOVA,B

MOVCA,?A+DPTR

INCRI

MOV@R1,A

RET

SETLUNARDATE:

MOVA,19H;設(shè)置計(jì)算總天數(shù)程序的入口參數(shù),(年T925)送R2

SUBBA,#85H;1925D=785H

MOVR2,A

MOVR3,1AH;月送R3

MOVR4,1BH;日送R4

LCALLCALCULATETOTALDAYS;計(jì)算距離1925年1月1日的總天數(shù)

MOV30H,R6;計(jì)算結(jié)果送30H、31H單元保存

MOV31H,R7

LCALLSETWEEKDAYS;計(jì)算星期幾

MOVA,R5

SWAPA

ANL32H,#0FH

ORL32H,A;計(jì)算結(jié)果送32H單元高四位保存

MOVR4,30H;計(jì)算農(nóng)歷日期程序入口參數(shù),總天數(shù)送R4、R5

MOVR5,31H

LCALLLUNARDATECALULATE

MOV37H,R7;

MOV36H,R4;

MOVA,R2

ADDA,#85H;1925D=785H

MOV35H,A

MOVA,#0

ADDCA,#07H

MOV34H,A

RET

ORG0300H

;時(shí)間計(jì)數(shù)器累加,設(shè)置當(dāng)前時(shí)間,年月日、時(shí)分秒、0.01秒

;設(shè)置時(shí)間

SETTIMEVALUE:

PUSHPSW;壓棧保護(hù)現(xiàn)場(chǎng)PS%A、B

PUSHA

PUSHB

MOVPSW,#OOO11OOOB;使用第三組寄存器

INC24H;250微秒計(jì)數(shù)器

MOVA,24H

CJNEA,#40,RETTIME

MOV24H,#0011

INCR7;百分之一秒(0.01秒)時(shí)間計(jì)數(shù)器

;產(chǎn)生周期為1秒及0?5秒的方波脈沖信號(hào)

MS250:

CJNER7,#25,MS500

CPL07H

MS500:

CJNER7,#50,MS750

CPL07H

CPL06H

MS750:

CJNER7,#75,MS1000

CPL07H

MS1000:

CJNER7,#100,RETTIME

CPL07H

CPL06H

MOVR7,#0;滿一秒鐘,百分秒計(jì)數(shù)器清零

INCR6;秒計(jì)數(shù)器

CJNER6,#60,RETTIME

MOVR6,#0;滿一分鐘,分計(jì)數(shù)器清零

INCR5;分鐘計(jì)數(shù)器

MOVA,33H;當(dāng)天分鐘數(shù)計(jì)數(shù)器(32H低四位、33H)

ADDA,#1

MOV33H,A

MOVA,#0

ADDCA,32H

MOV32H,A

CJNER5,#60,RETTIME

MOVR5,#0;滿一小時(shí),分鐘計(jì)數(shù)器清零

INCR4;時(shí)計(jì)數(shù)器

CJNER4,#24,RETTIME

MOVR4,#0;滿一天,時(shí)計(jì)數(shù)器清零

MOV33H,#0;當(dāng)天分鐘計(jì)數(shù)器清零

MOV32H,#0

ACALLSETDATEVALUE;設(shè)置日期計(jì)數(shù)器

;計(jì)算日期入口條件設(shè)置

SETB05H;設(shè)置請(qǐng)求計(jì)算農(nóng)歷日期指示

RETTIME:

POPB;出?;謴?fù)現(xiàn)場(chǎng)B、A、PSW

POPA

POPPSW

RETI

;設(shè)置II期

SETDATEVALUE:

INCR3;天計(jì)數(shù)器

MOVA,R2;判斷月份以確定當(dāng)月的天數(shù)

DECA

JZDAY31;1月

DECA

JZDAY28;2月

DECA

JZDAY3L3月

DECA

JZDAY30;4月

DECA

JZDAY31;5月

DECA

JZDAY30;6月

DECA

JZDAY31;7月

DECA

JZDAY31;8月

DECA

JZDAY30;9月

DECA

JZDAY31;10月

DECA

JZDAY30;ll月

DECA

JZDAY31;12月

DAY31:

CJNER3,#32,RETDATE;大月,31天

AJMPSETMONTH

DAY30:

CJNER3,#31,RETDATE;小月,30天

AJMPSETMONTH

DAY28:;2月,平年28天,閏年29天

MOVA,R1;計(jì)算當(dāng)年一1925年

SUBBA,#84H;

MOVB,#4

DIVAB

MOVA,B

JZDAY29

CJNER3,#29,RETDATE;平年2月28天

AJMPSETMONTH

DAY29:

CJNER3,#30,RETDATE;閏年2月29天

;AJMPSETMONTH

SETMONTH:

MOVR3,#1;滿一個(gè)月,日計(jì)數(shù)器設(shè)置為1

INCR2;月計(jì)數(shù)器

CJNER2,#13,RETDATE

MOVR2,#1;滿一年,月計(jì)數(shù)器設(shè)置為1

MOVA,#1;年計(jì)數(shù)器(RO、R1)

ADDA,RI

MOVRI,A

MOVA,#0

ADDCA,RO

MOVRO,A

RETDATE:

RET

ORG0400H

ORG0500H

;計(jì)算當(dāng)天距離1925年1月1日的總天數(shù),使用第2組寄存器

;入口:R2二年一1925,R3=月,R4=E

;出口:R6、R7=總天數(shù)

CALCULATETOTALDAYS:

MOVA,R2;假設(shè)1年有365天,計(jì)算(年-1925)年的總天數(shù)

MOVB,#6DH;16DH(365)的低位字節(jié)

MULAB

MOVR7,A

MOVA,R2

ADDA,B

MOVR6,A

MOVA,R2;補(bǔ)加(年-1925)中閏年補(bǔ)償(一年366天)的天數(shù)

MOVB,#4

DIVAB

ADDA,R7

MOVR7,A

MOVA,#0

ADDCA,R6

MOVR6,A

MOVA,R3;假設(shè)每月有28天,計(jì)算(月一1)個(gè)月的總天數(shù)

DECA

MOVB,#28;設(shè)每月有28天

MULAB

ADDA,R7

MOVR7,A

MOVA,B

ADDCA,R6

MOVR6,A

MOVDPTR,#0F70H;平年月天數(shù)補(bǔ)償表起始地址(大月31天、小月30天、閏年2月29

天)

MOVA,R2

INCA

MOVB,#4

DIVAB

MOVA,B

JNZSETDPTREND

MOVDPTR,#0F80H;閏年月天數(shù)補(bǔ)償表起始地址

SETDPTREND:

MOVA,R3;補(bǔ)加月補(bǔ)償天數(shù)

DECA

MOVCA,?A+DPTR

ADDA,R7

MOVR7,A

MOVA,#0

ADDCA,R6

MOVR6,A

MOVA,R4;日

DECA

ADDA,R7

MOVR7,A

MOVA,#0

ADDCA,R6

MOVR6,A

RET

ORG0580H

;計(jì)算當(dāng)前是星期幾,使用第0組寄存器

;入口:R6、R7,為當(dāng)天距離1925年1月1日的總天數(shù)

;出口:R5,計(jì)算結(jié)果0表示星期天,1?6分別為星期一至星期六

SETWEEKDAYS:

MOVA,R7;取出總天數(shù),加4(1925年1月1日為星期四)

ADDA,#4

MOVR7,A

MOVA,#0

ADDCA,R6

MOVR6,A;計(jì)算總天數(shù)除以7的余數(shù)

MOVB,#7

DIVAB

MOVR6,B

MOVA,R7

MOVB,#7

DIVAB

MOVA,B

RLA

RLA

RLA

MOVR7,A

MOVA,R6

RLA

RLA

RLA

MOVB,#7

DIVAB

MOVR6,B

MOVRO,#3

WEEKDAYSLOOP:

MOVA,R6

CLRCY

RRCA

MOVR6,A

MOVA,R7

RRCA

MOVR7,A

DECRO

CJNERO,#0,WEEKDAYSLOOP

;MOVA,R7

MOVB,#7

DIVAB

MOVR5,B

RET

ORG0700H

;計(jì)算農(nóng)歷日期(年月日),第0組、第1組(00H?0FH)寄存器存儲(chǔ)計(jì)算中間值

;子程序段

LUNARYEARDAYS:

;計(jì)算農(nóng)歷Y年的總天數(shù)

;入口,R2,Y年一1925

;出口,R4、R5,Y年的總天數(shù)

MOVR5,#5CH;設(shè)一年29x12=348(15CH)天

MOVR4,#1

MOVDPTR,#OEOOH;資料起始地址

MOVA,R2;設(shè)置DPTR,原因:資料單位為字(雙字節(jié))

ADDA,DPL

MOVDPL,A

MOVA,#0

ADDCA,DPH;在程序設(shè)計(jì)時(shí)確定該計(jì)算不會(huì)溢出

MOVDPH,A

MOVA,R2;取丫年月份資料高字節(jié)(1?8月份)

MOVCA,@A+DPTR

MOVRO,#0;累加農(nóng)歷Y年應(yīng)補(bǔ)加的天數(shù)

MOVR1,#8;移位計(jì)數(shù)器

L00PLUNARYEARDAYS1:

RLCA

JNCLUNARYEARDAY291

INCRO

LUNARYEARDAY291:

DJNZRI,LOOPLUNARYEARDAYS1

MOVA,R2;取低字節(jié)資料的高四位

INCA

MOVCA,?A+DPTR

MOVRI,#4

L00PLUNARYEARDAYS2:

RLCA

JNCLUNARYEARDAY292

INCRO

LUNARYEARDAY292:

DJNZRI,L00PLUNARYEARDAYS2

MOVA,RO

ADDA,R5

MOVR5,A

MOVA,#0

ADDCA,R4

MOVR4,A

LCALLLUNARLEAPDAYS;補(bǔ)加Y年閏月的天數(shù)(R3)

MOVA,R3

ADDA,R5

MOVR5,A

MOVA,#0

ADDCA,R4

MOVR4,A

RET

LUNARLEAPDAYS:

;計(jì)算農(nóng)歷Y年的閏月的天數(shù)

;入口:R2Y年一1925

;出口:R3,Y年閏月的天數(shù)

LCALLLUNARLEAPMONTH;Y年有無(wú)閏月,潤(rùn)幾月。結(jié)果存在R3

CJNER3,#0,LUNARLEAPDAYS29

MOVR3,#0

LJMPLUNARLEAPDAYSRET

LUNARLEAPDAYS29:

MOVA,R2;取月份資料低字節(jié)低四位(閏月天數(shù)資料)

INCA

ADDA,#2;?。╕年—1924),低四位表示前一年閏月天數(shù)

MOVCA,?A+DPTR

ANLA,#0FH;取低四位

XRLA,#OFH;如果低四位為F,則前一年閏月30天

JZLUNARLEAPDAYS30

MOVR3,#29

LJMPLUNARLEAPDAYSRET

LUNARLEAPDAYS30:

MOVR3,#30

LUNARLEAPDAYSRET:

RET

LUNARLEAPMONTH:

;計(jì)算農(nóng)歷Y年的閨月的月份

;入口:R2Y年一1925

;出口:R3,Y年閏月的月份,0表示Y年無(wú)閨月

MOVA,R2

INCA

MOVCA,?A+DPTR

ANLA,#OFH;取低四位

MOVR3,A

XRLA,#OFH;如果是F,返回0,Y年無(wú)閏月

JNZLUNARLEAPMONTHRET

MOVR3,#0

LUNARLEAPMONTHRET:

RET

LUNARMONTHDAYS:

;計(jì)算農(nóng)歷Y年的M月的天數(shù)

;入口:R2Y年一1925,R4M月

;出口:RX,Y年M月的天數(shù)

;MOVA,R2

;MOVDPTR,#2000H;資料起始地址

;MOVA,R2;設(shè)置DPTR,原因:資料單位為字(雙字節(jié))

;ADDA,DPL

;MOVDPL,A

;MOVA,#0

;ADDCA,DPH;在程序設(shè)計(jì)時(shí)確定該計(jì)算不會(huì)溢出

;MOVDPH,A

MOVA,R2;取丫年月份資料高字節(jié)(1?8月份)

MOVCA,?A+DPTR

MOV25H,A

MOVA,R4;循環(huán)計(jì)數(shù)器

MOVRO,A

MOVRI,#8

MOVA,25H

LOOPMONTHDAYS1:

RLCA

MOV01H,C

DECRO

DECRI

MOV25H,A;保存A寄存器的內(nèi)容

MOVA,RO

JZEX1TL00PM0NTHDAYS2

MOVA,RI

JZEXITL00PM0NTHDAYS1

MOVA,25H;恢復(fù)A寄存器的內(nèi)容

LJMPLOOPMONTHDAYS1

EXITL00PM0NTHDAYS1:

MOVA,R2;取低字節(jié)資料

INCA

MOVCA,?A+DPTR

L00PM0NTHDAYS2:

RLCA

MOV01H,C

DJNZRO,L00PM0NTHDAYS2

EXITL00PM0NTHDAYS2:

JB01H,LUNARM0NTHDAYS30

MOVR3,#29

LJMPLUNARMONTHDAYSRET

LUNARM0NTHDAYS30:

MOVR3,#30

LUNARMONTHDAYSRET:

RET

;計(jì)算農(nóng)歷日期的主程序

LUNARDATECALULATE:

;計(jì)算農(nóng)歷日期,使用第0組或第1組寄存器

;入口:R4、R5總天數(shù)

;出口:1^2=年-1925;R4=月;1^7=日

;分三段計(jì)算1925.1.24?1968.1.30、?2011.2.3、~2045.2.8、2099.12.31

MOVA,R5

CLRC

SUBBA,#033H

MOVR7,A

MOVA,R4

SUBBA,#0B8H

MOVR6,A

MOVR2,#129

JNCEXITFENDUAN

MOVA,R5

CLRC

SUBBA,#0D4H

MOVR7,A

MOVA,R4

SUBBA,#07AH

MOVR6,A

MOVR2,#86

JNCEXITFENDUAN

MOVA,R5

CLRC

SUBBA,#076H

MOVR7,A

MOVA,R4

SUBBA,#03DH

MOVR6,A

MOVR2,#43

JNCEXITFENDUAN

MOVA,R5

CLRC

SUBBA,#017H

MOVR7,A

MOVA,R4

SUBBA,#0

MOVR6,A

MOVR2,#0

JNCEXITFENDUAN

LJMPERRCALCULATE;計(jì)算出錯(cuò),超出日期范圍

EXITFENDUAN:;分段計(jì)算有效總天數(shù)R6、R7,年份R2,R4、R5失效后面的程序可以

使用

LOOPCALCULATEYEAR:

LCALLLUNARYEARDAYS

MOVA,R7

CLRC

SUBBA,R5

MOVR7,A

MOVA,R6

SUBBA,R4

MOVR6,A

JCEX1TL00PCALCULATEYEAR

INCR2

MOVA,R2

XRLA,#176;大于175(2100年)退出循環(huán)

JNZPASSERRCALCULATE2

LJMPERRCALCULATE

PASSERRCALCULATE2:

LJMPLOOPCALCULATEYEAR

EXITLOOPCALCULATEYEAR:

MOVA,R7;加上最后一年減掉的天數(shù),當(dāng)年已經(jīng)過(guò)去的天數(shù),用于計(jì)算月份和日期

ADDA,R5

MOVR7,A

MOVA,R6

ADDCA,R4

MOVR6,A

;DECR2;如果是零,為1926年

LCALLLUNARLEAPMONTH;判斷是否有閏月,月份存在R3

MOVA,R3

MOVR5,A

CLROOH;是否閏月標(biāo)識(shí)

MOVR4,#1;計(jì)算月數(shù)

LOOPCALCULATEMONTH:

MOVA,R5

JZCALCULATEM0NTH1;轉(zhuǎn)無(wú)閏月處理

MoV#1

AA,5

DDA,R

X

RLA,R4

JNZCALCULATEM0NTH1;轉(zhuǎn)非閏月處理

JBOOH,CALCULATEMONTH1

DECR4

SETBOOH;設(shè)置閏年標(biāo)識(shí)

LCALLLUNARLEAPDAYS;讀取當(dāng)年閏月的天數(shù)R3

LJMPCALCULATEMONTH2;

CALCULATEMONTH1:

LCALLLUNARMONTHDAYS;結(jié)果存放在R3中

CALCULATEMONTH2:

JNBOOH,CALCULATEMONTH3

MOVA,#1

ADDA,R5

XRLA,R4

JNZCALCULATEMONTH3

CLROOH;解除閏月標(biāo)識(shí)

CALCULATEMONTH3:

MOVA,R7

CLRC

SUBBA,R3

MOVR7,A

MOVA,R6

SUBBA,#0

MOVR6,A

JCEX1TL00PCALCULATEM0NTH

INCR4

MOVA,R4;如果大于十二退出,提示錯(cuò)誤

XRLA,#13

JZERRCALCULATE

LJMPLOOPCALCULATEMONTH

EXITLOOPCALCULATEMONTH:

MOVA,R5;判斷是否閏月

JZCALCULATEM0NTH5

MOVA,#1

ADDA,R5

XRLA,R4

JNZCALCULATEM0NTH5

JNBOOH,CALCULATEM0NTH4

CLROOH

LJMPCALCULATEM0NTH5

CALCULATEM0NTH4:

SETBOOH

DECR4

CALCULATEM0NTH5:

MOVA,R7;加最后一次減的天數(shù),當(dāng)月已經(jīng)過(guò)完的天數(shù)

ADDA,R3

MOVR7,A

MOVA,#0

ADDCA,R6

MOVR6,A

;DECR4

INCR7;計(jì)算日期

LJMPCALCULATERET

;計(jì)算結(jié)果:1?2=年-1925;R4=月;R7=H

ERRCALCULATE:;錯(cuò)誤顯示

;錯(cuò)誤處理程序

NOP

CALCULATERET:

RET

ORG0900H

THEKEYDOWNSERVER:

;27H單元的位地址高位到低位:37、36、35、34、33、32、31、30(H)

;有鍵按下的位為0,本程序?yàn)榘存I處理分派

CLRTR1;關(guān)閉延時(shí)計(jì)數(shù)器

CLREXO;關(guān)閉INTO中斷

PUSHP0

MOVP0,#0

MOV04H,#10;延時(shí)單元

KEYDELAY:

MOV05H,#200

DJNZ05H,$

DJNZ04H,KEYDELAY

PUSHPSW;保護(hù)現(xiàn)場(chǎng)

PUSHA

PUSHB

MOVPSV#000010008

MOVA,Pl

ORLA,#OFH

MOVPl,A;讀鍵盤口,結(jié)果存儲(chǔ)26H第四位

MOVA,Pl

CPLA

ANLA,#OFH

JZKEYALL0T5;如果無(wú)鍵按下,推出

ANL26H,#OFOH

ORL26H,A

KEYALL0T1:

MOVA,27H

JNZKEYALLOT2

ACALLKEYSTATEO

AJMPKEYALLOT5

KEYALLOT2:

JNB3CH,KEYALLOT3

ACALLKEYSTATE1

AJMPKEYALLOT5

KEYALLOT3:

JNB3DH,KEYALL0T4

ACALLKEYSTATE2

AJMPKEYALLOT5

KEYALL0T4:

JNB3EH,KEYALL0T8

ACALLKEYSTATE3

AJMPKEYALLOT5

KEYALL0T8:

JNB3FH,KEYALL0T5

ACALLKEYSTATE4

;AJMPKEYALL0T5

KEYALLOT5:

POPB;恢復(fù)現(xiàn)場(chǎng)

POPA

POPPSW

POPPO

;設(shè)置延時(shí)計(jì)數(shù)器,如果在5秒鐘內(nèi)沒(méi)有按鍵動(dòng)作自動(dòng)轉(zhuǎn)到時(shí)間顯示狀態(tài)

MOVTH1,#0

MOVTFO,#0

MOV03H,#255

CLRIE0

SETBEXO

SETBTRI;計(jì)時(shí)開(kāi)始

RETI

KEYSTATEO:

;狀態(tài)0按鍵處理,時(shí)間顯示狀態(tài)

STATEOKEYO:

JNB30H,STATE0KEY1

MOV27H,#10H

ACALLPRESETALARMTIME

AJMPKEYSTATEORET

STATE0KEY1:

JNB31H,STATE0KEY2

AJMPSTATE0KEY12

STATE0KEY2:

JNB32H,STATE0KEY3

STATE0KEY12:

MOV27H,#24H

MOVRO,18H

MOVRl,19H

MOVR2,1AH

MOVR3,1BH

MOVR6,36H

MOVR7,37H

MOVA,32H

ANLA,#OFOH

ANL26H,#OFH

ORL26H,A

AJMPKEYSTATEORET

STATEOKEY3:

JNB33H,KEYSTATEORET

MOV27H,#48H

;AJMPKEYSTATEORET

KEYSTATEORET:

RET

KEYSTATE1:

;狀態(tài)1按鍵處理,鬧鐘設(shè)置狀態(tài)

STATE1KEYO:

JNB30H,STATE1KEY1

ACALLSETALARMTIME;SET

MOV27H,#21H;初始化萬(wàn)年歷狀態(tài)

MOVRO,18H

MOVRI,19H

MOVR2,1AH

MOVR3,1BH

MOVR6,36H

MOVR7,37H

MOVA,32H

ANLA,#OFOH

ANL26H,#OFH

ORL26H,A

AJMPKEYSTATE1RET

STATE1KEY1:

JNB31H,STATE1KEY2

JB3BH,STATE1KEY1MIN;UP

INCR4

CJNER4,#25,STATE1KEY1HOUR

MOVR4,#0

STATE1KEY1H0UR:

AJMPKEYSTATE1RET

STATE1KEY1MIN:

ACALLMINUTEADJUST

AJMPKEYSTATE1RET

STATE1KEY2:

JNB32H,STATE1KEY3

JB3BII,STATE1KEY2MIN;DOWN

DECR4

CJNER4,#0FFH,STATE1KEY2H0UR

MOVR4,#24

STATE1KEY2H0UR:

AJMPKEYSTATE1RET

STATE1KEY2MIN:

ACALLMINUTEADJUST

AJMPKEYSTATE1RET

STATE1KEY3:

JNB33H,KEYSTATE1RET

JNB3BH,STATE1KEY3CHANGE;RIGHT

ACALLSETALARMTIME

MOVA,27H

ANLA,#03H

INCA

MOVB,#4

DIVAB

MOVA,B

ANL27H,#OFOH

ORL27H,A

ACALLPRESETALARMTIME

AJMPKEYSTATE1RET

STATE1KEY3CHANGE:

SETB3BH;切換到分鐘調(diào)整

;AJMPKEYSTATE1RET

KEYSTATE1RET:

RET

KEYSTATE2:

;狀態(tài)2按鍵處理,萬(wàn)年歷查看狀態(tài)

STATE2KEY0:

JNB30H,STATE2KEY1

MOV27H,#41H;按鍵0,SET

AJMPKEYSTATE2RET

STATE2KEY1:

JNB31H,STATE2KEY2

JNB38H,STATE2KEY1YEAR;按鍵1,UP

MOVB,#10

ACALLYEARADJUST

AJMPKEYSTATE2RET

STATE2KEY1YEAR:

JNB39H,STATE2KEY1M0NTH

MOVB,#1

ACALLYEARADJUST

AJMPKEYSTATE2RET

STATE2KEY1M0NTH:

JNB3AH,STATE2KEY1DATE

ACALLMONTIIADJUST

AJMPKEYSTATE2RET

STATE2KEY1DATE:

JNB3BH,KEYSTATE2RET

ACALLDATEADJUST

AJMPKEYSTATE2RET

STATE2KEY2:

JNB32H,STATE2KEY3

JNB38H,STATE2KEY2YEAR;按鍵2,DOWN

MOVB,#10

ACALLYEARADJUST

AJMPKEYSTATE2RET

STATE2KEY2YEAR:

JNB39H,STATE2KEY2M0NTH

MOVB,#1

ACALLYEARADJUST

AJMPKEYSTATE2RET

STATE2KEY2M0NTH:

JNB3AH,STATE2KEY2DATE

ACALLMONTHADJUST

AJMPKEYSTATE2RET

STATE2KEY2DATE:

JNB3BH,KEYSTATE2RET

ACALLDATEADJUST

AJMPKEYSTATE2RET

STATE2KEY3:

JNB33H,KEYSTATE2RET

JNB38H,STATE2KEY3YEAR;按鍵3,RIGHT

MOV27H,#0010001OB

AJMPKEYSTATE2RET

STATE2KEY3YEAR:

JNB3911,STATE2KEY3M0NTH

MOV27H,#001001008

AJMPKEYSTATE2RET

STATE2KEY3MONTH:

JNB3AH,STATE2KEY3DATE

MOV27H,#001010006

AJMPKEYSTATE2RET

STATE2KEY3DATE:

JNB3BH,KEYSTATE2RET

MOV27H,#001000016

;AJMPKEYSTATE2RET

KEYSTATE2RET:

MOVPSW,#OOO1OOOOB;使用第二組寄存器

MOVA,0911;設(shè)置計(jì)算總天數(shù)程序的入口參數(shù),(年-1925)送R2

SUBBA,#85H;1925D=785H

MOVR2,A

MOVR3,OAH;月送R3

MOVR4,OBH;日送R4

LCALLCALCULATETOTALDAYS;計(jì)算距離1925年1月1日的總天數(shù)

MOVOCH,R6;計(jì)算結(jié)果送OCH、ODH單元保存

MOVODH,R7

LCALLSETWEEKDAYS;計(jì)算星期幾

MOVA,R5

SWAPA

ANL26H,#OOFH

ORL26H,A;計(jì)算結(jié)果送26H單元高四位保存

MOVR4,OCH;計(jì)算農(nóng)歷日期程序入口參數(shù),總天數(shù)送R4、R5

MOVR5,ODH

LCALLLUNARDATECALULATE

MOVOFH,R7;

MOVOEH,R4;

RET

KEYSTATE3:

;狀態(tài)3按鍵處理,時(shí)間調(diào)整設(shè)置狀態(tài)

MOVPSW,#00011000B

STATE3KEY0:

JNB30H,STATE3KEY1

MOV27H,#00H;按鍵0,SET

JNB04H,STATE3KEY01

MOVA,R4;重新計(jì)算當(dāng)天分鐘數(shù)

MOVB,#60

MULAB

ADDA,R5

MOV33H,A

MOVA,B

ADDCA,#0

MOV32H,A

MOVR6,#0;秒清零

CLR04H

STATE3KEY01:

SETB05H;設(shè)置農(nóng)歷H期計(jì)算請(qǐng)求標(biāo)識(shí)

AJMPKEYSTATE3RET

STATE3KEY1:

JNB31H,STATE3KEY2

JNB38H,STATE3KEY1M0NTH;按鍵1,UP

MOVB,#1

ACALLYEARADJUST

AJMPKEYSTATE3RET

STATE3KEY1M0NTH:

JNB39H,STATE3KEY1DATE

ACALLMONTHADJUST

AJMPKEYSTATE3RET

STATE3KEY1DATE:

JNB3AH,STATE3KEY1H0UR

ACALLDATEADJUST

AJMPKEYSTATE3RET

STATE3KEY1H0UR:

JNB3BH,STATE3KEY1MINUTE

ACALLHOURADJUST

AJMPKEYSTATE3RET

STATE3KEY1MINUTE:

ACALLMINUTEADJUST

AJMPKEYSTATE3RET

STATE3KEY2:

JNB32H,STATE3KEY3

JNB38H,STATE3KEY2M0NTH;按鍵2,DOWN

MOVB,#1

ACALLYEARADJUST

AJMPKEYSTATE3RET

STATE3KEY2M0NTH:

JNB39H,STATE3KEY2DATE

ACALLMONTHADJUST

AJMPKEYSTATE3RET

STATE3KEY2DATE:

JNB3AH,STATE3KEY2H0UR

ACALLDATEADJUST

AJMPKEYSTATE3RET

STATE3KEY2H0UR:

JNB3BH,STATE3KEY2MINUTE

ACALLHOURADJUST

AJMPKEYSTATE3RET

STATE3KEY2MINUTE:

ACALLMINUTEADJUST

AJMPKEYSTATE3RET

STATE3KEY3:

JNB33H,KEYSTATE3RET

JNB38H,STATE3KEY3MONTH;按鍵3,RIGHT

MOV27H,#0100001OB

AJMPKEYSTATE3RET

STATE3KEY3M0NTH:

JNB3911,STATE3KEY3DATE

MOV27H,#01000100B

AJMPKEYSTATE3RET

STATE3KEY3DATE:

JNB3AH,STATE3KEY3H0UR

MOV27H,#010010008

AJMPKEYSTATE3RET

STATE3KEY3H0UR:

JNB3BH,STATE3KEY3MINUTE

MOV27H,#01000000B

AJMPKEYSTATE3RET

STATE3KEY3MINUTE:

MOV27H,#01000001B

;AJMPKEYSTATE3RET

KEYSTATE3RET:

RET

KEYSTATE4:

;狀態(tài)4按鍵處理,鬧鐘響鈴狀態(tài)

MOVA,27H

ANLA,#03H

MOVRO,A

MOVA,#28H

ADDA,RO

ADDA,RO

MOVRO,A

MOVA,?RO

CLRACC.6

SETBACC.5

MOV@R0,A

CLRPl.7

MOV27H,#0011

RET

YEARADJUST:

;調(diào)整年份,1年增量、10年增量,增量值存在B寄存器中,大于2099及小于1925循環(huán)調(diào)整

JB31H,YEARADD

JB32H,YEARSUBB

AJMPYEARADJUSTRET

YEARADD:

MOVA,RI

ADDA,B

MOVRI,A

MOVA,#0

ADDCA,RO

MOVRO,A

MOVA,#03311;(2099<—>833H)

CLRC

SUBBA,RI

MOVA,#08H

SUBBA,RO

JNCYEARADJUSTRET

MOVRO,#07H;(1925<—>785H)

MOVRI,#85H

AJMPYEARADJUSTRET

YEARSUBB:

MOVA,RI

CLRC

SUBBA,B

MOVRI,A

MOVA,RO

SUBBA,#0

MOVRO,A

MOVA,RI

CLRC

SUBBA,#85H

MOVA,RO

SUBBA,#07H

JNCYEARADJUSTRET

MOVRO,#08H

MOVRI,#33H

;AJMPYEARADJUSTRET

YEARADJUSTRET:

MOVA,#28

CLRC

SUBBA,R3

JNCYEARADJUSTRET2

MOVR3,#28

YEARADJUSTRET2:

RET

MONTHADJUST:

;月份調(diào)整,增量1,超12及小于1循環(huán)

JB31H,MONTHADD

JB32H,MONTHSUBB

AJMPMONTHADJUSTRET

MONTHADD:

INCR2

CJNER2,#13,MONTHADJUSTRET

MOVR2,#1

AJMPMONTHADJUSTRET

MONTHSUBB:

DECR2

CJNER2,#0,MONTHADJUSTRET

MOVR2,#12

;AJMPMONTHADJUSTRET

MONTHADJUSTRET:

MOVA,#28

CLRC

SUBBA,R3

JNCMONTHADJUSTRET2

MOVR3,#28

MONTHADJUSTRET2:

RET

DATEADJUST:

;計(jì)算當(dāng)月的天數(shù)

CJNER2,#1,DATE02

MOV06H,#31

AJMPDATE13

DATE02:

CJNER2,#2,DATE03

MOVA,RI;計(jì)算當(dāng)年一1925年

CLRC

SUBBA,#84H;

MOVB,#4

DIVAB

MOVA,B

JZDATE029

MOV06H,#28

AJMPDATE13

DATE029:

MOV0611,#29

AJMPDATE13

DATE03:

CJNER2,#3,DATE04

MOV0611,#31

AJMPDATE13

DATE04:

CJNER2,#4,DATE05

MOV06H,#30

AJMPDATE13

DATE05:

CJNER2,#5,DATE06

MOV06H,#31

AJMPDATE13

DATE06:

CJNER2,#6,DATE07

MOV06H,#30

AJMPDATE13

DATE07:

CJNER2,#7,DATE08

MOV06H,#31

AJMPDATE13

DATE08:

CJNER2,#8,DATE09

MOV06H,#31

AJMPDATE13

DATE09:

CJNER2,#9,DATE10

MOV06H,#30

AJMPDATE13

DATE10:

CJNER2,#10,DATE11

MOV06H,#31

AJMPDATE13

DATE11:

CJNER2,#11,DATE12

MOV06H,#30

AJMPDATE13

DATE12:

CJNER2,#12,DATE13

MOV06H,#31

;AJMPDATE13

DATE13:

JB31H,DATEADD

JB32H,DATESUBB

AJMPDATEADJUSTRET

DATEADD:

INCR3

MOVA,06H

CLRC

SUBBA,R3

JNCDATEADJUSTRET

MOVR3,#1

AJMPDATEADJUSTRET

DATESUBB:

DECR3

CJNER3,#0,DATEADJUSTRET

MOVR3,06H

;AJMPDATEADJUSTRET

DATEADJUSTRET:

RET

HOURADJUST:

;小時(shí)調(diào)整,增量1,00?23有效

JB31H,HOURADD

JB32H,HOURSUBB

AJMPHOURADJUSTRET

HOURADD:

INCR4

CJNER4,#24,HOURADJUSTRET

MOVR4,#0

AJMPHOURADJUSTRET

HOURSUBB:

MOVA,R4

CLRC

SUBBA,#1

MOVR4,A

JNCHOURADJUSTRET

MOVR4,#23

;AJMPHOURADJUSTRET

HOURADJUSTRET:

SETB04H

RET

MINUTEADJUST:

;分鐘調(diào)整,增量1,00?59有效

JB31H,MINUTEADD

JB32H,MINUTESUBB

AJMPMINUTEADJUSTRET

MINUTEADD:

INCR5

CJNER5,#60,MINUTEADJUSTRET

MOVR5,#0

AJMPMINUTEADJUSTRET

MINUTESUBB:

DECR5

CJNER5,#0FFH,MINUTEADJUSTRET

MOVR5,#59

;AJMPMINUTEADJUSTRET

MINUTEADJUSTRET:

SETB04H

RET

SETALARMTIME:

;判斷小時(shí)R4是否24,是取消鬧鐘,否則計(jì)算分鐘數(shù)并設(shè)置鬧鐘

MOVA,27H;取得當(dāng)前設(shè)置鬧鐘時(shí)間地址

ANLA,#03H

MOVRO,A

MOVA,#28H

ADDA,RO

ADDA,RO

MOVRO,A

CJNER4,#24,SETALARMTIME1

MOV@R0,#0;取消鬧鐘

INCRO

MOV@R0,#0

AJMPSETALARMTIMERET

SETALARMT1ME1:

INCRO;設(shè)置鬧鈴時(shí)間

MOVA,R4

MOVB,#60

MULAB

ADDA,R5

MOV?RO,A

MOVA,#0

ADDCA,B

SETBACC.7

DECRO

MOV@R0,A

SETALARMTIMERET:

RET

PRESETALARMTIME:

;讀取當(dāng)前鬧鐘時(shí)間,并判斷是否已經(jīng)設(shè)置,如果已經(jīng)設(shè)置,顯示已設(shè)置時(shí)間,否則顯示24:00

MOVA,27H

ANLA,#03H

MOVRO,A

MOVA,#28H

ADDA,RO

ADDA,RO

MOVRO,A

MOVA,@R0

JNBACC.7,PRESETALARMTIMENON

;MOVA,@R0

ANLA,#0FH

MOVR2,A

INCRO

MOVA,@R0

MOVR3,A

MOVR4,#0

LOOPPRESETALARMTIME:

MOVA,R3

CLRC

SUBBA,#60

MOVR3,A

MOVA,R2

SUBBA,#0

MOVR2,A

INCR4

JNCLOOPPRESETALARMTIME

DECR4

MOVA,R3

ADDA,#60

MOVR5,A

AJMPPRESETALARMTIMERET

PRESETALARMTIMENO

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論