Trong một xã hội hiện đại, sự phát triển của ngành điện tử viễn thông là một yêu cầu không thể thiếu để thúc đẩy nền kinh tế phát triển và góp phần nâng cao đời sống xã hội.
 Ngày nay, trên thế giới, điện tử viễn thông vẫn không ngừng phát triển với tốc độ rất cao và thâm nhập ngày càng sâu vào tất cả các lĩnh vực của đời sống xã hội. Cùng với sự phát triển như vũ bão đó, ngành điện tử viễn thông Việt Nam cũng đang nỗ lực hết sức trên con đường tìm chỗ đứng cho mình.Trong đó, lĩnh vực bảo mật là một mảng lớn mà chúng ta cần quan tâm.Chính vì thế, với mục đích làm quen bước đầu với việc thiết kế mạch điện tử nói chung và với hệ thống an toàn, bảo mật nói riêng, chúng em chọn đề tài “ Thiết kế hệ thống khóa mã điện tử ” để nghiên cứu và thực hiện. Hệ thống này cho phép ta quản lý và hạn chế được số người ra vào theo mã số trong khu vực cần bảo mật với độ an toàn cao.
 Đề tài tuy không lớn song về mặt nguyên lý thì có thể phát triển thành các ứng dụng quản lý theo thẻ từ, mã vạch,mã hoá trong các khu vực đặc biệt cần phải có may tính hiện đại với CSDL,ngoài mật mã ra còn kiểm tra tần số giọng nói và camera kiểm tra hình ảnh mà hiện nay đang rất cần thiết. Vì thế, đối với chúng em đây là bước cơ sở để nghiên cứu những ứng dụng lớn hơn sau này.
                
              
                                            
                                
            
 
            
                 40 trang
40 trang | 
Chia sẻ: lvcdongnoi | Lượt xem: 3235 | Lượt tải: 2 
              
            Bạn đang xem trước 20 trang tài liệu Khóa số hiển thị trên lcd, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Phần B
NỘI DUNG
Chương 1: GIỚI THIỆU CHỨC NĂNG HỆ THỐNG
Đây là một hệ thống đóng mở theo mã cho phép một số ít người có thể ra vào theo mã của họ. Nó có thể được áp dụng làm cửa ra vào của các hệ thống cần mang tính bảo mật, giới hạn số người ra vào như: Cửa ra vào cơ quan, nhà máy, các khu quan trọng...
Trên cơ sở đó, hệ thống phải đảm bảo được hai yêu cầu cơ bản sau:
-Tính an toàn: phải có chức năng bảo mật.
-dễ sử dụng:có đầy đủ hướng dẫn để người dùng sử dụng
Do đó chúng em đã đưa ra yêu cầu một hệ thống có chức năng đóng mở như sau:
Chức năng hệ thống:
Hệ thống quản lí một số mã ứng với một số người được cho phép ra vào ở của này và hoạt động trên cơ sở các mã này.
Mã sử dụng các chữ số từ 0->9
Độ dài của mã từ 1->10 chữ số
Hệ thống giao tiếp với người sử dụng thông qua một bàn phím điều khiển và hiển thị trên màn hình .
Bàn phím gồm các phím số 0-9 và các phím chức năng: Set, Enter, backspace(ß).
Khi bắt đầu , người sử dụng được yêu cầu nhập mã:
Nếu chọn enter: 
Hệ thống so sánh mã vừa nhập với code .
Nếu mã đúng: cửa sẽ mở(mô phỏng trên mạch bằng việc bật hay tắt đèn LED xanh)
Nếu mã sai: yêu cầu nhập lại. Nếu nhập mã sai 3 lần liên tiếp chuông sẽ báo động. (mô phỏng trên mạch bằng việc bật hay tắt đèn LED đỏ)
Nếu chọn set: Kiểm tra xem mã cũ có đúng hay không.
-Nếu mã đúng: cho phép thay đổi mã bằng cách nhập vào mã mới và xác nhận đúng mã này một lần nữa.
-Nếu mã sai: không có hiện tượng gì cả. Nếu nhập mã sai ba lần liên tiếp chuông sẽ báo động.	
Trong quá trình nhập mã, nếu có nhầm lẫn có thể nhập lại bằng cách sử dụng nút Backspace(ß)
1.2. Phân tích hệ thống:
1.2.1.Khả năng đáp ứng yêu cầu của hệ thống:
Hệ thống giao tiếp với người sử dụng chỉ bằng bàn phím và hiển thị do vậy nó hạn chế được tác động của người sử dung vào nội dung bên trong của khoá.
Thêm vào đó là khả năng báo động khi nhập ba mã sai liên tiếp làm cho hệ thống có tính an toàn cao.
Mỗi người có một mã riêng. Nếu nghi ngờ lộ mã, người dùng có thể thay đổi mã theo mong muốn. Nhờ đó mà khả năng bảo mật của hệ thống cũng tăng cao.
1.2.2. Phân tích hệ thống:
Do giới hạn của yêu cầu, chúng em chỉ tập trung vào thiêt kế phần mạch điện tử để điều khiển hệ thống này.
Theo yêu cầu đưa ra, hệ thống gồm 3 khối cơ bản:
Khối vi xử lý
Khối hiển thị
Khối bàn phím
Khối bàn phím: cần 13 nút gồm:
Các nút số từ 0-9
Các nút chức năng: enter, set, <--.
Sử dụng các phím bấm tự nhả để nhập vào.
Khối mạch xử lí: Xử lí các hoạt động đã nêu ở yêu cầu hệ thống.
Khối hiển thị: Giúp cho việc giao tiếp với người sử dụng trở nên dễ dàng hơn người sử dụng biết mình đang thực hiện thao tác gì với cửa.
1.3.Lựa chọn phần cứng:
Trên cơ sở các yêu cầu đã đặt ra và các phân tích sơ bộ, từng khối đều có các phương án giải quyết như sau:
1.3.1. Khối bàn phím:
Bàn phím gồm các nút. Mỗi nút là một bộ phận đóng mở bằng cơ khí. Các mã của bàn phím tạo ra có thể được tạo ra trực tiếp hoặc bằng phép quét hàng và quét cột.
 Số đầu dây ra từ bàn phím phải phù hợp với đầu vào của mạch xử lí. Đồng thời với càng ít dây thì khả năng ổn định của bàn phím càng tăng.
Bố trí thành 4 hàng và 4 cột:
Số đầu ra từ bàn phím là 8 dây.
Số phím cần sử dụng là 13
Còn dư 3 nút để mở rộng chức năng trong tương lai.
1.3.2 Khối hiển thị: 
Yêu cầu đặt ra đối với khối hiển thị là thân thiện với người sử dụng.
Dùng LCD.
Ưu điểm: 
Hiển thị rõ ràng có kèm theo chỉ dẫn.
Thay đổi nội dung linh hoạt.Xử lý lập trình đơn giản hơn LED7 thanh và ma trận điểm.
Nhược điểm: Giá thành đắt. 
1.3.3 Mạch xử lí: 
Dùng vi điều khiển:
Ưu điểm: 
Vi điều khiển có khả năng điều khiển linh hoạt theo mong muốn của người sử dụng dựa vào phần mềm được viết.
Khả năng thay đổi mã có thể thực hiện được.
Hệ thống đơn giản hơn nhiều, kích thức nhỏ. Hơn nữa sẽ giảm được độ kém ổn định do nhiều linh kiện gây ra.
Có thể thay đổi, thêm chức năng bằng cách thay đổi phần mềm.
Nhược điểm:
 - Chất lượng của hệ thống phụ thuộc vào chất lượng chương trình được nạp cho vi điều khiển.
	Từ yêu cầu của đề bài ta dự kiến dùng các chip vi điều khiển thuộc họ MCS-51 của Intel, mà cụ thể ở đây là dùng chip 8051 vì những lý do sau:
Thứ nhất 8051 thuộc họ MCS-51, là chip vi điều khiển. Đặc điểm của các chip vi điều khiển nói chung là nó được tích hợp với đầy đủ chức năng của một hệ VXL nhỏ, rất thích hợp với những thiết kế hướng điều khiển. Tức là trong nó bao gồm: mạch VXL, bộ nhớ chương trình và dữ liệu, bộ đếm, bộ tạo xung, các cổng vào/ra nối tiếp và song song, mạch điều khiển ngắt¼
Thứ hai là, vi điều khiển 8051 cùng với các họ vi điều khiển khác nói chung trong những năm gần đây được phát triển theo các hướng sau:
	Giảm nhỏ dòng tiêu thụ.
	Tăng tốc độ làm việc hay tần số xung nhịp của CPU.
	Giảm điện áp nguồn nuôi.
	Có thể mở rộng nhiều chức năng trên chip, mở rộng cho các thiết kế lớn.
	Những đặc điểm đó dẫn đến đạt được hai tính năng quan trọng là: giảm công suất tiêu thụ và cho phép điều khiển thời gian thực nên về mặt ứng dụng nó rất thích hợp với các thiết kế hướng điều khiển.
Thứ ba là, vi điều khiển thuộc họ MCS-51 được hỗ trợ một tập lệnh phong phú nên cho phép nhiều khả năng mềm dẻo trong vấn đề viết chương trình phần mềm điều khiển.
Cuối cùng là, các chip thuộc họ MCS-51 hiện được sử dụng phổ biến và được coi là chuẩn công nghiệp cho các thiết kế khả dụng.Với sinh viên mới làm quen với VĐK thì 8051 có nhiều tài liệu tham khảo,đồng thời cũng sử dụng đơn giản nhất. Mặt khác, qua việc khảo sát thị trường linh kiện việc có được chip 8051 là dễ dàng nên mở ra khả năng thiết kế thực tế.
	Vì những lý do trên mà việc lựa chọn vi điều khiển AT89C51 của hãng Atmel, đây là vi điều khiển thuộc họ MCS-51.
1.3.4 Kết luận:
Sau khi cân nhắc các phương án đã đưa ra, và khả năng phối hợp giữa các khối, chúng em chọn giải pháp:
- Sử dụng bàn phím ma trận 4x4.
- Khối hiển thị dùng LCD 2x16 HD44780
- Khối mạch xử lí dùng vi điều khiển AT89C51
Chương 2: CHI TIẾT TỪNG KHỐI
2.1 Khối vi xử lý:
2.1.1 Tổ chức ngoại vi:
- Chip: AT89C51
	- Ghép nối màn hình LCD: 16x2
	- Bàn phím ma trận 4x4
Ngoài ra còn:
	- LED báo hiệu chương trình đang chạy
	- Tín hiệu cho phép chạy được xử lý bằng cách dùng một nút ấn Reset hệ thống.
	- Tín hiệu báo động, mở cửa, đóng cửa được đưa ra led 
Sơ đồ khối của hệ thống như sau:
VI XU LY AT89C51
BÀN PHÍM
4 X 4
KHOI HIEN THI
LCD 16 X 2
BÁO ĐỘNG
ĐIỀU KHIỂN CỬA
LED 1
LED 2
LED Lớn
Nhiệm vụ của khối xử lý trung tâm:
Đọc mã phím từ bàn phím để kiểm tra xem phím nào đã được ấn và thực hiện chức năng của phím đó.
Lưu giá trị của các mã để mở khóa.
Lưu các chương trình xử lý phím ấn: mở khóa, đổi mã, báo động…
Lưu chương trình điều khiển LCD.
Lưu chương trình 
2.1.2 Chức năng của các chân của VĐK trung tâm: 
40
Vcc
 XTAL.1
 XTAL.2
 PSEN
 ALE
 EA
 RST
Vss
19
	33pF
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
32 AD7
33 AD6
34 AD5
35 AD4
36 AD3
37 AD2
38 AD1
39 AD0
8
7
6
5
4
3
2
1
28 A15
27 A14
26 A13
25 A12
24 A11
23 A10
22 A9
21 A8
12 MHz
18
29
	33pF
30
31
9
8051
RD
WR
T1
T0
INT1
INT0
TXD
RXD
17
16
15
14
13
12
11
10
P3.7
P3.6
P3.5
P3.4
P3.3
P3.2
P3.1
P3.0
20
-Port 0:dùng để nhận dữ liệu đầu vào của mã bàn phím.
	P0 nối với điện trở kéo lên làm port nhận dữ liệu
P0.0 cột 	1
	P0.1	2	
	P0.2	3
	P0.3	4
P0.4	hàng	1
	P0.5	2
	P0.6	3
	P0.7	4
-Port 3: giao tiếp 4 bit voi lcd
Chân	P3.0	nối với	D4 của lcd
	P3.1	D5
	P3.2	D6
	P3.3	D7
P3.4	
P3.5 	reset
P3.6 	
P3.7	 	enable
	-Port 2:
	P2.6	bit lock
	P2.7	bit alarm
-Chân số 9 nối với mạch reset, hoạt động ở mức High(1).
-Chân số 18,19:nối với bộ dao động thạch anh,tụ 33p để tạo dao động cho vi AT89C51.
XTAL1, XTAL2 là bộ tạo tín hiệu giữ nhịp với tần số được xác định bởi bộ cộng hưởng thạch anh được lắp thêm vào, tần số này xác định tốc độ làm của bộ vi điều khiển. Thông thường các lệnh được thực hiện bằng 1/12 tần số dao động của thạch anh
Chọn thạch anh11.0 MHz 2 
-Chân số 20: Vss nối đất
-Chân số 31: EA Đóng vai trò quyết định xem vi điều khiển làm việc với chương trình bên trong hay bên ngoài. Trong mạch ta nối lên nguồn vì không sử dụng ROM bên ngoài
 -Chân số 40: Vdd nguồn dương( +5V)
Lập trình cho 8051 bằng assembly dịch ra file hex bằng topview simulator
2.2 Khối phím số:
1
2
3
4
5
6
7
8
9
enter
0
set
ß
	Hệ thống sử dụng bàn phím 4x4 có giao diện như sau:
	Col1	 col2	 col3	 col4
Các phím của bàn phím.
Trong đó:
	Phím 0-9 dùng để nhập mã
	Các phím chọn chức năng: 
	Enter :sau khi nhập mã nhấn enter để thực hiện
	ß :xóa ký tự vừa nhập
	Set:thay đổi password
Nguyên lý hoạt động bàn phím:
Ta giải mã bàn phím được tín hiệu có 8 bit
Trong vi điều khiển ta lập trình nạp mã số dạng 8 bit như bàn phím mã hoá được vào lần lượt thanh ghi trong ROM.
 Ta đem so sánh mã bàn phím nhấn với mã được nạp. Để mở rộng ta có thể giải mã bàn phím về dạng phức tạp hơn để tính bảo mật được tốt hơn
Keypad được nối với port 0 sử dụng điện trở kéo lên
P0 nối với điện trở kéo lên làm port nhận dữ liệu
	P0.0 cột 	1
	P0.1	2	
	P0.2	3
	P0.3	4
P0.4	hàng	1
	P0.5	2
	P0.6	3
	P0.7	4
Bảng mã hóa trạng thái bàn phím 
.Phím
Trạng thái khi ấn phím
1
1
0
0
0
0
0
0
1
2
1
0
0
0
0
0
1
0
3
1
0
0
0
0
1
0
0
4
0
1
0
0
0
0
0
1
5
0
1
0
0
0
0
1
0
6
0
1
0
0
0
1
0
0
7
0
0
1
0
0
0
0
1
8
0
0
1
0
0
0
1
0
9
0
0
1
0
0
1
0
0
0
0
0
0
1
0
0
1
0
set
0
0
0
1
1
0
0
0
enter
0
0
0
1
0
0
0
1
ß
0
0
0
1
0
1
0
0
2.3. Khối hiển thị LCD:
Với các ưu điểm như: tiêu thụ dòng thấp, hiển thị được hình ảnh/ký tự linh hoạt tốt hơn nhiều so với LED ,màn hình tinh thể lỏng LCD (Liquid Crystal Display) được sử dụng trong hầu hết các thiết bị điều khiển trong công nghiệp để hiển thị trạng thái của máy móc. Ngày nay với công nghệ phát triển giá thành của LCD cũng giảm nhiều.
Do có rất nhiều chủng loại khác nhau, nên LCD được sử dụng rất rộng rãi. Tất cả các LCD đều được sản xuất theo các chuẩn chung, tích hợp luôn các module điều khiển (cho LCD) nên việc sử dụng nó không mấy phức tạp. Bộ điều khiển LCD cung cấp một tập lệnh dùng để diều khiển LCD.
Trong ứng dụng cụ thể này, do không yêu cầu hiển thị phức tạp nên em chọn loại LCD kiểu ký tự, với 16 ký tự, 2 hàng (16characters x 2lines). LCD sử dụng ma trận chữ 5x8 (font 5x8), module điều khiển là HD44780. Tên của LCD này là DM1602B.
LCD : DM 1602B
	Bảng : Chức năng của từng chân và ghép nối chi tiết LCD- 89C51 :
STT
Ký hiệu
Nối với vi xử lý
Mức logic
Chức năng
1
Vss
0 V (Ground)
2
Vcc
5 V (Supply)
3
Vee
điều khiển độ sáng tối cho LCD
4
RS
P3.5
H/L
H: chọn thanh ghi vào dữ liệu. 
L: chọn thanh ghi cho lênh điều khiển. 
5
R/W
H/L
chọn chế độ đọc viết:
H: cho biết đọc từ LCD vào VXL.
L: cho biết đọc từ VXL vào LCD.
6
E
P3.7
xung L-H-L
tín hiệu cho phép LCD hoạt động.4bit
7
DB0
H/L
8
DB1
H/L
9
DB2
H/L
10
DB3
H/L
11
DB4
P3.0
H/L
12
DB5
P3.1
H/L
13
DB6
P3.2
H/L
14
DB7
P3.3
H/L
15
0 V (Ground)
16
5 V nguồn cấp cho đèn backline.
Điều khiển hoạt động của LCD:
 Hoạt động của LCD được điều khiển thông qua 3 tín hiệu E, RS, RW.
	-Tín hiệu E là tín hiệu cho phép gửi dữ liệu. Để gửi dữ liệu đến LCD, chương trình phải thiết lập E=1, sau đó đặt các trạng thái điều khiển thích hợp lên RS, RW và bus dữ liệu, cuối cùng là đưa E về 0. Hoạt động chuyển đổi từ cao-xuống-thấp cho phép LCD nhận dữ liệu hiện thời trên các đường điều khiển cũng như trên bus dữ liệu và xem đó như là một lệnh.
-Tín hiệu RS là tín hiệu cho phép chọn thanh ghi (Register Select ). Khi RS=0, dữ liệu được coi như là một lệnh hay một chỉ thị đặc biệt (như là xóa màn hình, đặt vị trí con trỏ…). Khi RS=1, dữ liệu được coi là dữ liệu dạng văn bản và sẽ được hiển thị trên màn hình.
-Tín hiệu RW là tín hiệu “Đọc/Ghi”. Khi RW=1, thông tin trên bus dữ liệu được ghi vào LCD. Khi RW=0, chương trình sẽ đọc LCD.
-Bus dữ liệu gồm 4 hoặc 8 đường tùy thuộc vào chế độ hoạt động mà người sử dụng lựa chọn (ở đây chương trình sử dụng bus dữ liệu 4-bít). 
Sơ lược phương pháp lập trinh LCD 4bit:
	Trong chế độ 4-bit, dữ liệu được gửi trong nibbles, đầu tiên chúng ta gửi nibble cao hơn và sau đó thấp hơn nibble. Để kích hoạt các chế độ 4-bit, LCD, chúng ta cần phải làm theo chuỗi các initialization đặc biệt là cho LCD điều khiển mà người dùng đã lựa chọn 4-bit, các chế độ hoạt động. Chúng ta gọi đây là chuỗi đặc biệt như là reset lại LCD. Dưới đây là reset LCD.
 1. Chờ khoảng 20mS
 2. Gửi có giá trị init đầu tiên (0x30)
 3. Chờ khoảng 10mS
 4. Gửi giá trị init thứ hai (0x30)
 5. Chờ khoảng 1mS
 6. Gửi giá trị init thứ ba (0x30)
 7. Chờ đợi các 1mS
 8. Chọn độ rộng bus (0x30 - cho 8-bit và 0x20 cho 4-bit)
 9. Chờ 1mS
	Những cò bận sẽ chỉ có giá trị sau khi reset ở trên. Thông thường chúng ta không sử dụng cò bận trong 4-bit, chế độ như chúng ta phải viết mã đọc cho hai nibbles đến LCD. Thay vào đó, chúng ta chỉ cần đặt đô trễ thường là 300 đến 600uS. Độ trễ này có thể khác nhau tuỳ thuộc vào hình LCD mà bạn đang sử dụng, vì bạn có thể có một tần số thạch anh khác nhau mà trên đó hình LCD điều khiển đang chạy. Vì vậy, nó thực sự phụ thuộc vào hình LCD mô-đun bạn đang sử dụng. Vì vậy, nếu cảm thấy bất kỳ vấn đề chạy các hình LCD, chỉ cần cố gắng tăng cường sự chậm trễ. Điều này thường là các công trình. Đối với tôi về 400uS các công trình hoàn hảo.
	Trong là sơ đồ kết nối LCD trong 4-bit, chế độ, nơi mà chúng ta chỉ cần 6 pins vào một giao diện LCD. D4-D7 là các kết nối dữ liệu pins và enable và registor được lựa chọn để kiểm soát hình LCD pins. Chúng tôi không sử dụng pin Đọc / Ghi (RW) của LCD, bởi vì chúng tôi chỉ được viết trên hình LCD, vì vậy chúng ta đã làm nó cứ vĩnh viễn. Nếu muốn sử dụng nó .. sau đó bạn có thể kết nối nó vào điều khiển của bạn, nhưng sẽ chỉ làm tăng số pin và không thực hiện bất kỳ sự khác biệt lớn. RV1 được sử dụng để kiểm soát độ tương phản LCD. Các dữ liệu không mong muốn LCD pins D0-D3 có nghĩa là được kết nối với đất
	Chúng ta sẽ xem xét các bước sau để gửi dữ liệu / lệnh để hình LCD khi làm việc trong chế độ 4bit 4.Như tôi đã giải thích trong chế độ 4-bit, dữ liệu được gửi nibble của nibble, đầu tiên chúng ta gửi nibble cao hơn và sau đó nibble thấp. Điều này có nghĩa là trong cả hai lệnh và chức năng gửi dữ liệu mà chúng tôi cần phải saperate 4-bit cao và 4-bit thấp.
	Phổ biến các bước sau:
 1. Mask 4-bit thấp
 2. Gửi tới port LCD
 3. send tín hiệu enable
 4. Mask 4-bit cao
 5. Gửi tới port LCD
 6. send tín hiệu enable
LCD : DM 1602B
	:
2.4 Khối báo động:
	Để đơn giản, tín hiệu điều khiển được đưa ra đèn led để chúng ta quan sát. Mở rộng thiết kế khi thời gian nhiều hơn chúng em sẽ mắc rơle điều khiển động cơ....
Khi nhập đúng password thì vi điều khiển cho tín hiệu ra led xanh để mô phỏng cửa mở
Khi người sử dụng nhập mã sai 3 lần thì sẽ kích cho tín hiệu báo động mô phỏng bằng led đỏ
Bit lock nối với p2.6	báo trạng thái cửa
Bit alarm nối với p2.7	báo động bằng đèn hoặc chuông
Chương 3:LƯU ĐỒ VÀ GIẢI THUẬT
3.1 Các ký hiệu trong lưu đồ:
	lcd_port 	equ P3	đặt tên port 3
	en 	equ P3.7	chân enable của lcd
	rs 	equ P3.5	chân reset của lcd
	lock 	equ P2.6	bit quy định đóng hay mở cửa lock
	lock=1 àđóng cửa	lock=0àmở cửa
alarm 	e	qu p2.7 	bit quy định báo động
	LCD_CLR 	equ 01H	;mã lện xóa màn hình lcd
	LCD_LN1 	equ 80H	;mã lệnh chọn dòng 1 lcd
	LCD_LN2 	equ 0C0H	;mã lệnh chọn dòng 2 lcd	
	var1 	equ r2	;biến var thay đổi delay
	temp 	equ r3	;lưu tạm thời dữ liệu cần nhớ
	delay 	equ r4	;delay
	scan 	equ r5	;
	key 	equ 0H	;bit kiểm tra có nhấn hay không
	=1àcó =0àkhông
	newcode 	equ 1h	;bit kiểm tra có tạo pass mới chưa
	=1àcó =0àkhông	
keyval 	equ r6	;ô lưu mã phím khi nhập từ bàn phím
	status 	equ r7	;=true hoặc retry	
	codenum 	equ 30h	; lưu độ dài của pass
	count 	equ 31h	; đếm số ký tự được nhập
	codenum_1 	equ 32h	; dung nhảy giảm đếm ký tự số
	pass đển so sánh copy
	retries 	equ 33H	;lưu số lần nhập sai mã
	input 	equ 40H	;lưu dữ liệu phím nhấn sau khi mã hóa	
	upass 	equ 50H	;lưu pass
	confirm 	equ 60h	;lưu pass kiểm tra chính xác
	ok 	equ 2H	;đúng pass=1	sai=0	;
	TRUE 	equ 1	;true
	RETRY 	equ 2	;retry
keyport 	equ P0	;chon port 1 lam keypad
	col1 	equ P0.0	;cột	1
	col2 	equ P0.1	;	2
	col3 	qu P0.2	;	3
	col4 	equ p0.3	;	4
3.2 Main
Goi Ctc: checkcode
Dec retries
alarm
Retry1
=20s?
Delay250ms
ok=1?
open
LCD “nhap ma”
Nap Sp=70 	Retries=3	codenum =0
Goi ctc get keypad	Xóa key
Khoi tao LCD	 Setb lock =1 setb alarm
Start
Giam retries-1
	s
LCD: “dung ma ,mo khoa”
	d
Lock=0 (cua mo)
LCD ”lan thu nua”
Main
Retry=0?
Ctc Tự đóng cửa
Ctc Get_Input
Gọi Ctc getkey
	d
Key=enter?
LCD “vo hieu hoa”
Status=true?
s	
	d
Newcode=1??
Set Alarm=0
d	s
	d
Goi Ctc: checkcode
Delay1minute
s
	s
ok=1?
Set Alarm=1
s	
LCD “cua da dong”
	d
	d
Set Lock=1 	retry=3
Goi Ctc setupass
Setb newcode=1
3.3 Chương trình con check code:
Ctc check code
Nap codenum1 =codenum
R0=input
R1=upass
Clear is_ok
 Inc r0
Lcd hien so
Nap dl tu @r0 vao A
Nap dl tu @r1 vao B
a=b?
	s
	d
R0 +1
R1 +1
Giam codenum1 -1
Codenum1=0?
	s
set ok=1
Clear ok=0
 ret
	d
3.4 Chương trình con copy code:
Ctc copycode
Nap du lieu tu @r0 vao A
Nap A vao @r1
Nap codenum vao code num1
r0+1
r1+1
giam codenum1 -1
Codenum1=0?
s
ret
	d
3.5 Chương trình con lấy phím sau khi dịch mã phím
Ctc get input
Inc r0
Lcd ”*”
ret
Nap @r0 =0
Nap status= TRUE
Count=0??
Giam count -1
Giam r0
Nap vao @r0 =0
nap lcd “ _”
Ctc get_key
key=1?
Nap r0=40h
Nap count =0
Get_input_1
s
Get_input_2
	d	
Goi Ctc trasnlate
@r0=s?
@r0=e?
Nap keyval vao A
Nap a vao @r0
@r0=x?
	s	s	
	d	d	d	d
Ctc set up pas
	s
Nap status =RETRY
3.6 Chương trình con lấy mã phím từ bàn phím:
Ctc get key
Nap keyval=1
Nap keyport=7fh 
Set key=1
Nap keyval=11
Nap keyport=0efh 
Nap keyval=7
Nap keyport=odfh 
Nap keyval=4
Nap keyport=0bfh 
Read_col
Xoa key
Key_val +0
Key_val +1
Key_val +2
Col1=0?_key
Col1=1?_key
Col2=0?_key
Col2=1?_key
Key_val +3
Col4=0?_key
Col3=0?_key
Col3=1?_key
	s	
	d	d
	s
	s
	d	d
	s
	s
	d	d
	s
Col4=1?_key
	d	s	
	d
	s
ret
3.7 Chương trình con set up password:
Ctc set_uppasss
LCD “nhap lai ma”
 LCD “nhap ma cu”
Confirm code
 ctc Get input
Ctc Get input
Status=true?
Status=true?
	S	s
	d	d
Codenum=count?
Goi Ctc Check code
	s
ok=1?
	s
	d
R1=input
R0=confirm
	d
LCD “nhap lai”
 LCD “nhap ma moi” 
Ctc Check_code1
Ctc Get input
Status=true?
s
ok=1?
	s
Nap codenum1=codenum
	d
	d
R0=cofirm
R1=upass
R0=input
R1=confirm
Copy code
LCD “thanh cong”
 ret
Ctc Copy code
3.8 Chương trình con dịch mã phím:
Mov keyval,a
nap keyval=’x’
nap keyval=’s’
nap keyval=’0’
nap keyval=’e’
A=14?_key
A=13?_key
A=12?_key
A=11?_key
Nap keyval vao A 
Ctc translate
	d
s
s
	d
s
	d
s
ret
Chương 4:	KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
CỦA ĐỒ ÁN
Trên cơ sở lí thuyết đã học, chúng em đã thiết kế hệ thống khóa với độ tin cậy có thể chấp nhận được dựa vào chức năng quản lí chương trình bằng password trong máy tính với quy mô đơn giản hơn. Để ứng dụng vào thực tế, hệ thống nàycòn cần được chỉnh sửa để tăng tính ổn định và kết nối với bộ phận cơ khí đóng mở cửa.
	 Hiện nay, những hệ thống kiểm soát ra vào theo mã đã sử dụng những hình thức quản lí tiên tiến hơn như: thẻ từ, vân tay... tuy nhiên chi phí còn rất cao. Một hệ thống quản lí như chúng em tập thiết kế vẫn còn có những ứng dụng nhất định.
	HƯỚNG PHÁT TRIỂN:	
	Mạch còn có 1 số khuyết điểm như :
	Khi reset lại thì pass đã lưu không còn nữa,sau khi reset phải cài lại password.khi mất nguồn cung cấp thì mạch cũng bị reset.Do đó tính bảo mật không cao
	Hướng giải quyết :sử dụng vi điều khiển AT89C2051 có sẵn 2kb eprom bên trong.
Có thể dùng để lưu lại password của người sử dụng.tránh tình trạng mất pass khi mất nguồn.
	Do chỉ báo động bằng tín hiệu đèn hoặc chuông nên khi người dùng ở cách xa nơi báo động thì không hay biết gì về việc có người dò pass hay không. Vì vậy hướng phát triển của đồ án là thông báo cho chủ nhân khi có người nhập pass sai 3 lần để kịp thời xử lý hoặc thay đổi password.việc thông báo từ xa có thể sử dụng sóng radio hay thông báo qua điện thoại, có thể gởi tin nhắn chẳng hạn...
	Hệ thống khóa số sử dụng LCD với hướng dẫn bằng tiếng Việt không dấu,không thân thiện với người dùng lắm. Ta có thể sử dụng CGRAM để vẽ các ký tự tiếng Việt có dấu giúp người Việt dễ sử dụng hơn.
	Mặt khác với 10 chữ số từ 0à9 thì mức độ bảo mật chưa cao lắm. Ta có thể sử dụng các ký tự latin để làm password để tăng tính bảo mật cho hệ thống.
	Do là thiết kế đầu tiên nên không thể tránh khỏi sai sót nhất định Chúng em xin chân thành cảm ơn sự giúp đỡ và hướng dẫn của các thầy giáo và các bạn trong thời gian vừa qua. Mong rằng sẽ nhận được nhiều đóng góp ý kiến để bản thiết kế này và những bản thiết kế sau ngày càng được hoàn thiện hơn. 
Phần C
PHỤ LỤC
Chương 1: CODE
	MÃ ĐƯỢC DỊCH BẰNG CHƯƠNG TRÌNH TOPVIEW SIMULATOR
$mod51
	lcd_port equ P3	;chon port 3 ra lcd
	en equ P3.7	;enable p3.7
	rs equ P3.5	;reset p3.5
	lock equ P2.6	;
	alarm equ p2.7
	LCD_CLR equ 01H	;
	LCD_LN1 equ 80H	;dong` 1
	LCD_LN2 equ 0C0H	;dong 2
	var1 equ r2	;
	temp equ r3	;
	delay equ r4	;delay
	scan equ r5	;
	key equ 0H	;co nhan hay k nhan
	newcode equ 1h	;ktra co code moi k
	keyval equ r6	;ma phim
	status equ r7	;ma phim chuc nang	
	codenum equ 30h	;do dai ma
	count equ 31h	;den so kt nhap
	codenum_1 equ 32h	;nhay giam ma	
	retries equ 33H	;
	input equ 40H	;input luu cac phim nhan
	upass equ 50H	;luu pass
	confirm equ 60h	;luu de nhap lai
	ok equ 2H	;dung password =1
	;
	TRUE equ 1	;phim chuc nang
	RETRY equ 2	;	;
	keyport equ P0	;chon port 1 lam keypad
	col1 equ P0.0
	col2 equ P0.1
	col3 equ P0.2
	col4 equ p0.3
	org 0H
	acall lcd_init	;khoi tao lcd
	acall keypad_init	;goi khoi tao keypad
	clr key	;xoa bit kiem tra phim nhan
	mov sp,#70H	;cho sp = 60h
	mov retries,#3	;retries=3
	mov codenum,#0	;so luong code
	setb lock
	setb alarm	;nap retries = 3
main:
	mov a,#LCD_CLR	;xoa lcd
	acall lcd_cmd	;goi lenh
	mov dptr,#str_enter	;tro den chuoi enter
	acall lcd_str	;nap chuoi
	mov a,#LCD_LN2	;chon dong` 2
	acall lcd_cmd	;goi lenh	
	acall get_input	;lay du lieu key chuc nang
	cjne status,#TRUE,main	;enter
	jb newcode,open	;co pass moi thi nhay den open
;chuong trinh cai dat pass ban dau	
	mov dptr,#chk_0	;tro den pass mac dinh 000000
	mov count,#6	;so kt nhap=6`
	acall chk	;check key
	jnb ok,main	;sai pass thi nhay main2
	acall set_upass_l4	;dung thi setup pass	
	sjmp main	;	;
;*******************************
;chuong trinh con mo khoa
open:
	mov codenum_1,codenum
	acall chk_newcode
	jnb ok, retry1	;ktra dung pass
	mov retries,#3	;
	clr lock	;mo khoa'
	mov a,#LCD_CLR	;xoa man hinh
	acall lcd_cmd	;	
	mov dptr,#str_unlock_1	;tro den chuoi 'lock is '
	acall lcd_str	
	mov a,#LCD_LN2	;dong 2
	acall lcd_cmd	
	mov dptr,#str_unlock_2	;'lock is deactive'
	acall lcd_str	;
	acall delay_1sec	;1s
	mov a,#LCD_CLR	;
	acall lcd_cmd	
	mov dptr,#str_unlock_3	;'press # key to'
	acall lcd_str	;
	mov a,#LCD_LN2
	acall lcd_cmd
	mov dptr,#str_unlock_4	;'lock again'
	acall lcd_str
;*****************************
;ctc tu dong dong cua lai	
close:
	push 00h
	mov r0,#80
close_1:
	;acall get_input
	;cjne status,#true,close_2	
	acall get_key
	cjne keyval,#14,close_2
	setb lock	;khoa
	ajmp close_3	;nhay close_3
close_2:
	mov delay,#250	;neu k nhan khoa thi 20s tu dong khoa
	acall delayms	;
	djnz r0,close_1
	pop 00h
	setb lock
close_3:	
	mov a,#LCD_CLR	;xoa
	acall lcd_cmd	;'lda khoa lai'
	mov dptr,#str_locked	
	acall lcd_str
	acall delay_1sec
	ajmp main
;sai pass retries
retry1:
	mov a,#LCD_CLR	;trat pass thi nhay den day
	acall lcd_cmd	;	;
	mov a,#2FH	;	
	add a,retries	; 
	acall lcd_dat
	mov dptr,#str_retry
	acall lcd_str
	acall delay_1sec
	djnz retries,retry2
	sjmp alarm1
retry2:
	ajmp main
;*********************************
;ctc bao dong
alarm1:
	mov a,#LCD_CLR
	acall lcd_cmd
	mov dptr,#str_blocked
	acall lcd_str
	clr alarm	;bao dong
	acall delay_1m	;1 phut
	setb alarm	
	mov retries,#3	;ngung bai dong va tro lai
	ajmp main
;******************************
;doan data cac chuoi can hien thi
str_enter:
db 'nhap ma',0H
str_retry:
db ' lan thu nua', 0H
str_blocked:
db 'vo hieu hoa',0H
str_unlock_1:
db 'dung ma',0H
str_unlock_2:
db 'da mo khoa ', 0H
str_unlock_3:
db 'nhan cancel de', 0H
str_unlock_4:
db 'khoa lai', 0H
str_locked:
db 'da khoa lai', 0H
;*******************************
;chuong trinh hien thi len lcd
lcd_reset:
	mov lcd_port, #0FFH
	mov delay,#20
	acall delayms
	mov lcd_port, #83H
	mov lcd_port, #03H
	mov delay,#15
	acall delayms
	mov lcd_port, #83H
	mov lcd_port, #03H
	mov delay,#5
	acall delayms
	mov lcd_port, #83H
	mov lcd_port, #03H
	mov delay,#5
	acall delayms
	mov lcd_port, #82H
	mov lcd_port, #02H
	mov delay,#5
	acall delayms
	ret
;******************************
;khoi tao lcd
lcd_init:
	acall lcd_reset
	mov a,#28H	;4bit lcd
	acall lcd_cmd
	mov a,#0CH	;tat tro 
	acall lcd_cmd
	mov a,#06H	;tu dong tang tro icremant
	acall lcd_cmd
	mov a,#80H
	acall lcd_cmd
	ret
;ky tu len lcd
lcd_dat:	;goi ky tu len lcd 
	mov temp,a	;nho a
	swap a	;lay nibble cao
	anl a,#0FH	; mask
	add a,#0A0H	
	mov lcd_port,a
	nop
	clr en
	mov a,temp	;tiep
	anl a,#0FH	;
	add a,#0A0H
	mov lcd_port,a
	nop
	clr en
	mov delay,#10
	acall delayms
	ret
lcd_cmd:
	mov temp,a
	swap a
	anl a,#0FH
	add a,#80H
	mov lcd_port,a
	anl a,#0FH
	mov lcd_port,a
	mov a,temp
	anl a,#0FH
	add a,#80H
	mov lcd_port,a
	anl a,#0FH
	mov lcd_port,a
	mov delay,#10
	acall delayms
	ret
;chuoi len lcd
lcd_str:
	clr a
	movc a,@a+dptr
	jz lcd_str_end
	inc dptr
	acall lcd_dat
	sjmp lcd_str
lcd_str_end:
	ret
;*********************************
keypad_init:
 mov keyport,#0FH ;khoi tao phim
 ret
get_key:
 mov keyval,#1 ;cho key val=1
 mov keyport,#7FH ;hang1 thap
 acall read_col ;doc cot
 jb key, done ;kiem tra co nhan
 mov keyval,#4 ;hang 2
 mov keyport,#0BFH ;hang 2 thap
 acall read_col ;doc cot
 jb key, done ;kt co nhan
 mov keyval,#7 
 mov keyport,#0DFH 
 acall read_col 
 jb key, done 
 mov keyval,#11 
 mov keyport,#0EFH 
 acall read_col 
done:
 ret
read_col: ;doc cot
 clr key ;xoa co nhan
 jb col1, nextcol ;kt nut dau tien
 jnb col1,$ ;dung thi cho den khi tha phm 
 setb key ;set co
 ret
nextcol: ;cot2
 jb col2, nextcol1 ;nut 2
 jnb col2,$ ;
 inc keyval 
 setb key ;
 ret
nextcol1: 
 jb col3, nextcol2 
 jnb col3,$ 
 inc keyval 
 inc keyval
 setb key 
 ret
nextcol2: 
 jb col4, exit1 
 jnb col4,$ 
 inc keyval 
 inc keyval
 inc keyval
 setb key 	 ;
 ret
exit1: 
 clr key 	 	
 ret
;**************************
;dich ma key
translate:
	mov a,keyval	;keyval -> a
	cjne a,#11,jmp1	;ko =10 -> nhay
	mov keyval,#'e'	;=10 thi nap keyval='x'
	ret
jmp1:
	cjne a,#12,jmp2	;ko =11->nhay
	mov keyval,#'0'	;nap keyval 0
	ret
jmp2:
	cjne a,#13,jmp3	;ko=12-> nhay
	mov keyval,#'s'	;keyval=e
	ret
jmp3:
	cjne a,#14,jmp4
	mov keyval,#'x'	;set pass
	ret
jmp4:
	add a,#'0'	;conlai +0->giu nguyen
	mov keyval,a
	ret
;*************************
;chuyen ma key thanh phim chuc nang
get_input:
	mov r0,#input	;chon r0=40h
	mov count,#0	;dem=0
get_input_1:	
	acall get_key	;lay keyval
	jnb key,get_input_1	;ko nhan->nhay lai
	acall translate	;co nhan->dich keyval
	mov a, keyval	;keyval=a
	mov @r0,a	;nap keyval->40h
	cjne @r0,#'x',chk_e	;keyval # x ->kiem tra enter'e'
	mov a,count	;dem = a,a=0
	jnz get_input_back	;kiem tra dem khac 0->get_inputl1
	mov status,#RETRY	;=0 thi status = exit
	ret
;chuong trinh cho phim cacel xoa 1kt
get_input_back:	;count khac 0 so phim nhan
	dec count	;giam count-1
	mov @r0,#0	;@r0=0	
	dec r0	;giam r0
	mov a,#LCD_LN2	;chon toa do hien thi
	add a,count	;a=count	
	acall lcd_cmd	;goi lcd
	mov a,#' '	;goi ' '
	acall lcd_dat	;
	mov a,#LCD_LN2
	add a,count
	acall lcd_cmd
	sjmp get_input_1	;tro ve 
;******************************
chk_e:	;kiem tr nut nhan e
	cjne @r0,#'e',chk_s
	mov @r0,#0	;ko phai e thi nhay chek_key
	mov status,#TRUE	;nap status =true
	ret
chk_s:
	cjne @r0,#'s',get_input_2	
	mov @r0,#0	
	acall set_upass_l1	;goi setup password
	ret
get_input_2:	;
	inc count	;tang dem
	mov a,@r0	;
	acall get_input_3	;
	inc r0	;
	sjmp get_input_1	;
;*********************************
;hien dau* len lcd
get_input_3:
	acall lcd_dat	;
	mov a,#10h	;dich trai con tro
	acall lcd_cmd	
	mov a,#250	
	acall delayms	
	mov a,#'*'	;hien *
	acall lcd_dat
	ret
;******************************
;so sanh pass co san va pass vua nhap
chk:
	mov r0,#input	;input vao r0
chk_l2:
	clr a	;xoa a
	movc a,@a+dptr	;nap du lieu tu dptr vao a
	mov b,@r0	;nap du lieu phim vao b
	cjne a,b,chk_l1	;so sanh a b
	inc dptr	;neu= thi tang dptr
	inc r0	;tang r0
	djnz count,chk_l2	;giam count
	setb ok	;mo ok
	ret
chk_l1:
	clr ok	;trat-> thoi
	ret
;*************************************
;ctc so sanh voi pass moi
chk_newcode: 
	mov r0,#input	;phim->r0
	mov r1,#upass
chk_newcode_l1:
	mov a,count
	cjne a,codenum,chk_newcode_l2
	mov a,@r0	;ma phim va a
	mov b,@r1	;50h->b
	cjne a,b,chk_newcode_l2	;=thi tiep
	inc r0	;tang r1,r0
	inc r1
	djnz codenum_1,chk_newcode_l1;6 key thi set ok
	setb ok	;
	ret	;
chk_newcode_l2:	
	clr ok	;
	ret
;*********************************
chk_0:
db	'000000',0h
;*********************************
;chuong trinh con set up pass
set_upass_l1:
	mov a,#LCD_CLR	;xoa lcd
	acall lcd_cmd	;
	mov dptr,#str_oldcode	;chuoi old code
	acall lcd_str
	mov a,#LCD_LN2	;dong 2
	acall lcd_cmd	;	;	;	
	acall get_input	;lay phim
	cjne status,#TRUE,set_upass_l2;	;
	mov codenum_1,codenum	;nap do dai code
	acall chk_newcode	;check pass
	jnb ok,set_upass_l2	;dung thi tiep,ko thi thoi
;******************************
set_upass_l4:
	mov a,#LCD_CLR	;chuoi "enter new code"
	acall lcd_cmd
	mov dptr,#str_new
	acall lcd_str
	mov a,#LCD_LN2
	acall lcd_cmd
	acall get_input	
	cjne status,#TRUE, set_upass_l2
	mov codenum,count	;nap do dai code	
	mov r0,#input	;phim->r0
	mov r1,#confirm
	mov codenum_1,codenum	;
	acall copy_code	;nap vao confirm
confirm1:
	mov a,#LCD_CLR	;chuoi "confirm code"
	acall lcd_cmd
	mov dptr,#str_confirm
	acall lcd_str
	mov a,#LCD_LN2
	acall lcd_cmd
	acall get_input
	cjne status,#TRUE,set_upass_l2
	mov a,count	;bang do dai thi tiep
	cjne a,codenum,retype	;ko bang thi thoat
	mov r0,#input	
	mov r1,#confirm
	mov codenum_1,codenum	;copy input vao confirm	
	acall chk_newcode_l1	;so sanh
	jnb ok,retype	;dung thi tiep,ko thi retype
	mov a,#LCD_CLR	;"save"
	acall lcd_cmd
	mov dptr,#str_saved_1
	acall lcd_str
	mov a,#LCD_LN2
	acall lcd_cmd
	mov dptr,#str_saved_2
	acall lcd_str
	acall delay_1sec
	mov codenum_1,codenum	;copy confirm vao upass
	mov r0,#confirm	;phim->r0
	mov r1,#upass
	acall copy_code
	mov retries,#3	;nap lai retries
	setb newcode	;nap bit newcode
	clr ok	;xoa ok
	ajmp main	;
set_upass_l2:
	ret
retype:
	mov a,#LCD_CLR	;
	acall lcd_cmd	
	mov dptr,#str_match	
	acall lcd_str	;
	mov a,#LCD_LN2
	acall lcd_cmd
	mov dptr,#str_retype	
	acall lcd_str
	acall delay_1sec
	;acall delay_1sec
	acall set_upass_l4
	ret
;*********************************
str_new:
db 'nhap ma moi', 0h
str_saved_1:
db 'thay doi ma',0h
str_saved_2:
db 'thanh cong', 0h
str_oldcode:
db 'nhap ma cu' ,0h
str_confirm:
db 'nhap lai ma ' ,0h
str_match:
db 'khong khop',0h
str_retype:
db 'nhap lai ma',0h
;*********************************	;
copy_code:
	mov a,@r0
	mov @r1,a
	inc r0
	inc r1
	djnz codenum_1,copy_code
	ret
;*********************************
delay_1sec:
	mov delay,#250	
	acall delayms
	mov delay,#250
	acall delayms
	mov delay,#250
	acall delayms
	mov delay,#250
	acall delayms
	ret
;******************************
delayms:
	mov var1,#230
d:
	nop
	nop
	djnz var1,d
	djnz delay,delayms
	ret
;*********************************
delay_1m:
	push 00h
	mov r0,#60
dd:
	acall delay_1sec
	djnz r0,dd
	pop 00h
	ret
end
Sơ đồ mạch mô phỏng bằng proteus
Sơ đồ mạch nguyên lý (vẽ bằng orcad)
Mạch in
Chương 2 : Tài liệu tham khảo
+ Phần mềm sử dụng :
- Lập trình dịch file ASM àHex topview simulator
- Mô phỏng : Proteus 7.4 Professional.
- Vẽ mạch nguyên lý và mạch in : Orcad
+ Tài liệu tham khảo :
	Giáo trình VXL 	Phạm Quang Trí
	Các tài liệu khác ...