📄 dskeyn.asm
字号:
ORG 0000H
LJMP START
ORG 0003H
;LJMP KEY_SCAN ;键盘扫描子程序
ORG 000BH ;定时器0中断入口地址
LJMP START
ORG 0013H
LJMP PARK ;云台控制输入子程序
ORG 0023H ;串口中断入口地址
LJMP RS_LINK ;串行通讯子程序
ORG 002BH
;LJMP START
ADD_READ EQU P3.5 ;0有效
WATCH_DOG EQU P3.6 ;看门狗
RS485_TR EQU P3.7 ;RS485收发控制
WORD_NUM EQU 1FH ;每行字符数
H_NUM EQU 1EH ;行号
hfirst_add equ 1dh ;行首址
B_C_STATE EQU 1CH
KEY_H_VAL EQU 53H ;行值
KEY_L_VAL EQU 52H ;列值
KEY_H_L_VAL EQU 54H ;行列值
RS EQU P2.7
E EQU P2.6
RW EQU P3.6
SHIFT_VAL EQU 2AH
SHIFT_LED EQU P3.4
KEY_DATA1 EQU 20H
KEY_DATA2 EQU 21H
KEY_DATA EQU 22H
KEY_DATA_C EQU 24H
KEY_TIMES EQU 26H
ORG 0100H
; ******************************
; 初始化主程序
;*******************************
START: MOV SP, #5EH ;堆栈指针
CLR RS485_TR ;RS485处于接收状态
MOV IE, #80H
MOV SCON, #050H ;串行接收方式1,SM2=0
MOV TMOD, #20H ;T1为方式2,T0为方式0
MOV TH1, #0FDH
MOV TL1, #0FDH
MOV P0, #0FFH
CLR E
CLR RS
;-----------显示屏初始显示------------
;----LCD初始化---------
LCALL INITL
MOV A, #0CH ;开显示,关游标
LCALL ORDER_INPUT
NOP
NOP
MOV A, #01H
LCALL ORDER_INPUT
NOP
NOP
CPL WATCH_DOG
;-------第一行显示' '--------
MOV HFIRST_ADD, #80H
MOV DPTR, #TAB_FIRSTH
NOP
NOP
LCALL WORD_DISPLAY
NOP
NOP
CPL WATCH_DOG
;-------第二行显示' '--------
MOV HFIRST_ADD, #90H
MOV DPTR, #TAB_SECONDH
NOP
NOP
LCALL WORD_DISPLAY
NOP
NOP
CPL WATCH_DOG
;-------第三行显示'DS-8000M'--------
MOV HFIRST_ADD, #88H
MOV DPTR, #TAB_THIRDH
NOP
NOP
LCALL WORD_DISPLAY
NOP
NOP
CPL WATCH_DOG
;-------第四行显示'全撤防 无报警'--------
MOV HFIRST_ADD, #98H
MOV DPTR, #TAB_FOURH
NOP
NOP
LCALL WORD_DISPLAY
NOP
NOP
CPL WATCH_DOG
;--------------------------------
SETB TR1 ;T1启动
SETB ET0 ;T0开中断
SETB TR0 ;T0启动
CLR IT0 ;中断方式为电平触发
CLR IT1
MOV TH0, #00H ;T0清零
MOV TL0, #00H
SETB EX0 ;INT0/INT1开中断
SETB EX1
MOV B_C_STATE , #00H ;布/撤防状态,00-撤防,01-布防
;--------------------------------------
MOV P2, #0FFH
CLR ADD_READ
MOV A, P2
MOV 50H, A
MOV 51H, A
ANL A, #0FH
ADD A, #30H
MOV 50H, A ;本机地址存入50H单元
MOV A, 51H
ANL A, #30H
MOV 51H, A ;协议选择存入51H,用于外接解码盒
SETB ADD_READ
MOV P2, #0E0H
MOV P1, #0FFH
MOV R1, #30H ;30H--3FH赋初值
MOV R2, #00H
MAIN_CONT: MOV @R1, #20H
INC R1
MOV @R1, #20H
INC R2
NOP
NOP
CJNE R2, #08H, MAIN_CONT
;*************************************
; 监控程序
;*************************************
MAIN: CLR RI
CLR TI
SETB EX0
SETB EX1
SETB EA
SETB ES ;串行开中断
MOV TH0, #00H ;T0清零
MOV TL0, #00H
CLR RS485_TR
CPL WATCH_DOG ;看门狗
LCALL DELAY2
MOV TH0, #00H
MOV TL0, #00H
LJMP MAIN
;***************************************
; 显示汉字子程序
;***************************************
WORD_DISPLAY: MOV TH0, #00H ;T0清零
MOV TL0, #00H
NOP
MOV WORD_NUM, #08H ;字符数
MOV A, HFIRST_ADD
LCALL ORDER_INPUT
NOP
NOP
CLR A
WORD_CONT1: MOVC A, @A+DPTR
LCALL DATA_INPUT
NOP
CLR A
INC DPTR
MOVC A, @A+DPTR
LCALL DATA_INPUT
NOP
INC DPTR
CLR A
DJNZ WORD_NUM, WORD_CONT1
RET
;***************************************
; LCD初始化子程序
;***************************************
INITL: MOV TH0, #00H ;T0清零
MOV TL0, #00H
CLR RS
CLR RW
SETB E
MOV P0, #30H
NOP
MOV A, #01H ;清楚屏幕文字,地址指针指向00H
LCALL ORDER_INPUT
CLR E
RET
;**************************************
; 写指令子程序
;**************************************
ORDER_INPUT: MOV TH0, #00H ;T0清零
MOV TL0, #00H
LCALL CHK_BUSY
NOP
CLR RS
CLR RW
SETB E
MOV P0, A
NOP
CLR E
NOP
MOV P0, #0FFH
RET
;**********************************
; 写数据子程序
;**********************************
DATA_INPUT: LCALL CHK_BUSY
MOV TH0, #00H ;T0清零
MOV TL0, #00H
NOP
SETB RS
CLR RW
SETB E
MOV P0, A
NOP
CLR E
NOP
MOV P0, #0FFH
RET
;**********************************
; 忙检测子程序
;**********************************
CHK_BUSY: MOV TH0, #00H ;T0清零
MOV TL0, #00H
CLR RS
SETB RW
SETB E
HERE_BUSY: MOV TH0, #00H ;T0清零
MOV TL0, #00H
JB P0.7, HERE_BUSY
CLR E
RET
;************************************
; 云台控制子程序
; INT1中断引发
;************************************
PARK: PUSH DPH
PUSH DPL
CLR EX0
CLR EX1
MOV TH0, #00H
MOV TL0, #00H
MOV 30H, #0A1H
MOV 31H, #0A0H
MOV 32H, #0A1H
MOV 33H, #0A0H
MOV 3AH, #0A1H
MOV 3BH, #0A0H
MOV 3CH, #0A1H
MOV 3DH, #0A0H
MOV 3EH, #0A1H
MOV 3FH, #0A0H
MOV 40H, #0FFH
MOV 43H, #01H
LCALL DELAY1
LCALL DELAY1
JB P1.7, PARK_L22
CLR P1.7
SETB P2.0
SETB P2.1
SETB P2.2
SETB P2.3
SETB P2.4
MOV A, P2
ANL A, #1FH
CPL A
ANL A, #1FH
CJNE A, #01H, PARK_2H8L
CLR KEY_DATA_C
JNB SHIFT_LED, LOOP18
MOV 41H, #00H ;键"变焦-"
MOV 42H, #00H
MOV 4FH, #04H
MOV TH0, #00H
MOV TL0, #00H
MOV 34H, #0B1H
MOV 35H, #0E4H
MOV 36H, #0BDH
MOV 37H, #0B9H
MOV 38H, #0A3H
MOV 39H, #0ADH
LCALL LCDSHOW_DATA
LCALL ORDER_SEND
LJMP KEY_SCANRET
LOOP18: MOV 34H, #0B1H ;"饱和度-"
MOV 35H, #0A5H
MOV 36H, #0BAH
MOV 37H, #0CDH
MOV 38H, #0B6H
MOV 39H, #0C8H
MOV 3AH, #0A3H
MOV 3BH, #0ADH
LCALL LCDSHOW_DATA
MOV 41H, #00H
MOV 42H, #00H
MOV 4FH, #04H
LCALL ORDER_SEND
LJMP KEY_SCANRET
PARK_L22: LJMP PARK_L2
PARK_2H8L: MOV TH0, #00H
MOV TL0, #00H
CJNE A, #02H, PARK_3H8L
CLR KEY_DATA_C
JNB SHIFT_LED, LOOP28
MOV 41H, #17H ;键"调焦-"
MOV 42H, #0FDH
MOV 4FH, #04H
MOV 34H, #0B5H
MOV 35H, #0F7H
MOV 36H, #0BDH
MOV 37H, #0B9H
MOV 38H, #0A3H
MOV 39H, #0ADH
LCALL LCDSHOW_DATA
LCALL ORDER_SEND
LJMP KEY_SCANRET
loop28: MOV 34H, #0B6H ;"对比度-"
MOV 35H, #0D4H
MOV 36H, #0B1H
MOV 37H, #0C8H
MOV 38H, #0B6H
MOV 39H, #0C8H
MOV 3AH, #0A3H
MOV 3BH, #0ADH
LCALL LCDSHOW_DATA
MOV 41H, #00H
MOV 42H, #00H
MOV 4FH, #04H
LCALL ORDER_SEND
LJMP KEY_SCANRET
PARK_3H8L: MOV TH0, #00H
MOV TL0, #00H
CJNE A, #04H, PARK_4H8L
CLR KEY_DATA_C
JNB SHIFT_LED, LOOP38
MOV 41H, #00H ;键"光圈-"
MOV 42H, #00H
MOV 4FH, #04H
MOV 34H, #0B9H
MOV 35H, #0E2H
MOV 36H, #0C8H
MOV 37H, #0A6H
MOV 38H, #0A3H
MOV 39H, #0ADH
LCALL LCDSHOW_DATA
LCALL ORDER_SEND
LJMP KEY_SCANRET
loop38: MOV 34H, #0C1H ;"亮度-"
MOV 35H, #0C1H
MOV 36H, #0B6H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -