Xây dựng hệ thống báo giờ tự động bằng loa sử dụng PIC16F877A HỆ THỐNG NHÚNG( bao gồm code pic+ mô phỏng proteus)Xây dựng hệ thống báo giờ tự động bằng loa sử dụng PIC16F877A HỆ THỐNG NHÚNG( bao gồm code pic+ mô phỏng proteus)
TRƯỜNG ĐẠI HỌC KĨ THUẬT CÔNG NGHIỆP THÁI NGUYÊN KHOA: ĐIỆN TỬ SINH VIÊN THỰC HIỆN : NGUYỄN HOÀNG VIỆT(TN) MSSV K175520114067 VŨ VĂN SỸ MSSV K175520114206 LỚP : GIẢNG VIÊN HƯỚNG DẪN : 53CDT.01 TĂNG CẨM NHUNG Thái Nguyên – 2021 MỤC LỤC CHƯƠNG I: GIỚI THIỆU TỔNG QUÁT 1.Giới thiệu yêu cầu toán .3 2.Lên ý tưởng thiết kế .3 a) Thiết kế sơ đồ khối hệ thống b) Giải thích chức khối Thiết kế sơ đồ nguyên lý .4 a) Khối hiển thị LCD: b) Khối hiển thị Led matrix c) Khối DS1307 .8 d) Khối nguồn: 12 e) Khối nút nhấn 12 f) Khối điều khiển .12 g) Khối chuông báo: .12 h) Sơ đồ nguyên lý cho toàn mạch 13 CHƯƠNG II: LẬP TRÌNH ĐIỀU KHIỂN CHO HỆ THỐNG 14 1.Giới thiệu yêu cầu điều khiển xây dựng lưu đồ thuật toán 14 1.1 Giới thiệu Yêu cầu điều khiển .14 1.2 Xây dựng lưu đồ điều khiển 14 2.Chương trình điều khiển 15 3.Giải thích lệnh sử dụng chương trình điều khiển .31 3.1 Code Hiển thị thời gian thực lên led matrix 31 3.2 Code Hiển thị chế độ cài đặt thời gian lên LCD 33 3.3 Chương trình nút ấn cài đặt thời gian hiển thị LCD 34 CHƯƠNG III: ĐÁNH GIÁ VÀ KẾT LUẬN 36 1.Đánh giá hoạt động hệ thống 36 Kết luận 36 TÀI LIỆU THAM KHẢO 37 CHƯƠNG I: GIỚI THIỆU TỔNG QUÁT 1.Giới thiệu yêu cầu toán Xây dựng hệ thống báo tự động loa sử dụng PIC16F877A theo yêu cầu sau: • Sử dụng nút nhấn để chọn thời gian báo chuông • Hiển thị lên Led Matrix thời gian thời • Khi đến thời gian đặt báo chng • Sử dụng IC thời gian thực DS1307 2.Lên ý tưởng thiết kế a) Thiết kế sơ đồ khối hệ thống Theo yêu cầu đề tài nhóm chúng tơi tiến hành thiết kế sơ đồ khối hệ thống báo tự động loa hình 1.1 sau đây: KHỐI HIỂN THỊ LCD KHỐI NÚT NHẤN KHỐI NGUỒN KHỐI ĐIỀU KHIỂN KHỐI THỜI GIAN THỰC Hình 1.1: Sơ đồ khối hệ thống KHỐI HIỂN THỊ LED MATRIX KHỐI CHNG BÁO b) Giải thích chức khối • Khối nguồn: Có chức cấp nguồn cho toàn mạch để hoạt động • Khối hiển thị led matrix: Có chức hiển thị thời gian thực giờ, phút, giây • Khối hiển thị LCD: Có chức hiển thị thơng số cài cặt thời gian • Khối chng báo: Có chức báo chuông theo yêu cầu cài đặt • Khối nút bấm: có chức cài đặt thời gian báo chng • Khối thời gian thực: Có chức tạo thời gian thực hiển thị lên led matrix • Khối điều khiển: Có nhiệm vụ nhận biến đổi tín hiệu đầu vào thực chuyển đổi để đưa kết đầu Thiết kế sơ đồ nguyên lý a) Khối hiển thị LCD: LCD sử dụng hệ thống loại LCD 16x2 có hàng 16 cột Hình 1.2: LCD 16x2 Màn hình LCD sử dụng vơ rộng rãi công nghiệp lĩnh vực đời sống Nó có chức hiển thị chữ, số Dưới hình ảnh thể chân hình LCD Hình 1.3: Định nghĩa chân LCD Một số lệnh LCD dùng pic 16f877a: Định nghĩa chân LCD: #define LCD_RS_PIN PIN_A0 #define LCD_RW_PIN PIN_C7 #define LCD_ENABLE_PIN PIN_C6 #define LCD_DATA4 PIN_C5 #define LCD_DATA5 PIN_C2 #define LCD_DATA6 PIN_C1 #define LCD_DATA7 PIN_C0 Khai báo thư viện LCD: #include Khởi tạo LCD: LCD_init(); Hiển thị kí tự lên LCD: lcd_gotoxy(2,1);// đưa trỏ chuột tới cột 2, dòng lcd_putc("sy_viet");// hiển thị dòng chữ sy_viet cột 2, dòng b) Khối hiển thị Led matrix Cấu tạo Led matrix - Led Matrix cấu tạo từ Led đơn ( chân kết nối đến Cột chân kết nối đến Hàng) => cần chân vi điều khiển để kết nối đến hàng, chân vi điều khiển kết nối đến cột - Để Led sáng: cấp điện áp VCC GND vào chân Led - Trong thời điểm điều khiển Led Hình 1.4: Cấu trúc led matrix 8x8 Cách test hàng cột: • Quy định (+): HÀNG • Quy định (-): CỘT Để kiểm tra đâu chân HÀNG, đâu chân CỘT Led Matrix, nối với chân nguồn(+); chân với nguồn (-) Nếu đèn SÁNG, xác định HÀNG CỘT Khi đèn sáng chân với với nguồn (+) chân hàng, chân nối với nguồn (-) chân cột Hình 1.5 Cách xác định hàng cột Nguyên tắc gán HÀNG CỘT sau: Hình 1.6 Nguyên tắc gán nhãn hàng cột Nguyên lý quét Led matrix: • Chốt tín hiệu vào hàng cột • Duy trì trạng thái khoảng thời gian đủ để mắt người cảm nhận (khoảng 1ms) • Tắt hết Led • Chốt tín hiệu vào hàng cột c) Khối DS1307 Khái niệm: DS1307 chip thời gian thực hay RTC (Read time clock), thời gian thực tính xác thời gian tuyệt đối cho thời gian mà người sử dụng: Thứ, ngày, tháng, năm, giờ, phút, giây Thời gian lưu trữ DS1307 năm 2100 DS1307 chế tạo Dallas Semiconductor, chip có cấu tạo bên ngoại đơn giản Chip DS1307 có chân hay dùng dạng Dip thứ tự chân mơ tả hình đây: Hình 1.7 Cấu trúc DS1307 Chức chân: X1,X2: nối với thạch anh 32,768 kHz Vbat: đầu vào pin khoảng 3V SDA: chuối DATA SCL: dãy xung clock SQW/OUT: xung vuông/ đầu driver GND: nối đất VCC nối nguồn Cấu tạo bên DS1307: Cấu tạo bên DS1307 bao gồm số thành phần mạch nguồn, mạch dao động, mạch điều khiển logic, mạch giao điện I2C, trỏ địa ghi (hay RAM) Do đa số thành phần bên DS1307 thành phần “cứng” nên khơng có q nhiều việc sử dụng DS1307 Sử dụng DS1307 chủ yếu ghi đọc ghi chip Vì cần hiểu rõ vấn đề cấu trúc ghi cách truy xuất ghi thơng qua giao diện I2C Hình 1.8 Cấu trúc bên DS1307 Như trình bày, nhớ DS1307 có tất 64 ghi 8−bit đánh địa từ đến 63 (từ 0x00h đến 0x3Fh) Tuy nhiên, thực chất có ghi đầu dùng cho chức “đồng hồ”, lại 56 ghi bỏ trống dùng chứa biến tạm RAM muốn Bảy ghi chứa thông tin thời gian đồng hồ bao gồm: giây (SECONDS), phút (MINUETS), (HOURS), thứ (DAY), ngày (DATE), tháng (MONTH) năm (YEAR) Việc ghi giá trị vào ghi tương đương với việc “cài đặt” thời gian khởi động cho RTC Việc đọc giá từ ghi trình đọc thời gian thực mà RTC tạo Hình 1.9 Cấu trúc ghi DS1307 Tổ chức nhớ DS1307: Vì ghi quan trọng hoạt động DS1307, khảo sát ghi cách chi tiết Trước hết quan sát tổ chức theo bit ghi hình sau: Hình 2.0 chức ghi DS 1307 Thanh ghi giây (SECONDS): ghi ghi nhớ DS1307, địa 0x00 Bốn bit thấp ghi chứa mã BCD 4-bit 10 hthi(); } } } else if(!input(pin_a2)) {while(!input(pin_a2)); { if(i>0) { i ; hthi(); } else { i=99; hthi(); } } } else if(!input(pin_a3)){ while(!input(pin_a3)){ d=i; lcd_putc('\f'); 24 lcd_gotoxy(2,1); lcd_putc("Da xac nhan"); lcd_gotoxy(1,2); lcd_putc("thietlapgio"); delay_ms(1000); lcd_putc('\f'); } k++; }} while(k==2){ reset(); hthi1(); if(!input(pin_a1)) {while(!input(pin_a1)); { if(i0) { i ; hthi1(); } else { i=99; hthi1(); } } } else if(!input(pin_a3)){ while(!input(pin_a3)){ e=i; lcd_putc('\f'); 26 lcd_gotoxy(2,1); lcd_putc("Da xac nhan"); lcd_gotoxy(1,2); lcd_putc("thietlapphut"); delay_ms(1000); lcd_putc('\f'); } k++; } } while(k==3){ reset(); hthi2(); if(!input(pin_a1)) {while(!input(pin_a1)); { if(i0) { i ; hthi2(); } else { i=99; hthi2(); } } } else if(!input(pin_a3)){ 28 while(!input(pin_a3)){ f=i; lcd_putc('\f'); lcd_gotoxy(2,1); lcd_putc("Da xac nhan"); lcd_gotoxy(1,2); lcd_putc("thietlapgiay"); delay_ms(1000); lcd_putc('\f'); } k++; }} ds1307_get_date(day,month,yr,dow); ds1307_get_time(hrs,min,sec); a=hrs; b=min; c=sec; dkien(); donvi1=hrs%10; chuc1=hrs/10; donvi2=min%10; chuc2=min/10; donvi3=sec%10; 29 chuc3=sec/10; for(j=0; j