Bối cảnh và vấn đề nghiên cứu
Trong kỹ thuật điều khiển và đời sống hiện đại, các hệ thống nhúng đóng vai trò thiết yếu và hiện diện phổ biến trong nhiều thiết bị dân dụng lẫn công nghiệp như lò vi sóng, nồi cơm điện, máy điều hòa, điện thoại di động, ô tô, máy bay, các cảm biến đo lường và cơ cấu chấp hành thông minh. Trong khuôn khổ học phần "Vi xử lý trong đo lường điều khiển" tại Khoa Điều khiển và Tự động hóa – Trường Đại học Điện Lực (Hà Nội, tháng 1 năm 2024), nhóm tác giả thuộc lớp D15TDH&DKTBCN2 thực hiện đề tài nhằm củng cố kiến thức lý thuyết và hiện thực hóa một ứng dụng vi xử lý điển hình.
Mục tiêu và nhiệm vụ nghiên cứu của đồ án bao gồm:
- Nghiên cứu, khảo sát các công nghệ chip thời gian thực (RTC), các dòng vi điều khiển 8-bit và các giải pháp hiển thị thông tin thời gian trên thị trường.
- Thiết kế phần cứng hệ thống đồng hồ số thời gian thực với cấu trúc 5 khối chức năng: khối nguồn, khối xử lý trung tâm, khối thời gian thực, khối hiển thị và khối phím bấm.
- Xây dựng thuật toán và lập trình phần mềm điều khiển để hệ thống tự động đọc, xử lý và hiển thị đầy đủ 7 thông số: thứ, ngày, tháng, năm, giờ, phút, giây.
- Hiện thực hóa chức năng hiệu chỉnh thời gian linh hoạt qua giao tiếp phím bấm vật lý và duy trì việc lưu giữ thời gian chính xác khi mất nguồn điện chính.
Đối tượng nghiên cứu trọng tâm của đề tài là hệ thống đo lường và hiển thị thời gian thực ứng dụng vi điều khiển AT89C51 (thuộc họ MCS-51) kết hợp với vi mạch thời gian thực chuyên dụng DS1307 và màn hình ký tự LCD 16x2.
Phạm vi nghiên cứu được giới hạn trong không gian phòng thí nghiệm và môi trường hoạt động dân dụng bình thường; hệ thống sử dụng nguồn cấp điện lưới được hạ áp và ổn áp về +5V DC, tích hợp nguồn pin dự phòng CMOS 3V cho IC RTC, phục vụ nhu cầu theo dõi thời gian cá nhân hoặc làm nền tảng định thời trong các hệ thống đo lường điều khiển.
Cơ sở lý thuyết và phương pháp thiết kế
Đề tài dựa trên nền tảng kiến trúc vi xử lý/vi điều khiển kinh điển họ MCS-51 của Intel và Atmel, cụ thể là vi điều khiển 8-bit AT89C51 chế tạo theo công nghệ CMOS công suất thấp, tích hợp 4KB Flash ROM, 128 bytes RAM nội, 32 đường xuất nhập (4 port P0–P3), 2 bộ định thời/đếm 16-bit (Timer 0, Timer 1), hệ thống ngắt 2 mức ưu tiên với 5 vector ngắt, cổng nối tiếp song công (UART) cùng các chế độ tiết kiệm năng lượng (Idle Mode, Power Down Mode).
Cơ sở đo thời gian thực dựa trên vi mạch DS1307 của Dallas Semiconductor/Maxim, giao tiếp qua chuẩn bus nối tiếp 2 dây I2C (gồm đường dữ liệu nối tiếp SDA và xung nhịp SCL). DS1307 quản lý thông tin thời gian theo mã BCD (Binary Coded Decimal), tích hợp 56 bytes SRAM lưu trữ dữ liệu người dùng, mạch cảm biến điện áp tự động chuyển đổi sang nguồn pin phụ và mạch dao động thạch anh ngoại 32,768 kHz. Module hiển thị sử dụng màn hình LCD 16x2 chuẩn điều khiển HD44780, cho phép hiển thị đồng thời 2 dòng ký tự chữ và số.
Phương pháp nghiên cứu thực tế được triển khai là phương pháp thiết kế hệ thống kỹ thuật kết hợp phân tích - so sánh lựa chọn công nghệ, mô phỏng mạch điện tử và kiểm nghiệm thực nghiệm trên mô hình phần cứng.
| Hạng mục linh kiện |
Các phương án xem xét |
Phương án được chọn |
Rationale / Lý do lựa chọn của tác giả |
| IC Thời gian thực (RTC) |
DS1307, DS12887 |
DS1307 |
DS12887 tích hợp sẵn pin nhưng giá thành cao; DS1307 đáp ứng đầy đủ chức năng, kết hợp pin CMOS 3V rời giúp giảm chi phí phần cứng. |
| Vi điều khiển (MCU) |
Microchip PIC, Atmel AVR, Họ 8051 (AT89C51) |
AT89C51 |
PIC và AVR có tốc độ xử lý nhanh và ngoại vi phong phú hơn nhưng giá thành cao; AT89C51 có giá thấp, hỗ trợ cả hợp ngữ và C, đáp ứng tối ưu yêu cầu của hệ thống. |
| Thiết bị hiển thị |
LED 7 đoạn, LCD 16x2 |
LCD 16x2 |
LED 7 đoạn đòi hỏi mạch phức tạp và nhiều IC chốt; LCD 16x2 hiển thị linh hoạt được nhiều ký tự (cả chữ và số), kết nối đơn giản, giá thành tương đương tổng cụm LED. |
Nguồn dữ liệu của đề tài bao gồm tài liệu kỹ thuật (datasheet) của nhà sản xuất Atmel (AT89C51), Dallas Semiconductor (DS1307), giáo trình Vi xử lý trong đo lường điều khiển và các tài liệu tham khảo về chuẩn truyền thông nối tiếp I2C.
Thiết kế và triển khai hệ thống
Hệ thống được thiết kế theo kiến trúc phân khối chức năng rõ ràng, kết hợp chặt chẽ giữa mạch phần cứng và chương trình điều khiển firmware viết bằng ngôn ngữ C cho vi điều khiển 8051.
+----------------------------------+
| Khối Nguồn |
| (Biến áp + Cầu Diode + IC 7805) |
+-----------------+----------------+
| +5V DC
v
+------------------+ +-------------------+ +------------------+
| Khối Giao Tiếp | | Khối Điều Khiển | | Khối Hiển Thị |
| 3 Nút Bấm: |----->| Trung Tâm |----->| LCD 16x2 |
| TIME_KEY (P3.2) | | (MCU AT89C51 | | Data: Port 2 |
| INC_KEY (P1.3) | | Thạch anh 12MHz) | | Ctrl: P3.5-P3.7 |
| DEC_KEY (P1.2) | +---------+---------+ +------------------+
+------------------+ |
| I2C (SCL: P1.0, SDA: P1.1)
v
+-------------------+
| Khối RTC DS1307 |
| Thạch anh 32,768k |
| + Pin CMOS 3V |
+-------------------+
1. Thiết kế phần cứng chi tiết
Hệ thống gồm 5 khối chức năng chính:
- Khối nguồn: Sử dụng biến áp hạ áp điện lưới xoay chiều, chỉnh lưu qua bộ Diode cầu tạo điện áp DC thô từ 7V đến 10V, sau đó đi qua IC ổn áp LM7805 cùng các tụ lọc để tạo nguồn điện áp một chiều chuẩn +5V cấp cho toàn bộ mạch.
- Khối điều khiển trung tâm: Sử dụng vi điều khiển AT89C51. Chân XTAL1 và XTAL2 được nối với mạch dao động thạch anh tần số 12MHz và 2 tụ gốm 33pF. Mạch Reset kết hợp tụ hóa, điện trở và nút bấm nối vào chân RST (chân số 9) nhằm tạo xung reset mức cao khi khởi động hoặc cưỡng bức bằng tay.
- Khối tạo thời gian thực: Sử dụng vi mạch DS1307. Chân X1 và X2 nối với thạch anh 32,768 kHz. Chân Vbat (chân 3) nối với cực dương của pin CMOS 3V (cực âm nối đất) để duy trì hoạt động đếm xung khi mất nguồn chính. Giao tiếp với AT89C51 thực hiện qua 2 đường: chân SDA nối với P1.1 và chân SCL nối với P1.0.
- Khối hiển thị: Sử dụng màn hình LCD 16x2 ở chế độ giao tiếp 8-bit. Bus dữ liệu DB0–DB7 nối với Port 2 (P2.0–P2.7) của AT89C51. Các chân điều khiển gồm RS nối chân P3.7, R/W nối chân P3.6, và E nối chân P3.5. Chân Vee được nối với một biến trở 10kΩ để tinh chỉnh độ tương phản hiển thị.
- Khối giao tiếp phím bấm: Gồm 3 nút bấm cơ nối với các chân vi điều khiển có tích hợp điện trở kéo: nút
TIME_KEY nối chân P3.2 (ngõ vào ngắt ngoài 0 – INT0), nút INC_KEY nối chân P1.3 (tăng giá trị), và nút DEC_KEY nối chân P1.2 (giảm giá trị).
2. Bản đồ thanh ghi và giao tiếp I2C của DS1307
DS1307 hoạt động như một thiết bị Slave trên đường bus I2C với địa chỉ truy cập phần cứng là 0xD0 (khi ghi) và 0xD1 (khi đọc). Bản đồ thanh ghi thời gian thực lưu trữ các thông số dưới dạng BCD:
| Địa chỉ Hex |
Chức năng thanh ghi |
Dải giá trị (BCD) |
Đặc tả các bit điều khiển |
0x00 |
Giây (Seconds) |
00–59 |
Bit 7 là bit CH (Clock Halt); khi CH = 0 bộ dao động hoạt động, CH = 1 bộ dao động dừng. |
0x01 |
Phút (Minutes) |
00–59 |
Lưu trữ số phút từ 00 đến 59. |
0x02 |
Giờ (Hours) |
00–23 / 01–12 |
Bit 6 chọn chế độ 12h (mức 1) hoặc 24h (mức 0). Ở chế độ 12h, bit 5 chỉ định AM/PM; ở chế độ 24h, bit 5 chỉ định hàng chục (20h–23h). |
0x03 |
Thứ (Day of week) |
01–07 |
1: Chủ Nhật, 2: Thứ 2, ..., 7: Thứ 7. |
0x04 |
Ngày (Date) |
01–31 |
Tự động điều chỉnh theo các tháng ít hơn 31 ngày và năm nhuận. |
0x05 |
Tháng (Month) |
01–12 |
Lưu trữ giá trị tháng từ 01 đến 12. |
0x06 |
Năm (Year) |
00–99 |
Hai chữ số cuối của năm. |
0x07 |
Điều khiển (Control) |
- |
Điều khiển chân SQW/OUT với các tần số xung ra 1Hz, 4.096kHz, 8.192kHz, 32.768kHz. |
0x08 |
RAM người dùng |
Byte dữ liệu |
Nhóm tác giả dùng để lưu cờ kiểm tra khởi tạo (ký tự '~'). |
3. Thiết kế giải thuật và triển khai phần mềm
Chương trình điều khiển được xây dựng dưới dạng module hóa, chia thành các nhóm hàm chính:
- Nhóm giao tiếp LCD: Hàm
busy() kiểm tra cờ bận D7 trên LCD trước khi thao tác; hàm wrt_cmd() gửi mã lệnh điều khiển; wrt_byte() và wrt_data() xuất ký tự hoặc chuỗi ký tự ra màn hình; LCD_INI() khởi tạo màn hình ở chế độ 2 dòng, ma trận 5x7 (lệnh 0x38), bật hiển thị tắt con trỏ (0x0C), xóa màn hình (0x01) và dịch con trỏ sang phải (0x06).
- Nhóm giao thức I2C mềm: Xây dựng các hàm tạo điều kiện bắt đầu (
start_rtc()), điều kiện dừng (stop_rtc()), gửi byte địa chỉ/dữ liệu (send_adr()) và nhận byte dữ liệu có nhận diện bit ACK (recv_rtc(), recv_data()).
- Nhóm chuyển đổi dữ liệu: Hàm
hex_dec() chuyển đổi giá trị dạng BCD/Hex đọc từ RTC thành giá trị thập phân (Decimal) để xử lý logic, và hàm dec_hex() chuyển đổi ngược lại từ thập phân sang BCD để ghi vào thanh ghi DS1307.
- Khởi tạo và kiểm tra RTC: Hàm
rtc_check() truy xuất ô nhớ 0x08 của DS1307. Nếu giá trị đọc được khác ký tự '~' (hệ thống khởi động lần đầu hoặc mất nguồn nuôi hoàn toàn), chương trình sẽ nạp một bộ thông số mặc định (Giây: 00, Phút: 00, Giờ: 09, Thứ: 01 - Chủ Nhật, Ngày: 29, Tháng: 05, Năm: 2011) qua hàm RTC_INI() và ghi dấu ký tự '~' vào ô nhớ 0x08.
- Quy trình cài đặt thời gian: Khi có ngắt ngoài 0 (người dùng bấm nút
TIME_KEY), chương trình phục vụ ngắt set_flag() interrupt 0 sẽ thiết lập cờ flag = 1. Vòng lặp main phát hiện cờ ngắt sẽ tạm khóa ngắt (DISABLE_INT), chuyển sang thực thi hàm rtc_set(). Người dùng lần lượt hiệu chỉnh các thông số: Phút -> Giờ -> Ngày -> Tháng -> Năm -> Thứ bằng hai phím INC_KEY và DEC_KEY. Khi kết thúc cài đặt, toàn bộ dữ liệu mới được chuyển đổi sang mã BCD và ghi ngược vào DS1307 thông qua RTC_INI(), màn hình LCD hiển thị thông báo "DA _ CHINH XONG ROI", sau đó hệ thống mở lại ngắt toàn cục (ENABLE_INT).
Nội dung chính theo từng chương
Chương 1: Phân tích bài toán
- Khảo sát lịch sử và các phương thức thể hiện thời gian: đồng hồ cơ (dùng góc chỉ của kim hoặc đồng hồ mặt trời), đồng hồ điện tử (hiển thị hệ số 24 giờ hoặc 12 giờ AM/PM trên LED/LCD), đồng hồ âm thanh (phát ngôn ngữ tự nhiên hoặc tiếng chuông) và đồng hồ chữ.
- Phân tích mục đích sử dụng đồng hồ trong đời sống, trong kỹ thuật đo lường thí nghiệm và trong hệ thống máy tính (đồng bộ tín hiệu xử lý và lưu giữ thời gian qua pin CMOS).
- Khảo sát các giải pháp công nghệ trên thị trường: so sánh IC thời gian thực DS1307 và DS12887; so sánh họ vi điều khiển 8051 (AT89C51) với PIC và AVR; so sánh phương thức hiển thị giữa LED 7 đoạn và màn hình LCD 16x2.
- Lựa chọn giải pháp kỹ thuật tối ưu về mặt kinh tế và công nghệ: sử dụng vi điều khiển AT89C51, IC thời gian thực DS1307, màn hình LCD 16x2, IC ổn áp 7805 và pin nuôi lithium 3V. Theo thông số của nhà sản xuất, một viên pin lithium dung lượng từ 48mAh trở lên có khả năng duy trì lưu giờ cho DS1307 trong hơn 10 năm ở nhiệt độ +25°C khi không có nguồn chính.
- Xác định các yêu cầu kỹ thuật và giới hạn của hệ thống: sử dụng nguồn 5V, hoạt động liên tục trong môi trường bình thường, kích thước nhỏ gọn, tự động lưu trữ dữ liệu thời gian khi mất nguồn cung cấp.
Chương 2: Thiết kế hệ thống
- Xây dựng sơ đồ tổng quát hệ thống gồm 5 khối chức năng: khối nguồn, khối tạo thời gian thực, khối xử lý, khối hiển thị và khối giao tiếp phím bấm.
- Xây dựng sơ đồ Call Graph phân cấp luồng điều khiển giữa chương trình chính và các module chức năng (RTC, bàn phím, hiển thị).
- Xây dựng sơ đồ đặc tả luồng dữ liệu (kiểm tra ngắt ngoài 0, đọc/ghi RTC, xử lý dữ liệu, xuất hiển thị).
- Thiết lập sơ đồ thuật toán tổng thể và lưu đồ chi tiết cho khối cài đặt - hiển thị thời gian, thể hiện rõ chu trình quét phím tăng/giảm và chuyển đổi vị trí con trỏ trên LCD cho từng biến số: giờ, phút, giây, ngày, tháng, năm, thứ.
- Trình bày chi tiết thông số kỹ thuật và sơ đồ chân của vi điều khiển AT89C51 (40 chân, 4 port I/O, các chân chức năng đặc biệt như RST, ALE/PROG, PSEN, EA/Vpp, XTAL1, XTAL2), hoạt động của 2 chế độ tiết kiệm năng lượng (Idle Mode và Power Down Mode) cùng 4 chế độ khóa bộ nhớ Flash thông qua 3 bit khóa LB1, LB2, LB3.
- Phân tích chi tiết IC thời gian thực DS1307: cấu trúc 8 chân (Vcc, GND, X1, X2, Vbat, SDA, SCL, SQW/OUT), cấu trúc bộ nhớ 64 bytes (8 bytes thanh ghi thời gian/điều khiển + 56 bytes SRAM), giản đồ xung và nguyên lý truyền nhận trên bus I2C ở hai chế độ Slave phát (đọc dữ liệu) và Slave nhận (ghi dữ liệu).
- Trình bày cấu tạo, chức năng 16 chân của LCD 16x2 (Vss, Vcc, Vee, RS, R/W, E, DB0–DB7, Lamp+, Lamp-) và bảng tập lệnh điều khiển cơ bản gồm 17 mã Hex (như lệnh xóa màn hình
0x01, về đầu dòng 0x02, bật hiển thị tắt con trỏ 0x0C, ép con trỏ dòng 1 0x80, ép con trỏ dòng 2 0xC0, cấu hình 2 dòng ma trận 5x7 0x38).
- Thống kê các linh kiện thụ động và phụ trợ: tụ hóa cho mạch reset, 2 tụ gốm cho mạch dao động, biến trở 10kΩ chỉnh tương phản LCD, 3 nút bấm cơ, thạch anh 12MHz cho AT89C51, thạch anh 32,768kHz cho DS1307 và đế pin kèm pin CMOS 3V.
Chương 3: Xây dựng hệ thống
- Thiết kế sơ đồ nguyên lý phần cứng kết nối toàn diện giữa vi điều khiển AT89C51, IC DS1307, LCD 16x2, khối nguồn 7805 và khối phím bấm.
- Triển khai toàn bộ mã nguồn firmware bằng ngôn ngữ C: khai báo ánh xạ phần cứng, các chương trình con phục vụ giao tiếp LCD (kiểm tra cờ bận
busy(), ghi lệnh wrt_cmd(), ghi ký tự wrt_byte(), hiển thị chuỗi wrt_data(), khởi tạo LCD_INI()), các chương trình con giao tiếp I2C với RTC (start_rtc(), stop_rtc(), send_adr(), recv_rtc(), recv_data(), RTC_INI(), disp_rtc()), chương trình kiểm tra trạng thái khởi tạo rtc_check(), chương trình tạo độ trễ delay() dùng Timer, chương trình xử lý hiệu chỉnh ngày giờ rtc_set() và chương trình ngắt ngoài set_flag() interrupt 0.
- Tiến hành chạy mô phỏng kiểm thử hoạt động của hệ thống phần cứng và chương trình điều khiển.
- Thi công lắp ráp mô hình mạch thực tế hoàn chỉnh.
Kết quả và đóng góp
Hệ thống đồng hồ số thời gian thực được thiết kế và chế tạo thành công với các kết quả cụ thể:
- Mạch phần cứng hoạt động ổn định, khối nguồn LM7805 cung cấp mức điện áp chuẩn +5V DC cho toàn hệ thống.
- Màn hình LCD 16x2 hiển thị trực quan, chính xác và đồng thời 7 thông số thời gian: dòng thứ nhất hiển thị thứ (từ "C.Nhat" đến "Thu 7") cùng ngày/tháng/năm; dòng thứ hai hiển thị giờ:phút:giây theo định dạng 24 giờ.
- Vi điều khiển AT89C51 giao tiếp tốt với IC DS1307 qua giao thức I2C phần mềm, đọc dữ liệu thời gian định kỳ và giải mã hiển thị theo thời gian thực.
- Chức năng ngắt ngoài 0 (INT0 tại chân P3.2) phản hồi chính xác, cho phép chuyển đổi sang chế độ cài đặt và hiệu chỉnh độc lập từng thông số thời gian thông qua hai nút nhấn tăng/giảm.
- Khả năng lưu trữ dữ liệu thời gian độc lập khi mất nguồn chính hoạt động hoàn hảo nhờ mạch pin CMOS 3V phụ trợ nối chân Vbat, đảm bảo DS1307 duy trì đếm thời gian liên tục mà không bị sai lệch hay mất dữ liệu khi tái cấp nguồn (đáp ứng khả năng lưu giờ trên 10 năm theo tính toán kỹ thuật với pin dung lượng 48mAh ở điều kiện +25°C).
Về mặt đóng góp, đề tài đã cụ thể hóa kiến trúc nhúng họ 8051 trong một sản phẩm đo lường điều khiển thực tế có tính ứng dụng cao, cung cấp một giải pháp thiết kế tối ưu về mặt kinh tế khi kết hợp linh kiện giá rẻ (AT89C51 và DS1307) nhưng vẫn đạt độ chính xác cao nhờ cấu trúc phần cứng chuyên dụng.
Hạn chế và hướng nghiên cứu tiếp
Hạn chế của đề tài:
- Hệ thống mới dừng lại ở quy mô một chiếc đồng hồ hiển thị thời gian cơ bản, phục vụ mục đích học tập môn học.
- Giao diện hiển thị bị giới hạn trên màn hình ký tự LCD 16x2 kích thước nhỏ, chỉ phù hợp cho quan sát ở cự ly gần.
- Hệ thống chưa tích hợp các cảm biến thu thập dữ liệu môi trường và chưa có các đầu ra điều khiển công suất.
Hướng nghiên cứu và phát triển tiếp theo:
- Tích hợp thêm cảm biến để đo lường và hiển thị nhiệt độ môi trường xung quanh.
- Phát triển tính năng hẹn giờ, chuông báo tiết học hoặc chuông báo ca làm việc trong các cơ quan, trường học.
- Mở rộng chức năng quản lý lịch làm việc, lịch công tác cá nhân hoặc tập thể.
Giá trị tham khảo
Đồ án là tài liệu tham khảo hữu ích cho sinh viên các chuyên ngành Tự động hóa, Kỹ thuật Điều khiển, Kỹ thuật Điện - Điện tử, và Hệ thống Nhúng đang theo học các học phần về Vi xử lý, Đo lường điều khiển hoặc thực hiện đồ án môn học liên quan.
Các nội dung có giá trị tham khảo cao trong tài liệu:
- Sơ đồ ghép nối nguyên lý chuẩn giữa vi điều khiển họ 8051 (AT89C51/AT89C52) với IC thời gian thực DS1307 và màn hình LCD 16x2.
- Bộ mã nguồn C hoàn chỉnh mô phỏng giao thức I2C bằng phần mềm (bit-banging) trên vi điều khiển không tích hợp sẵn module I2C cứng.
- Kỹ thuật quét phím hiệu chỉnh thông số kết hợp ngắt ngoài và thuật toán chuyển đổi tương hỗ giữa định dạng BCD và số thập phân (Decimal).
Câu hỏi thường gặp
1. Vì sao nhóm tác giả lựa chọn vi điều khiển AT89C51 và IC DS1307 thay vì các dòng chip khác?
Nhóm tác giả đã so sánh các giải pháp trên thị trường: các dòng vi điều khiển PIC, AVR có tốc độ cao và ngoại vi mạnh hơn nhưng giá thành cao, trong khi AT89C51 có giá thấp, đáp ứng đầy đủ yêu cầu kỹ thuật và hỗ trợ lập trình bằng cả C lẫn hợp ngữ. Đối với IC thời gian thực, DS12887 tích hợp sẵn pin nhưng đắt tiền, còn DS1307 dùng pin CMOS 3V rời giúp tiết kiệm chi phí mà vẫn đảm bảo độ chính xác cao và khả năng lưu giữ thời gian trên 10 năm.
2. Làm thế nào hệ thống nhận biết được DS1307 đã được cài đặt thời gian trước đó hay chưa?
Phần mềm sử dụng hàm rtc_check() để đọc dữ liệu tại địa chỉ thanh ghi 0x08 (thuộc vùng SRAM 56 bytes người dùng của DS1307). Nếu dữ liệu đọc được khác ký tự '~', vi điều khiển xác định RTC chưa được khởi tạo và sẽ tự động nạp các thông số mặc định ban đầu rồi ghi ký tự '~' vào ô nhớ này để đánh dấu cho các lần khởi động tiếp theo.
3. Quy trình hiệu chỉnh thời gian bằng phím bấm được thực hiện qua cơ chế nào?
Hệ thống sử dụng cơ chế ngắt ngoài 0 (INT0 nối chân P3.2 với nút TIME_KEY). Khi người dùng nhấn nút này, chương trình phục vụ ngắt set_flag() sẽ bật cờ báo ngắt. Hàm rtc_set() được gọi trong vòng lặp chính để lần lượt dịch chuyển con trỏ LCD qua các vị trí: Giờ, Phút, Ngày, Tháng, Năm, Thứ. Tại mỗi vị trí, người dùng nhấn phím INC_KEY (P1.3) để tăng hoặc DEC_KEY (P1.2) để giảm giá trị, sau đó hệ thống cập nhật ngược dữ liệu vào DS1307.
4. Màn hình LCD 16x2 được cấu hình giao tiếp như thế nào trong đồ án?
LCD 16x2 được cấu hình hoạt động ở chế độ 8-bit dữ liệu. Toàn bộ 8 chân dữ liệu DB0–DB7 nối trực tiếp với Port 2 (P2.0–P2.7) của AT89C51. Ba chân điều khiển gồm chân chọn thanh ghi RS nối P3.7, chân đọc/ghi R/W nối P3.6, và chân cho phép E nối P3.5. Hàm busy() kiểm tra bit cờ bận D7 trước mọi thao tác gửi lệnh hoặc ghi dữ liệu.
5. Dữ liệu thời gian đọc từ DS1307 được xử lý như thế nào trước khi hiển thị lên LCD?
DS1307 lưu trữ các giá trị giây, phút, giờ, thứ, ngày, tháng, năm dưới dạng mã BCD (Binary Coded Decimal). Khi vi điều khiển đọc dữ liệu từ các thanh ghi 0x00–0x06, hàm hex_dec() sẽ tách và chuyển đổi các byte BCD sang hệ thập phân (Decimal) để xử lý logic toán học, sau đó hàm disp_data_rtc() hoặc data_in() giải mã từng chữ số thành ký tự ASCII để xuất ra các tọa độ xác định trên màn hình LCD.
Kết luận
Đồ án học phần "Thiết kế đồng hồ số hiển thị: thứ, ngày, tháng, năm, giờ, phút, giây Sử dụng At89C52/AT89C51" của nhóm sinh viên Khoa Điều khiển và Tự động hóa – Trường Đại học Điện Lực đã hoàn thành xuất sắc các mục tiêu thiết kế đề ra. Hệ thống kết hợp hiệu quả vi điều khiển 8-bit AT89C51, IC thời gian thực DS1307 và màn hình LCD 16x2 để tạo nên một thiết bị đo đếm và hiển thị thời gian chính xác, ổn định và có khả năng lưu trữ độc lập khi mất nguồn. Đây là một công trình học thuật thực hành tiêu biểu, cung cấp đầy đủ sơ đồ phần cứng và giải pháp thuật toán firmware có giá trị ứng dụng và tham khảo cao trong đào tạo kỹ thuật nhúng.