日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
用51 單片機(jī)實(shí)現(xiàn)公歷與農(nóng)歷星期的轉(zhuǎn)換
用51 單片機(jī)實(shí)現(xiàn)公歷與農(nóng)歷星期的轉(zhuǎn)換
 更新時間:2008-7-26 19:52:01  點(diǎn)擊數(shù):3
【字體: 字體顏色
用51 單片機(jī)實(shí)現(xiàn)公歷與農(nóng)歷星期的轉(zhuǎn)換
濟(jì)南 朱思榮
一概述
公歷是全世界通用的歷法以地球繞太陽的一周為一年一年365 天分為12 個月1 3 5 7 8 10 12 月為
31 天2 月為28 天其余月份為30 天事實(shí)上地球繞太陽一周共365 天5 小時48 分46 秒比公歷一年多出5 小時48
分46 秒為使年誤差不累積公歷年用閏年法來消除年誤差 由于每年多出5 小時48 分46 秒每4 年累計多出23
小時15 分4 秒接近1 天天文學(xué)家就規(guī)定每4 年有一個閏年把2 月由28 天改為29 天凡是公歷年代能被4 整除
的那一年就是閏年但是這樣一來每4 年又少了44 分56 秒為了更準(zhǔn)確地計時天文學(xué)家又規(guī)定凡能被100 整除
的年份只有能被400 整除才是閏年即每400 年要減掉3 個閏年經(jīng)過這樣處理后實(shí)際上每400 年的誤差只有2 小時
53 分20 秒已相當(dāng)準(zhǔn)確了
農(nóng)歷與公歷不同農(nóng)歷把月亮繞地球一周作為一月因?yàn)樵铝晾@地球一周不是一整天所以農(nóng)歷把月分為大月和小
月大月30 天小月29 天通過設(shè)置大小月使農(nóng)歷日始終與月亮與地球的位置相對應(yīng)為了使農(nóng)歷的年份與公歷年
相對應(yīng)農(nóng)歷通過設(shè)置閏月的辦法使它的平均年長度與公歷年相等農(nóng)歷是中國傳統(tǒng)文化的代表之一并與農(nóng)業(yè)生產(chǎn)聯(lián)
系密切中國人民特別是廣大農(nóng)民十分熟悉并喜愛農(nóng)歷
公歷與農(nóng)歷是我國目前并存的兩種歷法各有其固有的規(guī)律農(nóng)歷與月球的運(yùn)行相對應(yīng)其影響因素多它的大小
月和閏月與天體運(yùn)行有關(guān)計算十分復(fù)雜且每年都不一致因此要用單片機(jī)實(shí)現(xiàn)公歷與農(nóng)歷的轉(zhuǎn)換用查表法是最方
便實(shí)用的辦法
51 系列單片機(jī)因其在功能上能滿足大部份對速度要求不高的應(yīng)用場合的要求且價格低廉開發(fā)工具普及程度高
是目前應(yīng)用最多的單片機(jī)之一本文介紹一種用51 單片機(jī)實(shí)現(xiàn)從1901 年到2099 年199 年公歷日到農(nóng)歷日及星期的轉(zhuǎn)
換方法并向讀者提供完整的51 匯編程序
二 基本原理
實(shí)現(xiàn)公歷與農(nóng)歷的轉(zhuǎn)換一般采用查表法按日查表是速度最快的方法但51 單片機(jī)尋址能力有限不可能采用
按日查表的方法除按日查外我們可以通過按月查表和按年查表的方法再通過適當(dāng)?shù)挠嬎銇泶_定公歷日所對應(yīng)的
農(nóng)歷日期本文采用的是按年查表法最大限度地減少表格所占的程序空間
對于農(nóng)歷月來說大月為30 天小月為29 天這是固定不變的這樣我們就可用1 個BIT 位來表示大小月信
息農(nóng)歷一年如有閏月為13 個月否則是12 個月所以一年需要用13 個BIT 閏月在農(nóng)歷年中所在的月份并不固定
大部分閏月分布在農(nóng)歷2 8 月但也有少量年份在9 月以后所以要表示閏月的信息至少要4BIT 在這里我們用4BIT
的值來表示閏月的月份值為0 表示本年沒有閏月有了以上信息還不足以判斷公歷日對應(yīng)的農(nóng)歷日因?yàn)檫需要一
個參照日我們選用農(nóng)歷正月初一所對應(yīng)的公歷日期作參照日公歷日最大為31 日需要5BIT 來表示而春節(jié)所在的
月份不是1 月就是2 月用1BIT 就夠了考慮到表達(dá)方便我們用2BIT 來表示春節(jié)月2BIT 的值直接表示月份這
樣一年的農(nóng)歷信息只用3 個字節(jié)就全部包括了
計算公歷日對應(yīng)的農(nóng)歷日期的方法先計算出公歷日離當(dāng)年元旦的天數(shù)然后查表取得當(dāng)年的春節(jié)日期計算出春
節(jié)離元旦的天數(shù)二者相減即可算出公歷日離春節(jié)的天數(shù)以后只要根據(jù)大小月和閏月信息減一月天數(shù)調(diào)整一月農(nóng)
歷月份即可推算出公歷日所對應(yīng)的農(nóng)歷日期如公歷日不到春節(jié)日期農(nóng)歷年要比公歷年小一年農(nóng)歷大小月取前一
年的信息農(nóng)歷月從12 月向前推算
公歷日是非常有規(guī)律的所以公歷日所對應(yīng)的星期天可以通過計算直接得到理論上公元0 年1 月1 日為星期日
只要求得公歷日離公元0 年1 月1 日的日子數(shù)除7 后的余數(shù)就是星期天為了簡化計算采用月校正法根據(jù)公歷的
年月日可直接計算出星期天其算法是日期年份所過閏年數(shù)月校正數(shù)之和除7 的余數(shù)就是星期天但如果是在
閏年又不到3 月份上述之和要減一天再除7 其1 12 月的校正數(shù)據(jù)為6 2 2 5 0 3 5 1 4 6 2 4 在
本程序中采用1 個字節(jié)表示年份閏年數(shù)也只計算1900 年以后的閏年數(shù)所以實(shí)際校正數(shù)據(jù)也和上述數(shù)據(jù)不同
- 2 -
三 程序流程
由于星期的計算很簡單這里只提供公歷日轉(zhuǎn)農(nóng)歷日的程序流程圖



是 否
子程序入口
轉(zhuǎn)換數(shù)據(jù)到HEX 格式方便運(yùn)算
根據(jù)公歷年定位數(shù)據(jù)表的地址
從數(shù)據(jù)表中取得春節(jié)的公歷日期,并通過
計算公歷日和春節(jié)離元旦的天數(shù)算出公歷
日離春節(jié)的天數(shù)記為X
農(nóng)歷年=公歷年減
1 數(shù)據(jù)表地址減
3 定位到前一年
取農(nóng)歷月信息
農(nóng)歷月12 閏月標(biāo)
志F0 0 非閏月
X Y
否 公歷日在春節(jié)以后碼?
取農(nóng)歷月天
數(shù)Y

X X Y
F0 1



農(nóng)歷月減1
農(nóng)歷月閏月
F0 取反
是 否
農(nóng)歷日Y X 1
農(nóng)歷年=公歷年取
農(nóng)歷月信息
農(nóng)歷月1 閏月標(biāo)
志F0 0 非閏月
取農(nóng)歷月
天數(shù)Y
X Y X X Y
農(nóng)歷月閏月
農(nóng)歷月加1
F0 1
F0 取反

農(nóng)歷日X 1

農(nóng)歷年月日數(shù)
據(jù)標(biāo)準(zhǔn)化
子程序出口
- 3 -
四程序使用說明
本文提供的子程序在設(shè)計時應(yīng)用了PCF8563 作時鐘芯片所以其入口格式與PCF8563 芯片的時鐘信號存儲格式完
全一致年月日均為BCD 碼其中月的BIT7 表示世紀(jì)為1 表示19 世紀(jì)為0 表示20 世紀(jì)采用PCF8563 時
鐘芯片只要把它的年月日寄存器內(nèi)容讀出到time_yeAr time_month 和time_date 三個單元內(nèi)即可直接調(diào)用本
程序轉(zhuǎn)換采用其它時鐘芯片調(diào)用前要把時鐘格式稍作調(diào)整或修改一下程序公歷日轉(zhuǎn)農(nóng)歷日程序在12M 晶振下
執(zhí)行時間最長約0.48 毫秒實(shí)際使用時只需在復(fù)位和日期變化時才需要調(diào)用一次對于公歷日轉(zhuǎn)星期天的子程序則
只在設(shè)置時鐘時才有用在設(shè)置時鐘年月日后調(diào)用子程序得到對應(yīng)的星期天直接寫入時鐘即可
子程序附帶了1901-2100 年的農(nóng)歷數(shù)據(jù)表全部編譯要占600 字節(jié)空間如不需這么多可把不需要的數(shù)據(jù)刪除然
后修改stArt_yeAr 值即可stArt_yeAr 定義了查詢表的起始年份
五子程序清單
start_year EQU 01; 定義查詢表起始年份,01--199 表示1901-2099 年
;以下三單元為需轉(zhuǎn)換的公歷日期是子程序的入口數(shù)據(jù)
time_year DATA 30h
time_month DATA 31h ;BIT7 表示世紀(jì),為1 表示19 世紀(jì),為0 表示20 世紀(jì)
time_date DATA 32h
;以下三單元存轉(zhuǎn)換后農(nóng)歷日期與入口單元重疊,如要保留入口信息,請重定義出口地址
CONvert_yeAr DATA 30h
CONvert_mONth DATA 31h ;BIT7 為1 表示閏月
CONvert_dAte DATA 32h
temp_Byte1 DATA 37h
temp_Byte2 DATA 38h
temp_Byte3 DATA 39h
temp_Byte4 DATA 3Ah
temp_Byte5 DATA 3Bh
time_week DATA 40h ;星期天出口
;以下為公歷轉(zhuǎn)農(nóng)歷子程序
CONvert: MOV A,time_year ;將年月日轉(zhuǎn)化為HEX 格式
MOV B,#16
DIV AB
MOV CONvert_yeAr,B
MOV B,#10
MUL AB
ADD A,CONvert_yeAr
MOV CONvert_yeAr,A
MOV A,time_month
MOV C,ACC.7
MOV f0,C ;f0暫存世紀(jì)標(biāo)志,僅用于數(shù)據(jù)表定位
CLR ACC.7
JNB ACC.4,CON_02
- 4 -
CLR ACC.4 ;ACC.4 為1 表示大于10 月
ADD A,#10
CON_02: MOV CONvert_mONth,A
MOV A,time_date
MOV B,#16
DIV AB
MOV CONvert_dAte,B
MOV B,#10
MUL AB
ADD A,CONvert_dAte
MOV CONvert_dAte,A
MOV dptr,#mONth_dAtA ;以下定位本年數(shù)據(jù)在表格中的位置
MOV A,CONvert_yeAr
JB f0,CON_06 ;當(dāng)前為19 世紀(jì)年跳轉(zhuǎn)
ADD A,#100 ;從19 世紀(jì)起定義表格起始年,20 世紀(jì)要加100 年
CON_06: CLR C
SUBB A,#stArt_yeAr
MOV B,#3 ;表格每年3 字節(jié)
MUL AB
ADD A,dpl
MOV dpl,A
MOV A,B
ADDC A,dph
MOV dph,A
MOV A,#2
MOVC A,@A+dptr ;讀本年表格最后一字節(jié)(春節(jié)日期)
CLR ACC.7 ;ACC.7 是閏年第13 個月大小,在此不用
MOV B,#32
DIV AB
MOV temp_Byte1,A ;春節(jié)月份
MOV temp_Byte2,B ;春節(jié)日
; 以下計算當(dāng)前日期距元旦天數(shù)
MOV temp_Byte3,#0 ;設(shè)距元旦天數(shù)高位為0
MOV A,CONvert_mONth
CJNE A,#10,CON_08
CON_08: JC CON_09 ;9月以前日子數(shù)小于256 天,高字節(jié)為0(9 月份過去的整月為8 個月)
MOV temp_Byte3,#1
CON_09: MOV A,CONvert_yeAr
ANL A,#03h ;ACC 為除4 的余數(shù)
JNZ CON_10 ;轉(zhuǎn)常年處理
; 年除4 余數(shù)為0 是閏年
MOV A,CONvert_mONth
- 5 -
LCALL get_ruN_dAys_lOw ;取得閏年過去月的天數(shù)的低字節(jié)
SJMP CON_12
CON_10: MOV A,CONvert_mONth
LCALL get_dAys_lOw ;取得常年過去月的天數(shù)的低字節(jié)
CON_12: MOV B,CONvert_dAte
DEC B ;因?yàn)槿掌趶? 日起,而不是0 日起
ADD A,B ;過去的整月天數(shù)加當(dāng)月天數(shù)
MOV temp_Byte4,A
JNC CON_14
INC temp_Byte3 ;temp_Byte3,temp_Byte4 分別為公歷年過去的天數(shù)的高低字節(jié)
; 以下求春節(jié)距元旦天數(shù),因肯定小于256 天所以只用一字節(jié)表示
CON_14: MOV A,temp_Byte1
LCALL get_dAys_lOw ;春節(jié)不會在3 月份,不用考慮閏年
DEC A ;因?yàn)槿掌趶? 日起
ADD A,temp_Byte2
MOV temp_Byte5,A ;temp_Byte5,為春節(jié)距元旦天數(shù)
MOV A,CONvert_mONth
CJNE A,temp_Byte1,CON_20 ;轉(zhuǎn)換月與春節(jié)月比較
MOV A,CONvert_dAte
CJNE A,temp_Byte2,CON_20 ;轉(zhuǎn)換日與春節(jié)日比較
CON_20: JC CON_22
LJMP CON_60 ;當(dāng)前日大于等于春節(jié)日期,公歷年與農(nóng)歷年同年份
CON_22: MOV A,CONvert_yeAr ;不到春節(jié),農(nóng)歷年比公歷年低一年
JNZ CON_24
MOV A,#100 ;年有效數(shù)0-99
CON_24: DEC A
MOV CONvert_yeAr,A
MOV A,dpl
CLR C
SUBB A,#3
MOV dpl,A
JNC CON_26
DEC dph ;表格指針指向上一年
CON_26: MOV A,temp_Byte5
CLR C
SUBB A,temp_Byte4
MOV temp_Byte3,A ;temp_Byte3 中為當(dāng)前日離春節(jié)的天數(shù)
MOV CONvert_mONth,#12 ;農(nóng)歷月為12 月
CLR f0 ;1901-2099 年沒有閏12 月,清閏月標(biāo)志
CLR A
MOVC A,@A+dptr
- 6 -
ANL A,#0f0h
SWAP A;
MOV temp_Byte4,A ;temp_Byte4 中為閏月
JZ CON_30 ;沒有閏月轉(zhuǎn)移
MOV A,#2 ;有閏月,取第13 個月天數(shù)
MOVC A,@A+dptr
MOV C,ACC.7
MOV A,#1
MOVC A,@A+dptr
RLC A ;ACC 中為最后6 個月的大小值
SJMP CON_34
CON_30: MOV A,#1
MOVC A,@A+dptr ;ACC 中為最后6 個月的大小值
CON_34: MOV temp_Byte5,A
CON_40: MOV A,temp_Byte5
RRC A
MOV temp_Byte5,A
JC CON_42
MOV B,#29 ;小月29 天
SJMP CON_44
CON_42: MOV B,#30 ;大月30 天
CON_44: MOV A,temp_Byte3
CLR C
SUBB A,B
JZ CON_46 ;正好夠減,就是農(nóng)歷日1 日
JNC CON_50
;不夠減一月天數(shù),結(jié)束農(nóng)歷月調(diào)整
CPL A ;求補(bǔ)取絕對值
INC A
CON_46: INC A ;加1 即為農(nóng)歷日
MOV B,#10 ;轉(zhuǎn)換并保存農(nóng)歷日,月,年
DIV AB
SWAP A
ORL A,B
MOV CONvert_dAte,A
MOV A,CONvert_mONth
MOV B,#10
DIV AB
SWAP A
ORL A,B
MOV C,f0
MOV ACC.7,C
MOV CONvert_mONth,A
- 7 -
MOV A,CONvert_yeAr
MOV B,#10
DIV AB
SWAP A
ORL A,B
MOV CONvert_yeAr,A
RET ;結(jié)束轉(zhuǎn)換
CON_50: MOV temp_Byte3,A ;temp_Byte3 存減去一月后的天數(shù)
JB f0,CON_52 ;是閏月,前推一月,月份不減
DEC CONvert_mONth;
CON_52: MOV A,CONvert_mONth
CJNE A,temp_Byte4,CON_54
CPL f0 ;當(dāng)前月與閏月相同,更改閏月標(biāo)志
CON_54: SJMP CON_40
CON_60: MOV A,temp_Byte4 ;春節(jié)日小于當(dāng)前日,農(nóng)歷年同公歷年
CLR C
SUBB A,temp_Byte5
MOV temp_Byte4,A
JNC CON_62
DEC temp_Byte3 ;temp_Byte3 temp_Byte4 中為公歷日離春節(jié)的天數(shù)
CON_62: MOV CONvert_mONth,#1 ;農(nóng)歷月為1 月
CLR A
MOVC A,@A+dptr
MOV temp_Byte5,A
ANL A,#0f0h
SWAP A;
XCH A,temp_Byte5 ;temp_Byte5 中為閏月,ACC 為當(dāng)年農(nóng)歷表第一字節(jié)
CLR f0 ;第一個月肯定不是閏月
ANL A,#0fh
MOV temp_Byte1,A
MOV A,#1
MOVC A,@A+dptr
MOV temp_Byte2,A
ANL A,#0f0h
ORL A,temp_Byte1
SWAP A
MOV temp_Byte1,A
MOV A,#2
MOVC A,@A+dptr
MOV C,ACC.7
MOV A,temp_Byte2
ANL A,#0fh
- 8 -
SWAP A
MOV ACC.3,C;
MOV temp_Byte2,A ;以上temp_Byte1,temp_Byte2 各BIT 存農(nóng)歷年大小
CON_70: MOV A,temp_Byte2
RLC A
MOV temp_Byte2,A
MOV A,temp_Byte1
RLC A
MOV temp_Byte1,A
JC CON_72
MOV B,#29 ;小月29 天處理
SJMP CON_74
CON_72: MOV B,#30 ;大月30 天
CON_74: MOV A,temp_Byte4
CLR C
SUBB A,B
JNC CON_78 ;低字節(jié)夠減跳轉(zhuǎn)
MOV B,A ;低字節(jié)不夠減, B 暫存減后結(jié)果,
MOV A,temp_Byte3
JZ CON_76 ;高字節(jié)為0,不夠減
DEC temp_Byte3
MOV temp_Byte4,B
SJMP CON_80
CON_76: MOV A,temp_Byte4 ;不夠減結(jié)束月調(diào)整
LJMP CON_46 ;轉(zhuǎn)日期加1 后,處理并保存轉(zhuǎn)換后農(nóng)歷年月日
CON_78: MOV temp_Byte4,A ;temp_Byte3 temp_Byte4 天數(shù)為減去一月后天數(shù)
CON_80: MOV A,CONvert_mONth
CJNE A,temp_Byte5,CON_82
CPL f0 ;當(dāng)前月與閏月相同,更改閏月標(biāo)志
JNB f0,CON_82 ;更改標(biāo)志后是非閏月,月份加1
SJMP CON_70
CON_82: INC CONvert_mONth;
SJMP CON_70
get_dAys_lOw:
MOVC A,@A+PC ;取得常年過去月的天數(shù)的低字節(jié)
RET
DB 0,31,59,90,120,151,181,212,243,17,48,78
get_ruN_dAys_lOw:
MOVC A,@A+PC ;取得閏年過去月的天數(shù)的低字節(jié)
RET
DB 0,31,60,91,121,152,182,213,244,18,49,79
mONth_dAtA:
;公歷年對應(yīng)的農(nóng)歷數(shù)據(jù),每年三字節(jié),
- 9 -
;格式第一字節(jié)BIT7-4 位表示閏月月份,值為0 為無閏月,BIT3-0 對應(yīng)農(nóng)歷第1-4 月的大小
;第二字節(jié)BIT7-0 對應(yīng)農(nóng)歷第5-12 月大小,第三字節(jié)BIT7 表示農(nóng)歷第13 個月大小
;月份對應(yīng)的位為1 表示本農(nóng)歷月大(30 天),為0 表示小(29 天).
;第三字節(jié)BIT6-5 表示春節(jié)的公歷月份,BIT4-0 表示春節(jié)的公歷日期
DB 004h,0Aeh,053h; 1901;
DB 00Ah,057h,048h; 1902
DB 055h,026h,0Bdh; 1903
DB 00dh,026h,050h; 1904
DB 00dh,095h,044h; 1905
DB 046h,0AAh,0B9h; 1906
DB 005h,06Ah,04dh; 1907
DB 009h,0Adh,042h; 1908
DB 024h,0Aeh,0B6h; 1909
DB 004h,0Aeh,04Ah; 1910
DB 06Ah,04dh,0Beh; 1911
DB 00Ah,04dh,052h; 1912
DB 00dh,025h,046h; 1913
DB 05dh,052h,0BAh; 1914
DB 00Bh,054h,04eh; 1915
DB 00dh,06Ah,043h; 1916
DB 029h,06dh,037h; 1917
DB 009h,05Bh,04Bh; 1918
DB 074h,09Bh,0C1h; 1919
DB 004h,097h,054h; 1920
DB 00Ah,04Bh,048h; 1921
DB 05Bh,025h,0BCh; 1922
DB 006h,0A5h,050h; 1923
DB 006h,0d4h,045h; 1924
DB 04Ah,0dAh,0B8h; 1925
DB 002h,0B6h,04dh; 1926
DB 009h,057h,042h; 1927
DB 024h,097h,0B7h; 1928
DB 004h,097h,04Ah; 1929
DB 066h,04Bh,03eh; 1930
DB 00dh,04Ah,051h; 1931
DB 00eh,0A5h,046h; 1932
DB 056h,0d4h,0BAh; 1933
DB 005h,0Adh,04eh; 1934
DB 002h,0B6h,044h; 1935
DB 039h,037h,038h; 1936
DB 009h,02eh,04Bh; 1937
DB 07Ch,096h,0Bfh; 1938
DB 00Ch,095h,053h; 1939
DB 00dh,04Ah,048h; 1940
- 10 -
DB 06dh,0A5h,03Bh; 1941
DB 00Bh,055h,04fh; 1942
DB 005h,06Ah,045h; 1943
DB 04Ah,0Adh,0B9h; 1944
DB 002h,05dh,04dh; 1945
DB 009h,02dh,042h; 1946
DB 02Ch,095h,0B6h; 1947
DB 00Ah,095h,04Ah; 1948
DB 07Bh,04Ah,0Bdh; 1949
DB 006h,0CAh,051h; 1950
DB 00Bh,055h,046h; 1951
DB 055h,05Ah,0BBh; 1952
DB 004h,0dAh,04eh; 1953
DB 00Ah,05Bh,043h; 1954
DB 035h,02Bh,0B8h; 1955
DB 005h,02Bh,04Ch; 1956
DB 08Ah,095h,03fh; 1957
DB 00eh,095h,052h; 1958
DB 006h,0AAh,048h; 1959
DB 07Ah,0d5h,03Ch; 1960
DB 00Ah,0B5h,04fh; 1961
DB 004h,0B6h,045h; 1962
DB 04Ah,057h,039h; 1963
DB 00Ah,057h,04dh; 1964
DB 005h,026h,042h; 1965
DB 03eh,093h,035h; 1966
DB 00dh,095h,049h; 1967
DB 075h,0AAh,0Beh; 1968
DB 005h,06Ah,051h; 1969
DB 009h,06dh,046h; 1970
DB 054h,0Aeh,0BBh; 1971
DB 004h,0Adh,04fh; 1972
DB 00Ah,04dh,043h; 1973
DB 04dh,026h,0B7h; 1974
DB 00dh,025h,04Bh; 1975
DB 08dh,052h,0Bfh; 1976
DB 00Bh,054h,052h; 1977
DB 00Bh,06Ah,047h; 1978
DB 069h,06dh,03Ch; 1979
DB 009h,05Bh,050h; 1980
DB 004h,09Bh,045h; 1981
DB 04Ah,04Bh,0B9h; 1982
DB 00Ah,04Bh,04dh; 1983
DB 0ABh,025h,0C2h; 1984
- 11 -
DB 006h,0A5h,054h; 1985
DB 006h,0d4h,049h; 1986
DB 06Ah,0dAh,03dh; 1987
DB 00Ah,0B6h,051h; 1988
DB 009h,037h,046h; 1989
DB 054h,097h,0BBh; 1990
DB 004h,097h,04fh; 1991
DB 006h,04Bh,044h; 1992
DB 036h,0A5h,037h; 1993
DB 00eh,0A5h,04Ah; 1994
DB 086h,0B2h,0Bfh; 1995
DB 005h,0ACh,053h; 1996
DB 00Ah,0B6h,047h; 1997
DB 059h,036h,0BCh; 1998
DB 009h,02eh,050h; 1999
DB 00Ch,096h,045h; 2000
DB 04dh,04Ah,0B8h; 2001
DB 00dh,04Ah,04Ch; 2002
DB 00dh,0A5h,041h; 2003
DB 025h,0AAh,0B6h; 2004
DB 005h,06Ah,049h; 2005
DB 07Ah,0Adh,0Bdh; 2006
DB 002h,05dh,052h; 2007
DB 009h,02dh,047h; 2008
DB 05Ch,095h,0BAh; 2009
DB 00Ah,095h,04eh; 2010
DB 00Bh,04Ah,043h; 2011
DB 04Bh,055h,037h; 2012
DB 00Ah,0d5h,04Ah; 2013
DB 095h,05Ah,0Bfh; 2014
DB 004h,0BAh,053h; 2015
DB 00Ah,05Bh,048h; 2016
DB 065h,02Bh,0BCh; 2017
DB 005h,02Bh,050h; 2018
DB 00Ah,093h,045h; 2019
DB 047h,04Ah,0B9h; 2020
DB 006h,0AAh,04Ch; 2021
DB 00Ah,0d5h,041h; 2022
DB 024h,0dAh,0B6h; 2023
DB 004h,0B6h,04Ah; 2024
DB 069h,057h,03dh; 2025
DB 00Ah,04eh,051h; 2026
DB 00dh,026h,046h; 2027
DB 05eh,093h,03Ah; 2028
- 12 -
DB 00dh,053h,04dh; 2029
DB 005h,0AAh,043h; 2030
DB 036h,0B5h,037h; 2031
DB 009h,06dh,04Bh; 2032
DB 0B4h,0Aeh,0Bfh; 2033
DB 004h,0Adh,053h; 2034
DB 00Ah,04dh,048h; 2035
DB 06dh,025h,0BCh; 2036
DB 00dh,025h,04fh; 2037
DB 00dh,052h,044h; 2038
DB 05dh,0AAh,038h; 2039
DB 00Bh,05Ah,04Ch; 2040
DB 005h,06dh,041h; 2041
DB 024h,0Adh,0B6h; 2042
DB 004h,09Bh,04Ah; 2043
DB 07Ah,04Bh,0Beh; 2044
DB 00Ah,04Bh,051h; 2045
DB 00Ah,0A5h,046h; 2046
DB 05Bh,052h,0BAh; 2047
DB 006h,0d2h,04eh; 2048
DB 00Ah,0dAh,042h; 2049
DB 035h,05Bh,037h; 2050
DB 009h,037h,04Bh; 2051
DB 084h,097h,0C1h; 2052
DB 004h,097h,053h; 2053
DB 006h,04Bh,048h; 2054
DB 066h,0A5h,03Ch; 2055
DB 00eh,0A5h,04fh; 2056
DB 006h,0B2h,044h; 2057
DB 04Ah,0B6h,038h; 2058
DB 00Ah,0Aeh,04Ch; 2059
DB 009h,02eh,042h; 2060
DB 03Ch,097h,035h; 2061
DB 00Ch,096h,049h; 2062
DB 07dh,04Ah,0Bdh; 2063
DB 00dh,04Ah,051h; 2064
DB 00dh,0A5h,045h; 2065
DB 055h,0AAh,0BAh; 2066
DB 005h,06Ah,04eh; 2067
DB 00Ah,06dh,043h; 2068
DB 045h,02eh,0B7h; 2069
DB 005h,02dh,04Bh; 2070
DB 08Ah,095h,0Bfh; 2071
DB 00Ah,095h,053h; 2072
- 13 -
DB 00Bh,04Ah,047h; 2073
DB 06Bh,055h,03Bh; 2074
DB 00Ah,0d5h,04fh; 2075
DB 005h,05Ah,045h; 2076
DB 04Ah,05dh,038h; 2077
DB 00Ah,05Bh,04Ch; 2078
DB 005h,02Bh,042h; 2079
DB 03Ah,093h,0B6h; 2080
DB 006h,093h,049h; 2081
DB 077h,029h,0Bdh; 2082
DB 006h,0AAh,051h; 2083
DB 00Ah,0d5h,046h; 2084
DB 054h,0dAh,0BAh; 2085
DB 004h,0B6h,04eh; 2086
DB 00Ah,057h,043h; 2087
DB 045h,027h,038h; 2088
DB 00dh,026h,04Ah; 2089
DB 08eh,093h,03eh; 2090
DB 00dh,052h,052h; 2091
DB 00dh,0AAh,047h; 2092
DB 066h,0B5h,03Bh; 2093
DB 005h,06dh,04fh; 2094
DB 004h,0Aeh,045h; 2095
DB 04Ah,04eh,0B9h; 2096
DB 00Ah,04dh,04Ch; 2097
DB 00dh,015h,041h; 2098
DB 02dh,092h,0B5h; 2099
DB 00dh,053h,049h; 2100
;以下子程序用于從當(dāng)前公歷日期,推算星期,
;入口:time_yeAr,time_month ,time_date ,定義公歷年月日,BCD 碼,其中月的
;BIT7 表示世紀(jì),0 表示20 世紀(jì),1 表示19 世紀(jì),與PCF8563 一致
;出口 time_week, 0-6 表示星期日-星期六,與PCF8563 一致,程序不改變?nèi)肟跀?shù)據(jù)
;使用資源:ACC,B,psw,temp_Byte1,temp_Byte2,temp_Byte3
GetWeek: MOV A,time_yeAr
MOV B,#16
DIV AB
MOV temp_Byte1,B
MOV B,#10
MUL AB
ADD A,temp_Byte1
MOV temp_Byte1,A ;temp_Byte1=年
MOV A,time_month
JB ACC.7,getw02
- 14 -
MOV A,#100
ADD A,temp_Byte1
MOV temp_Byte1,A ;20世紀(jì)年+100
MOV A,time_month
CLR ACC.7
getw02: JNB ACC.4,getw04
ADD A,#10
CLR ACC.4
getw04: MOV temp_Byte2,A ;temp_Byte2=月
MOV A,time_date
MOV B,#16
DIV AB
MOV temp_Byte3,B
MOV B,#10
MUL AB
ADD A,temp_Byte3
MOV temp_Byte3,A ;temp_Byte3=日
MOV A,temp_Byte1;
ANL A,#03h
JNZ getw10 ;非閏年轉(zhuǎn)移
MOV A,temp_Byte2
CJNE A,#3,getw06
getw06: JNC getw10 ;月大于2 轉(zhuǎn)移
DEC temp_Byte3 ;份小于等于2,又是閏年,日減1
getw10: MOV A,temp_Byte2;
LCALL get_CorreCt ;取月校正表數(shù)據(jù)
ADD A,temp_Byte1
MOV B,#7
DIV AB ;B放年加校正日數(shù)之和后除7 的余數(shù)不先做這一步
;有可能數(shù)據(jù)溢出
MOV A,temp_Byte1
ANL A,#0fCh
RR A
RR A ;以上年除4 即閏年數(shù)
ADD A,B
ADD A,temp_Byte3
MOV B,#7
DIV AB
MOV time_week,B
RET
get_COrreCt:
MOVC A,@A+PC
RET
DB 0,3,3,6,1,4,6,2,5,0,3,5
  • 上一篇: 電子密碼鎖源程序
  • 下一篇: MCS-51單片機(jī)指令表簡述
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1