DS1307 hình 3.9, hai chương trình này phục vụ cho việc giao tiếp giữa vi điều khiển và DS1307. Dữ liệu đọc từ DS1307 sẽ được lưu vào mảng có tên là mang_tg_rtc[7]. Mảng này có 7 phần tử, mỗi phần tử tương ứng với giá trị giây, phút, giờ, thứ, ngày, tháng, năm.
Dữ liệu thời gian vi điều khiển đọc từ DS1307 có dạng là một chuỗi số nhị phân 8 bit, để hiển thị chúng ta phải chuyển chuỗi nhị phân này thành số BCD. Hình 3.10 trình bày lưu đồ chương trình chuyển số nhị phân sang số BCD.
Hình 3. 8: Lưu đồ chương trình ghi dữ liệu từ DS1307 DS1307
Hình 3. 9: Lưu đồ chương trình đọc dữ liệu từ DS1307 DS1307
22
Chương trình chỉnh giờ có lưu đồ như hình 3.11. Chương trình này cho phép người dùng điều chỉnh thời gian trên đồng hồ khi có sai lệch so với thời gian thực tế. Để điều chỉnh thời gian, người dùng cần nhấn nút nhấn Mode, mỗi lần nhấn sẽ tương ứng với việc lựa chọn từng đối tượng: giờ, phút, giây; thứ, ngày, tháng, năm (dương lịch); ngày, tháng, năm (âm lịch) trên màn hình LCD. Đối tượng được lựa chọn sẽ nhấp nháy, khi này nút nhấn Up và Dow sẽ cho phép tăng giảm giá trị của đối tượng đó trong phạm vị cho phép. Ví dụ phạm vi của ngày có giá trị từ 1 đến 31, phạm vi của thứ từ thứ 2 đến chủ nhật. Khi các đối tượng điều chỉnh được lựa chọn hết, tương ứng với lần nhấn nút Mode thứ 10. Đến lần nhấn Mode thứ 11 hoặc nhấn nút Timer (nút nhấn báo thức) khi đang điều chỉnh bất kỳ đối tượng nào thì sẽ thốt khỏi chương trình chỉnh thời gian. Khi kết thúc chương trình chỉnh thời gian, thời gian đã điều chỉnh sẽ được lưu và DS1307 và hệ thống sẽ tiếp tục đếm thời gian từ các giá trị mới cập nhật này.