📄 dxp.asm
字号:
;DATA
DISBUFL EQU 00H
DISBUFH EQU 00H
ZMH EQU 0FH
ZML EQU 0F8H
SADDH EQU 10H
REVH EQU 0FH
REVL EQU 078H
HZDBUFH EQU 00H
HZDBUFL EQU 00H
ZFDBUFH EQU 80H
ZFDBUFL EQU 00H
MASKS DATA 4CH
BUFST EQU 49H
KMARK DATA 4FH
SOURH DATA 49H
SOURL DATA 4AH
MZS DATA 4BH
LINREG DATA 50H
DPL0 DATA 4DH
DPH0 DATA 4EH
MJS DATA 48H
HZJS DATA 47H
MONTH DATA 46H
DAYB DATA 45H
SOU2H DATA 44H
SOU2L DATA 43H
SECB DATA 42H
MP0 DATA 41H
MZSB DATA 40H
YCH DATA 3FH
XBIT DATA 3EH
ROWAL DATA 3DH
ROWAH DATA 3CH
COL_OF DATA 3BH
STNY DATA 3AH
STNR DATA 39H
RY DATA 38H
NR DATA 37H
NY DATA 36H
YH DATA 35H
OUTCT DATA 34H
;PORT
INH EQU P1.5
STRD EQU P1.4
ENCLK EQU P1.6
DOPORT EQU P1.7
STR EQU P3.1
CLK EQU P3.4;T0
SOUND EQU P3.5;T1
; LIGHT EQU P3.3;INT1
;BIT
LIT EQU 00H
ALMEN EQU 01H
ALMST EQU 02H
DYF EQU 03H
HIALM EQU 04H
KM EQU 07H
KP EQU 08H
OUTFLAG EQU 09H
LEAPY EQU 0AH
DOTBIT EQU 0BH
D_OVER EQU 0CH
sioen EQU 0DH
;
;
ORG 0000H
LJMP MAIN
;
;
ORG 000BH
LJMP TIMER0
ORG 0013H
LJMP O_UI
ORG 0023H
LJMP SSERVER
;
;
ORG 0050H
MAIN: MOV SP,#50H
ACALL INIT
ACALL SELERAM
ACALL CLRDIS
DISPST: CLR OUTFLAG
dis1: ACALL DISPCZ
ACALL DISPSM
MOV MJS,#0
MOV A,MZS
JZ DISPST
ACALL DISPCZ
ACALL DISPSM
DSPLOOP:ACALL SHFDISP
ACALL DISPSM
JB OUTFLAG,DISPST
INC MJS
MOV A,MJS
CJNE A,MZS,DSPLOOP
MOV MJS,#0
sjmp dis1
; SJMP DSPLOOP
;
INIT:
MOV IE,#12H ;ES=1,ET0=1,EX0=1,EA=0 ??????????? 13h 12h
MOV IP,#10H ;PS=1,PT0=0
MOV TMOD,#20H ;8889uS
MOV TCON,#50H ;
MOV TH1,#0Fah;AH ;9600
MOV TL1,#0Fah;AH ;
MOV SCON,#0D0H ;
CLR A ;CLEAR RAM
MOV R0,#4FH ;
LOOPI: MOV @R0,A ;
DJNZ R0,LOOPI ;
CLR STRD
CLR INH
MOV LINREG,#0FH
SETB EA ;ENABLE INT
setb TR0
PUSH PSW
MOV PSW,#00011000B;
MOV R6,#50
POP PSW
RET
;
SHFDISP: PUSH PSW
MOV PSW,#00010000B;
MOV A,MJS ;MJS->
ADD A,#SADDH ;because per p 256byte
MOV SOURH,A ;calculate result sourh
MOV SOU2H,A
MOV R7,#16 ;r7 hz ji shu
MOV HZJS,#0 ;hzjs clear
AHZLOP: MOV A,HZJS ;
MOV B,#16
MUL AB ;
MOV SOURL,A
MOV SOU2L,A ;
MOV R6,#2 ;hz left right
COL16LOP: MOV R5,#8 ;r5 8lie
MOV MASKS,#80H ;masks =80 8 lie
ROW16LOP: PUSH SOURH
PUSH SOURL
MOV R3,#0 ;r3 row jishu
SHF1C:
MOV R2,#127 ;shirft bytes
MOV A,#0c0H ;a row =192
MOV B,R3 ;r3=rows
MUL AB ;r3*80h
MOV R0,A ;r0=target lo
MOV P2,B ;p2=target hi
MOV DPL,A ;
MOV DPH,B ;
INC DPTR ;source addr=target addr+1
AROWLOP: MOVX A,@DPTR ;read source
MOVX @R0,A ;write to target
INC DPTR ;target+1
INC R0
JB OUTFLAG,IEXIT ;source+1
CJNE R0,#0,AROWL1
INC P2 ;1 C
; SJMP AROWL1 ;2 C
;AROWL2: DB 0,0,0
AROWL1: DJNZ R2,AROWLOP
MOV DPH,SOURH ;source address
MOV DPL,SOURL ;
MOVX A,@DPTR
ANL A,MASKS
JNZ WFF
SJMP WOK
WFF: MOV A,#0FFH
WOK: MOVX @R0,A
mov dph,sourh ;
mov dpl,sourl ;
INC DPTR ;
MOV SOURH,DPH ;
MOV SOURL,DPL ;
INC R3 ;
CJNE R3,#16,SHF1C ;
MOV A,MASKS
RR A
MOV MASKS,A
POP SOURL
POP SOURH
DJNZ R5,ROW16LOP
INC HZJS
MOV A,HZJS
CJNE A,#16,AHZLOP
POP PSW
RET
IEXIT: POP ACC
POP ACC
POP PSW
RET
;
ALLCLR: MOV DPH,#REVH
MOV DPL,#REVL
MOV R7,#60H
MOV R6,#0
MOV MZS,#0
MOV A,#0FFH
CLRLOP:MOVX @DPTR,A
INC DPTR
DJNZ R6,CLRLOP
DJNZ R7,CLRLOP
RET
;
CLRDIS: MOV R6,#10H;0CH
MOV R7,#00H
MOV DPTR,#0
MOV A,#0FFH
CLRL: MOVX @DPTR,A
INC DPTR
CLR1: DJNZ R7,CLRL
DJNZ R6,CLRL
MOV DPL,#ZML
MOV DPH,#ZMH
MOV A,#0
MOV R5,#8
CLR2: MOVX @DPTR,A
INC DPTR
DJNZ R5,CLR2
clr3: RET
DISPCZ: ACALL SELERAM
MOV DPH,#REVH ;0EF8H
MOV DPL,#REVL ;
MOV R5,#0 ;R5 ROW JSQ
DCZ1: MOV A,#0C0H ;A ROW BYTES 192 D
MOV B,R5 ;
MUL AB ;
ADD A,#80H ;YUE GUO TIAO PING 80H
MOV R0,A ;
MOV A,B ;
ADDC A,#0 ;
MOV P2,A ;
MOV R6,#8 ;WANT TO WRITE BYTES
MOV R7,#8
DLP0:
DLP1: MOVX A,@DPTR ;DU CHEZHANMING
INC DPTR ;DPTR+1
DLP2: RLC A ;LEFT SHIFT
XCH A,B ;
JNC A00 ;
AFF: MOV A,#0FFH
SJMP DLP3 ;
A00: CLR A ;
DLP3: MOVX @R0,A ;
INC R0
CJNE R0,#0,DLP4
INC P2
DLP4: XCH A,B
DJNZ R7,DLP2
MOV R7,#8
DJNZ R6,DLP0 ;R6 YI HANG ZIJIE SHU
MOV R6,#8
INC R5
CJNE R5,#16,DCZ1
RET
DISPSM: ACALL SELERAM
MOV DPL,#ZML
MOV DPH,#ZMH
MOV R7,#8
DSML: MOVX A,@DPTR
INC DPTR
ACALL OBIT
DJNZ R7,DSML
SETB STR
NOP
NOP
NOP
NOP
CLR STR
RET
;
OBIT: MOV R4,#8
O_LOOP: RLC A
MOV DOPORT,C
SETB CLK
NOP
NOP
CLR CLK
DJNZ R4,O_LOOP
RET
;
;Subroute for Serial Communications Serve
;
SSERVER: PUSH ACC
PUSH B
PUSH PSW
PUSH DPL
PUSH DPH
PUSH P1
MOV PSW,#00011000B;
CLR RI ;
MOV A,SBUF ;READ SBUF TO ACC
jb sioen,sioold ;
ljmp jqhpr
sioold: JNB RB8,PDATA ;RB8=0 ? YES THEN GOTO PDATA
CLR D_OVER
MOV R7,A ;No. OF PIC STORE
CLR C
SUBB A,#127
JNC ERR
MOV A,R7
MOV MZSB,A
DEC MZSB
MOV R2,#REVH
MOV R3,#REVL
MOV R4,A
MOV R5,#136
LJMP RETURN
ERR: SETB D_OVER
clr sioen
MOV R6,#50
LJMP RETURN
PDATA: JB D_OVER,ERR
MOV DPH,R2
MOV DPL,R3
ACALL SELERAM
MOVX @DPTR,A
INC DPTR
MOV R3,DPL
MOV R2,DPH
DJNZ R5,RETURN
DJNZ R4,RETURN
PD1: SETB OUTFLAG
SETB D_OVER
MOV A,MZSB
MOV MZS,A
clr sioen
mov r6,#50
RETURN: POP P1
POP DPH
POP DPL
POP PSW
POP B
POP ACC
RETI
jqhpr: jnb rb8,err ;
cjne a,#1,err ;
djnz r6,return ;
mov r6,#50 ;
setb sioen ;turn on sio
sjmp return
SELERAM: CLR P1.2 ;CS0
CLR P1.3 ;
RET
SELERT: SETB P1.2 ;CS3
SETB P1.3 ;
RET ;
SELEKB: SETB P1.2 ;CS1
CLR P1.3 ;
RET
SELEROM: CLR P1.2 ;CS2
SETB P1.3
RET
;
;扫描子程序
;入口参数:
;出口参数:
;变量:DPL0 DPH0 :扫描缓冲区指针.MP0:键盘0-3 行选4-7 .
; LINREG:行选计数 0-15
;影响资源:P1 ,A,B,DPTR,R0
DOTSC: ACALL SELERAM ;
MOV DPL,DPL0
MOV DPH,DPH0
CLR ENCLK
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;1
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;2
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;3
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;4
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;5
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;6
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;7
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;8
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;1
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;2
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;3
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;4
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;5
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;6
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;7
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;8
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;1
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;2
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;3
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;4
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;5
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;6
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;7
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H
DB 0E0H,0A3H,0E0H,0A3H,0E0H,0A3H,0E0H,0A3H;8
MOV DPL0,DPL
MOV DPH0,DPH
SETB ENCLK
INC LINREG
ANL LINREG,#0FH
MOV A,LINREG
CJNE A,#0FH,NSTAR
MOV DPL0,#0
MOV DPH0,#0
;
;
NSTAR: SETB INH ;INHIBIT DISPLAY
ACALL SELEKB ;
CJNE A,#8,NS0
NS0: JC NS2
CLR ACC.7
SETB ACC.3
SJMP NS3
NS2: CLR ACC.3
SETB ACC.7
NS3: SWAP A ;行选信号 d7d6d5d4
MOVX @R0,A
SETB STRD
NOP
nop
nop
nop
NOP
CLR STRD
CLR INH
RET
;Subroute for Timer0 Interrupt Serve
; 功能: 1:定时扫描显示. 2:发声. 3:扫描键盘且处理
; 入口参数:无
; 使用 第一组寄存器 R3:键盘扫描分频系数
;
TIMER0: PUSH ACC
PUSH PSW
PUSH DPL
PUSH DPH
PUSH B
PUSH P1
MOV PSW,#00001000B
MOV TH0,#0B0H ;0dh
MOV TL0,#0H ;
SETB KP
LCALL DOTSC ;扫描显示
CLR KP
POP P1
POP B
POP DPH
POP DPL
POP PSW ;
POP ACC ;
RETI ;
;
;
O_UI: RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -