64
自動控制工程學系專題製作 8051密碼鎖-可使用手機發送警報 An 8051 Electronic Combination Lock – Can Use Cell Phone To Give Alarm 指導教授:黃建立 生:詹硯廸 中華民國九十五年五月三十日

An 8051 Electronic Combination Lock – Can Use Cell Phone ... · The 8051 electronic combination lock use the basic assembler of 8051.To Combine LCD, keyboard, a bunch of communication

  • Upload
    dangthu

  • View
    220

  • Download
    0

Embed Size (px)

Citation preview

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