Mặc dù được sự chỉ bảo tận tình của thầy giáo hướng dẫn nhưng do kiến thức còn nhiều hạn chế cộng với thời gian ngắn ngủi nên đồ án của chúng còn nhiều điểm chưa phù hợp với thực tế. Qua dồ án này chúng đã rút ra được nhiều kinh nghiệm cho bản thân.
Đây là một đề tài rất có ứng dụng trong thực tế nên chúng em sẽ cố gắng để hoàn thiện đề tài,và phù hợp với nhu cầu của thực tế.
                
              
                                            
                                
            
 
            
                 72 trang
72 trang | 
Chia sẻ: lylyngoc | Lượt xem: 2652 | Lượt tải: 1 
              
            Bạn đang xem trước 20 trang tài liệu Đồ án Thiết kế khóa số dùng ram ngoài, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Đồ án: thiết kế khóa số dùng ram ngoàiMỤC LỤC
PHẦN I: NỘI DUNG
SƠ ĐỒ NGUYÊN LÝ
Khối vi điều khiển
8051
Khối báo động
Khối nguồn
Khối mở cửa
Khối hiển thị
Khối RAM
Sơ đồ khối các khối chức năng
Sơ đồ nguyên lý các khối chức năng
2. HOẠT ĐỘNG
- Khi mới cấp nguồn password mặc định là 111111 (do người lập trình cung cấp,password chỉ dùng 6 số.
- Nếu không dùng password do người lập trình cung cấp thì ta thay đổi password bằng cách: Nhấn phím CHANGE ðnhập password mặc định(hay password củ) ð nhấn phím Yes ð nhập password mới (gồm 6 số) ð nhấn phím Yes.
 - Muốn mở : nhập password ð nhấn phím OPEN thì khóa sẽ mở.
- Muốn khóa : nhấn phím CLOSE.
- Trong quá trình thay đổi password hay mở khóa nếu muốn thoát ra thì nhấn phím START.
3. GIỚI THIỆU VỀ CÁC KHỐI VÀ CÁC IC TRONG SƠ ĐỒ NGUYÊN LÝ
Mạch điện gồm có:
- Khối nguồn
- Vi điều khiển AT89V51 
- Ram CY6264 và IC 74LS373
- Một bàn phím ma trận 4 x 4
- Khối hiển thị là mội LCD 16 characters x 2 Line
- Khối mở khóa
- Khối báo động.
3.1. Khối nguồn
Hình 3.1: Sơ đồ nguyên lý của khối nguồn.
Bao gồm:
Cầu diode để biến điện AC thành DC
Tụ 1000 uF, 470 uF và tụ gốm 104 lọc nguồn
IC ổn áp 7805, 7812 để tạo ra nguồn điện áp 5v, 12v cung cấp cho vi xử lý.
3.2. Vi điều khiển AT89V51
	Là một chíp AT89V51 thuộc họ vi điều khiển 8051 có nhiện vụ điều khiển ra lệnh cho khối hiển thị (LCD) thông qua các phím nhấn của người sử dụng.
3.2.1. Một số nét đặc trưng
Tương thích với sản phẩm MCS-51
Bộ nhớ chương trình bên trong: 4KB (ROM)
Bộ nhớ dữ liệu bên trong: 128 KB (RAM)
Port xuất nhập (I/O port) :32
2 bộ định thời 16 bit
Ngắt :6
Nguồn cấp :Vcc =5V
3 vị trí khoá bộ nhớ chương trình.
Mạch giao tiếp nối tiếp.
Hoạt động tĩnh: từ 0 Hz đến 24 MHz
Chạy không nguồn thấp và chế độ giảm nguồn.
Số chân IC :40
3.2.2. Sơ đồ chân và chức năng các chân của vi điều khiển AT89V51
3.2.2.1. Sơ đồ chân:
Hình 3.1: Sơ đồ nguyên lý của khối nguồn.
Hình 3.2.2.1: Sơ đồ chân của vi điều khiển 8051
3.2.2.2. Chức năng:
Vcc: nguồn cấp (chân số 40)
GND: Nối đất (chân số 20 )
Port 0:
Port 0 (P0.0 – P0.7)  có số chân từ 32- 39
Port 0 là port xuất nhập 8bit 2 chiều. Port 0 được định hình làm bus địa chỉ (byte thấp) và làm bus dữ liệu đa hợp trong khi truy xuất bộ nhớ dữ liệu ngoài và bộ nhớ chương trình ngoài. Port 0 nhận các byte mã trong khi lập trình cho Flash và xuất các byte mã trong khi kiểm tra chương trình.
Port 1 :
Port 1 (P1.0 – P1.7) có số chân từ 1 – 8.
Port 1 là một port xuất nhập 8bit có các điện trở kéo lên bên trong.khi các logic 1 được đặt lên các chân của port 1, các chân này được kéo lên mức cao bởi các điện trở kéo lên bên trong và có thể được sử dụng như là các ngõ vào. Khi thực hiện là các port nhập, các chân của port 1 được kéo xuống mức thấp do tác động bên ngoài sẽ cấp dòng cho các điện trở kéo lên bên trong.
Port 2 : 
Port 2 (P2.0 – P2.7) có số chân từ 21 -28
Port 2 là port xuất nhập 8bit 2 chiều có các điện trở kéo lên bên trong. Khi các logic 1 được đặt lên các chân của port 2, các chân này được sử dụng như là các ngõ vào. Khi thực hiện chức năng port nhập, các chân port 2 được kéo xuống mức thấp do tác động bên ngoài sẽ cấp dòng do có các điện trở kéo lên bên trong. Port 2 tạo ra byte cao của bus địa chỉ trong thời gian tìm nạp lệnh từ bộ nhớ chương trình ngoài và trong thời gian truy xuất bộ nhớ dữ liệu ngoài sử dụng các địa chỉ 16 bit.
Port 3 :
Port 3 (P3.0 - P3.7) có số chân từ 10 – 17
Port 3 là port xuất nhập 8 bit 2 chiều có các điện trở kéo lên bên trong. Khi các logic 1 được đặt lên các chân của port 3 các chân này được đưa lê mức cao bởi các điện trở kéo lên bên trong và có thể được sử dụng như là các ngõ vào. Khi làm chức năng port nhập, các chân port 3 được kéo xuống mức thấp do tác động bên ngoài cấp dòng do có các điện trở kéo lên bên trong. Port 3 còn được sử dụng làm các chức năng khác của AT89C51.
Chức năng của các chân được mô tả qua bảng sau :
Bit
Tên
Địa chỉ bit
Chức năng
P3.0
RxD
B0H
Chân nhận dữ liệu của port nối tiếp
P3.1
TxD
B1H
Chân phát dữ liệu của port nối tiếp
P3.2
INTO\
B2H
Ngõ vào ngắt ngoài 0
P3.3
INT1\
B3H
Ngõ vào ngắt ngoài 1
P3.4
T0
B4H
Ngõ vào của bộ định thời/đếm 0
P3.5
T1
B5H
Ngõ vào của bộ định thời/đếm 1
P3.6
WR\
B6H
Điều khiển ghi vào RAM ngoài
P3.7
RD\
B7H
Điều khiển đọc từ RAM ngoài
RST : Thiết lập lại ( chân 9). Mức cao trên chân này trong 2 chu kì máy trong khi bộ dao động đang hoạt động sẽ Reset AT89V51.
Mạch reset
Mạch Reset tự động khi khởi động máy.
Ở đây chúng ta thực hiện Reset bằng cách nối chân 9 của 8951 với nguồn 5V.
Chân ALE  (Address Latch Enable) /: chân số 3
Là một xung ngõ ra cho phép chốt địa chỉ, cho phép chốt byte thấp của địa chỉ trong thời gian truy xuất bộ nhớ ngoài. Chân này cũng được dùng làm ngõ vào xung lập trình () trong thời gian lập trình cho Flash.
	Khi hoạt động bình thường, xung của ngõ ra ALE luôn luôn có tần số bằng 1/6 tần số của mạchdao động trên chip, có thể được sử dụng cho các mục đích định thời từ bên ngoài và tạo xung Clock. Tuy nhiên cần lưu ý là một xung ALE sẽ bị bỏ qua trong mỗi chu kì truy xuất của bộ nhớ dữ liệu ngoài. Khi cần hoạt động cho phép chốt byte thấp của địa chỉ sẽ được vô hiệu hoá bằng cách set bit 0 của thanh ghi chức năng đặc biệt (SFR) có địa chỉ byte là 8EH. Khi bit này được set, ALE chỉ tích cực trong thời gian thực hiện lệnh MOVX hoặc MOVC. Ngược lại chân này sẽ được đưa lên mức cao. Việc set bit không cho phép hoạt động chốt byte thấp của địa chỉ sẽ không có tác dụng nếu bộ điều khiển đang ở chế độ thực thi chương trình ngoài.
Chân (Program Store Enable):cho phép đọc bộ nhớ chương trình, chân số 29
Khi 8951 thực thi mã từ bộ nhớ chương trình ngoài, được hoạt động 2 lần trong mỗi chu kỳ máy ngoại trừ hoạt của được bỏ qua trong mỗi bộ nhớ dữ liệu ngoài.
Chân/ Vpp (External Access): truy xuất ngoài , chân số 31
 phải đươc nối với GND cho phép xuất mã từ vị trí bộ nhớ chương trình ngoài bắt đầu tại 0000H đến FFFFH.
Chú ý: 	
Nếu khoá bit 1 được lập trình, sẽ được chốt bên trong lúc Reset.
 nối Vcc để thực hiện chương trình bên trong.
Chân này nhận điện áp cho phép lập trình là 12V (Vpp) trong khi lập trình Flash
Chân XTAL 1 (Crysral), chân 18
Ngõ vào mạch khuếch đại đảo của mạch dao động và ngõ vào mạch tạo xung Clock bên trong chip
Chân XTAL 2(chân 19)
Ngõ ra mạch khuếch đại đảo của mạch dao động.
Để tạo dao động cho vi điều khiển AT89V51 hoạt động, chúng em chọn mạch dao động như hình vẽ sau với các giá trị của linh kiện: C1= C2=33pF,thạch anh dao động có tần số 12MHz
Hình 3.2.2.2: mạch tạo dao động cho vi điều khiển
Cách mắc của mạch dao động
 3.3. Khối bàn phím
Gồm 1 bàn phím ma trận 4 dòng và 4 cột, A, B, C, D : các hàng của ma trận phím, 1 - 4: các cột của ma trận phím.
	Để điều khiển bàn phím ma trận ta sử dụng phương quét phím. Để điều khiển quét phím thì phải xuất dữ dữ liệu 4 bit ( trong đó có 1 bit ở mức logic thấp và 3 bit còn lại ở mức logic cao) ra các cột của ma trận phím vào để kiểm tra xem có phím nào được nhấn hay không. Nếu có phím nhấn thì trong 4 bít đọc vào sẽ có 1 bit ở mức logic thấp và dựa trên cơ sở đó để thiết lập ma trận phím. Nếu không có phím nhấn thì 4 bit đọc vào đều ở mức cao,khi đó ta chuyển mức logic thấp sang cột kế tiếp để dò tìm phím khác.
Ứng dụng: 
Thí nghiệm phương pháp kết nối bàn phím được thiết kế theo kiểu ma trận với vi điều khiển.
Thí nghiệm ứng dụng điều khiển thiết bị bằng bàn phím.
Thí nghiệm các phương pháp quét phím và nhận dạng phím nhấn.
3.4. Khối Ram ngoài.
Khối Ram ngoài dùng để lưu password, gồm IC chốt 74LS373 và Ram 6264 dung lượng 64k. 
Sơ đồ chân 74LS373 và CY6264 
3.4.1. 74LS373
H:	tích cực mức cao
L:	tích cực mức thấp
X:	không xác định
Q0:	The Level of the output befor steady-state input conditions were	established.
Z:	High Impedance
3.4.2. CY6264
Trong mạch này ta dùng Ram CY6264 chỉ để lưu password nên cần dung lượng ít,ta chỉ dùng 8 đường địa chỉ từ A0 đến A7, A8 đến A12 nối xuống 0V
Tức là ta chỉ sử dụng 256 byte của Ram có địa chỉ từ 00H đến FFH.
Chức năng các chân:
A0 …. A7: các chân địa chỉ ( Address )
D0…..A7: các chân dữ liệu ( data )
OE\ ( Output Enable ): ngõ vào cho phép xuất dữ liệu
WR\ ( Write ): ngõ vào cho phép ghi dữ liệu.
CS\ ( chip select ): ngõ vào cho phép RAM hoạt động.
3.5. Khối hiển thị
Khối này sử dụng một LCD để hiển thị các thông tin khi sử dụng khóa và được điều khiển bởi khối vi điều khiển.
Thông số của LCD :
+ Kích thước hiển thị : 16 ký tự x 2 dòng.
+ Màu hiển thị: đen/trắng
+ Chế độ giao tiếp : 8 bít và 4 bít
+ Cỡ chữ hiển thị : 5x7 hoặc 5x10
Bảng mô tả chức năng các chân của các modul LCD ký tự
Số
chân
Tên
Chức năng
Mức 
logic
I/O
Mô tả
1
Vss
Nguồn cấp cho LCD
-
-
GND
2
Vdd
Nguồn cấp cho LCD
-
-
+5V
3
Vee
Chỉnh độ tương phản
-
-
0 - Vdd
4
RS
Điều khiển hoạt động của LCD
0
I
D0 - D7 đóng vai trò là ngõ vào lệnh
1
I
D0 - D7 đóng vai trò là ngõ vào dữ liệu
5
R/W
0
I
Ghi thông tin (từ bộ điều khiển đến LCD)
1
I
Đọc thông tin (từ LCD đến bộ điều khiển)
6
E
0
I
Cấm truy xuất LCD
1
I
LCD hoạt động bình thường
Từ 1
xuống
0
I
Các dữ liệu/Lệnh được truyền tới LCD
7
D0
Dữ liệu / Lệnh
0/1
I/O
Bit 0 LSB
8
D1
0/1
I/O
Bit 1
9
D2
0/1
I/O
Bit 2
10
D3
0/1
I/O
Bit 3
11
D4
0/1
I/O
Bit 4
12
D5
0/1
I/O
Bit 5
13
D6
0/1
I/O
Bit 6
14
D7
0/1
I/O
Bit 7 MSB
15
A
Nguồn cung cấp cho LED nền
-
-
V (+)
16
K
Nguồn cung cấp cho LED nền
-
-
0 V
3.6. Khối đóng mở khóa
Tín hiệu mở khóa được điều khiển ở mức logic cao. Khi mở khóa thì chân p3.4 ở mức 1 điều khiển transistor dẫn, có dòng qua relay.
Sơ đồ khối của khối mở khóa
Khi đó, relay chuyển sang tiếp điểm thường hở, làm ngắt nguồn 12v vào nam châm điện. Làm lực từ của nam châm điện bị mất.
3.7. Khối báo hiệu
	Là mạch loa, khi bạn nhập password sai 3 lần thì thì mạch phát ra âm thanh và sau 1 khoảng thời gian( do người lập trình cài đạt đặt) mạch sẽ dừng phát.
4. Chương trình điều khiển
4.1. Lưu đồ giải thuật
START
TEST RAM=0
PROG2
PROG1
Đúng
Sai
Hình 1: giải thuật chương trình chính
Hình 2:PROG1
HIEN THI LCD
NẠP PASS MẶC ĐỊNH
PROG2
CHAGE_PASS
NHAP_PASS
OPEN
Hủy
Đồng ý
 Sơ đồ giải thuật chương trình PROG1
không
không
PROG2
Nhấn
Key start
Key change
Key Ok
Nhấn
 Change
Nhấn
Kiểm tra
 Display
Hiển thị dòng chữ chạy 
Nhập Password 6 Số:
 Quet_phim:
Quet_phim_Func:
Key Open
 Key Close
 Open
Key No
Nhấn
Nhấn
không
không
không
không
Hình 3: Sơ đồ giải thuật chương trình PROG2
Phím close
 Open
So sanh pass ram
 Correct
 Open the Safe
 Welcome
Relay đóng
 Quet_phim
Begin
 Tăng R6
R6 = 3
Pass_ sai:
Thông báo
Báo động
sai
đúng
đúng
sai
Hình 4:Sơ đồ giải thuật chương trình OPEN
Đúng
0
 Change
 So sanh pass ram 
 voi pass rom
Nhap password cu
6 soà:
Doi_pass
Key open
Key close
Key No
Key Start
Key Change
Key Ok
TEST R5
Nhấn
không
không
Begin
không
Nhấn
Không
không
Nhấn
Nhấn
Nhấn
không
 Start_change:
 Start_change:
1
Nhap password moi
6 soà:
 Alarm
So sanh
R3=3?
Sai
Đúng
Sai
Hình 5:Sơ đồ giải thuật chương trình CHAGE_PASS
4.2. Chương trình
$MOD51
;****************************************************************
;	TRUONG DAI HOC CONG NGHIEP THANH PHO HO CHI MINH
;	//\\*******//\\
;	DO AN KHOA SO DUNG RAM NGOAI
;	THUC HIEN: NGUYEN VAN HIEU - NGUYEN HOAI SANG
;=========================================================
;=========================================================
;	50H	SO KI TU MAT KHAU
;	60H	GIA TRI PASS NAP VAO
;	70H	O NHO PASS RAM
;=========================================================
ORG	00H
;**************************************************************************
;	PREDEFINED BITS-POSTS TRONG FUNCTIONS
;=========================================================
	RS	BIT	P3.0
	RW	BIT	P3.1
	EN	BIT	P3.2
	DATABUS 	EQU	P1
	BIT_RELAY	BIT	P3.3
	BIT_DEN_ER	BIT	P3.4
	BIT_BAODONG	BIT	P3.5
	PASS	EQU	70H
;****************************************************************
;	TEST RAM PROGRAM
;=========================================================
VANHIEU:
	MOV	R0,#70H
LAP_VANHIEU:
	MOVX	A,@R0	;DUA NOI DUNG O NHO 70->75H RAM NGOAI VAO A
	CJNE	A,#00H,EXIT_LAP_VANHIEU	;SO SANH NOI DUNG CAC O NHO 70->75H CO BANG 00 KO
	INC	R0
	CJNE	R0,#76H,LAP_VANHIEU
	LCALL	PROG1
EXIT_LAP_VANHIEU:
	LCALL	PROG2
;========================================================= 
;****************************************************************
;	PRO1 PROG
;=========================================================
PROG1:
	CLR	BIT_BAODONG
	CLR	BIT_RELAY
	SETB	BIT_DEN_ER
	LCALL	NAP_DEFAULT_PASS
;	LCALL CHAY_CHU
	LCALL	TRANG_THAI_THANH_GHI
	LCALL	NHAP_PASS
	LJMP	QUET_PHIM_FUNC	;BAT DAU CHAY DEN KI TRA CAC PHIM CHUC NANG VA O DO
LJMP	PROG2
;****************************************************************
;	PRO2 PROG
;=========================================================
PROG2:
	CLR	BIT_BAODONG
	CLR	BIT_RELAY
	SETB	BIT_DEN_ER
	LCALL 	CHAY_CHU
BEGIN:
	LCALL	RESET_O_PASS
	LCALL	TRANG_THAI_THANH_GHI
	LCALL	NHAP_PASS
	LJMP	QUET_PHIM_FUNC	;BAT DAU CHAY DEN KI TRA CAC PHIM CHUC NANG VA O DO
LJMP	PROG2
;****************************************************************
;	INPUT DEFAULT PASS
;=========================================================
NAP_DEFAULT_PASS:
	MOV	R0,#70H	;DUA PASSWORD MAT DINH VAO RAM CO DIA CHI TU 40H DEN 45H
	MOV	R1,#00H
	MOV	DPTR,#PASSWORD
LAP_NAP_DEFAULT_PASS:
	MOV	A,R1
	MOVC	A,@A+DPTR
	MOVX	@R0,A
	INC	R0
	INC	R1
	CJNE	R1,#06H,LAP_NAP_DEFAULT_PASS
RET
;****************************************************************
;	RESET REGISTER PASS PROG
;=========================================================
RESET_O_PASS:
	PUSH	00H
	MOV	R0,#60H
LAP_RESET_O_PASS:
	MOV	@R0,#0AH
	INC	R0
	CJNE	R0,#66H,LAP_RESET_O_PASS
	POP	00H
RET
;**************************************************************************
;	CHAY_CHU PROG
;==========================================================================
CHAY_CHU:
	ACALL	LCDINIT	;KHOI TAO LCD
	ACALL	DISP_SLINE	;HIEN THI DONG 2
	;XU LY DICH CHUYEN DU LIEU HIEN THI CHO DONG 1
	MOV	DPTR,#FLINE_DATA	;NAP DIA CHI VUNG DU LIEU DONG 1 CUA LCD
SHIFT:	
	ACALL	DISP_FLINE	;HIEN THI DONG 1
	MOV	R1,#10	;DELAY 500MS
DEL500:
	MOV	TH0,#HIGH(-10000)
	MOV	TL0,#LOW(-10000)	
	ACALL	DELAYA	
	DJNZ	R1,DEL500	;THOI GIAN DUNG YEN CUA MOT TRANG THAI MAN HINH LCD
	INC	DPTR	;TANG GIA TRI DPTR DE DICH CHUYEN DONG CHU
	MOV	A,DPL	;KI TRA DA DICH XONG DONG CHU RA MAN HINH LCD
	CJNE	A,#LOW(FLINE_DATA+28),SHIFT
	MOV	A,DPH
	CJNE	A,#HIGH(FLINE_DATA+28),SHIFT
RET
;****************************************************************
;	STATUS REGISTERS
;=========================================================
TRANG_THAI_THANH_GHI:
	MOV	R0,PASS
;WAITING ME
	MOV	R3,#00H
	MOV	R2,#30
	MOV	R6,#0
	MOV	R5,#0
	MOV	R1,#60H
RET
;****************************************************************
;	NHAP PASS PROG
;=========================================================
NHAP_PASS:
	CLR RS	;SEND COMMAND
	CLR RW	;RW=0-WRITE LCD MODE
	SETB EN	;E=1
	MOV DATABUS,#38H	;CODE=38H-8BIT,16CHAR/LINE,MATRIX 5X8
	LCALL GUI_LENH	;SEND COMMAND TO LCD
	MOV TH0,#HIGH(-4100)
	MOV TL0,#LOW(-4100)
	LCALL DELAY_2
	MOV DATABUS,#38H
	LCALL GUI_LENH
	MOV TH0,#HIGH(-100)
	MOV TL0,#LOW(-100)
	LCALL DELAY_2
	MOV DATABUS,#38H 
	LCALL GUI_LENH
	MOV DATABUS,#0CH	;CODE=0CH-ENABLE DISPLAY LCD
	LCALL GUI_LENH
	MOV DATABUS,#01H	;CODE=01H-CLEAR LCD
	LCALL GUI_LENH
	MOV	DATABUS,#81H	; XUAT HIEN DONG DAU TIEN 
	ACALL	GUI_LENH
	PUSH	04H
	PUSH	ACC
	MOV	R4,#00H
	MOV	DPTR,#STRINGCODE
LOOP1:
	MOV	A,R4
	MOVC	A,@A+DPTR
	LCALL	GUI_DATA
	INC	R4
	CJNE	R4,#14,LOOP1	; HIEN DONG THONG BAO THU NHAT
	POP	ACC
	POP	4H
	MOV	DATABUS,#0C0H	;DISPALY DATA AT THE SECOND LINE
	ACALL	GUI_LENH
	MOV A,#11111110B
	LCALL GUI_DATA	; 2 KHOANG TRANG
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#00110110B
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#01010011B
	LCALL GUI_DATA
	MOV A,#01101111B
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#01111110B
	LCALL GUI_DATA	; DAU	->
	MOV	R1,#60H
	MOV 50H,#00H
RET
;****************************************************************
;	BUTTOMS PROG(COMPARE FUNCTION KEYS)
;=========================================================
QUET_PHIM_FUNC:	
	LCALL	QUET_PHIM	; GOI CHUONG TRINH QUET PHIM
	CJNE	A,#10,PHIM_CLOSE
	LJMP	OPEN	;GOI DEN OPEN DE SO SANH
PHIM_CLOSE:
	CLR	BIT_RELAY
	CJNE	A,#11,PHIM_NO
	LJMP	QUET_PHIM_FUNC
PHIM_NO:
	CJNE	A,#12,START
	LJMP	QUET_PHIM_FUNC
START:
	CJNE	A,#13,PHIM_CHANGE_PASS
	LJMP	BEGIN
PHIM_CHANGE_PASS:
	CJNE	A,#14,PHIM_OOK
	LJMP	CHANGE_PASS
PHIM_OOK:
	CJNE	A,#15,PHIMDATA
	LJMP	QUET_PHIM_FUNC
PHIMDATA:
	PUSH 	ACC
	MOV A,50H
	CJNE A,#6,HIENTHI
	POP	ACC
	LJMP QUET_PHIM_FUNC
;WHEN YOU INPUT PASS THEN DISPLAY
HIENTHI:
	INC 50H
	POP ACC 
	MOV	@R1,A
	ORL A,#30H
	LCALL DELAY
	MOV DATABUS,#'*'
	SETB RS	;RS = 1-SEND DATA
	NOP
PULSE_EN12:
	CLR RW	;RW = 0-WRITING MODE
	CLR EN	;MAKE AN ENABLE PULSE
	NOP
	SETB EN
	NOP
	MOV TH0,#HIGH(-1000)
	MOV TL0,#LOW(-1000)
	LCALL DELAY_2
	;LCALL	GUI_DATA
	INC R1
LJMP QUET_PHIM_FUNC
;=========================================================
;****************************************************************
;	OPEN PROG
;=========================================================
OPEN:
	MOV	R0,#70H
	MOVX	A,@R0	; PASS TRONG 0 70H DUOC D RA SO SANH VOI THANG PASS DUOC NHAP VAO TU BAN PHIM
	CJNE	A,60H,PASS_SAI
	INC	R0
	MOVX	A,@R0
	CJNE	A,61H,PASS_SAI
	INC	R0
	MOVX	A,@R0
	CJNE	A,62H,PASS_SAI
	INC	R0
	MOVX	A,@R0
	CJNE	A,63H,PASS_SAI
	INC	R0
	MOVX	A,@R0
	CJNE	A,64H,PASS_SAI
	INC	R0
	MOVX	A,@R0
	CJNE	A,65H,PASS_SAI
;------DUNG--------
THONGBAO:	;HIEN THI RA MAN HINH NHAP DUNG PASS WORD
	MOV	DATABUS,#0CH	;CHO PHEP LCD HIEN THI
	LCALL	GUI_LENH
	MOV	DATABUS,#01H	;XOA MANG HINH LCD
	LCALL	GUI_LENH
	MOV	DATABUS,#84H	;DU LIEU HIEN THI O DONG DAU 
	LCALL	GUI_LENH
	MOV A,#11111110B	;HIEN THI DAU CACH
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV R4,#62
	MOV DPTR,#STRINGCODE
LOVE1:
	MOV	A,R4
	MOVC	A,@A+DPTR
	LCALL	GUI_DATA
	INC	R4
	CJNE	R4,#70,LOVE1	; CORRECT
	LCALL	DELAY
	LCALL	DELAY
	SETB	BIT_RELAY
	MOV	DATABUS,#01H
	LCALL	GUI_LENH
	PUSH ACC
	PUSH 04H
	LCALL DELAY
	MOV R4,#46
	MOV DPTR,#STRINGCODE
LOVE2:
	MOV	A,R4
	MOVC	A,@A+DPTR
	LCALL	GUI_DATA
	INC	R4
	CJNE	R4,#62,LOVE2	 	;DA MO CUA
	LCALL AAAA
EXIT_OPEN:
	LCALL	 QUET_PHIM
	CJNE	A,#11,EXIT_OPEN	; TRO VE LAN NHAP GIA TRI BAN DAU
	POP 	04H
	POP	ACC
LJMP	BEGIN
;------SAI------
PASS_SAI:
	INC	R6	;R3 CHO PHEP SO LAN NHAP PASS SAI
	CJNE	R6,#3,HOME
	LCALL	ALARM
	MOV R3,#00H
	LCALL DELAY50MS
LJMP BEGIN
HOME:
	MOV	DATABUS,#02H
	ACALL	GUI_LENH
	MOV	DATABUS,#01H
	ACALL	GUI_LENH
	MOV	DATABUS,#0CH	;CHO PHEP LCD HIEN THI
	ACALL	GUI_LENH
	PUSH	4H
	PUSH	ACC
	MOV	R4,#15
	MOV	DPTR,#STRINGCODE
STING:	
	MOV	A,R4	;HIEN THI PASS SAI ROI
	MOVC	A,@A+DPTR
	LCALL	GUI_DATA
	INC	R4
	CJNE	R4,#30,STING
	POP	ACC
	POP	04H
	LCALL	DELAY
	LCALL	DELAY
	LCALL	DELAY
LJMP	BEGIN
; DEN SANG CHOP NHAY KHI R3 >= 3 LAN NHAP
ALARM:	
	MOV	DATABUS,#2
	LCALL	GUI_LENH
	MOV	DATABUS,#1
	LCALL	GUI_LENH
	MOV	DATABUS,#0CH	;lcd on
	LCALL	GUI_LENH
	MOV	DATABUS,#80H
	LCALL	GUI_LENH
	PUSH	04H
	PUSH 	01H
	PUSH	ACC
	MOV	R4,#31
	MOV	DPTR,#STRINGCODE
LOOP4:
	MOV	A,R4
	MOVC	A,@A+DPTR
	LCALL	GUI_DATA	;DISPALY LINE:KEYPAD LOCKED
	INC	R4
	CJNE	R4,#46,LOOP4
;==================================
;	ONE MINUTE
;==================================	
	MOV	DATABUS,#0C0H	; XUAT HIEN DONG DAU TIEN 
	ACALL	GUI_LENH
	MOV A,#11111110B	;HIEN THI DAU CACH
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#01001111B	
	LCALL GUI_DATA
	MOV A,#01101110B
	LCALL GUI_DATA
	MOV A,#01100101B
	LCALL GUI_DATA
	MOV A,#11111110B	;HIEN THI DAU CACH
	LCALL GUI_DATA
	MOV A,#01101101B
	LCALL GUI_DATA
	MOV A,#01101001B	
	LCALL GUI_DATA
	MOV A,#01101110B
	LCALL GUI_DATA
	MOV A,#01110101B
	LCALL GUI_DATA
	MOV A,#01110100B
	LCALL GUI_DATA
	MOV A,#01100101B
	LCALL GUI_DATA
;==================================
;	ALERT PROG
;==================================
	MOV R1,#0
ANH:
	SETB	BIT_DEN_ER
	LCALL DELAY50MS
	CLR	BIT_DEN_ER
	LCALL DELAY50MS
	SETB	BIT_BAODONG
	INC 	R1
	CJNE 	R1,#20,ANH
	LCALL THONG_BAO
	SETB	BIT_DEN_ER
	CLR	BIT_BAODONG
	POP ACC
	POP 01H
	POP 04H
RET
;****************************************************************
;	CHAGE PROG
;=========================================================
CHANGE_PASS:
	;HIEN THI NHAP PASSWORD CU
	MOV	DATABUS,#01H	;clear lcd
	ACALL	GUI_LENH
	MOV	DATABUS,#81H	; First following character will appear on first 
	LCALL	GUI_LENH
	PUSH	ACC
	PUSH	04H
	MOV	R4,#0
	MOV	DPTR,#DATACODE1
PING:
	MOV	A,R4
	MOVC	A,@A+DPTR
	LCALL	GUI_DATA
	INC	R4
	CJNE	R4,#14,PING
	POP	04H
	POP	ACC
	MOV	DATABUS,#0C0H	; First following character will appear on second 
	ACALL	GUI_LENH
	MOV A,#11111110B
	LCALL GUI_DATA	; 2 KHOANG TRANG
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#00110110B
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#01010011B
	LCALL GUI_DATA
	MOV A,#01101111B
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#01111110B
	LCALL GUI_DATA	; DAU	- > 
	MOV 60H,00H
	MOV 61H,00H
	MOV 62H,00H
	MOV 63H,00H
	MOV 64H,00H
	MOV 65H,00H
DOI_PASS:	; CHI CO TAC DUNG KHI DOI PASSWORD PHIM START
	MOV	R1,#60H
	MOV 51H,#00H
	MOV R0,#70H
KT_OPEN:	
	LCALL	QUET_PHIM
	CJNE	A,#10,KT_CLOSE	
	SJMP	KT_OPEN
KT_CLOSE:
	CJNE	A,#11,KT_NO
	SJMP	KT_OPEN
KT_NO:	; BUTTON NO CO TAC DUNG TRO VE MAN HINH BAN DAU KHI KO MUON THAY DOI PASSWORD
	CJNE	A,#12,KT_START 
	SJMP	CHANGE_PASS
KT_START:	
	CJNE	A,#13,KT_CHANGE_PASS
	JMP	BEGIN
KT_CHANGE_PASS:	
	CJNE	A,#14,KT_OOK
	JMP	KT_OPEN
KT_OOK:	
	CJNE	A,#15,PHIMDATA_1
	SJMP START_CHANGE
PHIMDATA_1:
	PUSH ACC
	MOV A,51H
	CJNE A,#6,HIENTHI_1
	LJMP KT_OPEN
HIENTHI_1:
	INC 51H
	POP ACC 
	MOV	@R1,A
	ORL A,#30H
	MOV DATABUS,#'*'
	SETB RS	;RS = 1-SEND DATA
	NOP
PULSE_EN123:
	CLR RW	;RW = 0-WRITING MODE
	CLR EN	;MAKE AN ENABLE PULSE
	NOP
	SETB EN
	NOP
	MOV TH0,#HIGH(-1000)
	MOV TL0,#LOW(-1000)
	LCALL DELAY_2
	LCALL DELAY
	;LCALL	GUI_DATA
	INC R1
	LJMP KT_OPEN
START_CHANGE:
	MOV	A,R5
	CJNE	A,#1,NHAP_LAI_PASS_CU
	MOV 	R5,#00H
	PUSH	ACC
	PUSH	00H
	PUSH	01H
	MOV	R0,#70H
	MOV	R1,#60H
LAP_START_CHANGE:
	MOV	A,@R1
	MOVX	@R0,A
	INC	R0
	INC	R1
	CJNE	R0,#76H,LAP_START_CHANGE
	POP	01H
	POP	00H
	POP	ACC
LJMP	BEGIN
NHAP_LAI_PASS_CU:
	MOVX	A,@R0
	CJNE	A,60H,LOI_DOI_PASS
	INC	R0
	MOVX	A,@R0
	CJNE	A,61H,LOI_DOI_PASS
	INC	R0
	MOVX	A,@R0
	CJNE	A,62H,LOI_DOI_PASS
	INC	R0
	MOVX	A,@R0
	CJNE	A,63H,LOI_DOI_PASS
	INC	R0
	MOVX	A,@R0
	CJNE	A,64H,LOI_DOI_PASS
	INC	R0
	MOVX	A,@R0
	CJNE	A,65H,LOI_DOI_PASS
; HIEN THI NHAP PASS MOI
;********************
	MOV	DATABUS,#01H	;clear lcd
	ACALL	GUI_LENH
	MOV	DATABUS,#81H	; First following character will appear on first 
	LCALL	GUI_LENH
	PUSH	04H
	PUSH 	ACC
	MOV	R4,#0
	MOV	DPTR,#DATACODE2
PINGMOI:
	MOV	A,R4
	MOVC	A,@A+DPTR
	LCALL	GUI_DATA
	INC	R4
	CJNE	R4,#15,PINGMOI
	POP	ACC
	POP	04H
	MOV	DATABUS,#0C0H	; First following character will appear on second 
	ACALL	GUI_LENH
	MOV A,#11111110B
	LCALL GUI_DATA	; 2 KHOANG TRANG
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#00110110B
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#01010011B
	LCALL GUI_DATA
	MOV A,#01101111B
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#01111110B
	LCALL GUI_DATA	; DAU	- > 
EXIT_DUNG:
	INC	R5
	LJMP	DOI_PASS
LOI_DOI_PASS:
	INC	R3
	CJNE	R3,#3,HOMESET_1	 ; HIEN CAU NHAP PASS CU
	LCALL	ALARM
	MOV R3,#00H
	LJMP CHANGE_PASS
HOMESET_1:
	MOV	DATABUS,#2
	ACALL	GUI_LENH
	MOV	DATABUS,#1
	ACALL	GUI_LENH
	MOV	DATABUS,#0CH	;CHO PHEP LCD HIEN THI
	ACALL	GUI_LENH
	PUSH	04H
	PUSH	ACC
	MOV	R4,#15
	MOV	DPTR,#STRINGCODE	;HIEN THI PASS SAI ROI
STINGSET:	
	MOV	A,R4
	MOVC	A,@A+DPTR
	ACALL	GUI_DATA
	INC	R4
	CJNE	R4,#30,STINGSET
	POP	ACC
	POP	4H
	LCALL	DELAY
	LCALL	DELAY
	LCALL	DELAY
	LCALL	DELAY
LJMP	CHANGE_PASS
;****************************************************************
;	LCD PROGS
;=========================================================
;****** CHUOI CHU CHAY LEN DONG 1**************************
;========= =========SENDING PROGRAM==================
GUI_LENH:
	CLR RS	;RS=0-SEND COMMAND
SJMP PULSE_EN
GUI_DATA:	
	MOV DATABUS,A
	SETB RS	;RS = 1-SEND DATA
	NOP
PULSE_EN:
	CLR RW	;RW = 0-WRITING MODE
	CLR EN	;MAKE AN ENABLE PULSE
	NOP
	SETB EN
	NOP
	MOV TH0,#HIGH(-1000)
	MOV TL0,#LOW(-1000)
	LCALL DELAY_2
RET
;****************************************************************
;	LCD FUNCTIONS
;=========================================================
LCDINIT:	;CTC KHOI TAO LCD
	CLR	RS	;RS = 0 - GUI LENH
	CLR	RW	;RW = 0 - WRITE LCD MODE
	SETB	EN	;E = 1 - ENABLE
	MOV	DATABUS,#38H	;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
	ACALL	SENDCOMMAND	;GUI LENH RA LCD
	MOV	TH0,#HIGH(-4100)
	MOV	TL0,#LOW(-4100)
	ACALL	DELAYA	;DELAY 4.1MS
	MOV	DATABUS,#38H	;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
	ACALL	SENDCOMMAND	;GUI LENH RA LCD
	MOV	TH0,#HIGH(-100)
	MOV	TL0,#LOW(-100)	
	ACALL	DELAYA	;DELAY 100US
	MOV	DATABUS,#38H	;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
	ACALL	SENDCOMMAND	;GUI LENH RA LCD
	MOV	DATABUS,#0CH	;CODE = 0CH - CHO PHEP LCD HIEN THI
	ACALL	SENDCOMMAND	;GUI LENH RA LCD
	MOV	DATABUS,#01H	;CODE = 01H - XOA LCD
	ACALL	SENDCOMMAND	;GUI LENH RA LCD
	MOV	DATABUS,#06H	;CODE = 06H - TU TANG DIA CHI HIEN THI, TAT DICH CHUYEN HIEN THI
	ACALL	SENDCOMMAND	;GUI LENH RA LCD
RET
;***************************************************
SENDCOMMAND:	;CTC GUI LENH (SENDCOMMAND) VA GUI DU LIEU (SENDDATA) RA LCD
	CLR	RS	;RS = 0 - GUI LENH
	SJMP	PULSE_ENA
SENDDATA:
	SETB	RS	;RS = 1 - GUI DU LIEU
	NOP
PULSE_ENA:	;TAO XUNG ENABLE DE CHUYEN THONG TIN (COMMAND/DATA) VAO LCD
	CLR	RW	;RW = 0 - WRITE LCD MODE
	CLR	EN	;EN = 0
	NOP
	SETB	EN	;EN = 1 - XUNG ENABLE
	NOP
;KI TRA CO BAO BAN (BUSY FLAG) DE DAM BAO HOAN TAT VIEC LCD GHI NHAN THONG TIN GUI DEN
	;*************************************************************
	MOV	TH0,#HIGH(-1000)	;LENH NAY DUOC THAY THE CHO DOAN MA KI TRA DUOI DAY KHI
	MOV	TL0,#LOW(-1000)	;CHAY CHUONG TRINH NAY TRONG PHAN M MO PHONG TOPVIEW
	ACALL DELAYA	
RET
;***************************************************
DISP_FLINE:	;CTC DAT DIA CHI BAT DAU DONG 1 VA NAP DU LIEU DONG 1 VAO DDRAM
	MOV	DATABUS,#80H	;CODE = 80H - DAT DDRAM DIA CHI BAT DAU CUA DONG 1 - 00H
	ACALL	SENDCOMMAND	;GUI LENH RA LCD
	ACALL	WRITE	;GUI VUNG DU LIEU SANG LCD
RET
;***************************************************
DISP_SLINE:	;CTC DAT DIA CHI BAT DAU DONG 2 VA NAP DU LIEU DONG 2 VAO DDRAM
	MOV	DATABUS,#0C0H	;CODE = C0H - DAT DDRAM DIA CHI BAT DAU CUA DONG 2 - 40H
	ACALL	SENDCOMMAND	;GUI LENH RA LCD
	MOV	DPTR,#SLINE_DATA	;NAP DIA CHI VUNG DU LIEU DONG 2 CUA LCD
	ACALL	WRITE	;GUI VUNG DU LIEU SANG LCD
RET
;***************************************************
WRITE:	;CTC GUI DU LIEU SANG LCD, KET THUC GUI DU LIEU KHI DU LIEU GUI DI LA 99H
	MOV	R0,#0	;OFFSET DAU TIEN TRONG VUNG DU LIEU CUA DPTR
WR1:
	MOV	A,R0	;NAP OFFSET
	MOVC	A,@A+DPTR	;LAY DU LIEU TU VUNG DU LIEU
	MOV	DATABUS,A	;CHUYEN DU LIEU CAN GUI RA PORT DEN LCD
	ACALL	SENDDATA	;GUI DU LIEU RA LCD
	INC	R0	;CHUYEN SANG DU LIEU KE TIEP
	CJNE	R0,#16,WR1	;KI TRA NAP DAY DU DU LIEU CHO MOT DONG MAN HINH - 16 CHU
RET
;***************************************************
LCDINIT1:	;CTC KHOI TAO LCD
	CLR	RS	;RS = 0 - GUI LENH
	CLR	RW	;RW = 0 - WRITE LCD MODE
	SETB	EN	;E = 1 - ENABLE
	MOV	DATABUS,#38H	;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
	ACALL	SENDCOMMAND1	;GUI LENH RA LCD
	MOV	TH0,#HIGH(-4100)
	MOV	TL0,#LOW(-4100)
	ACALL	DELAY1	;DELAY 4.1MS
	MOV	DATABUS,#38H	;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
	ACALL	SENDCOMMAND1	;GUI LENH RA LCD
	MOV	TH0,#HIGH(-100)
	MOV	TL0,#LOW(-100)	
	ACALL	DELAY1	;DELAY 100US
	MOV	DATABUS,#38H	;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
	ACALL	SENDCOMMAND1	;GUI LENH RA LCD
	MOV	DATABUS,#0CH	;CODE = 0CH - CHO PHEP LCD HIEN THI
	ACALL	SENDCOMMAND1	;GUI LENH RA LCD
	MOV	DATABUS,#01H	;CODE = 01H - XOA LCD
	ACALL	SENDCOMMAND1	;GUI LENH RA LCD
	MOV	DATABUS,#06H	;CODE = 06H - TU TANG DIA CHI HIEN THI, TAT DICH CHUYEN HIEN THI
	ACALL	SENDCOMMAND1	;GUI LENH RA LCD
	RET
;***************************************************
SENDCOMMAND1:	;CTC GUI LENH (SENDCOMMAND) VA GUI DU LIEU (SENDDATA) RA LCD
	CLR	RS	;RS = 0 - GUI LENH
	SJMP	PULSE_EN1
SENDDATA1:
	SETB	RS	;RS = 1 - GUI DU LIEU
	NOP
PULSE_EN1:	;TAO XUNG ENABLE DE CHUYEN THONG TIN (COMMAND/DATA) VAO LCD
	CLR	RW	;RW = 0 - WRITE LCD MODE
	CLR	EN	;EN = 0
	NOP
	SETB	EN	;EN = 1 - XUNG ENABLE
	NOP
;KI TRA CO BAO BAN (BUSY FLAG) DE DAM BAO HOAN TAT VIEC LCD GHI NHAN THONG TIN GUI DEN
	;*************************************************************
	MOV	TH0,#HIGH(-1000)	;LENH NAY DUOC THAY THE CHO DOAN MA KI TRA DUOI DAY KHI
	MOV	TL0,#LOW(-1000)	;CHAY CHUONG TRINH NAY TRONG PHAN M MO PHONG TOPVIEW
	ACALL DELAY1	
	RET
;***************************************************
DISP_FLINE1:	;CTC DAT DIA CHI BAT DAU DONG 1 VA NAP DU LIEU DONG 1 VAO DDRAM
	MOV	DATABUS,#80H	;CODE = 80H - DAT DDRAM DIA CHI BAT DAU CUA DONG 1 - 00H
	ACALL	SENDCOMMAND1	;GUI LENH RA LCD
	ACALL	WRITE1	;GUI VUNG DU LIEU SANG LCD
	RET
;***************************************************
DISP_SLINE1:	;CTC DAT DIA CHI BAT DAU DONG 2 VA NAP DU LIEU DONG 2 VAO DDRAM
	MOV	DATABUS,#0C0H	;CODE = C0H - DAT DDRAM DIA CHI BAT DAU CUA DONG 2 - 40H
	ACALL	SENDCOMMAND1	;GUI LENH RA LCD
	MOV	DPTR,#SLINE_DATA1	;NAP DIA CHI VUNG DU LIEU DONG 2 CUA LCD
	ACALL	WRITE1	;GUI VUNG DU LIEU SANG LCD
	RET
;***************************************************
WRITE1:	;CTC GUI DU LIEU SANG LCD, KET THUC GUI DU LIEU KHI DU LIEU GUI DI LA 99H
	MOV	R0,#0	;OFFSET DAU TIEN TRONG VUNG DU LIEU CUA DPTR
WR11:
	MOV	A,R0	;NAP OFFSET
	MOVC	A,@A+DPTR	;LAY DU LIEU TU VUNG DU LIEU
	MOV	DATABUS,A	;CHUYEN DU LIEU CAN GUI RA PORT DEN LCD
	ACALL	SENDDATA1	;GUI DU LIEU RA LCD
	INC	R0	;CHUYEN SANG DU LIEU KE TIEP
	CJNE	R0,#16,WR11	;KI TRA NAP DAY DU DU LIEU CHO MOT DONG MAN HINH - 16 CHU
	RET
;***************************************************
AAAA:
	MOV DATABUS,#0C0H
	LCALL GUI_LENH
	MOV A,#11111110B	;HIEN THI DAU CACH
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#11111110B
	LCALL GUI_DATA
	MOV A,#01010111B	
	LCALL GUI_DATA
	MOV A,#01100101B
	LCALL GUI_DATA
	MOV A,#01101100B
	LCALL GUI_DATA
	MOV A,#01100011B
	LCALL GUI_DATA
	MOV A,#01101111B	
	LCALL GUI_DATA
	MOV A,#01101101B
	LCALL GUI_DATA
	MOV A,#01100101B
	LCALL GUI_DATA
RET
;****************************************************************
;	REPORT PROGRAMS
;=========================================================
THONG_BAO:
	ACALL	LCDINIT1	;KHOI TAO LCD
	ACALL	DISP_SLINE1	;HIEN THI DONG 2
	;XU LY DICH CHUYEN DU LIEU HIEN THI CHO DONG 1
	MOV	DPTR,#FLINE_DATA1	;NAP DIA CHI VUNG DU LIEU DONG 1 CUA LCD
SHIFT1:	
	ACALL	DISP_FLINE1	;HIEN THI DONG 1
	MOV	R1,#30	;DELAY 500MS
DEL5001:
	MOV	TH0,#HIGH(-10000)
	MOV	TL0,#LOW(-10000)	
	ACALL	DELAY1	
	DJNZ	R1,DEL5001	;THOI GIAN DUNG YEN CUA MOT TRANG THAI MAN HINH LCD
	INC	DPTR	;TANG GIA TRI DPTR DE DICH CHUYEN DONG CHU
	MOV	A,DPL	;KI TRA DA DICH XONG DONG CHU RA MAN HINH LCD
	CJNE	A,#LOW(FLINE_DATA1+59),SHIFT1
	MOV	A,DPH
	CJNE	A,#HIGH(FLINE_DATA1+59),SHIFT1
	RET
;****************************************************************
;	SCAN KEYPAD PROG
;=========================================================
QUET_PHIM:
	PUSH	07H	; R7 DUOC DUNG DE LUU TRU CAC GIA TRI COT
SCAN:
	MOV	A,#0EFH	;QUET COLUMN0
	MOV	R7,#0	;R7 = i
CONT:
	MOV	P2,A	;PORT2 NOI VOI BAN PHIM
	MOV	A,P2	;read row
	JNB	ACC.0,ROW_0
	JNB	ACC.1,ROW_1
	JNB	ACC.2,ROW_2
	JNB	ACC.3,ROW_3
	RL	A	;prepare to conect next col to ground
	INC	R7
	CJNE	R7,#4,CONT	;4 col is conected to ground one after another 
	SJMP	SCAN
ROW_0:	;row = 0,col = 7
	MOV	A,R7
	ADD	A,#0	;A = 0+R7
	SJMP	EXIT
ROW_1:	;row = 1,col = R7
	MOV	A,R7
	ADD	A,#4	;A = 4+R7
	SJMP	EXIT
ROW_2:
	MOV	A,R7	;row = 2,col = R7
	ADD	A,#8	;A = 8+R7
	SJMP	EXIT	
ROW_3:
	MOV	A,R7	;row = 3,col = R7
	ADD	A,#12	;A = 12+R7
	SJMP 	EXIT
EXIT:
	MOV PASS,A
LOVE3:
	MOV	A,P2
	ANL	A,#0FH
	CJNE	A,#0FH,LOVE3
	MOV	A,PASS
	;MOV A,#00101010B
	POP	07H
RET
;****************************************************************
;	DELAY PROGRAMS
;=========================================================
DELAY:
	PUSH	4H
	PUSH	2H
	MOV	R2,#0FFH
LOOPDE1:
	MOV	R4,#0FFH
	DJNZ	R4,$
	DJNZ	R2,LOOPDE1
	POP	2H
	POP	4H
RET
DELAY50MS:
	PUSH	00H
	MOV	R0,#50
	MOV	TMOD,#01H
STINGA:
	MOV	TH0,#0ECH
	MOV	TL0,#78H
	SETB	TR0
	JNB	TF0,$
	CLR	TR0
	CLR	TF0
	DJNZ	R0,STINGA
	POP	00H
RET
DELAY1:
	MOV	TMOD,#01H
 SETB 	TR0
 JNB 	TF0,$
 CLR	TR0
 CLR 	TF0
RET
;***************************************************
DELAYA:
	MOV	TMOD,#01H
 SETB 	TR0
	JNB TF0,$
 CLR	TR0
 CLR 	TF0
RET
DELAY_2:
	MOV TMOD,#01H
	SETB TR0
	JNB TF0,$
	CLR TR0
	CLR TF0
RET	
;****************************************************************
;	EXTEND ARES FOR PROGRAMS
;=========================================================
FLINE_DATA:	;DU LIEU HIEN THI DONG 1
	DB	' '
	DB	'HI HI HE HE'
	DB	' '
SLINE_DATA:	;DU LIEU HIEN THI DONG 2
	DB	' WELCOME '
;***************************************************
FLINE_DATA1:	;DU LIEU HIEN THI DONG 1
	DB	' '
	DB	' De toi doan x ? Ban la trom dung khong !'
	DB	' '
SLINE_DATA1:	;DU LIEU HIEN THI DONG 2
	DB	' KEYPAD LOCKED '
;***************************************************
STRINGCODE:
	DB	'INPUT PASSWORD '
	DB	' ERROR PASS '
	DB	' KEYPAD LOCKED'
	DB ' OPEN THE SAFE'
	DB	' CORRECT '
DATACODE1:
	DB	'INPUT OLD PASS '
DATACODE2:
	DB	' INPUT NEW PASS '
;***************************************************
PASSWORD:
	DB	1H,1H,1H,1H,1H,1H
END
Phần II: Kết Luận
Mặc dù được sự chỉ bảo tận tình của thầy giáo hướng dẫn nhưng do kiến thức còn nhiều hạn chế cộng với thời gian ngắn ngủi nên đồ án của chúng còn nhiều điểm chưa phù hợp với thực tế. Qua dồ án này chúng đã rút ra được nhiều kinh nghiệm cho bản thân.
Đây là một đề tài rất có ứng dụng trong thực tế nên chúng em sẽ cố gắng để hoàn thiện đề tài,và phù hợp với nhu cầu của thực tế.
TÀI LIỆU THAM KHẢO
1. Giáo trình lý thuyết vi xử lý – Phạm Quang Trí – Trường Đại Học Công Nghiệp Tp HCM
2. Giáo trình thực hành vi xử lý - Phạm Quang Trí – Trường Đại Học Công Nghiệp Tp HCM
3. www.ant7.com.vn
4. www.datasheetcatalog.com.vn.
5. www.fet-hui.edu.vn
            Các file đính kèm theo tài liệu này:
 noi_dung_repaired__925.doc noi_dung_repaired__925.doc