1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án môn hoc 1 ̣ thiết kế đồng hồ xem giờ ampm dùng pic 16f877a hiển thị lcd

56 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 56
Dung lượng 2,25 MB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO - ĐỒ ÁN MÔN HỌC Thiết kế đồng hồ xem AM/PM dùng pic 16F877A hiển thị LCD SVTH : NGUYỄN THUẬN TÍN- 20161269 Khóa : 2020 Ngành : CNKT Điện tử -Viễn thơng GVHD: ThS NGUYỄN NGƠ LÂM Tp Hồ Chí Minh, tháng 06 năm 2023 CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** Tp Hồ Chí Minh, ngày 22 tháng 06 năm 2023 NHIỆM VỤ ĐỒ ÁN MÔN HỌC Họ tên sinh viên: Nguyễn Thuận Tín Ngành: Cơng Nghệ Kỹ Thuật Điện tử - Viễn thông Giảng viên hướng dẫn: ThS Nguyễn Ngô Lâm Ngày nhâ ̣n đề tài: MSSV:20161269 Lớp: 20161CLVT2A Ngày nộp đề tài: Tên đề tài: Thiết kế đồng hồ xem AM/PM dùng pic 16F877A hiển thị LCD Các số liệu, tài liệu ban đầu: Kiến thức môn Mạch điện, Điện tử bản, Vi xử lý, Arduino Nội dung thực hiê ̣n đề tài: - Thiết kế hệ thống - Mô mạch Proteus - Lập trình cho hệ thống - Chỉnh sửa kiểm tra mạch - Viết báo cáo Sản phẩm: Mạch hiển thị thời gian thực báo thức hiển thị LCD 16x2 GIẢNG VIÊN HƯỚNG DẪN CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Họ tên Sinh viên: Nguyễn Thuận Tín MSSV: 20161269 Ngành: Cơng Nghệ Kỹ Thuật Điện tử - Viễn thông Tên đề tài: Thiết kế đồng hồ xem AM/PM dùng pic 16F877A hiển thị LCD Họ tên Giáo viên hướng dẫn: ThS Nguyễn Ngô Lâm NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm: ……………… (Bằng chữ: ) Tp Hồ Chí Minh, ngày 22 tháng 06 năm 2023 Giáo viên hướng dẫn CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ tên Sinh viên: Nguyễn Thuận Tín MSSV: 201616269 Ngành: Công Nghệ Kỹ Thuật Điện tử - Viễn thông Tên đề tài: Thiết kế đồng hồ xem AM/PM dùng pic 16F877A hiển thị LCD Họ tên Giáo viên phản biện: NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm: ……………… (Bằng chữ: ) Tp Hồ Chí Minh, ngày 22 tháng 06 năm 2023 Giáo viên phản biện LỜI CẢM ƠN Để hoàn thành báo cáo đồ án môn học chuyên ngành Công nghệ Kỹ thuật Điện tử - Viễn thông trước hết em xin gửi đến quý Thầy/Cô khoa Đào tạo Chất lượng cao, trường Đại học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh lời cảm ơn chân thành Đặc biệt, thầy Nguyễn Ngơ Lâm tận tình hướng dẫn, giúp đỡ tạo điều kiện thuận lợi cho em suốt trình thực đồ án Em xin gửi đến thầy lời cảm ơn chân thành sâu sắc Đồng thời, em xin cảm ơn đến bạn bè hỗ trợ, đóng góp ý kiến chia sẻ kinh nghiệm để em hoàn thành tốt đề tài Mặc dù cố gắng hết sức, lượng kiến thức eo hẹp nên khơng tránh khỏi thiếu sót Do vậy, em mong nhận góp ý q báu Thầy/Cơ để hồn thiện tốt tích lũy kinh nghiệm để hồn thành tốt báo cáo đồ án môn học báo cáo đồ án tốt nghiệp sau Sau cùng, em kính chúc quý thầy cô thật dồi sức khỏe, tràn đầy nhiệt huyết với thành công nghiệp cao quý Em xin chân thành cảm ơn! i DANH MỤC CÁC TỪ VIẾT TẮT DC PC Direct Current Personal Computer Dịng điện chiều Máy tính cá nhân I2C Inter-Integrated Circuit I/O IC ADC hay A/D Input/Output Integrated Circuit Analog Digital Converter Vi mạch tích hợp truyền thơng nối tiếp Ngõ vào/ngõ Mạch tích hợp Chuyển đổi tín hiệu tương tự sang tín hiệu số ii MỤC LỤC LỜI CẢM ƠN i DANH MỤC CÁC TỪ VIẾT TẮT .ii DANH MỤC CÁC HÌNH ẢNH vi CHƯƠNG 1: TỔNG QUAN 1.1 GIỚI THIỆU 1.2 MỤC TIÊU NGHIÊN CỨU 1.3 ĐỐI TƯỢNG NGHIÊN CỨU 1.4 PHẠM VI NGHIÊN CỨU 1.5 BỐ CỤC ĐỒ ÁN CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 DS1307 2.2 KHỐI XỬ LÝ TRUNG TÂM 2.3 LCD 16x2 10 CHƯƠNG 3: THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG 15 3.1 YÊU CẦU VÀ SƠ ĐỒ KHỐI HỆ THỐNG 15 3.1.1 Yêu cầu hệ thống 15 3.1.2 Sơ đồ khối chức khối 15 3.1.3 Hoạt động hệ thống 16 3.2 THIẾT KẾ HỆ THỐNG PHẦN CỨNG 16 3.2.1 Khối thời gian thực RTC DS1307 16 3.2.2 Khối hiển thị LCD……………… 18 3.2.3 Khối nút nhấn…………………… 19 3.2.4 Khối còi báo……………………… 21 3.2.5 Khối xử lý trung tâm…………… 22 3.2.6 Khối nguồn……………………… 23 3.3 CHỨC NĂNG VÀ HOẠT ĐỘNG CỦA PHẦN MỀM 24 3.4 LƯU ĐỒ 25 3.4.1 Lưu đồ giải thuật chương trình chính: 25 3.4.2 Lưu đồ hàm thời gian 26 3.4.3 Lưu đồ hàm chỉnh báo thức 28 CHƯƠNG 4: KẾT QUẢ THỰC HIỆN 30 iii 4.1 Kết hoạt động toàn hệ thống 30 4.2 Điều chỉnh báo thức 31 CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 32 5.1 KẾT LUẬN 32 5.2 HẠN CHẾ VÀ HƯỚNG PHÁT TRIỂN 32 5.2.1 Hạn chế 32 5.2.2 Hướng phát triển 32 TÀI LIỆU THAM KHẢO 33 PHỤ LỤC 34 iv Mục lục bảng BẢNG : THÔNG SỐ KỸ THUẬT CHO DS1307 BẢNG 2: CHỨC NĂNG CÁC CHÂN CỦA DS1307 BẢNG 3: BẢNG ĐẶT TÍNH PIC16F877A BẢNG 4: BẢNG ĐẶT TÍNH PIC16F877A BẢNG 5: BẢNG CHỨC NĂNG CHÂN VI ĐIỀU KHIỂN PIC16F877A BẢNG 6: BẢNG ĐẶT TÍNH LCD 16X2 11 BẢNG CHỨC NĂNG CÁC CHÂN LCD 14 v DANH MỤC CÁC HÌNH ẢNH HÌNH SƠ ĐỒ CHÂN DS1307 MẶT TRƯỚC HÌNH 2 SƠ ĐỒ CHÂN DS1307 MẶT SAU HÌNH KÝ HIỆU DS1307 HÌNH VI ĐIỀU KHIỂN PIC16F877A HÌNH SƠ ĐỒ CHÂN VI ĐIỀU KHIỂN PIC16F877A HÌNH MODULE LCD 1602 10 HÌNH SƠ ĐỒ KÝ HIỆU CHÂN LCD 16X2 12 HÌNH 8: SƠ ĐỒ KHỐI CỦA HỆ THỐNG 15 HÌNH 15: LƯU ĐỒ CHƯƠNG TRÌNH CHÍNH 25 HÌNH 16: LƯU ĐỒ HOẠT ĐỘNG KHỐI THỜI GIAN 27 HÌNH 20: LƯU ĐỒ HOẠT ĐỘNG KHỐI THỜI GIAN 28 HÌNH KẾT NỐI DS1307 VỚI PIC 16F877A 17 HÌNH HÌNH ẢNH MODULE LCD 1602 19 HÌNH 3 KHỐI NÚT NHẤN HIỂN THỊ VÀ HIỆU CHỈNH BÁO THỨC 20 HÌNH SƠ ĐỒ KẾT NỐI CỊI BÁO 22 HÌNH SƠ ĐỒ KHỐI NGUỒN CÓ LED ĐỎ HIỂN THỊ 23 HÌNH GIAO DIỆN PHẦN MỀM CCS C COMPILER 24 HÌNH MƠ HÌNH SẢN PHẨM 30 HÌNH ĐỒNG HỒ Ở CHẾ ĐỘ CÀI ĐẶT BÁO THỨC 31 vi CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1 KẾT LUẬN Với hỗ trợ tận tình từ giáo viên hướng dẫn hoàn thành mục tiêu đề thiết kế mạch hiển thị thời gian thực lên lcd thông qua PIC 16F877A Trong q trình thực hiện, gặp khơng khó khăn từ phần cứng đến phần mềm Mặc dù gặp khơng khó khăn em cố gắng nghiên cứu vượt qua tích lũy cho số kinh nghiệm mới, kiến thức để hoàn thành đề tài 5.2 HẠN CHẾ VÀ HƯỚNG PHÁT TRIỂN 5.2.1 Hạn chế - Chi phí phần cứng cao - Còn ảnh hưởng nhiều nhiễu - Chỉ chạy môi trường lý tưởng - Mắt thu nhận tín hiệu chưa nhanh - Phần cứng tự tạo nên chưa đạt độ xác cao 5.2.2 Hướng phát triển - Thu thập nhiều liệu để tăng tính xác - Cải thiện thuật tốn để cố mơ hình hồn thiện - Dự định phát triển lên thêm cảm biến đo nhiệt độ, chưa thực - Trang bị thêm cảm biến, đọc đồng hồ để thu thập liệu 32 TÀI LIỆU THAM KHẢO [1] [2] [3] Datasheet DS1307: https://datasheets.maximintegrated.com/en/ds/DS1307.pdf Datasheet LCD1602: https://www.sparkfun.com/datasheets/LCD/ADM1602K-NSA-FBS3.3v.pdf Bảng chức chân PIC16F877A: https://drive.google.com/drive/folders/1SCYyh1wbIxa1kDwCyhH9We UznIzCkLV?usp=share_link [4] https://youtu.be/vFgjiw1-j9M ( Tham khảo video thiết kế mạch RTC) [5] https://youtu.be/xWnbwB_YnOI ( Tham khảo vẽ mạch protues PIC 16F877A) 33 PHỤ LỤC #include // khai bao thu vien PIC16F877A #include // define PIC #device *=16 adc=10 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=12000000) /// Thach anh 12M #use i2c(master,fast,sda = pin_c4,scl = pin_c3) #include #define ACK // file giao tiep LCD #define NO_ACK #define k1 RB0// dinh nghia chan nut nhan #define k2 RB1// dinh nghĩa nút nhấn #define k3 RB2// dinh nghĩa nút nhấn #define k4 RB3// dinh nghĩa nút nhấn #define rl RD3 // định nghĩa nút relay int32 c_g,dv_g,c_p,dv_p,c_h,dv_h,thu,c_d,dv_d,c_t,dv_t,c_n,dv_n; unsigned char RTC_ARR[7]; // Buffer for second,minute, ,year int32 h1=0,p1=0,g1=0; void convert_bcd_lcd(int8 g,int8 p, int8 h, int8 th, int8 d, int8 t, int8 n); void ReadRTC(unsigned char * buff); void WriteRTC(unsigned char * buff); void chinh_gio(); void chinh_bt(); void hienthi() { LCD_putcmd(0x80); LCD_putchar(c_h + 0x30); LCD_putchar(dv_h + 0x30);printf(LCD_putchar,":"); // hien thi gia trị : LCD_putchar(c_p + 0x30); LCD_putchar(dv_p + 0x30);printf(LCD_putchar,":");//hien thi gia tri phut : LCD_putchar(c_g + 0x30); LCD_putchar(dv_g + 0x30);// hien thị gia trị giây if(thu==1) printf(LCD_putchar," C.Nhat"); // in ngày thứ = else { printf(LCD_putchar," Thu "); LCD_putchar(thu + 0x30); }printf(LCD_putchar," "); LCD_putcmd(0xC0); printf(LCD_putchar,"DATE:"); LCD_putchar(c_d + 0x30); LCD_putchar(dv_d + 0x30);printf(LCD_putchar,"-"); // tính giá trị ngày hiển thị ngày LCD_putchar(c_t + 0x30); LCD_putchar(dv_t + 0x30);printf(LCD_putchar,"-20");// tính giá trị tháng hiển thị tháng LCD_putchar(c_n + 0x30); LCD_putchar(dv_n + 0x30); printf(LCD_putchar," 2099 } void hienthi1(int m) { LCD_putcmd(0x80); ");// tính giá trị năm hiển thị năm (2000- if(m==1) {LCD_putchar(63); LCD_putchar(63);} else {LCD_putchar(c_h + 0x30); LCD_putchar(dv_h + 0x30);} printf(LCD_putchar,":"); if(m==2) {LCD_putchar(63); LCD_putchar(63);} else {LCD_putchar(c_p + 0x30); LCD_putchar(dv_p + 0x30);} printf(LCD_putchar,":"); // goi gia tri thoi gian phut if(m==3) {LCD_putchar(63); LCD_putchar(63);} else {LCD_putchar(c_g + 0x30); LCD_putchar(dv_g + 0x30);} // goi gia tri thoi gian giay if(m==4) {printf(LCD_putchar," "); LCD_putchar(63); LCD_putchar(63);} else {if(thu==1) printf(LCD_putchar," C.Nhat"); // goi gia tri cua thu else { printf(LCD_putchar," Thu "); LCD_putchar(thu + 0x30); }} printf(LCD_putchar," "); LCD_putcmd(0xC0); printf(LCD_putchar,"DATE:"); if(m==5) {LCD_putchar(63); LCD_putchar(63);} else {LCD_putchar(c_d + 0x30); LCD_putchar(dv_d + 0x30);} printf(LCD_putchar,"-"); if(m==6) {LCD_putchar(63); LCD_putchar(63);} else {LCD_putchar(c_t + 0x30); LCD_putchar(dv_t + 0x30);} printf(LCD_putchar,"-20"); if(m==7) {LCD_putchar(63); LCD_putchar(63);} else {LCD_putchar(c_n + 0x30); LCD_putchar(dv_n + 0x30);} printf(LCD_putchar," "); } void hienthi2(int m) { LCD_putcmd(0xc0); // printf(LCD_putchar," "); if(m==1) {LCD_putchar(63); LCD_putchar(63);} else {LCD_putchar(h1/10 + 0x30); LCD_putchar(h1%10 + 0x30);} printf(LCD_putchar,":"); if(m==2) {LCD_putchar(63); LCD_putchar(63);} else {LCD_putchar(p1/10 + 0x30); LCD_putchar(p1%10 + 0x30);} printf(LCD_putchar,":"); if(m==3) {LCD_putchar(63); LCD_putchar(63);} else {LCD_putchar(g1/10 + 0x30); LCD_putchar(g1%10 + 0x30);} printf(LCD_putchar," "); } void main() { int isg; // khai bao port trisa = 0x01; trisb = 0x0F; trisc = 0x00; trisd = 0x00; trise = 0x00; lcd_init(); rl =0; //========================================= delay_us(10); c_g=0,dv_g=1,c_p=2,dv_p=3,c_h=4,dv_h=5,thu=6,c_d=7,dv_d=8,c_t=9,dv_t=0, c_n=1,dv_n=2; LCD_putcmd(0x81); printf(LCD_putchar,"DH SP KY THUAT "); // Đây lệnh để đưa trỏ văn đến vị trí dịng hình LCD (vị trí 0x81 tương ứng với vị trí này) Lệnh gọi để chuẩn bị cho việc hiển thị dòng chữ "DH SP KY THUAT " hình LCD ## Tương tự lệnh LCD_putcmd(0xC1); printf(LCD_putchar,"BAO CAO DO AN "); Delay_ms(5000); LCD_putcmd(0x80); printf(LCD_putchar,"NGUYEN THUAN TIN "); LCD_putcmd(0xC0); printf(LCD_putchar,"MSSV: 20161269 "); Delay_ms(3000); // hien thi thong tin len man hinh LCD thoi gian nhat dinh while(true) { ReadRTC(&RTC_ARR[0]); convert_bcd_lcd(RTC_ARR[0],RTC_ARR[1],RTC_ARR[2],RTC_ARR[3],RTC _ARR[4],RTC_ARR[5],RTC_ARR[6]); // chuyenduongam(c_d*10+dv_d,c_t*10+dv_t,c_n*10+dv_n); hienthi(); if(isg!=dv_g) { isg = dv_g; if(h1==(c_h*10+dv_h)&&p1==(c_p*10+dv_p)&&g1==(c_g*10+dv_g)) rl = 1; } if(k1==0) { while(k1==0){} chinh_gio(); } if(k4==0) { while(k4==0){} chinh_bt(); } } } //end main - void convert_bcd_lcd(int8 g,int8 p, int8 h, int8 th, int8 d, int8 t, int8 n) { c_g=(g&240)>>4; //chia lay phan du, so hang don vi dv_g=g&15; //tach hang tram va hang chuc c_p=(p%240)>>4; //chia lay phan du, so hang don vi dv_p=p&15; //tach hang tram va hang chuc c_h=(h&240)>>4; //chia lay phan du, so hang don vi dv_h=h&15; //tach hang tram va hang chuc thu = th; c_d=(d&240)>>4; //chia lay phan du, so hang don vi dv_d=d&15; //tach hang tram va hang chuc c_t=(t&240)>>4; //chia lay phan du, so hang don vi dv_t=t&15; //tach hang tram va hang chuc c_n=(n&240)>>4; //chia lay phan du, so hang don vi dv_n=n&15; //tach hang tram va hang chuc } void chinh_bt() { int mode=1,i=0; LCD_putcmd(0x80); printf(LCD_putchar,"Chinh bao thuc while(true) { if(i20) i = 0; if(k2==0) { while(k2==0) {} switch(mode) { case 1: { if(h1

Ngày đăng: 20/09/2023, 15:48

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w