Hiển thị lịch âm trong đồng hồ lịch vạn niên

Đây nói về thiết kế đồng hồ có lịch ngày tháng, khi đó ta cũng có thể hiển thị thêm âm lịch tương ứng

Ta cần một mảng Array[12] chứa ngày AL tương ứng với ngày đầu tháng DL

Dữ liệu các phần tử là con số BCD 4 ký tự, 2 ký tự byte thấp chỉ ngày, 1 ký tự thứ 3 chỉ tháng và ký tự cuối báo nhuận hay không (1-0)

Ví dụ 0x1A25 cho ta biết ngày 25 của tháng 11 (nhuận) hoặc 0x0817 cho ta ngày 17 tháng 8

Với cách biểu diễn như vậy ta có thể lưu mảng này vào EEPOM cho tất cả các năm về sau để đơn giản cách lập trình không cần tính toán phức tạp

2021: {0x0B19, 0x0C20, 0x0118, 0x0220, 0x0320, 0x0421, 0x0522, 0x0623,0x0725, 0x0825,0x0927, 0x0A27}

2022: {0x0B29, 0x0101, 0x0129, 0x0301, 0x0401, 0x0503, 0x0603, 0x0704, 0x0806, 0x0906, 0x0A08, 0x0B08}

2023: {0x0C10, 0x0111, 0x0210, 0x8211, 0x0312, 0x0414, 0x0514, 0x0615, 0x0717, 0x0817, 0x0918, 0x0A19}

Để tính toán AL cho một ngày bất kỳ, ta cần biết tháng tương ứng đó có bao nhiêu ngày, vì đã biết vào ngày đầu tháng có âm lịch là ngày nào thì suy ra đến ngày cần xác định chỉ là phép suy diễn dễ dàng. Do đã hết bit lưu trữ, nên ta cần lập ra một mảng tương đương với mảng trên, chỉ khác là lưu giá trị là số ngày tương ứng với tháng ta đang lưu ở mảng trên.

Với lưu trữ như vậy ta xây dựng các hàm để lấy ra các ngày tháng âm lịch tương ứng, để tham khảo vui lòng xem mô tả trong phần Code mẫu