📄 复件 v1.0.asm
字号:
MOV LED0,#18H
MOV MOVD,#0FFH
CALL DISPUU
MOV MOVD,#0FFH
CALL DISPUU
MOV MOVD,#0FFH
CALL DISPUU
MOV MOVD,#0FFH
CALL DISPUU
MOV MOVD,#02FH
CALL DISPUU
AJMP ERROUT3;
DISPUN:MOV MOVD,#0FFH
MOV LED1,#014H
CALL DISPU
MOV MOVD,#0FFH
CALL DISPU
MOV MOVD,#0FFH
CALL DISPU
MOV LED1,#015H;
MOV MOVD,#0FFH
CALL DISPU
MOV MOVD,#0FFH
CALL DISPU
MOV MOVD,#0FFH
CALL DISPU
MOV LED1,#016H;
MOV MOVD,#0FFH
CALL DISPU
MOV MOVD,#0FFH
CALL DISPU
MOV MOVD,#0FFH
CALL DISPU
RET;
DISPU: CALL DISPU1
DEC MOVD
CLR C
MOV A,MOVD
CJNE A,#00H,DISPU
CALL DISPU1
RET
DISPU1:LCALL DISPLAY
JNB P1.5,ZSIGIN;
JNB P3.7,REST1
LCALL DISPLAY
JNB P1.5,ZSIGIN;
JNB P3.7,REST1
LCALL DISPLAY
JNB P1.5,ZSIGIN;
JNB P3.7,REST1
LCALL DISPLAY
JNB P1.5,ZSIGIN;
JNB P3.7,REST1
LCALL DISPLAY
RET
ZSIGIN:;AJMP MAIN
AJMP ZSIG;
REST1: AJMP START;
;**********************************************************8
; 判别A和B的方向 ;
;**********************************************************;
AORB: MOV A,P1;
ANL A,#06H;
MOV R0,#WHEE1NOW;将A、B两端实时状态暂存在变量Whee1Now内,
MOV @R0,A; A、B两端正常状态为1
MOV R7,A; 将Whee1Now存入R7以内及
MOV KEYTMP,A;
MOV R0,#WHEE1OLD;
MOV A,@R0;
XRL KEYTMP,A
MOV A,KEYTMP;
JZ C0002;
C0001:
MOV A,KEYTMP;
JNB ACC.2,C0003;
MOV A,R7;
JNB ACC.2,C0004;
LCALL WHEE1LEFT;
SJMP C0008;
C0004: MOV R0,#WHEE1NOW;
MOV A,@R0;
JNB ACC.1,C0006;
LCALL WHEE1LEFT;
SJMP C0008;
C0006: LCALL WHEE1RIGHT;
SJMP C0008
C0003:
MOV A,KEYTMP;
ANL A,#06H;
JZ C0008;
MOV R0,#WHEE1NOW;
MOV A,@R0;
JNZ C0010;
LCALL WHEE1LEFT;
SJMP C0008;
C0010:
MOV R0,#WHEE1NOW
MOV A,@R0;
CJNE A,#02H,C0012;
LCALL WHEE1LEFT;
SJMP C0008;
C0012:
LCALL WHEE1RIGHT;
C0008:
MOV R0,#WHEE1NOW;
MOV A,@R0;
MOV R0,#WHEE1OLD;
MOV @R0,A;
C0002:
RET
WHEE1LEFT:
CLR A;
MOV R0,#RIGHTCOUNT;
MOV @R0,A;
MOV R0,#LEFTCOUNT
INC @R0
MOV A,@R0;
CJNE A,#02H,C0015;
MOV R0,#ENCODERCNT;
MOV @R0,#02H;
CLR A;
MOV R0,#LEFTCOUNT;
MOV @R0,A;
C0015:
RET
WHEE1RIGHT:
CLR A;
MOV R0,#LEFTCOUNT;;
MOV @R0,A;
MOV R0,#RIGHTCOUNT;
INC @R0;
MOV A,@R0;
CJNE A,#02H,C0017;
MOV R0,#ENCODERCNT;
MOV @R0,#01H;
CLR A
MOV R0,#RIGHTCOUNT;
MOV @R0,A;
C0017:
RET
;******************************************
;************;
; 中断0 加1程序 ;
;************;
INTEXT0: PUSH ACC; 进栈
PUSH PSW;
CLR C
MOV A,LED2
CJNE A,#00H,INTT1;
MOV A,LED3
CJNE A,#00H,INTT1;
MOV A,LED4
CJNE A,#00H,INTT1;
MOV A,LED5
CJNE A,#00H,INTT1;
MOV LED1,#0DH;
INTT1: MOV A, LED1;
CJNE A,#13H,INTT2; 如是负数则由+变为-1
DEC LED5;
MOV A,LED5 ;
CLR C; 清进位标致
CJNE A,#0FFH,INT1OUT0;
MOV LED5,#09H; 不是将LED0置9
DEC LED4;
MOV A,LED4
CLR C; 清进位标志
CJNE A,#0FFH,INT1OUT0
MOV LED4,#09H; .
DEC LED3;
MOV A,LED3
CLR C;
CJNE A,#0FFH,INT1OUT0
MOV LED3,#09H
DEC LED2
MOV A,LED2
CLR C;
CJNE A,#0FFH,INT1OUT0
MOV LED2,#09H
INT1OUT0: POP PSW; 出栈
POP ACC
RETI; 中断返回
INTT2: INC LED5;
MOV A,LED5;
CJNE A,#0AH,INT0OUT;
MOV LED5,#00H; 如到了则将LED0置0
INC LED4;
MOV A,LED4
CJNE A,#0AH,INT0OUT; 显存单元在0-9
MOV LED4,#00H;
INC LED3;
MOV A,LED3
CJNE A,#0AH,INT0OUT; .
MOV LED3,#00H
INC LED2
MOV A,LED2
CJNE A,#0AH,INT0OUT; .
MOV LED2,#00H
INT0OUT: POP PSW; 出栈
POP ACC
RETI; 中断返回
;************;
;中断1 减1程序 ;
;************;
INTEXT1: PUSH ACC; 进栈
PUSH PSW
CLR C
MOV A,LED2
CJNE A,#00H,INTTO0;
MOV A,LED3
CJNE A,#00H,INTTO0;
MOV A,LED4
CJNE A,#00H,INTTO0;
MOV A,LED5
CJNE A,#00H,INTTO0;
MOV LED1,#13H; -
INTTO0: MOV A, LED1
CJNE A,#13H,INTTO;
CLR C
INC LED5;
MOV A,LED5;
CJNE A,#0AH,INT1OUT;
MOV LED5,#00H;
INC LED4;
MOV A,LED4
CJNE A,#0AH,INT1OUT; 显存单元在0-9
MOV LED4,#00H; 如是10时则置零
INC LED3;
MOV A,LED3
CJNE A,#0AH,INT1OUT; .
MOV LED3,#00H
INC LED2
MOV A,LED2
CJNE A,#0AH,INT1OUT; .
MOV LED2,#00H
POP PSW; 出栈
POP ACC
RETI; 中断返回
INTTO: DEC LED5;
MOV A,LED5 ;
CLR C; 清进位标致
CJNE A,#0FFH,INT1OUT;
MOV LED5,#09H; 不是将LED0置9
DEC LED4;
MOV A,LED4
CLR C; 清进位标志
CJNE A,#0FFH,INT1OUT
MOV LED4,#09H; .
DEC LED3;
MOV A,LED3
CLR C;
CJNE A,#0FFH,INT1OUT
MOV LED3,#09H
DEC LED2
MOV A,LED2
CLR C;
CJNE A,#0FFH,INT1OUT
MOV LED2,#09H
INT1OUT: POP PSW
POP ACC
RETI; 中断返回
;*********************;
; 显示程序 6 BIT LED ;
;*********************;
DISPLAY: MOV DPTR,#NUMTAB; 指针指向数据字符码
MOV A,LED0
MOVC A,@A+DPTR; 查表
MOV P0,A
CLR P2.0; 选中小数位显示
ACALL D1MS
SETB P2.0
MOV A,LED1
MOVC A,@A+DPTR
MOV P0,A
CLR P2.1; 选中个位数显示
ACALL D1MS
SETB P2.1
MOV A,LED2
MOVC A,@A+DPTR
MOV P0,A
CLR P2.2; 选中十位数显示
ACALL D1MS
SETB P2.2
MOV A,LED3
MOVC A,@A+DPTR
MOV P0,A
CLR P2.3; 选中百位数显示
ACALL D1MS
SETB P2.3
MOV A,LED4
MOVC A,@A+DPTR
MOV P0,A
CLR P2.4; 选中千位数显示
ACALL D1MS
SETB P2.4
MOV A,LED5
MOVC A,@A+DPTR
MOV P0,A
CLR P2.5; 选中千位数显示
ACALL D1MS
SETB P2.5
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LINE: RET
;*******;
;延时程序;
;*******;
D1MS: MOV R7,#2; 显示延时程序
DJNZ R7,$
RET
DL512: MOV R5,#0FFH
LOOP1: DJNZ R5,LOOP1
RET
DL10MS: MOV R3,#14H
LOOP2: LCALL DL512
DJNZ R3,LOOP2
RET
DL05S: MOV R4,#10H
LOOP3: LCALL DL10MS
DJNZ R4,LOOP3
RET
DL1S: LCALL DL05S
LCALL DL05S
LCALL DL05S
LCALL DL05S
RET
;*********;
; 查表程序 ;
;*********;
NUMTAB: DB 03FH;0
DB 006H;1
DB 05BH;2
DB 04FH;3
DB 066H;4
DB 06DH;5
DB 07DH;6
DB 007H;7
DB 07FH;8
DB 06FH;9
DB 038H;L 0AH
DB 030H;I 0BH
DB 037H;N 0CH
DB 000H; 0DH
DB 073H;P 0EH
DB 058H;c 0FH
DB 050H;r 010H
DB 079H;E 011H
DB 078H;t 012H
DB 040H;- 013H
DB 024H;USIG 014H
DB 009H;VSIG 015H
DB 012H;WSIG 016H
DB 062H; u 017H
DB 054H; n 018H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -