Lunar
tạo file include xuất ngày tháng âm lịch trong 3 năm 2021-2023, chỉnh sửa lại mảng lưu giá trị ta có thể dùng cho các năm về sau
//version 1.0
//ma hoa va luu thong tin trong 3 nam vao bien chuong trinh
//last update 26/8/21
#include <bcd.c>
//bang nay chua cac so 16 bit
//8 bit dau chua mã BCD ngay am lich cua ngay dau thang duong lich
//8 bit sau chua ma BCD cua thang am lich, trong do bit cao nhat bao nhuan hay khong (thuc ra kg can)
const int16 N1DL[3][12] ={
{0x0B19, 0x0C20, 0x0118, 0x0220, 0x0320, 0x0421, 0x0522, 0x0623, 0x0725, 0x0825, 0x0927, 0x0A27},
{0x0B29, 0x0101, 0x0129, 0x0301, 0x0401, 0x0503, 0x0603, 0x0704, 0x0806, 0x0906, 0x0A08, 0x0B08},
{0x0C10, 0x0111, 0x8210, 0x0211, 0x0312, 0x0414, 0x0514, 0x0615, 0x0717, 0x0817, 0x0918, 0x0A19}
};
//tuong ung mang tren
//ghi so ngay cua thang AL tuong ung
const int SO_NGAYAL[3][12] ={
{30, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29},
{30, 30, 30, 30, 29, 30, 30, 29, 30, 29, 30, 29},
{30, 29, 30, 29, 29, 30, 30, 29, 30, 30, 29, 30}
};
int tim_NgayAL_dau_thang(int thang, int16 nam){
int16 ngay;
ngay= N1DL[nam-2021][thang-1] & 0x00FF ;
return BCDtoDECIMAL(ngay);
}
int tim_ThangAL_dau_thang(int thang, int16 nam){
int16 ngay;
ngay= (N1DL[nam-2021][thang-1] >>8) &0b01111111 ;
return BCDtoDECIMAL(ngay);
}
int tim_NgayAL(int ngay, int thang, int16 nam){
int16 ngayAL_dau_thang;
int ngayAL;
ngayAL_dau_thang=BCDtoDECIMAL(N1DL[nam-2021][thang-1] & 0x00FF) ;
ngayAL=(ngayAL_dau_thang + ngay - 1)% SO_NGAYAL[nam-2021][thang-1];
if(ngayAL==0) return SO_NGAYAL[nam-2021][thang-1];
return ngayAL;
}
int tim_ThangAL(int ngay, int thang, int16 nam){
int ngay_aldt,n;
n=SO_NGAYAL[nam-2021][thang-1];
ngay_aldt=tim_NgayAL_dau_thang(thang,nam);
if(ngay_aldt+ngay-1<=n) return tim_ThangAL_dau_thang(thang,nam);
return tim_ThangAL_dau_thang(thang+1,nam);
}