Đồng hồ matrix 8×40 hiệu ứng lật trang đơn giản

clock matrix 8x40

Nếu bạn đã theo dõi và hiểu rõ các bài viết trước đây, chắc chắn bạn đã có khả năng tự thiết kế một chiếc đồng hồ matrix riêng cho mình. Tuy nhiên, trong bài viết này, chúng ta sẽ tạo ra một demo nhỏ về đồng hồ matrix 8×40 với hiệu ứng lật trang đơn giản.

Chúng ta sẽ tạo ra một chiếc đồng hồ có các chức năng cơ bản như sau:

  • Hiển thị giờ – phút – giây
  • Lật trang mỗi khi giây thay đổi
  • Chạy chữ ngày tháng năm mỗi 20 giây

Chúng ta đã nâng cấp thêm một con led matrix 8×8 nên số độ phân giải hiện tại là 8×40. Ta sẽ thêm một chiều nữa cho bộ đệm hiển thị.

Với việc thêm một con led mới, chúng ta cũng cần bổ sung thêm một dòng gửi data ra trong hàm ngắt hiển thị.

Sau đó là công việc in giờ – phút – giây ra màn hình, hiệu ứng lật trang cho giây, và việc lật trang sẽ có ba giai đoạn chính:

  1. Cuộn số cũ xuống vài dòng (số mới chưa xuất hiện)
  2. Vừa cuộn số cũ và cuốn số mới
  3. Cuộn số mới đến hết

Trong hàm main, trước khi chúng ta vào vòng lặp vô tận, ta sẽ đọc dữ liệu từ DS1307 và in giờ – phút – giây ra màn hình.

Trong vòng lặp while, ta sẽ so sánh giây trước đó (lưu trong biến old_time) với giây hiện tại (lưu trong time[0]). Nếu giá trị này khác nhau, tức là đã có sự thay đổi về giây. Ta gọi hàm latgiay với tham số 0 nếu chỉ muốn lật đơn vị, hoặc tham số 1 nếu muốn lật cả hai chữ số (bằng cách chia lấy dư cho 10).

Cuối cùng, chúng ta còn kiểm tra nếu giây đạt mốc 10, 30, 50 thì sẽ chạy chữ ngày tháng năm. Hàm sprintf sẽ đưa dữ liệu thời gian vào mảng Date và ta chỉ cần in ra màn hình bằng vòng lặp for như trong các bài trước, để có hiệu ứng chạy chữ. Trước và sau khi chạy chữ, ta sẽ xóa hoàn toàn phần dữ liệu ở chỗ lật đi bằng hàm Matrix_clear.

Đây chỉ là một demo đơn giản, vì vậy chúng ta chưa sử dụng bộ đệm đôi. Để có các hiệu ứng đẹp mắt hơn, bạn có thể nâng cấp lên 2 bộ đệm.

Lưu ý: File cho project này bạn có thể tải tại đây. Hiện tại, project đồng hồ matrix 8×40 này chưa có mode cài đặt thời gian. Bạn có thể phát triển thêm các chức năng cần thiết cho riêng mình.