MẠCH ĐỒNG hồ DÙNG VI xử lý AT89C51 ................................................ MẠCH ĐỒNG hồ DÙNG VI xử lý AT89C51 ................................................ MẠCH ĐỒNG hồ DÙNG VI xử lý AT89C51 ................................................ MẠCH ĐỒNG hồ DÙNG VI xử lý AT89C51 ................................................
MẠCH ĐỒNG HỒ DÙNG IC VI XỬ LÝ AT89C51 Hình 2- 1: Sơ đồ hệ thống Hình 2- 2: Khối nguồn Hình 2- 3: Khối nguồn hồn chỉnh Hình 2- 4: Khối vi điều khiển Hình 2- 5: Khối hiển thị Hình 2- 6: Khối hiển thị hồn chỉnh Hình 2- 7: Sơ đồ mạch điều khiển Hình 2- 8: Khối điều khiển hồn chỉnh Hình 2- 9: DS1307 Hình 2- 10: Mạch nguyên lý khối điều khiển Hình 2- 11: Mạch nguyên lý khối thị Hình 2- 12: PCB mạch nguồn Hình 2- 13: PCB mạch led hiển thị Hình 2- 14: PCB Mạch điều khiển trung tâm Hình 2- 15: Đồng hồ hồn thiện DANH MỤC CÁC BẢNG BIỂU Trang 5/59 CHƯƠNG 1: TỔNG QUAN VỀ MẠCH ĐỒNG HỒ DÙNG IC VI XỬ LÝ AT 89C51 1.1 Giới thiệu Đây đồng hồ sử dụng IC vi điều khiển AT89C51 hiển thị LED đoạn 3x4cm, điều chỉnh giờ, phút, giây báo thức nút nhấn Cài Đặt, Tăng, Giảm, Ok, Báo Thức Vì có sử dụng IC thời gian thực DS1307 nên thời gian ln hiển thị xác thời gian thực mà sử dụng kể nguồn 1.2 Mơ tả chức hoạt động mạch Thời gian tự động lưu vào nhớ ta cần cài đặt thời gian lần Đề chỉnh Giờ ta nhấn nút Cài Đặt lần thứ nhất, nhấn nút Tăng để chỉnh lên, nhấn nút Giảm để giảm xuống, sau nhấn nút Ok để hoàn tất phần cài đặt Tiếp đến để chỉnh Phút, nhấn nút Tăng để chỉnh phút lên, nhấn nút Giảm để giảm phút xuống, sau nhấn nút Ok để hoàn tất phần cài đặt phút Tiếp đến để chỉnh Giây, nhấn nút Tăng để chỉnh giây lên, nhấn nút Giảm để giảm giây xuống, sau nhấn nút Ok để hoàn tất phần cài đặt giây Nhấn nút Cài Đặt lần thứ hai , để trình cài đặt thời gian hoàn tất Để cài đặt báo thức , ta nhấn nút Báo Thức Tiếp đến nhấn nút Tăng để chỉnh lên, nhấn nút Giảm để giảm xuống, nhấn nút Ok để hoàn tất phần cài đặt báo thức Mạch đồng hồ dùng IC vi xử lý AT89C51 Trang 6/59 Tiếp đến nhấn nút Tăng để chỉnh phút lên, nhấn nút Giảm để giảm phút xuống, sau nhấn nút Ok để hồn tất phần cài đặt phút báo thức Tiếp đến nhấn nút Cài Đặt để chọn lựa chế độ hoạt động báo thức , nhấn Tăng Giảm để chọn ON “ đồng ý báo thức” OFF “ hủy báo thức” , sau nhấn nút Ok để hồn tất q trình cài đặt báo thức Để tắt chng báo thức Nhấn giữ nút Báo Thức 3s , để tắt chng báo thức Nhấn nút Cài Đặt , sau nhấn nút Tăng Giảm để lựa chọn chế độ ON/OFF báo thức, ta chọn OFF Nhấn nút Ok để hồn tất q trình tắt báo thức 1.3 Ngun lý chung 1.3.1 Nguyên Lý Quét LED Thanh Để hiển thị led thanh, ta cần chân để gởi liệu cho Dựa tượng lưu ảnh nên ta đóng mở led với tần số cao làm cho ta thấy led không bị tắt mà thấy led sáng liên tục Với phương pháp quét led ta mắc trực tiếp chân A,B,C,D,E,F,G,DP led lại với điều khiển thông qua chân nguồn Mạch đồng hồ dùng IC vi xử lý AT89C51 Trang 7/59 Hình 1- 1:Sơ đồ quét LED 1.3.2 1.3.2.1 Giao tiếp I2C Giới thiệu Vào năm 1980 Phillips phát triển chuẩn giao tiếp nối tiếp dây gọi I2C (Inter-Intergrated Circuit) Mạch đồng hồ dùng IC vi xử lý AT89C51 Trang 8/59 Hình 1- 2:Bus I2C thiết bị ngoại vi 1.3.2.2 Đặc Điểm Giao Tiếp I2C Một giao tiếp I2C gồm có dây: SDA (Serial Data) SCL (Serial Clock) SDA đường truyền liệu hướng, SCL đường xung đồng hồ theo hướng Hình 1- 3:Kết nối thiết bị vào bus I2C Trong giao tiếp I2C hoạt động truyền hay nhận tùy thuộc vào thiết bị Master( thiết bị chủ ) hay Slave (thiết bị tớ) Trong quyền điều khiển thuộc thiết bị chủ Thiết bị chủ có vai trò tạo xung clock cho tồn hệ thống quản lí địa thiết bị tớ Dựa vào hình thấy liệu truyền từ thiết bị chủ sang thiết bị tớ hay ngược lại, xung clock truyền theo hướng từ thiết bị chủ sang thiết bị tớ 1.3.2.3 Các Chế Độ Truyền Dữ Liệu Của I2C: Standard mode : Fast mode : High-Speed mode : Chế độ chuẩn Chế độ nhanh Chế độ cao tốc Mạch đồng hồ dùng IC vi xử lý AT89C51 Trang 9/59 Quá trình truyền liệu giao tiếp I2C: bao gồm hai trình đọc ghi liệu Dấu hiệu Start Stop điều kiện bắt buộc Master muốn thiết lập giao tiếp với Slave Dấu hiệu Start : SDA đưa từ mức sang mức SCL mức Dấu hiệu Stop : SDA đưa từ mức sang mức SCL mức Hình 1- 4: Quá trình Start / Stop I2C Hình 1- 5: Quá trình truyền liệu I2C Mạch đồng hồ dùng IC vi xử lý AT89C51 Trang 10/59 Hình 1- 6: Truyền từ Master sang Slave (Ghi liệu) Hình 1- 7: Truyền từ Slave sang Master (Đọc liệu) Hình 1- 8: Quá trình đọc liệu 1.4 Giới thiệu linh kiện 1.4.1 1.4.1.1 IC vi điều khiển AT89C51 Giới thiệu chung IC vi điều khiển AT89C51 Intel công bố chip 8051 điều khiển họ vi điều khiển MCS-51 Hiện Intel khơng cung cấp loại vi điều khiển họ MCS-51 thay vào hãng Atmel sản xuất cung cấp chip vi điều khiển có tính tương tự chip vi điều khiển Intel Mã 8051 Intel chuyển thành 8951 Atmel IC vi điều khiển AT89C51 gồm: Dung lượng ROM 4Kbyte Dung lượng RAM 128 byte port xuất nhập (I/O port ) bit Mạch đồng hồ dùng IC vi xử lý AT89C51 Trang 45/59 delay_ms(1); I2C_KetThuc(); // ket thuc qua trinh doc du lieu return(dat); } /* */ // -Ham Ghi Du Lieu Vao DS1307 -// void DS1307_Viet(unsigned char add, unsigned char dat) { I2C_BatDau(); // bat dau ghi I2C_Viet(0xd0); //0xd0 la dia chi cua ds1307 I2C_Viet(add); // gia tri can ghi I2C_Viet(((dat/10)4)*10; // doc xong thi luu gia tri da doc dc vao dat // ket thuc qua trinh doc du lieu // du lieu doc o dang BCD nen chuyen sang he 10 return(dat); // tra ve gia tri da doc duoc } // - Ham Phuc Vu Hien Thi -// void hienThi(char a, char b, char c) // quet led hien thi led doan { if(a==101){Led1=Led2=1;} dung de cai dat else { Led1 = 0; P2 = so[a/10]; delay_ms(1); Led1 = 1; Led2 = 0; P2 = so[a%10]; delay_ms(1); Led2 = 1; } Mạch đồng hồ dùng IC vi xử lý AT89C51 // khong sang led led Trang 47/59 if(b==101){Led3=Led4=1;} // khong sang led led dung de cai dat else { Led3 = 0; P2 = so[b/10]; delay_ms(1); Led3 = 1; Led4 = 0; P2 = so[b%10]; delay_ms(1); Led4 = 1; } if(c==101){Led5=Led6=1;} dung de cai dat else { Led5 = 0; P2 = so[c/10]; delay_ms(1); Led5 = 1; Led6 = 0; P2 = so[c%10]; delay_ms(1); Led6 = 1; } } Mạch đồng hồ dùng IC vi xử lý AT89C51 // khong sang led led Trang 48/59 /* ham dùng de hien thi led doan neu dang cai dat thi cac led 1, hoac 3,4 hoac 5,6 se nhap nhay de cai dat Con so 101 khong co y nghia gi ca có the dung 102, 103 hoac bat ki so nao khac, Chi can giong voi so ham KEY // /* CHuong Trinh Quet Phim Phuc Vu Cai Dat -*/ void key() { char dem=1,k,x; if(CaiDat==0) // neu nhan nut cai dat { delay_ms(20); // chong nhieu phim while(CaiDat==0); // cho cho den nha phim while(1) // vong lap vo tan { /* cai dat, cac led can cai dat se nhap nhay Doan code co nhiem vu lam nhap nhay led neu k =1 : led sang neu k= l led tat Bien x dc tang dan, neu x tang len 30 thi dao nguoc k, muc dich cua bien x la delay */ if(k==1) { // -Doan code dung de hien thi phan cai dat thoi gian -// Mạch đồng hồ dùng IC vi xử lý AT89C51 Trang 49/59 if(dem==1){hienThi(gio,phut,giay);} if(dem==2){hienThi(gio,phut,giay);} if(dem==3){hienThi(gio,phut,giay);} x++;if(x>30){x=0;k=0;} /* neu dem < thi co nghia la dang phan cat dat thoi gian : Gio Phut Giay dem = la cai gio dem = la cai phut dem = la cai giay */ } if(k==0) { if(dem==1){hienThi(101,phut,giay);} if(dem==2){hienThi(gio,101,giay);} if(dem==3){hienThi(gio,phut,101);} x++;if(x>30){x=0;k=1;} } if(Ok==0) // neu ok dc nhan thi tang bien dem len de cai dat tiep { delay_ms(20); while(Ok==0); dem++;if(dem==4)dem=1; } if(Tang==0) { delay_ms(500); Mạch đồng hồ dùng IC vi xử lý AT89C51 Trang 50/59 if(dem==1){gio++;if(gio>23)gio=0;} if(dem==2){phut++;if(phut>59)phut=0;} if(dem==3){giay++;if(giay>59)giay=0;} } if(Giam==0) { delay_ms(500); if(dem==1){gio ;if(gio59)phutBaoThuc=0;} } if(Giam==0) { delay_ms(20); // delay chong nhieu while(Giam==0){hienThi(gioBaoThuc,phutBaoThuc,101);} // nhan, luc chua tha phim nhan thi se lap di lap lai hien thi if(dem==0){gioBaoThuc ; if(gioBaoThuc1){z=0;} } if(Ok==0) { if(z==0)baoThuc=1; // Set co bao thuc if(z==1)baoThuc=0; // Set co bao thuc len ( nghia la bao thuc ON) xuong ( nghia la bao thuc OFF) kiemTra=1; break; } Mạch đồng hồ dùng IC vi xử lý AT89C51 // thoat ngoai Trang 55/59 } if(kiemTra==1) { kiemTra=0; // set kiem tra ve chuan bi cho lan cai dat tiep theo break; // thoat man hinh chinh } } } } // -Lenh kiem tra bao thic chinh xac khong de bao thuc if(baoThuc==1) // neu bao thuc = tuc la bao thuc ON { if(gioBaoThuc==gio && phutBaoThuc==phut) bao thuc = gio, phut thuc te { for(x=0;x đầu 2V Hình 1- 14: IC 7805 Cấu tạo IC 78xx