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);

}