⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_kb.asm

📁 这是本人以前编的机遇PIC的汽车防盗程序
💻 ASM
字号:
COMM	EQU	21H
LCD_DAT	EQU	40H
REC_COM	EQU	23H
PWDBUF	EQU	30H
SOUND	EQU	P0.3
RS	EQU	P3.6
RW	EQU	P3.5
EN	EQU	P3.4
BACK	EQU	P3.7
B_LIGHT	EQU	P0.0
COM_DATA	EQU	P3.3
COM_CLK		EQU	P3.2
RECEIVED	EQU	00H


	ORG 0000H
	JMP MAIN
	ORG 0003H
	JMP COM

	ORG 0040H
MAIN:	CLR EN
	CLR COM_CLK
	SETB BACK
	SETB SOUND
	MOV PWDBUF,#0AAH
	MOV TCON,#00H
	MOV SCON,#01010000B
	MOV TMOD,#00100000B
	MOV PCON,#0
	MOV TH1,#0FDH
	MOV TL1,#0FDH
	SETB TR1	
	CALL RESET
	MOV COMM,#01H
	CALL W_COMM
	MOV COMM,#02H
	CALL W_COMM
	MOV COMM,#00000110B
	CALL W_COMM
	MOV COMM,#00001100B
	CALL W_COMM
	CLR B_LIGHT
	MOV LCD_DAT,#4FH
	MOV LCD_DAT+1,#4BH
	MOV R7,#2
	CALL W_DATA		;显示“OK”
	MOV SBUF,#0C3H
	JNB TI,$
	CLR TI
	MOV R7,#0FFH
	JB RI,$+5
	DJNZ R7,$-3
	CLR RI	
	MOV R6,#6
LOOP2:	MOV R7,#0FFH
LOOP1:	CALL DE1MS
	DJNZ R7,LOOP1
	DJNZ R6,LOOP2		;DELAY 2S
	CLR SOUND
	MOV COMM,#00001000B	;CUT OFF DISPLAY
	CALL W_COMM
	MOV R7,#0FFH
S_DE:	CALL DE1MS
	DJNZ R7,S_DE
	SETB SOUND
	SETB B_LIGHT
	SETB COM_CLK
	SETB COM_DATA
	SETB EX0
	SETB EA
CONT1:	JNB BACK,CONT2
BACK_REP:
	CLR RI
	MOV SBUF,#0E1H
	JNB TI,$
	CLR TI
	MOV R7,#0FFH
	JB RI,$+7
	DJNZ R7,$-3
	AJMP CONT1
	CLR RI
	MOV A,SBUF
	CJNE A,#55H,BACK_REP
	MOV R7,#0FFH
	JB RI,$+7
	DJNZ R7,$-3
	AJMP CONT1
	CLR RI
	MOV A,SBUF
	MOV B,A
	MOV R7,#0FFH
	JB RI,$+7
	DJNZ R7,$-3
	AJMP CONT1
	CLR RI
	MOV A,SBUF
	CJNE A,B,BACK_REP
	ANL A,#0FH
	CJNE A,#00001010B,BACK_REP
	CLR B_LIGHT
	MOV A,B
	MOV COMM,#01H
	CALL W_COMM
	MOV COMM,#02H
	CALL W_COMM
	MOV R0,#LCD_DAT
	JNB ACC.7,BACK_CON
	MOV DPTR,#SECURITY
	JMP BACK_CON0
BACK_CON:
	MOV DPTR,#DANGER
BACK_CON0:
	MOV R7,#8
BACK_CON1:
	CLR A
	MOVC A,@A+DPTR
	MOV @R0,A
	INC DPTR
	INC R0
	DJNZ R7,BACK_CON1
	MOV R7,#8
	CALL W_DATA
	MOV COMM,#00001100B
	CALL W_COMM		;显示倒车状态
	MOV R7,#10
BACK_CON2:
	CALL DE1MS
	DJNZ R7,BACK_CON2
TEMP2:	JMP CONT1
TEMP:	JMP CONT3
CONT2:	MOV COMM,#00001000B
	CALL W_COMM		;CUT OFF DISPLAY
	SETB B_LIGHT
	JNB RECEIVED,TEMP2
	CLR RECEIVED
	MOV R1,REC_COM
	CJNE R1,#02H,TEMP
ALERT_CON2:
	CLR EA
	CLR COM_CLK
	CLR IE0
	MOV SBUF,#0D2H
	JNB TI,$
	CLR TI
	MOV R7,#0FFH
	JB RI,$+7
	DJNZ R7,$-3
	AJMP ALERT_CON1
	CLR RI
	MOV A,SBUF		;声光报警处理
	CJNE A,#55H,ALERT_CON1
	JMP CONTT3
ALERT_CON1:
	MOV SBUF,#0C3H
	JNB TI,$
	CLR TI
	MOV R7,#0FFH
	JB RI,$+7
	DJNZ R7,$-3
	CLR RI
CONTT3:	CLR EA
	CLR COM_CLK
	CLR IE0
	CLR B_LIGHT
	MOV COMM,#01H
	CALL W_COMM
	MOV COMM,#02H
	CALL W_COMM
	MOV R0,#LCD_DAT
	MOV DPTR,#PASSWORD
	MOV R7,#8
CHECK_CON1:
	CLR A
	MOVC A,@A+DPTR
	MOV @R0,A
	INC DPTR
	INC R0
	DJNZ R7,CHECK_CON1
	MOV COMM,#10000000B
	CALL W_COMM		;SET AC IS 00H
	MOV R7,#8
	CALL W_DATA
	MOV COMM,#11000000B
	CALL W_COMM		;SET AC IS 40H
	MOV LCD_DAT,#00111010B	;DISPLAY ":"
	MOV LCD_DAT+1,#20H
	MOV R7,#2
	CALL W_DATA
	MOV COMM,#00001111B
	CALL W_COMM		;TURN ON,AND FLASH
	MOV R0,#PWDBUF
	MOV R6,#7
CHECK_LOOP:
	MOV @R0,#0AAH
	INC R0
	DJNZ R6,CHECK_LOOP
	MOV R0,#PWDBUF
	MOV R6,#6
CHECK_LOOP1:
	CALL SCANKB
	CJNE A,#0AH,CHECK_CON2
CHECK1:	CJNE R6,#6,CHECK_CON3
	INC R6
	JMP CHECK_CON4
CHECK_CON3:
	INC R6
	INC R6
	DEC R0
	MOV @R0,#0AAH
	MOV P1,#0FFH
	CLR RS
	SETB RW
CHECK_CON5:
	SETB EN
	MOV A,P1
	CLR EN
	JB ACC.7,CHECK_CON5
	CLR C
	SUBB A,#1
	ORL A,#10000000B
	MOV COMM,A
	CALL W_COMM
	MOV LCD_DAT,#20H
	MOV R7,#1
	CALL W_DATA
	MOV COMM,A
	CALL W_COMM
	JMP CHECK_CON4
CHECK_CON2:
	CJNE A,#0BH,CHECK_CON6
	JMP CHECK_EXIT
CHECK_CON6:
	MOV @R0,A
	INC R0
	MOV LCD_DAT,#2AH	;DISPLAY "*"
	MOV R7,#1
	CALL W_DATA
CHECK_CON4:
	DJNZ R6,CHECK_LOOP1
	ACALL SCANKB
	CJNE A,#0AH,$+5
	AJMP CHECK1
	CJNE A,#0BH,$-7
CHECK_EXIT:
	CJNE R6,#6,PWD_VALID
	JMP INVALID1
PWD_VALID:
	MOV R0,#PWDBUF
	MOV R1,#PWDBUF
	MOV R7,#3
PWD11:	INC R0
	MOV A,@R0
	CJNE A,#0AAH,PWD10
	DEC R0
	MOV A,@R0
	MOV @R1,A
	INC R1
	JMP PWDEND
PWD10:	SWAP A
	DEC R0
	ORL A,@R0
	MOV @R1,A
	INC R0
	INC R0
	INC R1
	DJNZ R7,PWD11
PWDEND:	MOV @R1,#0AAH
	SETB EA
	SETB COM_CLK
CHECK11:	JNB RECEIVED,$
	CLR RECEIVED
	MOV COMM,#01H
	CALL W_COMM
	MOV COMM,#02H
	CALL W_COMM
	MOV COMM,#00000110B
	CALL W_COMM
	MOV COMM,#00001100B
	CALL W_COMM
CHECK88:
	JNB RECEIVED,$
	CLR RECEIVED
	MOV A,REC_COM
	CJNE A,#04H,INVALID
CHECK0:	MOV SBUF,#0C3H
	JNB TI,$
	CLR TI
	MOV R7,#0FFH
	JB RI,$+7
	DJNZ R7,$-3
	AJMP CONT1
	CLR RI
	MOV A,SBUF		;声光报警处理
	CJNE A,#55H,CHECK0	
	MOV LCD_DAT,#4FH
	MOV LCD_DAT+1,#4BH
	MOV R7,#2
	CALL W_DATA		;显示“OK”
	CLR SOUND
	MOV R6,#8
LOOP20:	MOV R7,#0FFH
LOOP10:	CALL DE1MS
	DJNZ R7,LOOP10
	SETB SOUND
	DJNZ R6,LOOP20		;DELAY 2S
	MOV COMM,#00001000B	;CUT OFF DISPLAY
	CALL W_COMM
	SETB SOUND
	SETB B_LIGHT
	JMP CONT1
INVALID:
	CLR EA
	CLR COM_CLK
	CLR IE0
INVALID1:	
	CLR SOUND
	MOV COMM,#01H
	CALL W_COMM
	MOV COMM,#02H
	CALL W_COMM
	MOV COMM,#00000110B
	CALL W_COMM
	MOV COMM,#00001100B
	CALL W_COMM	
	MOV R0,#LCD_DAT
	MOV DPTR,#ERROR
	MOV R7,#5
INV_LOOP:
	CLR A
	MOVC A,@A+DPTR
	MOV @R0,A
	INC R0
	INC DPTR
	DJNZ R7,INV_LOOP
	MOV R7,#5
	CALL W_DATA
	MOV R6,#8
LOOP22:	MOV R7,#0FFH
LOOP11:	CALL DE1MS
	DJNZ R7,LOOP11
	SETB SOUND
	DJNZ R6,LOOP22		;DELAY 2S
	MOV COMM,#00001000B	;CUT OFF DISPLAY
	CALL W_COMM
	SETB SOUND
	JMP CONTT3		;CONTINUE TO CHECK PASSWORD

TEMP1:	JMP CONT4
CONT3:	CJNE R1,#06H,TEMP1
	CLR SOUND
	CLR B_LIGHT
	MOV COMM,#01H
	CALL W_COMM
	MOV COMM,#02H
	CALL W_COMM
	MOV COMM,#00000110B
	CALL W_COMM
	MOV COMM,#00001100B
	CALL W_COMM	
	MOV R0,#LCD_DAT
	MOV DPTR,#OPENED
	MOV R7,#6
OPEN1:
	CLR A
	MOVC A,@A+DPTR
	MOV @R0,A
	INC R0
	INC DPTR
	DJNZ R7,OPEN1
	MOV R7,#6
	CALL W_DATA
OPEN3:	MOV R7,#0B0H
OPEN2:	CALL DE1MS
	CALL DE1MS
	DJNZ R7,OPEN2
	CPL SOUND
	JNB RECEIVED,OPEN3
	CLR RECEIVED
	MOV A,REC_COM
	CJNE A,#07H,OPEN3
	SETB SOUND
	MOV COMM,#01H
	CALL W_COMM
	MOV COMM,#02H
	CALL W_COMM
	MOV COMM,#00000110B
	CALL W_COMM
	MOV COMM,#00001100B
	CALL W_COMM	
	MOV R0,#LCD_DAT
	MOV DPTR,#CLOSED
	MOV R7,#6
CLOSE1:
	CLR A
	MOVC A,@A+DPTR
	MOV @R0,A
	INC R0
	INC DPTR
	DJNZ R7,CLOSE1
	MOV R7,#6
	CALL W_DATA
	MOV R6,#8
LOOP44:	MOV R7,#0FFH
LOOP33:	CALL DE1MS
	DJNZ R7,LOOP33
	DJNZ R6,LOOP44		;DELAY 2S
	MOV COMM,#00001000B	;CUT OFF DISPLAY
	CALL W_COMM
	SETB B_LIGHT
TEMP3:	JMP CONT1		

CONT4:	CJNE R1,#03H,TEMP3
	SETB RECEIVED
	JMP ALERT_CON2

SCANKB:	
	MOV P2,#00000011B
	MOV A,P2
	XRL A,#00000011B
	JZ SCANKB
	MOV R4,#20
L_KB:	CALL DE1MS
	DJNZ R4,L_KB
	MOV A,P2
	XRL A,#00000011B
	JZ SCANKB
	MOV R5,#6
	MOV A,#01111111B
L1_KB:	PUSH ACC
	MOV P2,A
	MOV A,P2
	ORL A,#11111100B
	CPL A
	JZ KBNEXT1
	POP ACC
	MOV A,P2
	JMP L2_KB
KBNEXT1:	POP ACC
	SETB C
	RRC A
	DJNZ R5,L1_KB
	JMP SCANKB
L2_KB:	MOV DPTR,#KEYTABLE
	MOV B,A
	MOV R5,#12
L5_KB:	CLR A
	MOVC A,@A+DPTR
	CJNE A,B,L3_KB
	INC DPTR
	CLR A
	MOVC A,@A+DPTR
	PUSH ACC
	CLR SOUND
KBNEXT2:	MOV P2,#00000011B
	MOV A,P2
	XRL A,#00000011B
	JNZ KBNEXT2
	MOV R4,#20
L4_KB:	CALL DE1MS
	DJNZ R4,L4_KB
	SETB SOUND
	POP ACC
	RET
L3_KB:	INC DPTR
	INC DPTR	
	DJNZ R5,L5_KB
	MOV A,#0FFH
	RET
KEYTABLE:
DB 01111101B,0AH,01111110B,0BH,10111101B,08H,10111110B,09H
DB 11011101B,06H,11011110B,07H,11101101B,04H,11101110B,05H
DB 11110101B,02H,11110110B,03H,11111001B,00H,11111010B,01H

RESET:	CLR RS
	CLR RW
	CLR EN
	MOV P1,#30H
	SETB EN
	CLR EN
	MOV R6,#4
L_RST:	CALL DE1MS
	DJNZ R6,L_RST
	MOV P1,#30H
	SETB EN
	CLR EN
	CALL DE1MS
	SETB EN
	CLR EN
	MOV COMM,#00111000B
	CALL W_COMM
	RET
W_COMM:	PUSH ACC
	CLR RS
	SETB RW
L_COMM:	MOV P1,#0FFH
	SETB EN
	MOV A,P1
	CLR EN
	JB ACC.7,L_COMM
	CLR RW
	MOV P1,COMM
	SETB EN
	CLR EN
	MOV P1,#0FFH
	POP ACC
	RET

W_DATA:	PUSH 00H
	PUSH ACC
	MOV R0,#LCD_DAT
W_DATA1:	SETB RW
	CLR RS
L_DAT1:	MOV P1,#0FFH
	SETB EN
	MOV A,P1
	CLR EN
	JB ACC.7,L_DAT1
	CLR RW
	SETB RS
	SETB EN
	MOV P1,@R0
	CLR EN
	INC R0
	DJNZ R7,W_DATA1
	MOV P1,#0FFH
	POP ACC
	POP 00H
	RET
R_DATA:	SETB RW
	CLR RS
L_DAT2:	MOV P1,#0FFH
	SETB EN
	MOV A,P1
	CLR EN
	JB ACC.7,L_DAT2
	SETB RS
	SETB EN
	MOV LCD_DAT,P1
	CLR EN
	RET

DE1MS:	PUSH 07H
	MOV R7,#250
L_DE1MS:	NOP
	NOP
	NOP
	NOP
	DJNZ R7,L_DE1MS
	POP 07H
	RET

COM:
	CLR EA
	PUSH ACC
	PUSH 00H
	PUSH 01H
	PUSH 02H
	CLR A
	MOV R0,#4
COM0:	MOV R2,#50
	JB COM_CLK,$+7
	DJNZ R2,$-3
	AJMP COM2
	MOV C,COM_DATA
	RLC A
	MOV R2,#50
	JNB COM_CLK,$+7
	DJNZ R2,$-3
	AJMP COM2
	DJNZ R0,COM0
	JB ACC.3,COM2
COM1:	CLR COM_DATA
	MOV R1,#50
	DJNZ R1,$
	SETB COM_DATA
	MOV REC_COM,A
	CJNE A,#03H,COM_END
	MOV R0,#PWDBUF
COM4:	MOV A,@R0
	MOV R1,#8
COM5:	MOV R2,#50
	JNB COM_CLK,$+7
	DJNZ R2,$-3
	AJMP COM2
	RLC A
	MOV COM_DATA,C
	MOV R2,#50
	JB COM_CLK,$+7
	DJNZ R2,$-3
	AJMP COM2
	DJNZ R1,COM5
	MOV A,@R0
	CJNE A,#0AAH,COM6
	JMP COM_END
COM6:	INC R0
	JMP COM4
COM_END:SETB RECEIVED
COM2:	SETB COM_CLK
	SETB COM_DATA
	POP 02H
	POP 01H
	POP 00H
	POP ACC
	CLR IE0
	SETB EA
	RETI
SECURITY:
DB 53H,45H,43H,55H,52H,49H,54H,59H
DANGER:
DB 44H,41H,4EH,47H,45H,52H,20H,20H
ERROR:
DB 45H,52H,52H,4FH,52H
PASSWORD:
DB 50H,41H,53H,53H,57H,4FH,52H,44H
OPENED:
DB 4FH,50H,45H,4EH,45H,44H
CLOSED:
DB 43H,4CH,4FH,53H,45H,44H
	END  	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -