có sơ đồ nguyên lý, sơ đồ khối và lưu đồ giải thuật, mạch in và code đầy đủ cho KHÓA số điện tử hiện thị LCD dùng 89c51 ...............................................................................................................................................................
BÁO CÁO ĐỒ ÁN Đề tài: KHÓA SỐ ĐIỆN TỬ MỤC LỤC DANH MỤC CÁC HÌNH VẼ DANH MỤC CÁC TỪ VIẾT TẮT ROM Read Only Memory LCD Liquid Crystal Display PIN Personalised Identity Number ĐỒ ÁN Trang 3/25 CHƯƠNG 1: GIỚI THIỆU CHUNG Giới thiệu Mạch khóa số điện tử có chức đóng mở theo mã số, sử dụng hệ thống cửa vào thay cho ổ khóa truyền thống Để đảm bảo cho khả khóa mở khóa, mạch khóa số cần bảo mật mã số, thay đổi mã số, dễ dàng sử dụng Chức Mạch khóa số có chức điều khiển tiếp điểm relay, giao tiếp với người sử dụng thông qua bàn phím hiển thị hình LCD Bàn phím gồm 16 nút nhấn, nút nhấn có chức năng: Phím số: – dùng nhập mật mã PIN: thay đổi mã số khóa hệ thống Lock: Khóa hệ thống Unlock: Mở khóa hệ thống OK: Xác nhận thao tác Clear: Xóa mã số vừa nhập Cancel: Hủy bỏ thao tác thực Màn hình LCD: hiển thị thông tin thao tác thực với người sử dụng Khả hệ thống Mạch yêu cầu nhập mật mã để mở khóa Nhưng khóa lúc Trong trình nhập mật mã, người dùng nhập lại từ đầu, hùy bỏ thao tác Nếu nhập sai số lần cho phép, hệ thống phát tiếng bíp liên tục, đồng thời ngừng hoạt động mạch reset KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 4/25 Người dùng thay đổi mã số hệ thống nhằm nâng cao tính bảo mật Để thực hiện, cần nhập vào mã số Nếu nhập sai số lần cho phép, mạch báo động tương tự trường hợp mở khóa Nếu nhập đúng, người dùng nhập vào mã thay cho mã cũ Hệ thống phát tiếng bíp mã đổi nhập mã cũ không muốn thay đổi mã KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 5/25 CHƯƠNG 2: CÁC LINH KIỆN CƠ BẢN Vi điều khiển AT89C51: Có khả điều khiển linh hoạt theo chương trình nạp vào Giúp giảm kích thước so với việc dùng IC, tăng độ ổn định hệ thống Thuộc họ vi xử lý 8051, có 32 cổng I/O, với 4KB Flash ROM Hình 2.1 Vi điều khiển AT89C51 Hình 2.2 Sơ đồ chân AT89C51 Chức chân: KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 6/25 - Port (P0.0 – P0.7) có số chân từ 32 đến 39 Có chức port xuất nhập liệu bus địa byte thấp bus liệu đa hợp (AD0 – AD7) - Port (P1.0 – P1.7) có số chân từ đến Có chức xuất nhập liệu - Port (P2.0 – P2.7) có số chân từ 21 đến 28 Có chức port xuất nhập liệu bus địa byte thấp bus liệu đa hợp (A8 – A15) - Port (P3.0 – P3.7) có số chân từ 10 đến 17 Có chức port xuất nhập liệu tín hiệu điều khiển - PSEN: Chân số 29, cho phép nhớ chương trình - ALE: Chân số 30, cho phép chốt địa - EA: Chân số 31, truy xuất Phải nối lên Vcc sử dụng ROM nội nối GND sử dụng ROM - XTAL1 – 2: Chân 18, 19 Dùng để nối với thạch anh mạch dao động tạo xung clock, cung cấp cho chip hoạt động - RST: Chân số Thiết lập lại trạng thái ban đầu cho hệ thống, tín hiệu nhập, tích cực mức cao - Vcc GND số chân 40 20 Có chức cung cấp nguồn hoạt động cho chip Điện áp hoạt động tối đa 6,6 v dòng tiêu thụ 20 mA Bàn phím: Bàn phím tạo thành từ 16 nút nhấn chân, nối với theo dạng ma trận phím, giảm kết nối tới vi điều khiển KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 7/25 Hình 2.3 Nút nhấn chân Hình 2.4 Cấu tạo nút nhấn chân Hình 2.5 Cách nối nút nhấn thành bàn phím LCD 16X2: LCD hiển thị thông tin tốt nhiều so với LED đoạn LED ma trận Vì tích hợp module điều khiển cho LCD, nên việc điều khiển không phức tạp LCD 16x2 hiển thị dòng với 16 ký tự dòng KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 8/25 Hình 2.5 LCD 16x2 Hình 2.6 Sơ đồ chân LCD 16x2 a) Chức chân: - Vcc GND: Nguồn cung cấp cho LCD hoạt động - VEE: Điều chỉnh độ tương phản - RS: Chọn ghi lệnh liệu - RW: Chọn ghi đọc ghi liệu KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 9/25 - E: Cho phép - DB0 – DB7: Các bit liệu b) Tập lệnh điều khiển LCD: KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 10/25 KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 19/25 trình đổi CHƯƠNG 4: KẾT Chương QUẢ MÔ PHỎNG VÀ THỰC TẾ mật mã Chương trình khóa Kết mô phỏng: Mô hệ thống Proteus: Đặt chế độ hiển thị cho LCD, quét phím Đúng Sai Kiểm tra trạng Nhập phím thái số? khóa Thực lệnh từ phím chức Sai Sai Sai Khóa Quá số lần sai cho phép? Sai Đếm số lần Đúng Sai nhập sai Báo động Đúng Đã khóa? Lưu vào nhớ tạm thờiĐúng So sánh với mật mã cũ Đúng Hiện LCD, quét phím nhập Hình 4.1Hiện MạchLCD mô Đúng Sai số lần cho phép? mật mã Về chương trình Lưu mật mã Sai Đúng Báo động KHÓA SỐ ĐIỆN TỬ Về chương trình ĐỒ ÁN Trang 20/25 Hình 4.2 Mô LCD Mạch thực tế: Hình 4.3 Mặt mạch thực tế KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 21/25 Hình 4.3 Mặt mạch thực tế KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 22/25 CHƯƠNG 5: KẾT LUẬN Ưu khuyết điểm: a) Ưu điểm: - Bảo mật mật mã - Dễ dàng sử dụng - Chi phí thiết kế thấp b) Khuyết điểm: - Độ dài mật mã cố định - Khi reset nguồn, hệ thống dùng mật mã cố định Hướng phát triển: - Dùng ROM lưu mật mã - Tăng độ bảo mật cách thêm lớp bảo mật - Cần chỉnh sửa chương trình cho hệ thống hoạt động ổn định - Thêm khối báo động thay cho việc dùng chung với mạch âm KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 23/25 TÀI LIỆU THAM KHẢO Nguyễn Tăng Cường, Phan Quốc Thắng (2004), Cấu trúc lập trình họ vi điều khiển 8051, Nhà xuất khoa học kỹ thuật KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 24/25 PHỤ LỤC Mã nguồn chương trình: KHÓA SỐ ĐIỆN TỬ ORG 00H SCAN_KEY: KEYPORT EQU P0 CLR FLAG_KEY COL1 EQU P0.4 LJMP MAIN_SCAN COL2 EQU P0.5 KEYPAD: COL3 EQU P0.6 DB 07H,08H,09H,0FH COL4 EQU P0.7 DB 04H,05H,06H,0EH DATABUS EQU P1 DB 01H,02H,03H,0DH KEYVAL EQU 20H DB 0AH,00H,0BH,0CH FLAG RET EQU 21H FLAG_KEY EQU FLAG.0 SCAN: RS EQU P3.2 MOV KEYVAL,#0 RW EQU P3.1 MOV KEYPORT,#11111110B EN EQU P3.0 CALL READ_COL RELAY EQU P2.0 JB FLAG_KEY,EXIT_SCAN SPK EQU P2.1 MOV KEYVAL,#4 ;=====FIRST-INITIALIZING===== MOV KEYPORT,#11111101B MOV 40H,#00H CALL READ_COL MOV 41H,#00H JB FLAG_KEY,EXIT_SCAN MOV 42H,#00H MOV KEYVAL,#8 MOV 43H,#00H MOV KEYPORT,#11111011B MOV 44H,#00H CALL READ_COL MOV 45H,#00H JB FLAG_KEY,EXIT_SCAN MOV P2,#01H MOV KEYVAL,#12 LCALL LCD_INIT MOV KEYPORT,#11110111B LCALL PROJECT_INFO CALL READ_COL LCALL DELAY_1S LCALL DELAY_1S LCALL DELAY_1S EXIT_SCAN: RET READ_COL: LCALL LOCK CLR FLAG_KEY CLR SPK JB COL1,NEXTCOL LJMP MAIN JNB COL1,$ ;========SCAN_KEY====== SETB FLAG_KEY RET NEXTCOL: JB COL2,NEXTCOL1 MOV A,KEYVAL MOVC A,@A+DPTR RET JNB COL2,$ ;=====DATA-LCD========== INC KEYVAL WRITE_DATA: SETB FLAG_KEY LCALL WAIT_LCD RET MOV DATABUS,A NEXTCOL1: SETB RS JB COL3,NEXTCOL2 CLR RW JNB COL3,$ SETB EN INC KEYVAL CLR EN INC KEYVAL RET SETB FLAG_KEY RET NEXTCOL2: WRITE_COM: LCALL WAIT_LCD MOV DATABUS,A JB COL4,EXIT CLR RS JNB COL4,$ CLR RW INC KEYVAL SETB EN INC KEYVAL CLR EN INC KEYVAL RET SETB FLAG_KEY RET EXIT: WAIT_LCD: MOV 23H, #150D DELAY: MOV 22H, #255D CLR FLAG_KEY DJNZ 22H, $ CLR KEYVAL DJNZ 23H, DELAY RET RET MAIN_SCAN: CLEAR_LCD: CALL SCAN MOV A,#01H JB FLAG_KEY,KEY LCALL WRITE_COM SJMP MAIN_SCAN RET KEY: MOV DPTR,#KEYPAD ;===========MAIN========== MAIN: LCALL SCAN_KEY MOV DPTR,#UNLOCK_1 CJNE A,#0DH,MAIN_LOCK LCALL DATA_DISP LCALL BEEP MOV A,#0FH LJMP UNLOCK LCALL WRITE_COM MAIN_LOCK: MOV A,#0C5H CJNE A,#0EH,MAIN_PIN LCALL WRITE_COM LCALL BEEP SCAN_DATA: LJMP LOCK LCALL SCAN_KEY MAIN_PIN: CJNE A,#0AH,KEY_CLEAR CJNE A,#0FH,MAIN CJNE R1,#6,RE_PIN LCALL BEEP LJMP CHECK_PIN LJMP PIN ;=========LOCK============ LOCK: JB RELAY,LOCKED CLR SPK SETB RELAY LOCKED: KEY_CLEAR: CJNE A,#0BH,KEY_CANCEL LJMP RE_PIN KEY_CANCEL: CJNE A,#0CH,KEY_UNLOCK LCALL CLEAR_LCD MOV A,#0CH LCALL CLEAR_LCD LCALL WRITE_COM MOV A,#85H LCALL WELCOME LCALL WRITE_COM LJMP MAIN MOV DPTR,#DATA_LOCKED LCALL DATA_DISP LJMP MAIN ;=========UNLOCK====== UNLOCK: LCALL TEMP MOV R3,#00H LOOP_UNLOCK: LCALL CLEAR_LCD MOV A,#80H LCALL WRITE_COM KEY_UNLOCK: CJNE A,#0DH,KEY_LOCK LJMP SCAN_DATA KEY_LOCK: CJNE A,#0EH,KEY_PIN LJMP SCAN_DATA KEY_PIN: CJNE A,#0FH,KEY_DATA LJMP SCAN_DATA KEY_DATA: MOV @R0,A INC R0 LJMP WARNING INC R1 X1: MOV A,#'*' LCALL CLEAR_LCD LCALL WRITE_DATA MOV A,#0CH CJNE R1,#06H,SCAN_DATA LCALL WRITE_COM LJMP CHECK_PIN MOV A,#80H RE_PIN: LCALL WRITE_COM LCALL TEMP MOV DPTR,#UNLOCK_2 LJMP LOOP_UNLOCK LCALL DATA_DISP CHECK_PIN: LCALL BEEP_1S MOV R0,#50H LCALL TEMP MOV A,@R0 LJMP LOOP_UNLOCK CJNE A,40H,INCORRECT_PIN INC R0 CORRECT_PIN: CLR RELAY MOV A,@R0 LCALL CLEAR_LCD CJNE A,41H,INCORRECT_PIN MOV A,#0CH INC LCALL WRITE_COM R0 MOV A,@R0 MOV A,#82H CJNE A,42H,INCORRECT_PIN LCALL WRITE_COM INC MOV DPTR,#UNLOCK_3 R0 MOV A,@R0 LCALL DATA_DISP CJNE A,43H,INCORRECT_PIN MOV A,#0C2H INC LCALL WRITE_COM R0 MOV A,@R0 MOV DPTR,#UNLOCK_4 CJNE A,44H,INCORRECT_PIN LCALL DATA_DISP INC LCALL BEEP R0 MOV A,@R0 LCALL DELAY_2 CJNE A,45H,INCORRECT_PIN LCALL BEEP LJMP CORRECT_PIN LJMP MAIN INCORRECT_PIN: INC R3 CJNE R3,#05H,X1 ;=========PIN=========== PIN: MOV R3,#00H LOOP_PIN: LCALL TEMP KEY_F: CJNE A,#0CH,KEY_DATA_2 LCALL CLEAR_LCD MOV A,#80H LJMP CURRENT_PIN KEY_DATA_2: LCALL WRITE_COM MOV @R0,A MOV DPTR,#PIN_1 INC R0 LCALL DATA_DISP INC R1 MOV A,#0FH MOV A,#'*' LCALL WRITE_COM LCALL WRITE_DATA MOV A,#0C5H CJNE R1,#06H,CURRENT_PIN LCALL WRITE_COM LJMP CHECK_CURRENT CURRENT_PIN: CHECK_CURRENT: LCALL SCAN_KEY MOV R0,#50H CJNE A,#0AH,KEY_B MOV A,@R0 CJNE R1,#06H,LOOP_PIN CJNE A,40H,INCORRECT_CURRENT LJMP CHECK_CURRENT INC R0 KEY_B: MOV A,@R0 CJNE A,#0BH,KEY_C CJNE A,41H,INCORRECT_CURRENT LJMP LOOP_PIN INC R0 KEY_C: MOV A,@R0 CJNE A,#0CH,KEY_D CJNE A,42H,INCORRECT_CURRENT LCALL CLEAR_LCD INC R0 MOV A,#0CH MOV A,@R0 LCALL WRITE_COM CJNE A,43H,INCORRECT_CURRENT LCALL WELCOME INC LJMP MAIN MOV A,@R0 R0 KEY_D: CJNE A,44H,INCORRECT_CURRENT CJNE A,#0DH,KEY_E INC LJMP CURRENT_PIN R0 MOV A,@R0 KEY_E: CJNE A,45H,INCORRECT_CURRENT CJNE A,#0EH,KEY_F LJMP CORRECT_CURRENT LJMP CURRENT_PIN INCORRECT_CURRENT: INC R3 MOV A,#0C5H CJNE R3,#05H,X2 LCALL WRITE_COM LJMP WARNING X2: NEW_PIN: LCALL TEMP LCALL CLEAR_LCD MOV R0,#60H MOV A,#0CH N7: LCALL WRITE_COM LCALL SCAN_KEY MOV A,#80H CJNE A,#0AH,N1 LCALL WRITE_COM LJMP N7 MOV DPTR,#UNLOCK_2 N1: LCALL DATA_DISP CJNE A,#0BH,N2 LCALL BEEP_1S LCALL CLEAR_LCD LJMP LOOP_PIN LJMP LOOP_NEW CORRECT_CURRENT: LCALL CLEAR_LCD N2: CJNE A,#0CH,N3 MOV A,#0CH LCALL CLEAR_LCD LCALL WRITE_COM LJMP CANCEL_PIN MOV A,#80H N3: LCALL WRITE_COM CJNE A,#0DH,N4 MOV DPTR,#UNLOCK_3 LJMP N7 LCALL DATA_DISP N4: LCALL BEEP CJNE A,#0EH,N5 LCALL DELAY_2 LJMP N7 LCALL BEEP N5: LCALL CLEAR_LCD CJNE A,#0FH,N6 LOOP_NEW: MOV A,#80H LJMP N7 N6: LCALL WRITE_COM MOV @R0,A MOV DPTR,#PIN_2 INC R0 LCALL DATA_DISP INC R1 MOV A,#0FH MOV A,#'*' LCALL WRITE_COM LCALL WRITE_DATA CJNE R1,#6,N7 MOV A,#0CH LJMP CHANGE_PIN LCALL WRITE_COM CHANGE_PIN: MOV A,#80H MOV 40H,60H LCALL WRITE_COM MOV 41H,61H MOV DPTR,#PIN_4 MOV 42H,62H LCALL DATA_DISP MOV 43H,63H LCALL BEEP MOV 44H,64H LCALL DELAY_2 MOV 45H,65H LCALL BEEP LCALL CLEAR_LCD LCALL DELAY_2 MOV A,#0CH LCALL BEEP LCALL WRITE_COM LCALL CLEAR_LCD MOV A,#80H LCALL WELCOME LCALL WRITE_COM LJMP MAIN MOV DPTR,#PIN_3 ;======PROJECT_INFO====== LCALL DATA_DISP PROJECT_INFO: LCALL BEEP MOV A,#80H LCALL DELAY_2 LCALL WRITE_COM LCALL BEEP MOV DPTR,#PROJECT_DATA LCALL DELAY_2 LCALL DATA_DISP LCALL BEEP MOV A,#0C4H LCALL CLEAR_LCD LCALL WRITE_COM LCALL WELCOME MOV DPTR,#PROJECT_DATA_2 LJMP MAIN LCALL DATA_DISP CANCEL_PIN: RET MOV 40H,50H ;========BEEP======== MOV 41H,51H BEEP: MOV 42H,52H SETB SPK MOV 43H,53H LCALL DELAY_2 MOV 44H,54H CLR SPK MOV 45H,55H RET LCALL CLEAR_LCD BEEP_1S: SETB SPK NOP LCALL DELAY_1S NOP CLR SPK NOP RET NOP ;===========DELAY 1S====== NOP DELAY_1S: NOP MOV R4,#10D NOP L1: NOP MOV R5,#100D DJNZ R6,L6 L2: DJNZ R5,L5 MOV R6,#100D DJNZ R4,L4 L3: RET NOP ;========LCD_INIT======= NOP LCD_INIT: NOP MOV A,#3CH NOP LCALL WRITE_COM NOP MOV A,#0CH NOP LCALL WRITE_COM NOP MOV A,#06H NOP LCALL WRITE_COM DJNZ R6,L3 MOV A,#01H DJNZ R5,L2 LCALL WRITE_COM DJNZ R4,L1 RET RET WELCOME: ;=========DELAY 2======= MOV A,#85H DELAY_2: LCALL WRITE_COM MOV R4,#10D MOV DPTR,#WELCOME_DATA L4: LCALL DATA_DISP MOV R5,#10D RET L5: ;====DISPLAY LCD DATA==== MOV R6,#100D DATA_DISP: L6: PUSH ACC MOV A,#00H DB 'ENTER PIN:*' LOOP: RET MOVC A,@A+DPTR UNLOCK_2: CJNE A,#'*',DISP DB 'INCORRECT PIN!*' SJMP EXIT_DISP RET DISP: UNLOCK_3: LCALL WRITE_DATA DB 'CORRECT PIN!*' MOV A,#00H RET INC DPTR SJMP LOOP EXIT_DISP: POP ACC RET ;=====DEFINE BYTE======= TEMP: UNLOCK_4: DB 'UNLOCKED!*' RET PIN_1: DB 'CURRENT PIN:*' RET PIN_2: MOV R0,#50H; Vị trí lưu PIN tạm thời DB 'ENTER NEW PIN:*' MOV R1,#00H; Biến đếm số PIN RET MOV R2,#40H; Ô nhớ PIN RET WARNING: MOV A,#08H PIN_3: DB 'PIN CHANGED!*' RET PIN_4: LCALL WRITE_COM DB 'NOT CHANGE!*' SETB RELAY RET SETB SPK SJMP $ WELCOME_DATA: DB 'WELCOME*' RET PROJECT_DATA: DB 'KHOA SO DIEN TU*' RET PROJECT_DATA_2: DB '41382088*' DATA_LOCKED: RET DB 'LOCKED!*' END RET 0.83% UNLOCK_1: ... (AD0 – AD 7) - Port (P1.0 – P1. 7) có số chân từ đến Có chức xuất nhập liệu - Port (P2.0 – P2. 7) có số chân từ 21 đến 28 Có chức port xuất nhập liệu bus địa byte thấp bus liệu đa hợp (A8 – A1 5). .. lệnh điều khiển LCD: KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 10/25 KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 11/25 c) Giao tiếp vi điều khiển LCD: LCD cần 11 đường I/O để giao tiếp, phụ thuộc vào chế độ liệu LCD bit Để thiết... hiển thị KHÓA SỐ ĐIỆN TỬ ĐỒ ÁN Trang 16/25 Mạch hiển thị gồm LCD 16x2, biến trở chỉnh độ tương phản hiển thị mạch nối LED đèn LCD e) Khối âm thanh: Hình 3.5 Sơ đồ nguyên lý khối âm Gồm linh kiện