📄 1
字号:
SETB CS
PUSH ACC
MOV R0,#8
MOV A,#11111000B
COMM1:
CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,COMM1
POP ACC
MOV R5,A
ANL A,#0F0H
MOV R0,#8
COMM2: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,COMM2
MOV A,R5
SWAP A
ANL A,#0F0H
MOV R0,#8
COMM3: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,COMM3
CLR CS
RET
;
;***********串行数据写入子程序****************
;写入数据字在A中
WRITE_DAT:
LCALL DELAY1
SETB CS
PUSH ACC
MOV R0,#8
MOV A,#11111010B
DATA1: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,DATA1
POP ACC
MOV R5,A
ANL A,#0F0H
MOV R0,#8
DATA2: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,DATA2
MOV A,R5
SWAP A
ANL A,#0F0H
MOV R0,#8
DATA3: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,DATA3
CLR CS
RET
;
;**************延时子程序**********************
;0.544ms
DELAY1:
MOV R7,#010H
D11: MOV R6,#010H
DJNZ R6,$
DJNZ R7,D11
RET
;0.13s
DELAY:
MOV R1,#00H
D2: MOV R2,#00H
DJNZ R2,$
DJNZ R1,D2
RET
;5.2s
DELAY5S:MOV R3,#40
DE5S: LCALL DELAY
DJNZ R3,DE5S
RET
DELAY1S:MOV R3,#9
DE1S: LCALL DELAY
DJNZ R3,DE1S
RET
;
;************16*8点阵字写入子程序共16个******************
WRITE_ASCII:
MOV R4,#16
DDDD: CLR A
MOVC A,@A+DPTR
LCALL WRITE_DAT
INC DPTR
DJNZ R4,DDDD
RET
;************16*8点阵字写入子程序共7个******************
WRITE_ASCII7:
MOV R4,#7
DDDD7: MOV A,@R0
LCALL WRITE_DAT
INC R0
DJNZ R4,DDDD7
RET
;************16*16点阵汉字写入子程序共7个***********
WRITE_HZ: ;WRITE 7 CHINESE TO LCD
MOV R4,#7
DD: CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL WRITE_DAT
CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL WRITE_DAT
DJNZ R4,DD
RET
;************16*16点阵汉字写入子程序共2个***********
WRITE_HZ2: ;WRITE 8 CHINESE TO LCD
MOV R4,#2
DD4: CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL WRITE_DAT
CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL WRITE_DAT
DJNZ R4,DD4
RET
;
;*****************************16*8点阵的字符代码表**********************************
TABLE1: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,3AH,3BH,3CH,3DH,3EH,20H
; 0 1 2 3 4 5 6 7 8 9 : ; < = > "不显"
;**********************************自造字符地址表***********************************
;
;******************"这里是16*16点阵的汉字代码表"************************************
CHINESE: DB "浙江海洋学院— "
CHINESE1: DB "单片机实验室 "
CHINESE3: DB "C03 电本(2) 班 "
CHINESE4: DB "楼然苗设计制作 "
CHINESE2: DB "距离: 厘米 "
CHINESE6: DB "报警: 厘米 "
CHINESE7: DB "警告! 距离太近 "
CHINESE8: DB "超声波测距器-J " ; 近报警状态
CHINESE9: DB "超声波测距器-Y " ; 远报警状态
CHINESE10:DB "警告! 距离太远 "
;;;;;;;;;;;;;;;;;;;;;;
BAOJ: PUSH ACC
PUSH PSW
MOV A,60H
CJNE A,40H,BAO1
CLR C
MOV A,61H
CJNE A,41H,BAO1
CLR C
MOV A,62H
CJNE A,42H,BAO1
CLR C
MOV A,63H
CJNE A,43H,BAO1
BAOJING:
CLR LAMPBLAK
CLR LED1
; CLR BELL
MOV A,#80H ;第一行左第一个字开始
LCALL WRITE_COM
MOV DPTR,#CHINESE7 ;警告! 距离太近
LCALL WRITE_HZ
POP PSW
POP ACC
RET
BBAO: SETB LAMPBLAK
SETB LED1
; SETB BELL
MOV A,#80H ;第一行左第一个字开始
LCALL WRITE_COM
MOV DPTR,#CHINESE8 ;超声波测距器--
LCALL WRITE_HZ
POP PSW
POP ACC
RET
;
BAO1: JC BBAO
LJMP BAOJING
;
YBAOJ: PUSH ACC
PUSH PSW
MOV A,60H
CJNE A,40H,BAO11
CLR C
MOV A,61H
CJNE A,41H,BAO11
CLR C
MOV A,62H
CJNE A,42H,BAO11
CLR C
MOV A,63H
CJNE A,43H,BAO11
BAOJING1:
CLR LAMPBLAK
CLR LED1
; CLR BELL
MOV A,#80H ;第一行左第一个字开始
LCALL WRITE_COM
MOV DPTR,#CHINESE10 ;警告! 距离太远
LCALL WRITE_HZ
POP PSW
POP ACC
RET
BBAO1: SETB LAMPBLAK
SETB LED1
; SETB BELL
MOV A,#80H ;第一行左第一个字开始
LCALL WRITE_COM
MOV DPTR,#CHINESE9 ;超声波测距器-Y
LCALL WRITE_HZ
POP PSW
POP ACC
RET
;
BAO11: JC BAOJING1
LJMP BBAO1
;以下为报警距离设定程序
SAFESET: CLR EA
CLR TR0
MOV A,#90H ;第二行左第一个字开始
LCALL WRITE_COM
MOV DPTR,#CHINESE6 ;显示报警:
LCALL WRITE_HZ
CLR LAMPBLAK
MOV 50H,40H
MOV 51H,41H
MOV 52H,42H
MOV 53H,43H
MOV 40H,60H
MOV 41H,61H
MOV 42H,62H
MOV 43H,63H
LCALL DATAUP
SAFESET1: JNB KEY0,SAFESET1
SAFESET10: LCALL DATAUP
JNB KEY0,SAFESET2
JNB KEY1,SAFEADD1
JNB KEY2,SAFESUBB1
LJMP SAFESET10
SAFESET2: LJMP SAFESET20
SAFEADD1: MOV R7,43H
LCALL ADD1
MOV 43H,A
LJMP SAFESET10
SAFESUBB1: MOV R7,43H
LCALL SUBB1
MOV 43H,A
LJMP SAFESET10
SAFESET20: CLR BELL
JNB KEY0,SAFESET20
SETB BELL
LCALL DATAUP
JNB KEY0,SAFESET3
JNB KEY1,SAFEADD2
JNB KEY2,SAFESUBB2
LJMP SAFESET20
SAFESET3: LJMP SAFESET30
SAFEADD2: MOV R7,42H
LCALL ADD1
MOV 42H,A
LJMP SAFESET20
SAFESUBB2: MOV R7,42H
LCALL SUBB1
MOV 42H,A
LJMP SAFESET20
SAFESET30: JNB KEY0,SAFESET30
LCALL DATAUP
JNB KEY0,SAFESET4
JNB KEY1,SAFEADD3
JNB KEY2,SAFESUBB3
LJMP SAFESET30
SAFESET4: LJMP SAFESET40
SAFEADD3: MOV R7,41H
LCALL ADD1
MOV 41H,A
LJMP SAFESET30
SAFESUBB3: MOV R7,41H
LCALL SUBB1
MOV 41H,A
LJMP SAFESET30
SAFESET40: JNB KEY0,SAFESET40
LCALL DATAUP
JNB KEY0,SAFESET5
JNB KEY1,SAFEADD4
JNB KEY2,SAFESUBB4
LJMP SAFESET40
SAFESET5: LJMP SAFESET50
SAFEADD4: MOV R7,40H
LCALL ADD1
MOV 40H,A
LJMP SAFESET40
SAFESUBB4: MOV R7,40H
LCALL SUBB1
MOV 40H,A
LJMP SAFESET40
SAFESET50: JNB KEY0,SAFESET50
MOV 60H,40H
MOV 61H,41H
MOV 62H,42H
MOV 63H,43H
MOV 40H,50H
MOV 41H,51H
MOV 42H,52H
MOV 43H,53H
MOV A,#90H ;第二行左第一个字开始
LCALL WRITE_COM
MOV DPTR,#CHINESE2 ;WORD 16*16点阵TEST
LCALL WRITE_HZ
SETB LAMPBLAK
SETB EA
SETB TR0
LJMP START1
ADD1: MOV A,R7
ADD A,#01H
ADD20:
CLR C
MOV R3,A
SUBB A,#0AH
JC ADD10
MOV A,#00H
JNB KEY1,ADD20
RET
ADD10: MOV A,R3
JNB KEY1,ADD20
RET
SUBB1: MOV A,R7
DEC A
SUBB20: CLR C
MOV R3,A
SUBB A,#0AH
JC SUB12
MOV A,#09H
JNB KEY2,SUBB20
RET
SUB12: MOV A,R3
JNB KEY2,SUBB20
RET
;
END ;程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -