?? 1.asm
字號:
STATE2KEY2MONTH:
JNB 3AH, STATE2KEY2DATE
ACALL MONTHADJUST
AJMP KEYSTATE2RET
STATE2KEY2DATE:
JNB 3BH, KEYSTATE2RET
ACALL DATEADJUST
AJMP KEYSTATE2RET
STATE2KEY3:
JNB 33H, KEYSTATE2RET
JNB 38H, STATE2KEY3YEAR ;按鍵3,RIGHT
MOV 27H, #00100010B
AJMP KEYSTATE2RET
STATE2KEY3YEAR:
JNB 39H, STATE2KEY3MONTH
MOV 27H, #00100100B
AJMP KEYSTATE2RET
STATE2KEY3MONTH:
JNB 3AH, STATE2KEY3DATE
MOV 27H, #00101000B
AJMP KEYSTATE2RET
STATE2KEY3DATE:
JNB 3BH, KEYSTATE2RET
MOV 27H, #00100001B
;AJMP KEYSTATE2RET
KEYSTATE2RET:
MOV PSW, #00010000B ;使用第二組寄存器
MOV A, 09H ;設置計算總天數程序的入口參數,(年-1925)送R2
SUBB A, #85H ;1925D=785H
MOV R2, A
MOV R3, 0AH ;月送R3
MOV R4, 0BH ;日送R4
LCALL CALCULATETOTALDAYS ;計算距離1925年1月1日的總天數
MOV 0CH, R6 ;計算結果送0CH、0DH單元保存
MOV 0DH, R7
LCALL SETWEEKDAYS ;計算星期幾
MOV A, R5
SWAP A
ANL 26H, #00FH
ORL 26H, A ;計算結果送26H單元高四位保存
MOV R4, 0CH ;計算農歷日期程序入口參數,總天數送R4、R5
MOV R5, 0DH
LCALL LUNARDATECALULATE
MOV 0FH, R7 ;
MOV 0EH, R4 ;
RET
KEYSTATE3:
;狀態3按鍵處理,時間調整設置狀態
MOV PSW, #00011000B
STATE3KEY0:
JNB 30H, STATE3KEY1
MOV 27H, #00H ;按鍵0,SET
JNB 04H, STATE3KEY01
MOV A, R4 ;重新計算當天分鐘數
MOV B, #60
MUL AB
ADD A, R5
MOV 33H, A
MOV A, B
ADDC A, #0
MOV 32H, A
MOV R6, #0 ;秒清零
CLR 04H
STATE3KEY01:
SETB 05H ;設置農歷日期計算請求標識
AJMP KEYSTATE3RET
STATE3KEY1:
JNB 31H, STATE3KEY2
JNB 38H, STATE3KEY1MONTH ;按鍵1,UP
MOV B, #1
ACALL YEARADJUST
AJMP KEYSTATE3RET
STATE3KEY1MONTH:
JNB 39H, STATE3KEY1DATE
ACALL MONTHADJUST
AJMP KEYSTATE3RET
STATE3KEY1DATE:
JNB 3AH, STATE3KEY1HOUR
ACALL DATEADJUST
AJMP KEYSTATE3RET
STATE3KEY1HOUR:
JNB 3BH, STATE3KEY1MINUTE
ACALL HOURADJUST
AJMP KEYSTATE3RET
STATE3KEY1MINUTE:
ACALL MINUTEADJUST
AJMP KEYSTATE3RET
STATE3KEY2:
JNB 32H, STATE3KEY3
JNB 38H, STATE3KEY2MONTH ;按鍵2,DOWN
MOV B, #1
ACALL YEARADJUST
AJMP KEYSTATE3RET
STATE3KEY2MONTH:
JNB 39H, STATE3KEY2DATE
ACALL MONTHADJUST
AJMP KEYSTATE3RET
STATE3KEY2DATE:
JNB 3AH, STATE3KEY2HOUR
ACALL DATEADJUST
AJMP KEYSTATE3RET
STATE3KEY2HOUR:
JNB 3BH, STATE3KEY2MINUTE
ACALL HOURADJUST
AJMP KEYSTATE3RET
STATE3KEY2MINUTE:
ACALL MINUTEADJUST
AJMP KEYSTATE3RET
STATE3KEY3:
JNB 33H, KEYSTATE3RET
JNB 38H, STATE3KEY3MONTH ;按鍵3,RIGHT
MOV 27H, #01000010B
AJMP KEYSTATE3RET
STATE3KEY3MONTH:
JNB 39H, STATE3KEY3DATE
MOV 27H, #01000100B
AJMP KEYSTATE3RET
STATE3KEY3DATE:
JNB 3AH, STATE3KEY3HOUR
MOV 27H, #01001000B
AJMP KEYSTATE3RET
STATE3KEY3HOUR:
JNB 3BH, STATE3KEY3MINUTE
MOV 27H, #01000000B
AJMP KEYSTATE3RET
STATE3KEY3MINUTE:
MOV 27H, #01000001B
;AJMP KEYSTATE3RET
KEYSTATE3RET:
RET
KEYSTATE4:
;狀態4按鍵處理,鬧鐘響鈴狀態
MOV A, 27H
ANL A, #03H
MOV R0, A
MOV A, #28H
ADD A, R0
ADD A, R0
MOV R0, A
MOV A, @R0
CLR ACC.6
SETB ACC.5
MOV @R0, A
CLR P1.7
MOV 27H, #00H
RET
YEARADJUST:
;調整年份,1年增量、10年增量,增量值存在B寄存器中,大于2099及小于1925循環調整
JB 31H, YEARADD
JB 32H, YEARSUBB
AJMP YEARADJUSTRET
YEARADD:
MOV A, R1
ADD A, B
MOV R1, A
MOV A, #0
ADDC A, R0
MOV R0, A
MOV A, #033H ;(2099<-->833H)
CLR C
SUBB A, R1
MOV A, #08H
SUBB A, R0
JNC YEARADJUSTRET
MOV R0, #07H ;(1925<-->785H)
MOV R1, #85H
AJMP YEARADJUSTRET
YEARSUBB:
MOV A, R1
CLR C
SUBB A, B
MOV R1, A
MOV A, R0
SUBB A, #0
MOV R0, A
MOV A, R1
CLR C
SUBB A, #85H
MOV A, R0
SUBB A, #07H
JNC YEARADJUSTRET
MOV R0, #08H
MOV R1, #33H
;AJMP YEARADJUSTRET
YEARADJUSTRET:
MOV A, #28
CLR C
SUBB A, R3
JNC YEARADJUSTRET2
MOV R3, #28
YEARADJUSTRET2:
RET
MONTHADJUST:
;月份調整,增量1,超12及小于1循環
JB 31H, MONTHADD
JB 32H, MONTHSUBB
AJMP MONTHADJUSTRET
MONTHADD:
INC R2
CJNE R2, #13, MONTHADJUSTRET
MOV R2, #1
AJMP MONTHADJUSTRET
MONTHSUBB:
DEC R2
CJNE R2, #0, MONTHADJUSTRET
MOV R2, #12
;AJMP MONTHADJUSTRET
MONTHADJUSTRET:
MOV A, #28
CLR C
SUBB A, R3
JNC MONTHADJUSTRET2
MOV R3, #28
MONTHADJUSTRET2:
RET
DATEADJUST:
;計算當月的天數
CJNE R2, #1, DATE02
MOV 06H, #31
AJMP DATE13
DATE02:
CJNE R2, #2, DATE03
MOV A, R1 ;計算當年-1925年
CLR C
SUBB A, #84H ;
MOV B, #4
DIV AB
MOV A, B
JZ DATE029
MOV 06H, #28
AJMP DATE13
DATE029:
MOV 06H, #29
AJMP DATE13
DATE03:
CJNE R2, #3, DATE04
MOV 06H, #31
AJMP DATE13
DATE04:
CJNE R2, #4, DATE05
MOV 06H, #30
AJMP DATE13
DATE05:
CJNE R2, #5, DATE06
MOV 06H, #31
AJMP DATE13
DATE06:
CJNE R2, #6, DATE07
MOV 06H, #30
AJMP DATE13
DATE07:
CJNE R2, #7, DATE08
MOV 06H, #31
AJMP DATE13
DATE08:
CJNE R2, #8, DATE09
MOV 06H, #31
AJMP DATE13
DATE09:
CJNE R2, #9, DATE10
MOV 06H, #30
AJMP DATE13
DATE10:
CJNE R2, #10, DATE11
MOV 06H, #31
AJMP DATE13
DATE11:
CJNE R2, #11, DATE12
MOV 06H, #30
AJMP DATE13
DATE12:
CJNE R2, #12, DATE13
MOV 06H, #31
;AJMP DATE13
DATE13:
JB 31H, DATEADD
JB 32H, DATESUBB
AJMP DATEADJUSTRET
DATEADD:
INC R3
MOV A, 06H
CLR C
SUBB A, R3
JNC DATEADJUSTRET
MOV R3, #1
AJMP DATEADJUSTRET
DATESUBB:
DEC R3
CJNE R3, #0, DATEADJUSTRET
MOV R3, 06H
;AJMP DATEADJUSTRET
DATEADJUSTRET:
RET
HOURADJUST:
;小時調整,增量1,00~23有效
JB 31H, HOURADD
JB 32H, HOURSUBB
AJMP HOURADJUSTRET
HOURADD:
INC R4
CJNE R4, #24, HOURADJUSTRET
MOV R4, #0
AJMP HOURADJUSTRET
HOURSUBB:
MOV A, R4
CLR C
SUBB A, #1
MOV R4, A
JNC HOURADJUSTRET
MOV R4, #23
;AJMP HOURADJUSTRET
HOURADJUSTRET:
SETB 04H
RET
MINUTEADJUST:
;分鐘調整,增量1,00~59有效
JB 31H, MINUTEADD
JB 32H, MINUTESUBB
AJMP MINUTEADJUSTRET
MINUTEADD:
INC R5
CJNE R5, #60, MINUTEADJUSTRET
MOV R5, #0
AJMP MINUTEADJUSTRET
MINUTESUBB:
DEC R5
CJNE R5, #0FFH, MINUTEADJUSTRET
MOV R5, #59
;AJMP MINUTEADJUSTRET
MINUTEADJUSTRET:
SETB 04H
RET
SETALARMTIME:
;判斷小時R4是否24,是取消鬧鐘,否則計算分鐘數并設置鬧鐘
MOV A, 27H ;取得當前設置鬧鐘時間地址
ANL A, #03H
MOV R0, A
MOV A, #28H
ADD A, R0
ADD A, R0
MOV R0, A
CJNE R4, #24, SETALARMTIME1
MOV @R0, #0 ;取消鬧鐘
INC R0
MOV @R0, #0
AJMP SETALARMTIMERET
SETALARMTIME1:
INC R0 ;設置鬧鈴時間
MOV A, R4
MOV B, #60
MUL AB
ADD A, R5
MOV @R0, A
MOV A, #0
ADDC A, B
SETB ACC.7
DEC R0
MOV @R0, A
SETALARMTIMERET:
RET
PRESETALARMTIME:
;讀取當前鬧鐘時間,并判斷是否已經設置,如果已經設置,顯示已設置時間,否則顯示24:00
MOV A, 27H
ANL A, #03H
MOV R0, A
MOV A, #28H
ADD A, R0
ADD A, R0
MOV R0, A
MOV A, @R0
JNB ACC.7, PRESETALARMTIMENON
;MOV A, @R0
ANL A, #0FH
MOV R2, A
INC R0
MOV A, @R0
MOV R3, A
MOV R4, #0
LOOPPRESETALARMTIME:
MOV A, R3
CLR C
SUBB A, #60
MOV R3, A
MOV A, R2
SUBB A, #0
MOV R2, A
INC R4
JNC LOOPPRESETALARMTIME
DEC R4
MOV A, R3
ADD A, #60
MOV R5, A
AJMP PRESETALARMTIMERET
PRESETALARMTIMENON:
MOV R4, #24
MOV R5, #00H
;AJMP PRESETALARMTIMERET
PRESETALARMTIMERET:
RET
;****************************************************************************************
;-- 作者:hh_dream623
;-- 時間:2006-02-28 20:09:13
;--
ORG 0D00H
;鬧鐘判斷及響鈴驅動程序,使用第零組寄存器
ALARMCLOCK:
MOV C, 46H
ORL C, 56H
ORL C, 66H
ORL C, 76H
ORL C, 45H
ORL C, 55H
ORL C, 65H
ORL C, 75H
JC BEINGALARMCLOCK
MOV A, 27H
JNZ ALARMCLOCKRET
MOV R0, #28H ;鬧鐘0的時間首地址
MOV R5, #0
LCALL ALARMCLOCK0
JB 03H, ALARMCLOCKRET
MOV R0, #2AH ;鬧鐘1的時間首地址
MOV R5, #1
LCALL ALARMCLOCK0
JB 03H, ALARMCLOCKRET
MOV R0, #2CH ;鬧鐘2的時間首地址
MOV R5, #2
LCALL ALARMCLOCK0
JB 03H, ALARMCLOCKRET
MOV R0, #2EH ;鬧鐘3的時間首地址
MOV R5, #3
LCALL ALARMCLOCK0
;AJMP ALARMCLOCKRET
ALARMCLOCKRET:
RET
BEINGALARMCLOCK:
JB 45H, BEINGALARMCLOCK0
JB 46H, BEINGALARMCLOCK0
JB 55H, BEINGALARMCLOCK1
JB 56H, BEINGALARMCLOCK1
JB 65H, BEINGALARMCLOCK2
JB 66H, BEINGALARMCLOCK2
JB 75H, BEINGALARMCLOCK3
JB 76H, BEINGALARMCLOCK3
AJMP BEINGALARMCLOCKRET
BEINGALARMCLOCK0:
MOV R0, #29H
ACALL ALARMCLOCK1
AJMP BEINGALARMCLOCKRET
BEINGALARMCLOCK1:
MOV R0, #2BH
ACALL ALARMCLOCK1
AJMP BEINGALARMCLOCKRET
BEINGALARMCLOCK2:
MOV R0, #2DH
ACALL ALARMCLOCK1
AJMP BEINGALARMCLOCKRET
BEINGALARMCLOCK3:
MOV R0, #2FH
ACALL ALARMCLOCK1
;JB 03H, BEINGALARMCLOCKRET
BEINGALARMCLOCKRET:
RET
ALARMCLOCK1:
CLR 03H
MOV A, @R0 ;提取鬧鈴時間
XRL A, 33H ;提取當天時間低8位,比較時間(分鐘數)
JZ ACLOCK1RET
MOV 27H, #00H
CLR P1.7
DEC R0
MOV A, @R0
ANL A, #8FH
MOV @R0, A
MOV A, R0
SUBB A, #28H
XRL A, #5
JNZ ACLOCK1ONLYONE
CLR 77H
ACLOCK1ONLYONE:
SETB 03H
ACLOCK1RET:
RET
ALARMCLOCK0:
CLR 03H
MOV A, @R0
ANL A, #80H ;判斷鬧鈴是否被設置
JZ ACLOCK0RET
MOV A, @R0 ;提取鬧鈴時間
ANL A, #0FH
MOV R4, A
MOV A, 32H ;提取時間高四位,并比較
ANL A, #0FH
XRL A, R4
JNZ ACLOCK0RET
INC R0
MOV A, @R0
XRL A, 33H ;提取當天時間低8位,比較時間(分鐘數)
JNZ ACLOCK0RET
DEC R0
MOV A, @R0
SETB ACC.6
MOV @R0, A
MOV A, R5
SETB ACC.7
MOV 27H, A
SETB 03H
;響鈴驅動
SETB P1.7
ACLOCK0RET:
RET
;****************************************************************************************
ORG 0E00H
;農歷月份資料,16位一組,高12位表示1~12月每月天數,1為30天,0為25天。
;低4位表示潤月月份,0為當年無閏月,f為當年無閏月且前一年閏月天數為
DW 0ab54h,02b6fh,09570h,052f2h,04970h,06566h,0d4a0h,0ea50h,06a95h,05adfh ;1925
DW 02b60h,086e3h,092efh,0c8d7h,0c95fh,0d4a0h,0d8a6h,0b55fh,056a0h,0a5b4h ;1935
DW 025dfh,092d0h,0d2b2h,0a950h,0b557h,06ca0h,0b550h,05355h,04dafh,0a5b0h ;1945
DW 04573h,052bfh,0a9a8h,0e950h,06aa0h,0aea6h,0ab50h,04b60h,0aae4h,0a570h ;1955
DW 05260h,0f263h,0d950h,05b57h,056a0h,096d0h,04dd5h,04ad0h,0a4d0h,0d4d4h ;1965
DW 0d250h,0d558h,0b540h,0b6a0h,095a6h,095bfh,049b0h,0a974h,0a4b0h,0b27ah ;1975
DW 06a50h,06d40h,0af46h,0ab60h,09570h,04af5h,04970h,064b0h,074a3h,0ea50h ;1985
DW 06b58h,05ac0h,0ab60h,096d5h,092e0h,0c960h,0d954h,0d4a0h,0da50h,07552h ;1995
DW 056a0h,0abb7h,025d0h,092d0h,0cab5h,0a950h,0b4a0h,0baa4h,0ad50h,055d9h ;2005
DW 04ba0h,0a5b0h,05176h,052bfh,0a930h,07954h,06aa0h,0ad50h,05b52h,04b60h ;2015
DW 0a6e6h,0a4e0h,0d260h,0ea65h,0d530h,05aa0h,076a3h,096d0h,04afbh,04ad0h ;2025
DW 0a4d0h,0d0b6h,0d25fh,0d520h,0dd45h,0b5a0h,056d0h,055b2h,049b0h,0a577h ;2035
DW 0a4b0h,0aa50h,0b255h,06d2fh,0ada0h,04b63h,0937fh,049f8h,04970h,064b0h ;2045
DW 068a6h,0ea5fh,06b20h,0a6c4h,0aaefh,092e0h,0d2e3h,0c960h,0d557h,0d4a0h ;2055
DW 0da50h,05d55h,056a0h,0a6d0h,055d4h,052d0h,0a9b8h,0a950h,0b4a0h,0b6a6h ;2065
DW 0ad50h,055a0h,0aba4h,0a5b0h,052b0h,0b273h,06930h,07337h,06aa0h,0ad50h ;2075
DW 04b55h,04b6fh,0a570h,054e4h,0d260h,0e968h,0d520h,0daa0h,06aa6h,056dfh ;2085
DW 04ae0h,0a9d4h,0a4d0h,0d150h,0f252h,0d520h ;2095
ORG 0F70H
;公歷月份日期資料,計算總天數時當月應補加的天數(平年)
DB 00H,03H,03H,06H,08H,0BH,0DH,10H,13H,15H,18H,1AH
ORG 0F80H
;公歷月份日期資料,計算總天數時當月應補加的天數(閏年)
DB 00H,03H,04H,07H,09H,0CH,0EH,11H,14H,16H,19H,1BH
ORG 0F90H
;(0~9)顯示碼(共陰極)
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -