📄 crycomm rx.a51
字号:
INCLUDE REG_51.PDF
RB0 EQU 000H ; Select Register Bank 0
RB1 EQU 008H ; Select Register Bank 1 ...poke to PSW to use
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; PORT DECLERATION
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
BUZZER EQU P3.1
RECEIVE EQU P3.3
READ EQU P3.4
; ***LCD CONTROL***
LCD_RS EQU P1.7 ;LCD REGISTER SELECT LINE
LCD_E EQU P1.6 ;LCD ENABLE LINE
LCD_DB4 EQU P1.5 ;PORT 1 IS USED FOR DATA
LCD_DB5 EQU P1.4 ;USED FOR DATA
LCD_DB6 EQU P1.3 ;FOR DATA
LCD_DB7 EQU P1.2 ;FOR DATA
; ***CURSOR CONTROL INSTRUCTIONS***
OFFCUR EQU 0CH
BLINKCUR EQU 0DH
; ***DISPLAY CONTROL INSTRUCTIONS***
CLRDSP EQU 01H
ONDSP EQU 0CH
; ***SYSTEM INSTRUCTIONS***
CONFIG EQU 28H ; 4-BIT DATA,2 LINES,5X7 MATRIX LCD
ENTRYMODE EQU 6 ; INCREMENT CURSOR DON'T SHIFT DISPLAY
DSEG ; This is internal data memory
ORG 20H ; Bit adressable memory
COUNT: DS 1
;CRYP: DS 1
;COUNTS: DS 1
CNN: DS 1
MSG: DS 66
STACK: DS 1
CSEG ; Code begins here
; ---------==========----------==========---------=========---------
; Main routine. Program execution starts here.
; ---------==========----------==========---------=========---------
ORG 00H ; Reset
; ---------==========----------==========---------=========---------
MAIN:
MOV SP,#65H
MOV PSW,#RB0 ; Select register bank 0
CLR BUZZER
CALL RESETLCD4
CALL INITLCD4
CALL TITLE1
MOV TMOD,#20H
MOV TH1,#0A0H ;300
MOV SCON,#50H
MOV R1,#MSG
SETB TR1
CALL DISP
TGH1: CALL CLEAR_RAM
TGH: JNB RI,$
CLR RI
MOV A,SBUF
CJNE A,#0AAH,TGH ;SYNC
JNB RI,$
CLR RI
MOV CNN,SBUF ;GET MESSAGE LENGTH
MOV R2,CNN
MOV R1,#MSG
DOWNS: JNB RI,$
CLR RI
MOV A,SBUF
CLR C
SUBB A,#7AH
JNC TGH1 ;JMP IF ABNORMAL
MOV A,SBUF
CLR C
SUBB A,#19H
JC TGH1 ;JMP IF ABNORMAL
MOV @R1,SBUF
INC R1
DJNZ R2,DOWNS
SETB BUZZER
CALL MSG_RECEIVED
SETB READ
SETB RECEIVE
SDF3: JNB READ,SDF1
JNB RECEIVE,SDF2
AJMP SDF3
SDF1: CLR BUZZER
CALL DELAY
JNB READ,$
CALL DELAY
AJMP SDF4
SDF2: CLR BUZZER
CALL DELAY
JNB RECEIVE,$
CALL DELAY
AJMP SDF4
SDF4: CALL ALGO_DISP ;DISP SELECT ALGORITHM
SETB RECEIVE
SETB READ
FGB3: JNB RECEIVE,FGB1
JNB READ,FGB2
AJMP FGB3
FGB1: CALL DELAY
JNB RECEIVE,$
MOV COUNT,#30H
MOV A,MSG
CJNE A,#20H,KEY_WRONG
CALL SELECT_KEY
MOV A,COUNT
CJNE A,MSG+1,KEY_WRONG
AJMP DISPLAY_TEXT
FGB2:
CALL DELAY
JNB READ,$
MOV COUNT,#30H
MOV A,MSG
CJNE A,#21H,KEY_WRONG
CALL SELECT_KEY
MOV A,COUNT
CJNE A,MSG+1,KEY_WRONG
AJMP DISPLAY_TEXT
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
KEY_WRONG:
MOV DPTR,#MSG32
CALL LCD_MSG
ajmp $
MSG32:
DB 1H,80H,'* Invalid Key *',0C0H,'################',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DISPLAY_TEXT:
MOV R4,#01H ;DISPLAY ON LCD
CALL WRLCDCOM4
CALL MDELAY
MOV R4,#80H ;FIRST LINE
CALL WRLCDCOM4
CALL MDELAY
MOV R1,#MSG+2
MOV R2,#16
TOPS: MOV A,@R1
INC R1
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
DJNZ R2,TOPS
MOV R4,#0C0H ;SECOND LINE
CALL WRLCDCOM4
CALL MDELAY
MOV R1,#MSG+18
MOV R2,#16
TOPS1: MOV A,@R1
INC R1
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
DJNZ R2,TOPS1
SETB READ
SETB RECEIVE
HEH1: JNB RECEIVE,DDWN
JB READ,HEH1
CALL MDELAY
JNB READ,$
;SECOND DISP
MOV R4,#01H ;DISPLAY ON LCD
CALL WRLCDCOM4
CALL MDELAY
MOV R4,#80H ;FIRST LINE
CALL WRLCDCOM4
CALL MDELAY
MOV R1,#MSG+34
MOV R2,#16
TAPS: MOV A,@R1
INC R1
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
DJNZ R2,TAPS
MOV R4,#0C0H ;SECOND LINE
CALL WRLCDCOM4
CALL MDELAY
MOV R1,#MSG+50
MOV R2,#16
TAPS1: MOV A,@R1
INC R1
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
DJNZ R2,TAPS1
SETB RECEIVE
SETB READ
EDF2: JNB READ,EDF1
JB RECEIVE,EDF2
DDWN: CALL DELAY
CALL DISP
JNB RECEIVE,$
CALL DELAY
AJMP TGH1
EDF1: CALL DELAY
JNB READ,$
CALL DELAY
AJMP DISPLAY_TEXT
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DELAY:
MOV R6,#0FFH
RE1: MOV R7,#0FFH
RE: NOP
DJNZ R7,RE
DJNZ R6,RE1
RET
;**********************************************************
CLEAR_RAM:
MOV R0,#MSG
MOV R5,#66
MOV A,#' '
PEER: MOV @R0,A
INC R0
DJNZ R5,PEER
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
SELECT_KEY:
MOV A,COUNT
CJNE A,#30H,CVF0
CALL ASK_KEY0
AJMP CVFF
CVF0: CJNE A,#31H,CVF1
CALL ASK_KEY1
AJMP CVFF
CVF1: CJNE A,#32H,CVF2
CALL ASK_KEY2
AJMP CVFF
CVF2: CJNE A,#33H,CVF3
CALL ASK_KEY3
AJMP CVFF
CVF3: CJNE A,#34H,CVF4
CALL ASK_KEY4
AJMP CVFF
CVF4: CJNE A,#35H,CVF5
CALL ASK_KEY5
AJMP CVFF
CVF5: CJNE A,#36H,CVF6
CALL ASK_KEY6
AJMP CVFF
CVF6: CJNE A,#37H,CVF7
CALL ASK_KEY7
AJMP CVFF
CVF7: CJNE A,#38H,CVF8
CALL ASK_KEY8
AJMP CVFF
CVF8: CJNE A,#39H,CVF9
CALL ASK_KEY9
AJMP CVFF
CVF9: MOV COUNT,#30H
AJMP SELECT_KEY
CVFF:
SETB RECEIVE
SETB READ
FCD3: JNB RECEIVE,FCD1
JNB READ,FCD2
AJMP FCD3
FCD2: CALL DELAY
JNB READ,$
RET
FCD1: INC COUNT
MOV A,COUNT
CALL DELAY
JNB RECEIVE,$
AJMP SELECT_KEY
;##########################################################
; DISPLAY ROUTINES
;##########################################################
TITLE1:
MOV DPTR,#MSAG1
CALL LCD_MSG
RET
MSAG1:
DB 1H,80H,'Securred Comm',0C3H,'Automation',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DISP:
MOV DPTR,#MSAG2
CALL LCD_MSG
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -