Professional Documents
Culture Documents
Thuật Toán Tính Âm Lịch Từ Dương Lịch Dùng Phương Pháp Tra Bảng
Thuật Toán Tính Âm Lịch Từ Dương Lịch Dùng Phương Pháp Tra Bảng
Cách tính ngày Âm lịch theo phương pháp tra bảng tra bảng:
Công thức tính ngày Âm lịch theo phương pháp tra bảng tra bảng:
Nếu (ngày Dương lịch tương ứng với ngày đầu tháng Âm lịch) bằng (ngày hiện tại) thì ngày
Âm lịch bằng 1
(N_DL_DAU_THANG = NGAY => NGAY_AL = 1)
Hoặc (ngày Dương lịch tương ứng với ngày đầu tháng Âm lịch) trừ (ngày hiện tại):
(N_DL_DAU_THANG - NGAY) :
- Nếu không có nhớ (C=0) thì ngày Âm lịch bằng (ngày Dương lịch hiện tại) cộng
(ngày Âm lịch của đầu tháng Dương lịch) rồi trừ 1
(NGAY_AL = ((NGAY + N_AL_DAU_THANG)-1)
- Nếu có nhớ (C=1) thì ngày Âm lịch hiện tại bằng (ngày Dương lịch hiện tại) trừ
(ngày Dương lịch đầu tháng Âm lịch) rồi + 1
(NGAY_AL = ((NGAY - N_DL_DAU_THANG)+1)
;===============================================
Bằng cách lấy (ngày Dương lịch tương ứng với đầu tháng Âm lịch trong tháng) trừ (ngày
hiện tại)
(N_DL_DAU_THANG - NGAY)
- Nếu không có nhớ (C=0) thì tháng Âm lịch hiện tại bằng tháng Âm lịch của đầu
tháng Dương lịch
(THANG_AL = (T_AL_DAU_THANG)
- Nếu có nhớ (C=1) thì tháng Âm lịch hiện tại bằng tháng Âm lịch của ngày đầu tháng
Âm lịch
(THANG_AL = T_AL_DAU_T_AL)
;===============================================
- Nếu không có nhớ (C=0) thì năm Âm lịch sẽ bằng năm Dương lịch
(NAM_AL=NAM)
- Nếu có nhớ (C=1) thì năm Âm lịch hiện tại bằng năm Dương lịch trừ 1
(NAM_AL = NAM - 1)
;===============================================
Trong đó:
Bảng dưới đây được tạo ra cho 5 năm, trích từ Lịch "Vietnamese Lunar calendar".
ngày AL đầu tháng DL; tháng AL đầu tháng DL; ngày DL của đầu tháng AL;tháng AL của
đầu tháng AL; tổng số ngày DL trong tháng.
DL2009:
DL2009_1: DB 6,12,26,1,31 ; Tháng 1 năm 2009
DL2009_2: DB 7,1,25,2,28 ; ; Tháng 2 năm 2009
DL2009_3: DB 5,2,26,3,31
DL2009_4: DB 7,3,25,4,30
DL2009_5: DB 7,4,24,5,31
DL2009_6: DB 9,5,23,5,30
DL2009_7: DB 9,5,22,6,31
DL2009_8: DB 11,6,20,7,31
DL2009_9: DB 13,7,19,8,30
DL2009_10: DB 13,8,18,9,31
DL2009_11: DB 15,9,17,10,30
DL2009_12: DB 15,10,16,11,31
DL2010:
DL2010_1: DB 17,11,15,12,31 ; Tháng 1 năm 2010
DL2010_2: DB 18,12,14,1,28
DL2010_3: DB 16,1,16,2,31
DL2010_4: DB 17,2,14,3,30
DL2010_5: DB 18,3,14,4,31
DL2010_6: DB 19,4,12,5,30
DL2010_7: DB 20,5,12,6,31
DL2010_8: DB 21,6,10,7,31
DL2010_9: DB 23,7,8,8,30
DL2010_10: DB 24,8,8,9,31
DL2010_11: DB 25,9,6,10,30
DL2010_12: DB 26,10,6,11,31
DL2011:
DL2011_1: DB 27,11,4,12,31
DL2011_2: DB 19,12,3,1,28
DL2011_3: DB 27,1,5,2,31
DL2011_4: DB 28,2,3,3,30
DL2011_5: DB 29,3,3,4,31
DL2011_6: DB 30,4,2,5,30
DL2011_7: DB 1,6,31,7,31
DL2011_8: DB 2,7,29,8,31
DL2011_9: DB 4,8,27,9,30
DL2011_10: DB 5,9,27,10,31
DL2011_11: DB 6,10,25,11,30
DL2011_12: DB 7,11,25,12,31
DL2012:
DL2012_1: DB 8,12,23,1,31
DL2012_2: DB 10,1,22,2,29
DL2012_3: DB 9,2,22,3,31
DL2012_4: DB 11,3,21,4,30
DL2012_5: DB 11,4,21,4,31
DL2012_6: DB 12,4,19,5,30
DL2012_7: DB 13,5,19,6,30
DL2012_8: DB 14,6,17,7,31
DL2012_9: DB 16,7,16,8,30
DL2012_10: DB 16,8,15,9,31
DL2012_11: DB 18,9,14,10,30
DL2012_12: DB 18,10,13,11,31
DL2013:
DL2013_1: DB 20,11,12,12,31
DL2013_2: DB 21,12,10,1,28
DL2013_3: DB 20,1,12,2,31
DL2013_4: DB 21,2,10,3,30
DL2013_5: DB 22,3,10,4,31
DL2013_6: DB 23,4,8,5,30
DL2013_7: DB 24,5,8,6,31
DL2013_8: DB 25,6,7,7,31
DL2013_9: DB 26,7,5,8,30
DL2013_10: DB 27,8,5,9,31
DL2013_11: DB 28,9,3,10,30
DL2013_12: DB 29,10,3,11,31
;==================================
Tới đây chúng ta có thể dễ dàng tạo code Lịch Vạn Niên Âm lịch cho 89C51 hoặc cho các
loại Vi điều khiển khác từ các công thức trên.
Các bạn có thể tạo nội dung bảng tra lên đến vài chục năm mà vẫn không sợ hết dung lượng
bộ nhớ của VXL