An 8051 Electronic Combination Lock – Can Use Cell Phone ... · The 8051 electronic combination...
Transcript of An 8051 Electronic Combination Lock – Can Use Cell Phone ... · The 8051 electronic combination...
8051-
An 8051 Electronic Combination Lock Can
Use Cell Phone To Give Alarm
i
80518051LCD
ii
Abstract
The 8051 electronic combination lock use the basic assembler of 8051.To Combine
LCD, keyboard, a bunch of communication of arranging. Use 8051 basic ideas
realizing being controlled, and has used the cell-phone to send the alert news, It
will be a independence than the channel free from interruption by
external world, Not easier to be destroyed by the outside.
iii
.............................................................i
............................................................ii
...............................................................iii
..............................................................iv
...............................................................v
.........................................................1
............................................2
2.1 ..............................................2
2.2 8051..........................................4
2.3 8051IC..........................................5
2.4 8051..............................................9
LCD................................................11
3.1 LCD....................................................11
3.2 LCD .......................................13
3.3 LCD............................................15
...................................................19
4.1 RS-232.............................................19
4.2 RS-232.......................................21
4.3 VB ......................................23
...........................................25
5.1 ...........................................25
5.2 AT ..............................................26
...........................................................27
I........................................................28
II.......................................................29
III ASCII code.................................................30
IV.............................................31
V....................................................32
iv
2.1 ............................................2
2.2 8051 ..........................................4
2.3 8051 ............................................5
2.4 8051...........................................9
3.1 LCD ................................................11
3.2 DDRAM (16X2).....................11
3.3 DDRAM (16X4).....................12
3.4 LCD ............................................12
3.5 LCD ............................................14
3.6 LCD ............................................14
4.1 RS-232 .........................................21
5.1 .................................................25
I-1 .....................................................27
II.1 ....................................................28
IV-1 ...............................................30
IV-2 ...............................................30
v
2.1 8051 ..............................................5
4.1 RS-232 ().................................19
4.2 RS-232 ().................................19
4.3 9PIN 25PIN ...................................20
5.1 AT .....................................................26
III-1 ASCII code..................................................29
1
8051
(LCD
)
2
2.1
2.1
CPU(Center Processing Unit)
1. (Arithmetic Logic Unit ALU)
(
)(ANDORNOT )
2. (Control Unit CU)
(Decode)(Execute)
3. (Input Unit IU)
3
CPU
4. (Output Unit OU)
CPU
5. (Memory Unit MU)
(Main Memory)
(Auxiliary Memory)
(Read Only Memory ROM)(Random Access Memory
RAM)ROM
RAM
RAM
4
2.2 8051
2.2 8051
8051
1. 8
2.
3. 128 RAM 4K ROM
4. 4 8 I/O
5. 2 16 /
6. UART
7. 5
8.
5
2.3 8051IC
2.3 8051
2.1 8051
1~8 P1.0~P1.7
1(P1)8 I/O
,P1.0 LSB,8 (P1.7)MSB,P1
4 LS-TTL .
9 RESET
8051 (RESET),8051
Low .High(+5V)
,8051 ,8051
6
0000H .RAM00H~7FH
,(SFR)
.
10~17 P3.0~P3.7 P3 8 I/O
,I/O /
,2 .
P3.0 RXD
P3.1 TXD
P3.2 INT0 0
P3.3 INT1 0
P3.4 T0 / 0
P3.5 T1 / 1
P3.6 WR RAM,
P3.7 RD RAM,
18~19 XTAL2(18)
XTAL1(19)
8051 ,
12MHZ ,9051
12MHZ ,.
20 Vss 8051 ,8051
.
21~28 P2.0~P2.7 P3 8 I/O
,P2 I/O , 8051
7
EPROM, RAM
,P2 8051
(Highbyte,A8~A15) P0 (Lowbyte)
16 ,
29 (Program Store
Enable),8051
, .
OE .
8051 PSEN RD
,.,
64K Bytes2k7EPROM 64K Byte RAM.
30 ALE (Address Latch Enable),8051
, P0
(A0~A7), P0 /
, 74LS373
31 /(External Access enable),
EA1 ,CPU ,EA=0 ,
.,8751 8051
,EA VCC(+5.0V).
32~39 P0.0~P0.7 P0 (Open Drain)I/O .
1 P0 ,P0 (float),
,P1,P2,P3
8
Pull-up,,
,P0 I/O ,
(Pull-up)4.7K.
H,.P0
,,P0
(A0~A7)(D0~D7)
,P0 8
.A0~A7 P2 A8~A15
16 address bus.8051
64K
40 Vcc
9
2.4 8051
(EPROMFlash ROM),CPU
,.MCS-51 16 ,
216=64K,MCS-51 1 Byte,MCS-51
64Kbyte.8051 4K ,
60KByte.MCS-51 EA ,
MCS-51 ,,,
2.4 8051
MCS-51 ,.MOV(),
MOVX().CPU MOVX ,RD WR
.MOV .MSC-51 256Kbyte
,128(00H~7FH),128KByte (SFR).
10
RAM,PC RAM ,,PC
RAM .RAM .
RAM DataMemory.128Kbyte .00H~1FH,
,8Byte,32Byte.20H~2FH,16 Byte,
.16
,16X8=128 .30H~7FH user
(General purpose RAM).
11
LCD
3.1 LCD
,,
.LCD,,,
2 .LCD
16X1,16X2,20X1,20X2,40X1,40X2 .
3.1 LCD
LCD ,,,LCD
/HD44780 (),
,80
,LCD 80 .
LCD Show
DDRAM
3.2 DDRAM (16X2)
12
3.3 DDRAM (16X4)
CPU LCD ,ASCII
LCDDDRAM,LCD.,LCD
(00h),A.ASCII-41H,DDRAM 00H .
:
3.4 LCD
13
3.2 LCD
1. Busy Flag(BF)
BF LCDCPU,BF=1,LCD
,LCD.BF=0,CPU
LCD.RS=0 R/W=1 ,DB7 .
2.
LCD 2 8 ,(InstructionRegister
IR),(Data Register,DR),8 ,RS
.
3. AC
DD RAM CG RAM .
IR ,LCD IR AC.
,AC (I/D=1)(I/D=0).
4. Character Generat ROM (CG ROM)
LCD ROM,192 5x7 .
,DD RAM ASCII .:A
01000001(41H)
5.
LCDCG ROM,64
CG RAM user ,8(5x7
),64/8=8,8 .,5X
CG RAM .,00H~07H.
14
3.5 LCD
3.6 LCD
15
3.3 LCD
LCD CPU IR ,.11 ,
Clear Display Cursor Home 1.64ms ,40ns.
1. Clear Display
: DDR20H,,DD
RAM AC 00H,I/D 1.
2. Curse Home
: DD RAM ,,
,DD RAM 00H.
3. Entry Mode
:,.
S I/D
0 0 ,,AC
0 1 ,,AC
1 1 ,,AC
1 1 ,,AC
16
4. ON/OFF (Display ON/OFF)
: D:,D=0 D=1,
C:, C=0 C=1
B:Blink ,B=0 ,B=1
5.
: ,
.
S/C R/L
0 0 ,AC
0 1 ,AC
1 1 ()
1 1 ()
6. Function Set
: DL:,DL=1 8 ,DL=0 4 .
N:,N=0 ,1 N=1 ,2 .
F:Font .
17
7. CG RAM
: CG RAM ,A5~A0 00H~3FH 64
,,CGRAM.
8. 8.DD RAM
: DD RAM ,A6~A0 ,
DD RAM .
9. BF AC .
: BF=1,LCD,,
CPU ,BF=0 .BF ,
(DB0~DB6),,CG RAM
DD RAM ,.
10. CG RAM DD RAM
18
: 8 (D0~D7)DD RAM CG RAM,,
DD RAM CG RAM .
11. CG RAM DD RAM
: 8 (D0~D7)DD RAM CG RAM,,
DD RAM CG RAM
19
4.1 RS-232
4.1 RS-232 ()
4.2 RS-232 ()
0/1
IC MAX-232ICL-232
PC (Handshake)25PINPC
20
ICE
3 (9PIN)
4.3 9PIN25PIN
9PIN
21
4.2 RS-232
4.1 RS-232
1 -5V -15V TXDRXD
-5V -15V 3.1
Start Bit1 7 8
D0-D7/D8 Parity Bit (Stop Bit)
Parity Bit Odd ParityEven
ParityNo Parity
No Parity7-bit
8-bit
8-bit (Stop Bit)11.52
2
1
VB MSComm1.Settings = " 9600,N,8,1"
9600 bit/S 8-bit data No Parity 1 stopbit9600
Baud-Rate " 9600,N,8,1" 1
10 ( start-bit + 8 bits+stop-bit=10 bits)1/9600 *10
=1.042 mS1KB 1.042
(Alogrithem)
22
1. 0
2. 0.5 0
3. 1 0
4. 7
5. 1
MC682116550 8051
RS-232
23
4.3 VB
VB
t
RS-232
(y )(IV)
Tin = ( 3*10 + 4*10 ) / baudrate (S)
baudrate = 57600 Tin= 1.22 mS
:
Tout = ( 5*10 ) / baudrate (S)
baudrate = 57600 Tin = 0.87 mS
Tos
T
do
get y (Tin)
get e (software / hardware) (Te)
control law (Tc)
Tos
output u (Tout)
loop
T = Tin + Te + Tc + Tout
> 1.22mS + Te + Tos + 0.87mS
> 2.1mS |57600 bps
T 3.6mS(
)
24
25
5.1
GSM GSM 07.05 Attention(AT)
AT HayesHayes
AT AT AT
RS232
GSM AT GSM
GSM
PIN2
PIN2
PIN5
PIN3 PIN3
PIN5
R1/IN
T1/OUT
GND MAX232
T1/ IN
R1/OUT PIN_C7
PIN_C6
PIC16F877PIC16F877PIC16F4xxPIC16F4xx
PIC_SERVERPIC_SERVERMobileMobileRSRS--232232
PIC_SERVER PIC_SERVER RSRS--232232
5.1
26
5.2 AT
5.1 AT
AT
AT(Attention) AT
ATZ ATZ
ATE(Echo) ATE =0,
=1,
AT+CMGF(Message
Format)
AT+CMGF= =0, PDU mode
=1, Text mode
AT+CMGS(Send
Message)
AT+CMGS=
AT+CMGS=
PDU mode
Text mode
AT+CPMS(Perferred
Message Storage)
AT+CPMS=,,
=MESM CMGR
;
MESM
;
ME
AT+CMGR(Read
Message)
AT+CMGS=
AT+CMGD(Delete
Message)
AT+CMGD=
27
[1],8051 ,,2001.
[2],,,2000.
[3], 8051/8951 ,,2001.
28
I()
I-1
29
II()
30
III(ASCII code)
III-1 ASCII code
31
IV()
8051
IV-1
IV-2
32
V()
ORG 00H
JMP START
ORG 23H
JMP SERVICE_232
;----------------------------------------------------------
START:
CALL INIT_SYSTEM
CALL INIT_LCD
CALL START_SCN
CALL LCD_SCAN
CALL INIT_232
;----------------------------------------------------------
MAIN:
CALL CHECK_SENSOR
CALL SCANKEY
JNB INQUIRE,MAIN
CLR INQUIRE
CALL SEND_NOW_PASSWORD
JMP MAIN
;----------------------------------------------------------
CHECK_SENSOR:
JNB DIAL_FLAG,EXIT_C_SENSOR
JB SENSOR_ON,SENSOR_AGAIN
MOV A,P1
33
ANL A,#11111000B
RR A
RR A
RR A
CJNE A,#00011111B,SENSOR_DETECT
RET
SENSOR_DETECT:
CALL DAIL_T28
MOV R5,#200
CALL DELAY
MOV R5,#200
CALL DELAY
MOV R5,#200
CALL DELAY
MOV R5,#200
CALL DELAY
MOV R5,#200
CALL DELAY
CALL HANG_UP
RET
SENSOR_AGAIN:
MOV A,P1
ANL A,#11111000B
RR A
RR A
RR A
34
CJNE A,#00011111B,EXIT_C_SENSOR
CLR SENSOR_ON
EXIT_C_SENSOR:
RET
;----------------------------------------------------------
DAIL_T28:
CLR EA
MOV A,#41H
CALL SEND_A_BYTE
MOV A,#54H
CALL SEND_A_BYTE
MOV A,#44H
CALL SEND_A_BYTE
MOV R0,#DAIL_NUMBER
MOV R7,#10
DAIL_LOOP:
MOV A,@R0
ADD A,#48
CALL SEND_A_BYTE
INC R0
DJNZ R7,DAIL_LOOP
MOV A,#3BH
CALL SEND_A_BYTE
MOV A,#0DH
CALL SEND_A_BYTE
SETB EA
35
RET
;----------------------------------------------------------
HANG_UP:
CLR EA
MOV A,#41H
CALL SEND_A_BYTE
MOV A,#54H
CALL SEND_A_BYTE
MOV A,#48H
CALL SEND_A_BYTE
MOV A,#0DH
CALL SEND_A_BYTE
SETB EA
RET
;----------------------------------------------------------
SEND_A_BYTE:
MOV R6,#8
CLR P3.2
CALL DELAY_BPS
A_BYTE_LOOP:
JNB A.0,BIT_LOW
SETB P3.2
JMP EXIT_A_BYTE_LOOP
BIT_LOW:
CLR P3.2
EXIT_A_BYTE_LOOP:
36
CALL DELAY_BPS
RR A
DJNZ R6,A_BYTE_LOOP
SETB P3.2
CALL DELAY_BPS
RET
;----------------------------------------------------------
DELAY_BPS:
NOP
MOV R5,#92
DJNZ R5,$
RET
;----------------------------------------------------------
SCANKEY:
MOV R2,#FFH
CLR C
MOV R3,#4
NEWC:
MOV A,R2
RLC A
ORL A,#F0H
MOV R2,A
MOV P2,A
MOV A,P2
MOV SCANTEMP,A
XRL A,R2
37
JNZ CHECK_KEY
BACK:
MOV A,R2
MOV P2,A
MOV A,P2
XRL A,R2
JNZ BACK
DJNZ R3,NEWC
RET
;----------------------------------------------------------
CHECK_KEY:
MOV R5,#1
CALL DELAY
MOV A,R2
MOV P2,A
MOV A,P2
CJNE A,SCANTEMP,BACK
JMP HAVEKEY
;----------------------------------------------------------
HAVEKEY:
MOV A,SCANTEMP
SWAP A
ANL A,#0FH
MOV R7,#0
NEXTBIT:
RRC A
38
JNC FINDCO
INC R7
JMP NEXTBIT
FINDCO:
MOV A,SCANTEMP
ANL A,#0FH
MOV TEMP0,#0
NEXTBIT1:
RRC A
JNC RETURN
INC TEMP0
JMP NEXTBIT1
RETURN:
MOV A,TEMP0
RL A
RL A
ADD A,R7
MOV R7,A
CALL KEYCHOOSE
CALL LCD_SCAN
JMP BACK
;----------------------------------------------------------
SEND_NOW_PASSWORD:
MOV R0,#65
MOV R4,#4
SEND_LOOP:
39
CALL SEND_TITLE
CALL SEND_PASSWORD
INC R0
DJNZ R4,SEND_LOOP
RET
;----------------------------------------------------------
SEND_TITLE:
MOV A,R0
CALL SEND_DATA
RET
;----------------------------------------------------------
SEND_PASSWORD:
MOV A,R0
CLR C
SUBB A,#65
MOV B,#4
MUL AB
ADD A,#PASS_1_RAM
MOV R1,A
MOV R3,#4
SEND_PASSWORD_LOOP:
MOV A,@R1
ADD A,#48
CALL SEND_DATA
INC R1
DJNZ R3,SEND_PASSWORD_LOOP
40
RET
;----------------------------------------------------------
KEYCHOOSE:
CJNE R7,#0,CHOOSE1
MOV A,STATUS
CJNE A,#0,CHOOSE1
MOV STATUS,#1
MOV COUNTER,#0
CHOOSE1:
CJNE R7,#1,CHOOSE2
MOV A,STATUS
CJNE A,#0,CHOOSE2
MOV STATUS,#2
MOV COUNTER,#0
CHOOSE2:
CJNE R7,#2,CHOOSE3
MOV A,STATUS
CJNE A,#0,CHOOSE3
MOV STATUS,#3
MOV COUNTER,#0
CHOOSE3:
CJNE R7,#3,CHOOSE4
MOV A,STATUS
CJNE A,#0,CHOOSE4
MOV STATUS,#4
MOV COUNTER,#0
41
CHOOSE4:
CJNE R7,#4,CHOOSE5
MOV R0,#7
CALL NUMBER_KEY_IN
CHOOSE5:
CJNE R7,#5,CHOOSE6
MOV R0,#4
CALL NUMBER_KEY_IN
CHOOSE6:
CJNE R7,#6,CHOOSE7
MOV R0,#1
CALL NUMBER_KEY_IN
CHOOSE7:
CJNE R7,#7,CHOOSE8
MOV STATUS,#0
MOV COUNTER,#0
CHOOSE8:
CJNE R7,#8,CHOOSE9
MOV R0,#8
CALL NUMBER_KEY_IN
CHOOSE9:
CJNE R7,#9,CHOOSE10
MOV R0,#5
CALL NUMBER_KEY_IN
CHOOSE10:
CJNE R7,#10,CHOOSE11
42
MOV R0,#2
CALL NUMBER_KEY_IN
CHOOSE11:
CJNE R7,#11,CHOOSE12
MOV R0,#0
CALL NUMBER_KEY_IN
CHOOSE12:
CJNE R7,#12,CHOOSE13
MOV R0,#9
CALL NUMBER_KEY_IN
CHOOSE13:
CJNE R7,#13,CHOOSE14
MOV R0,#6
CALL NUMBER_KEY_IN
CHOOSE14:
CJNE R7,#14,CHOOSE15
MOV R0,#3
CALL NUMBER_KEY_IN
CHOOSE15:
CJNE R7,#15,EXITC
MOV A,COUNTER
CJNE A,#4,EXITC
CALL PASSWORD_CHECK
MOV STATUS,#0
MOV COUNTER,#0
EXITC:
43
MOV R7,#255
RET
;----------------------------------------------------------
NUMBER_KEY_IN:
MOV A,STATUS
CJNE A,#0,NUMBER_KEY_IN_1
RET
NUMBER_KEY_IN_1:
MOV A,COUNTER
CJNE A,#4,PASSWORD_ENTER
RET
PASSWORD_ENTER:
MOV A,COUNTER
CLR C
ADD A,#PASS_TEMP
MOV R1,A
MOV A,R0
MOV @R1,A
INC COUNTER
RET
;----------------------------------------------------------
PASSWORD_CHECK:
MOV R0,#PASS_TEMP
MOV R4,#4
MOV A,STATUS
CJNE A,#1,PASSWORD_CHECK_2
44
MOV R1,#PASS_1_RAM
JMP START_CHECK
PASSWORD_CHECK_2:
CJNE A,#2,PASSWORD_CHECK_3
MOV R1,#PASS_2_RAM
JMP START_CHECK
PASSWORD_CHECK_3:
CJNE A,#3,PASSWORD_CHECK_4
MOV R1,#PASS_3_RAM
JMP START_CHECK
PASSWORD_CHECK_4:
MOV R1,#PASS_4_RAM
START_CHECK:
MOV A,@R0
MOV B,A
MOV A,@R1
CJNE A,B,WRONG_PASSWORD
INC R0
INC R1
DJNZ R4,START_CHECK
CALL PRINT_RESULT
CALL RIGHT_SCN
CALL RIGHT_ACTION
MOV R5,#200
CALL DELAY
SETB P3.7
45
RET
;----------------------------------------------------------
WRONG_PASSWORD:
CALL PRINT_RESULT
CALL WRONG_SCN
MOV R5,#200
CALL DELAY
RET
;----------------------------------------------------------
PRINT_RESULT:
MOV A,#00000001B
CALL WRITE_LCD_IR
MOV DPTR,#MESS6
MOV B,#3
CALL LCD_P1
MOV A,STATUS
ADD A,#48
CALL WRITE_LCD_DR
MOV DPTR,#MESS7
MOV B,#4
CALL LCD_P2
RET
;----------------------------------------------------------
RIGHT_SCN:
MOV A,STATUS
ADD A,#96
46
CALL SEND_DATA
MOV A,#49
CALL SEND_DATA
MOV DPTR,#MESS8
MOV B,#11
CALL LCD_P2
RET
;----------------------------------------------------------
RIGHT_ACTION:
MOV A,STATUS
CJNE A,#1,RIGHT_ACTION_1
CPL DIAL_FLAG
RET
RIGHT_ACTION_1:
CLR P3.7
RET
;----------------------------------------------------------
WRONG_SCN:
MOV A,STATUS
ADD A,#96
CALL SEND_DATA
MOV A,#48
CALL SEND_DATA
MOV DPTR,#MESS9
MOV B,#11
CALL LCD_P2
47
RET
;----------------------------------------------------------
LCD_SCAN:
MOV A,#00000001B
CALL WRITE_LCD_IR
MOV A,STATUS
CJNE A,#0,PRINT_ENTER
CALL PRINT_NORMAL_SCN
RET
PRINT_ENTER:
CALL PRINT_ENTER_SCN
CALL PRINT_SYMBOL
RET
;----------------------------------------------------------
PRINT_NORMAL_SCN:
MOV DPTR,#MESS2
MOV B,#1
CALL LCD_P1
MOV DPTR,#MESS3
MOV B,#1
CALL LCD_P2
MOV DPTR,#MESS10
MOV B,#11
CALL LCD_P1
JB DIAL_FLAG,NORMAL_SCN_ON
MOV DPTR,#MESS12
48
MOV B,#16
CALL LCD_P1
RET
NORMAL_SCN_ON:
MOV DPTR,#MESS11
MOV B,#16
CALL LCD_P1
RET
;----------------------------------------------------------
PRINT_ENTER_SCN:
MOV DPTR,#MESS4
MOV B,#0
CALL LCD_P1
MOV A,STATUS
ADD A,#48
CALL WRITE_LCD_DR
MOV DPTR,#MESS5
MOV B,#0
CALL LCD_P2
RET
;----------------------------------------------------------
PRINT_SYMBOL:
MOV A,#C8H
CALL WRITE_LCD_IR
MOV A,COUNTER
PRINT_LOOP:
49
CJNE A,#0,START_PRINT_SYMBOL
RET
START_PRINT_SYMBOL:
DEC A
PUSH A
MOV A,#2AH
CALL WRITE_LCD_DR
POP A
JMP PRINT_LOOP
;----------------------------------------------------------
NOCONTROL:
MOV B,#100
DIV AB
ADD A,#48
CALL WRITE_LCD_DR
MOV A,B
MOV B,#10
DIV AB
ADD A,#48
CALL WRITE_LCD_DR
MOV A,B
ADD A,#48
CALL WRITE_LCD_DR
RET
;----------------------------------------------------------
SEND_DATA:
50
CLR TI
MOV SBUF,A
JNB TI,$
CLR TI
CALL WAIT_1BIT
RET
;----------------------------------------------------------
WAIT_1BIT:
MOV TIMETEMP0,#200
DEL3:
DJNZ TIMETEMP0,DEL3
RET
;----------------------------------------------------------
SERVICE_232:
PUSH PSW
PUSH ACC
MOV R0_TEMP,R0
JB RI,RECEIVE_DATA
JMP EXIT_SERVICE_232
RECEIVE_DATA:
CLR RI
MOV A,SBUF
CJNE A,#65,CHECK1
MOV SET_TEMP,#0
JMP EXIT_SERVICE_232
CHECK1:
51
CJNE A,#66,CHECK2
MOV SET_TEMP,#4
JMP EXIT_SERVICE_232
CHECK2:
CJNE A,#67,CHECK3
MOV SET_TEMP,#8
JMP EXIT_SERVICE_232
CHECK3:
CJNE A,#68,CHECK4
MOV SET_TEMP,#12
JMP EXIT_SERVICE_232
CHECK4:
CJNE A,#69,CHECK5
MOV SET_TEMP,#16
JMP EXIT_SERVICE_232
CHECK5:
CALL CHECK_DATA
JC EXIT_SERVICE_232
CALL DATA_SET
INC SET_TEMP
EXIT_SERVICE_232:
MOV R0_TEMP,R0
POP ACC
POP PSW
RETI
;----------------------------------------------------------
52
CHECK_DATA:
CLR C
SUBB A,#48
JC IS_INQUIRE
MOV A,SBUF
SUBB A,#58
JNC IS_INQUIRE
CLR C
RET
IS_INQUIRE:
SETB INQUIRE
SETB C
RET
;----------------------------------------------------------
DATA_SET:
MOV A,SET_TEMP
ADD A,#PASS_1_RAM
MOV R0,A
MOV A,SBUF
CLR C
SUBB A,#48
MOV @R0,A
RET
;----------------------------------------------------------
INIT_SYSTEM:
MOV R1,#30H
53
MOV R0,#50H
MOV A,#0
INIT_LOOP:
MOV @R1,A
INC R1
DJNZ R0,INIT_LOOP
MOV STATUS,#0
MOV COUNTER,#0
CLR DIAL_FLAG
RET
;----------------------------------------------------------
;DELAY (25ms) * R5
;----------------------------------------------------------
DELAY:
MOV TIMETEMP0,#40
DEL1:
MOV TIMETEMP1,#249
DEL2:
DJNZ TIMETEMP1,DEL2
DJNZ TIMETEMP0,DEL1
DJNZ R5,DELAY
RET
;----------------------------------------------------------
INIT_232:
MOV SCON,#50H
MOV TMOD,#20H
54
MOV TL1,#FAH
MOV TH1,#FAH
SETB ES
SETB EA
SETB TR1
RET
;----------------LCD
------------------------------------------------
INIT_LCD:
MOV A,#00111000B
CALL WRITE_LCD_IR
MOV A,#00001100B
CALL WRITE_LCD_IR
MOV A,#00000001B
CALL WRITE_LCD_IR
MOV A,#00000010B
CALL WRITE_LCD_IR
MOV A,#00000110B
CALL WRITE_LCD_IR
RET
;----------------------------------------------------------
START_SCN:
MOV DPTR,#MESS0
MOV B,#3
CALL LCD_P1
MOV DPTR,#MESS1
55
MOV B,#2
CALL LCD_P2
MOV R5,#200
CALL DELAY
MOV A,#00000001B
CALL WRITE_LCD_IR
RET
;----------------------------------------------------------
LCD_P1:
MOV A,B
ADD A,#80H
CALL WRITE_LCD_IR
JMP FILL
;----------------
LCD_P2:
MOV A,B
ADD A,#C0H
CALL WRITE_LCD_IR
JMP FILL
;----------------
FILL:
CLR A
MOVC A,@A+DPTR
CJNE A,#0,L1
RET
L1:
56
CALL WRITE_LCD_DR
INC DPTR
JMP FILL
;----------------
WRITE_LCD_IR:
CALL CHECK_BUSY
MOV LCD_DBUS,A
CLR RS
CLR RW
SETB EN
NOP
CLR EN
RET
;-----------------------------------
WRITE_LCD_DR:
CALL CHECK_BUSY
MOV LCD_DBUS,A
SETB RS
CLR RW
SETB EN
NOP
CLR EN
RET
;----------------
CHECK_BUSY:
MOV LCD_DBUS,#FFH
57
CLR RS
SETB RW
SETB EN
MOV C,LCD_DBUS.7
CLR EN
JNC LCD_READY
JMP CHECK_BUSY
LCD_READY:
RET
;----------------------------------------------------------
MESS0: DB "Welcome To Use",0
MESS1: DB "Combination Lock",0
MESS2: DB "STATUS:OK",0
MESS3: DB "PRESS A-D TO ENTER",0
MESS4: DB "ENTER PASSWORD NO:",0
MESS5: DB "-------[ ]-------",0
MESS6: DB "PASSWORD NO:",0
MESS7: DB "RESULT:",0
MESS8: DB "RIGHT",0
MESS9: DB "WRONG",0
MESS10: DB "DAIL:",0
MESS11: DB "ON",0
MESS12: DB "OFF",0