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

Đồ Án ASSEMBLY:Thiết kế đồng hồ số hiển thị trên LCD 16*2 Sử dụng IC AT89S52.

53 1,1K 15

Đ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 53
Dung lượng 1,06 MB

Nội dung

Thiết kế đồng hồ số hiển thị trên LCD 16*2 gồm đầy đủ thứ, ngày, tháng, năm dương lịch, giờ, phút, giây và có sử dụng bàn phím để thay đổi được thời gian. Thời gian 1 giây được tạo ra bằng cách sử dụng Timer 0.” Sử dụng IC AT89S52. Đề tài gồm 3 chương: Chương I: Tổng quan về đề tài Chương II: Hiện thực hóa đề tài Chương III: Kết Luận

Lời nói đầu Bất biến cố, việc, kiện xảy ra, hay làm việc cần có thời gian, thời gian gắn với vật, việc không trừ vật Thời gian quan trọng cần thiết sống chúng ta, từ xa xưa người ta sử dụng mặt trời, mặt trăng làm thước đo thời gian Xã hội dần phát triển có xuất đồng hồ (đồng hồ cát, đồng hồ học ) với tiến khoa học công nghệ ngày thay vật dụng đo, xác định thời gian cồng kềnh, đồng hồ học đồng đồng hồ số, đồng hồ điện tử có độ xác cao, nhỏ gọn, tiện lợi, dễ sử dụng, sửa chữa Và lý chúng em chọn đề tài : “Thiết kế đồng hồ số hiển thị LCD 16*2 gồm đầy đủ thứ, ngày, tháng, năm dương lịch, giờ, phút, giây có sử dụng bàn phím để thay đổi thời gian Thời gian giây tạo cách sử dụng Timer 0.” Sử dụng IC AT89S52 Đề tài gồm chương: Chương I: Tổng quan đề tài Chương II: Hiện thực hóa đề tài Chương III: Kết Luận Em xin chân thành cảm ơn giúp đỡ ,chỉ bảo tận tình thầy hướng dẫn suốt khoảng thời gian chúng em thực đề tài này! Mục lục CHƯƠNG I TỔNG QUAN VỀ ĐỀ TÀI .2 Yêu cầu đề tài 2 Lưu đồ thuật toán tổng quát Chức năng, nhiệm vụ khối lưu đồ .3 a Khối khai báo biến, định nghĩa cổng sử dụng ic b Khối khởi tạo LCD, ngắt ngoài, ngắt Timer 0, giá trị ban đầu cho thời gian c Khối hiển thị thời gian lên LCD khởi động Timer .3 d Khối kiểm tra DEM_S e Khối thay đổi thời gian .4 f Khối kiểm tra thời gian .8 g Khối hiển thị thời gian lên LCD 10 CHƯƠNG II: HIỆN THỰC HÓA ĐỀ TÀI 11 Giới thiệu chung phần cứng 11 a Vi điều khiển AT89S52 11 b Màn hình LCD 16x2 13 c Mạch tạo dao động 14 d Mạch RESET .15 Thiết kế phần cứng .15 a Sơ đồ khối 15 b Xây dựng phần mềm (chương trình nguồn) 16 c Thiết kế thực hóa phần cứng 16 Kết mạch mô mạch thực tế 21 a Kết mơ máy tính .21 b Kết mạch thực tế 21 c So sánh mô thực tế 21 d Ưu nhược điểm thiết kế hướng đề tài 22 CHƯƠNG III: KẾT LUẬN 23 Phục lục 24 CHƯƠNG I TỔNG QUAN VỀ ĐỀ TÀI Yêu cầu đề tài Thiết kế đồng hồ số thị lên LCD 16x2 gồm đầy đủ thứ, ngày, tháng, năm dương lịch, giờ, phút, giây sử dụng bàn phím thay đổi thời gian Thời gian tạo cách sử dụng Timer Lưu đồ thuật toán tổng quát 3 Chức năng, nhiệm vụ khối lưu đồ a Khối khai báo biến, định nghĩa cổng sử dụng ic Ở khối này, ta khai báo cổng (chân) sử dụng Onchip(AT89S52), cổng điều khiển hoạt động LCD, cổng gửi liệu, lệnh cho LCD thực thi Ngồi khai báo số biến sử dụng chương trình nguồn b Khối khởi tạo LCD, ngắt ngoài, ngắt Timer 0, giá trị ban đầu cho thời gian - Khởi tạo LCD : khởi tạo cho LCD cho LCD hoạt động - Khởi tạo ngắt ngoài: cho phép ngắt hoạt động, sử dụng ngắt ngồi để tăng giá trị biến DEM_S Kích hoạt ngắt ngồi cách nhấn phím SELECT - Khởi tạo ngắt Timer 0: chọn chế độ nạp giá trị cho TH0,TL0 Sau 20 lần vào ngắt Timer0 tăng biến lưu giá trị giây thêm - Khởi tạo giá trị ban đầu cho thời gian : khởi tạo giá trị thời gian ban đầu c Khối hiển thị thời gian lên LCD khởi động Timer - Hiển thị giá tri thời gian ban đầu khởi tạo lên LCD [(g)] - Khởi động ngắt Timer : Timer bắt đầu hoạt động d Khối kiểm tra DEM_S Nếu DEM_S khác chuyển đến khối thay đổi thời gian, DEM_S chuyển đến khối kiểm tra thời gian e Khối thay đổi thời gian - Do chương trình sử dụng ngắt nên sau khởi tạo ngắt cho phép ngắt ngồi hoạt động, nhấn SELECT chương trình dừng cơng việc vào thực cơng việc ngắt ngồi Sau thực xong công việc ngắt tự động trở thực tiếp công việc làm - Nếu DEM_S khác ta kiểm tra xem phím BACK có nhấn khơng: + Nếu phím BACK nhấn : giảm DEM_S đơn vị, sau kiểm tra phím OK + Nếu BACK khơng nhấn : đến kiểm tra phím OK + Nếu phím OK nhấn : gán DEM_S=0 sau khỏi chương trình thay đổi thời gian đến khối kiểm tra thời gian +Nếu OK không nhấn : đến kiểm tra DEM_S (khối kiểm tra DEM_S ) - Khối kiểm tra DEM_S Ứng với giá trị DEM_S ta chọn thay đổi giá trị thời gian tương ứng Sau thực thay đổi, quay trở lại kiểm tra xem phím BACK có nhấn hay khơng( khỏi kiểm tra DEM_S) - Các khối thay đổi thời gian (giờ, phút, giây, thứ ) - Sau chọn giá trị thời gian cần thay đổi, ta kiểm tra phím UP có nhấn hay khơng: + Nếu UP nhấn giá trị cần thay đổi tăng thêm đơn vị + Nếu UP không nhấn chuyển qua kiểm tra phím DOWN + Nếu DOWN nhấn giảm giá trị cần thay đổi đơn vị + Nếu DOWN không nhấn quay lại khối kiểm phím BACK f Khối kiểm tra thời gian 38 CJNE MOV SJMP KT4: R4,#29,IN_UP_R4 R4,#1 IN_UP_R4 CJNE SJMP R5,#4,KT6 THANG_30N CJNE SJMP R5,#6,KT9 THANG_30N CJNE SJMP R5,#9,KT11 THANG_30N KT6: KT9: KT11: CJNE R5,#11,THANG_31N THANG_30N: INC CJNE MOV SJMP R4 R4,#31,IN_UP_R4 R4,#1 IN_UP_R4 INC CJNE MOV R4 R4,#32,IN_UP_R4 R4,#1 THANG_31N: IN_UP_R4: MOV ACALL MOV MOV ACALL JNB EXIT_UP_R4: LJMP SCAN_UP_MONTH: CJNE JB ACALL INC CJNE MOV IN_UP_R5: DATABUS,#0C6H SEND_COMMAND TEMP,R4 A,R4 SHOW_BCD UP,SCAN_UP_DATE EXIT_SCAN_UP DEM_S,#6,SCAN_UP_YEAR1 UP,EXIT_SCAN_UP DELAY_SW2 R5 R5,#13,IN_UP_R5 R5,#1 39 MOV ACALL MOV MOV ACALL JNB LJMP DATABUS,#0C9H SEND_COMMAND TEMP,R5 A,R5 SHOW_BCD UP,SCAN_UP_MONTH EXIT_SCAN_UP SCAN_UP_YEAR1: CJNE DEM_S,#7,SCAN_UP_YEAR2 JB UP,EXIT_SCAN_UP ACALL DELAY_SW2 INC CD MOV A,CD CJNE A,#100,IN_UP_CD MOV CD,#0 IN_UP_CD: MOV DATABUS,#0CCH ACALL SEND_COMMAND MOV TEMP,CD MOV A,CD ACALL SHOW_BCD JNB UP,SCAN_UP_YEAR1 LJMP EXIT_SCAN_UP SCAN_UP_YEAR2: CJNE DEM_S,#8,EXIT_SCAN_UP JB UP,EXIT_SCAN_UP ACALL DELAY_SW2 INC EF MOV A,EF CJNE A,#100,IN_UP_EF MOV EF,#0 IN_UP_EF: MOV DATABUS,#0CEH ACALL SEND_COMMAND MOV TEMP,EF MOV A,EF ACALL SHOW_BCD JNB UP,SCAN_UP_YEAR2 EXIT_SCAN_UP: POP DPL 40 POP DPH POP ACC RET ;===CHUONG TRINH GIAM GIA TRI THOI GIAN CAN THAY DOI=== SCAN_DOWN: PUSH ACC PUSH DPH PUSH DPL SCAN_DOWN_HOUR: CJNE DEM_S,#1,SCAN_DOWN_MINUTE JB DOWN,EXIT_DOWN_R3 ACALL DELAY_SW2 CJNE R3,#0,IN_DOWN_R3 MOV R3,#24 IN_DOWN_R3: DEC R3 MOV DATABUS,#0C4H ACALL SEND_COMMAND MOV TEMP,R3 MOV A,R3 ACALL SHOW_BCD JNB DOWN,SCAN_DOWN_HOUR EXIT_DOWN_R3: LJMP EXIT_SCAN_DOWN SCAN_DOWN_MINUTE: CJNE DEM_S,#2,SCAN_DOWN_SEC JB DOWN,EXIT_DOWN_R2 ACALL DELAY_SW2 CJNE R2,#0,IN_DOWN_R2 MOV R2,#60 IN_DOWN_R2: DEC R2 MOV DATABUS,#0C7H ACALL SEND_COMMAND MOV TEMP,R2 MOV A,R2 ACALL SHOW_BCD JNB DOWN,SCAN_DOWN_MINUTE EXIT_DOWN_R2: 41 LJMP EXIT_SCAN_DOWN SCAN_DOWN_SEC: CJNE DEM_S,#3,SCAN_DOWN_DAY JB DOWN,EXIT_DOWN_R1 ACALL DELAY_SW2 CJNE R1,#0,IN_DOWN_R1 MOV R1,#60 IN_DOWN_R1: DEC R1 MOV DATABUS,#0CAH ACALL SEND_COMMAND MOV TEMP,R1 MOV A,R1 ACALL SHOW_BCD JNB DOWN,SCAN_DOWN_SEC EXIT_DOWN_R1: LJMP EXIT_SCAN_DOWN SCAN_DOWN_DAY: CJNE DEM_S,#4,SCAN_DOWN_DATE JB DOWN,EXIT_DOWN_DAY ACALL DELAY_SW2 MOV A,DAY CJNE A,#1,IN_DOWN_DAY MOV DAY,#8 IN_DOWN_DAY: DEC DAY MOV DATABUS,#0C0H ACALL SEND_COMMAND ACALL DISPLAY_DAY JNB DOWN,SCAN_DOWN_DAY EXIT_DOWN_DAY: LJMP EXIT_SCAN_DOWN SCAN_DOWN_DATE: CJNE DEM_S,#5,SCAN_DOWN_MONTH JB DOWN,EXIT_DOWN_R4 ACALL DELAY_SW2 CJNE R5,#2,KT4_D MOV B,#4 MOV A,EF 42 DIV AB MOV A,B CJNE A,#0,KP_NAM_NHUAN_D CJNE R4,#1,IN_DOWN_R4 MOV R4,#30 SJMP IN_DOWN_R4 KP_NAM_NHUAN_D: CJNE R4,#1,IN_DOWN_R4 MOV R4,#29 SJMP IN_DOWN_R4 KT4_D: CJNE R5,#4,KT6_D SJMP THANG_30N_D KT6_D: CJNE R5,#6,KT9_D SJMP THANG_30N_D KT9_D: CJNE R5,#9,KT11_D SJMP THANG_30N_D KT11_D: CJNE R5,#11,THANG_31N_D THANG_30N_D: CJNE R4,#1,IN_DOWN_R4 MOV R4,#31 SJMP IN_DOWN_R4 THANG_31N_D: CJNE R4,#1,IN_DOWN_R4 MOV R4,#32 IN_DOWN_R4: DEC R4 MOV DATABUS,#0C6H ACALL SEND_COMMAND MOV TEMP,R4 MOV A,R4 ACALL SHOW_BCD JNB DOWN,SCAN_DOWN_DATE EXIT_DOWN_R4: LJMP EXIT_SCAN_DOWN SCAN_DOWN_MONTH: CJNE DEM_S,#6,SCAN_DOWN_YEAR1 JB DOWN,EXIT_SCAN_DOWN 43 ACALL DELAY_SW2 CJNE R5,#1,IN_DOWN_R5 MOV R5,#13 IN_DOWN_R5: DEC R5 MOV DATABUS,#0C9H ACALL SEND_COMMAND MOV TEMP,R5 MOV A,R5 ACALL SHOW_BCD JNB DOWN,SCAN_DOWN_MONTH LJMP EXIT_SCAN_DOWN SCAN_DOWN_YEAR1: CJNE DEM_S,#7,SCAN_DOWN_YEAR2 JB DOWN,EXIT_SCAN_DOWN ACALL DELAY_SW2 MOV A,CD CJNE A,#0,IN_DOWN_CD MOV CD,#100 IN_DOWN_CD: DEC CD MOV DATABUS,#0CCH ACALL SEND_COMMAND MOV TEMP,CD MOV A,CD ACALL SHOW_BCD JNB DOWN,SCAN_DOWN_YEAR1 LJMP EXIT_SCAN_DOWN SCAN_DOWN_YEAR2: CJNE DEM_S,#8,EXIT_SCAN_DOWN JB DOWN,EXIT_SCAN_DOWN ACALL DELAY_SW2 MOV TEMP,EF MOV A,EF CJNE A,#0,IN_DOWN_EF MOV EF,#100 IN_DOWN_EF: DEC EF MOV DATABUS,#0CEH ACALL SEND_COMMAND 44 MOV ACALL JNB A,EF SHOW_BCD DOWN,SCAN_DOWN_YEAR2 EXIT_SCAN_DOWN: POP DPL POP DPH POP ACC RET ;========== LCDINIT: CLR CLR CLR MOV CALL MOV CALL MOV CALL MOV CALL RET CHUONG TRINH KHOI TAO LCD ============= RS RW EN DATABUS,#38H SEND_COMMAND DATABUS,#0CH SEND_COMMAND DATABUS,#01H SEND_COMMAND DATABUS,#80H SEND_COMMAND ;========== CHUONG TRINH GUI LENH CHO LCD SEND_COMMAND: CLR RS CLR RW SETB EN ACALL DELAY CLR EN RET SEND_DATA: SETB RS CLR SETB EN ACALL CLR RET ;========== ========= RW DELAY EN CHUONG TRINH GUI DU LIEU CHO LCD ========== 45 WRITE: MOV MOVC CJNE RET WRITE_CONT: MOV ACALL INC SJMP RET A,#0 A,@A+DPTR A,#99H,WRITE_CONT DATABUS,A SEND_DATA DPTR WRITE ;========== HIEN THI DONG TG CAN THAY DOI DISPLAY_CHANGE: PUSH ACC PUSH DPH PUSH DPL MOV DATABUS,#0CH ACALL SEND_COMMAND MOV DATABUS,#87H ACALL SEND_COMMAND D_GIO: CJNE DEM_S,#1,D_PHUT MOV DPTR,#CHAR_GIO ACALL WRITE SJMP EXIT_DISPLAY_CHANGE D_PHUT: CJNE DEM_S,#2,D_GIAY MOV DPTR,#CHAR_PHUT ACALL WRITE SJMP EXIT_DISPLAY_CHANGE D_GIAY: CJNE DEM_S,#3,D_THU MOV DPTR,#CHAR_GIAY ACALL WRITE SJMP EXIT_DISPLAY_CHANGE D_THU: CJNE DEM_S,#4,D_NGAY MOV DPTR,#CHAR_THU ACALL WRITE SJMP EXIT_DISPLAY_CHANGE D_NGAY: ============ 46 CJNE DEM_S,#5,D_THANG MOV DPTR,#CHAR_NGAY ACALL WRITE SJMP EXIT_DISPLAY_CHANGE D_THANG: CJNE DEM_S,#6,D_NAM1 MOV DPTR,#CHAR_THANG ACALL WRITE SJMP EXIT_DISPLAY_CHANGE D_NAM1: CJNE DEM_S,#7,D_NAM2 MOV DPTR,#CHAR_NAM ACALL WRITE SJMP EXIT_DISPLAY_CHANGE D_NAM2: CJNE DEM_S,#8,EXIT_DISPLAY_CHANGE MOV DPTR,#CHAR_NAM ACALL WRITE EXIT_DISPLAY_CHANGE: POP DPL POP DPH POP ACC RET ;==================================================== DELAY_SW: INC D1 MOV A,D1 CJNE A,#200,DELAY_SW MOV D1,#0 INC D2 MOV A,D2 CJNE A,#200,DELAY_SW ACALL SCAN_UP ACALL SCAN_DOWN MOV D2,#0 INC D3 MOV A,D3 CJNE A,#1,DELAY_SW MOV D3,#0 RET 47 DELAY_SW2: PUSH MOV MOV WAIT2: MOV MOV SETB JNB CLR CLR DJNZ POP RET 01H R1,#4 TMOD,#01H TL0,#00H TH0,#00H TR0 TF0,$ TR0 TF0 R1,WAIT2 01H ;======================================================== DELAY: PUSH ACC PUSH 07H MOV R7,#200 DJNZ R7,$ POP 07H POP ACC RET ;===============CHUONG TRINH PHUC VU NGAT NGOAI ========= START_CHANGE_TIME: JNB SELECT,$ INC DEM_S MOV R6,#1 RETI ;=================== TIMER ============================ TIMER0: PUSH ACC ;2CKM INC DEM_TIMER0 ;1CKM MOV A,DEM_TIMER0 ;1CKM CJNE A,#20,END_TIMER0 ;2CKM MOV DEM_TIMER0,#0 ;2CKM 48 INC END_TIMER0: MOV MOV POP RETI ; ; ; ; ; ; ; ; ; R1 ;1CKM TL0,#0BEH TH0,#3CH ACC ;2CKM ;2CKM ;2CKM ;2CKM TIMER CHE DO DO SU DUNG THACH ANH CO TAN SO 12Mhz NEN 1CKM = 1us 1s = 20x50000x1us 65536 - 50000 = 15536(D) = 3CAF(H) > TH0 = 3CH ; TL0 = 0B0H DO MOI LAN VAO NGAT TIMER0 THUC HIEN THEM 14 CKM > 50000 - 14 = 49986 > 15536 + 14 = 15550(D) = 3CBE(H) > TH0 = 3CH ; TL0 = 0BEH ;========================================================= DELAY_INTRO: PUSH 00H MOV R0,#10 MOV TMOD,#01H AGAIN: MOV TH0,#0D8H MOV TL0,#0F0H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 DJNZ R0,AGAIN POP 00H RET ;========================================================== WRITE_INTRO: MOV A,#0 MOVC A,@A+DPTR CJNE A,#99H,WRITE_CONT_INTRO RET WRITE_CONT_INTRO: 49 MOV ACALL ACALL INC SJMP RET DATABUS,A SEND_DATA DELAY_INTRO DPTR WRITE_INTRO ;====================== INTRO ============================= INTRO: PUSH DPH PUSH DPL PUSH ACC PUSH 00H MOV R0,#4 MOV LCALL MOV LCALL MOV LCALL MOV LCALL MOV LCALL MOV LCALL MOV LCALL MOV LCALL LCALL DATABUS,#80H SEND_COMMAND DPTR,#INTRO_CHAR1 WRITE DATABUS,#0C0H SEND_COMMAND DPTR,#INTRO_CHAR1 WRITE DATABUS,#80H SEND_COMMAND DPTR,#INTRO_CHAR2 WRITE_INTRO DATABUS,#0C0H SEND_COMMAND DPTR,#INTRO_CHAR3 WRITE_INTRO DELAY_INTRO NHAP_NHAY: MOV DATABUS,#01H LCALL SEND_COMMAND LCALL DELAY_INTRO MOV DATABUS,#80H LCALL SEND_COMMAND MOV DPTR,#INTRO_CHAR2 LCALL WRITE MOV DATABUS,#0C0H 50 LCALL MOV LCALL LCALL DJNZ SEND_COMMAND DPTR,#INTRO_CHAR3 WRITE DELAY_INTRO R0,NHAP_NHAY MOV LCALL LCALL DATABUS,#01H SEND_COMMAND DELAY_INTRO POP POP POP POP RET 00H ACC DPL DPH ;==================================================== INTRO_CHAR1: DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 99H INTRO_CHAR2: DB ' DO AN MON HOC ' ,99H INTRO_CHAR3: DB ' DIGITAL CLOCK ' ,99H THU2: DB 'T.HAI' ,99H THU3: DB 'T.BA ' ,99H THU4: DB 'T.TU ' ,99H THU5: DB 'T.NAM' ,99H THU6: DB 'T.SAU' ,99H THU7: DB 'T.BAY' ,99H CNHAT: DB 'CNHAT' ,99H CHAR_SPACE: DB ' ' ,99H CHAR_CHANGE: 51 DB 'CHANGE ' DB 'HOURS DB 'MINUTE ' ,99H DB 'SECONDS' ,99H DB 'DAY ' ,99H 'DATE ' ,99H 'MONTH ' ,99H 'YEAR ' ,99H ,99H CHAR_GIO: ' ,99H CHAR_PHUT: CHAR_GIAY: CHAR_THU: CHAR_NGAY: DB CHAR_THANG: DB CHAR_NAM: DB END Tài liệu tham khảo : Nguyễn Tăng Cường, Phan Quốc Thắng – Cấu trúc lập trình họ vi điều khiển 8051 Nhà xuất khoa học kỹ thuật-2004 Datasheet AT89S52 – Atmel Corporation http://www.atmel.com/images/doc1919.pdf HD44780 Datasheet(PDF) – Hitachi Semiconductor 52 http://www.alldatasheet.com/datasheet4 pdf/pdf/63673/HITACHI/HD44780.html Internet ... gian : đồng hồ bấm giây, đồng hồ đếm ngược, đồng hồ hẹn giờ, lịch van niên, âm lịch CHƯƠNG III: KẾT LUẬN Qua đồ án môn học giúp chúng em nâng cao kỹ lập trình, thiết kế, trình bày báo cáo, làm,... Thiết kế đồng hồ số thị lên LCD 16x2 gồm đầy đủ thứ, ngày, tháng, năm dương lịch, giờ, phút, giây sử dụng bàn phím thay đổi thời gian Thời gian tạo cách sử dụng Timer Lưu đồ thuật toán tổng quát... ĐỀ TÀI .2 Yêu cầu đề tài 2 Lưu đồ thuật toán tổng quát Chức năng, nhiệm vụ khối lưu đồ .3 a Khối khai báo biến, định nghĩa cổng sử dụng ic b Khối khởi

Ngày đăng: 20/02/2020, 14:07

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w