📄 v27源程序.asm
字号:
LOOKL5: ACALL LOOKLX;
ACALL DISPLAY0
SETB P1.4
JNB P1.4,LOOKL5
MOV A,LED2
MOV MOVD,#011H; 如为E则返回
CJNE A,MOVD,LOOKL51;
AJMP ACTION;
LOOKL51: MOV L1ORL2,#05H; -REL-
MOV LED4,#013H;
MOV LED3,#010H;
MOV LED2,#011H;
MOV LED1,#0AH;
MOV LED0,#013H;
AJMP LOOKA1;
LOOKNOW: ACALL LOOKLX;
MOV LED4,TOEND4;
MOV LED3,TOEND3;
MOV LED2,TOEND2;
MOV LED1,TOEND1;
LOOKALL: MOV LED0,#010H;
LOOKA1: ACALL DISPLAY0;
LCALL DLS2
LCALL DLS3
ACALL LOOKLB;
AJMP MAIN;
LOOKLX: MOV MOVDAT4,LED4; 送数入寄存器
MOV MOVDAT3,LED3;
MOV MOVDAT2,LED2;
MOV MOVDAT1,LED1;
MOV MOVDAT0,LED0;
CLR P1.7; 置电机停止工作
RET
LOOKLB: MOV LED4,MOVDAT4;
MOV LED3,MOVDAT3;
MOV LED2,MOVDAT2;
MOV LED1,MOVDAT1;
MOV LED0,MOVDAT0;
RET
;*****************;
; 设置预置数程序 ;
;*****************;
SELNUM: MOV LED4,#013H; 显示“-----”
MOV LED3,#013H;
MOV LED2,#013H;
MOV LED1,#013H;
MOV LED0,#013H;
ACALL DISPLAY
LCALL DLS1
ACALL LEDOFF; 调用灭灯程序
MOV P1,#0FFH;
MOV P3,#0FFH
JNB P3.2,SELNUM1
JNB P3.3,SELNUM1
JNB P1.1,SELNUM1
JNB P1.0,SELNUM1
JNB P3.7,GOMAIN
AJMP SELNUM
SELNUM1: ACALL CLRALL; 调用清零程序
SELNUM2: ACALL DISPLAY
MOV P1,#0FFH;
JNB P1.6,SAVEL1;
JNB P1.2,SAVEL2;
JNB P1.5,SAVEL3;
JNB P1.3,SAVEL4;
JNB P1.4,SAVEL5;
JNB P1.0,ADDONE0;
JNB P1.1,DECONE0;
JNB P3.7,GOMAIN;
AJMP SELNUM2;
ADDONE0: AJMP ADDONE;
DECONE0: AJMP DECONE;
GOMAIN: ACALL DISPLAY;
JNB P3.7,GOMAIN;
LCALL CLRALL
LCALL LOOKLB
ACALL DISPLAY
LJMP MAIN
SAVEL1: LCALL DLS1
JB P1.6,SELNUM2; L1
MOV L1BIT1,LED1; 将显示的数存到相应键位的寄存器中
MOV L1BIT2,LED2; 小数不保存
MOV L1BIT3,LED3;
MOV L1BIT4,LED4;
LJMP KBOUT1
SAVEL2: LCALL DLS1
JB P1.2,SELNUM2; L2
MOV L2BIT1,LED1;
MOV L2BIT2,LED2;
MOV L2BIT3,LED3;
MOV L2BIT4,LED4;
LJMP KBOUT2
SAVEL3: LCALL DLS1
JB P1.5,SELNUM2; L3
MOV L3BIT1,LED1;
MOV L3BIT2,LED2;
MOV L3BIT3,LED3;
MOV L3BIT4,LED4;
LJMP KBOUT3
SAVEL4: LCALL DLS1
JB P1.3,SELNUM2; L4
MOV L4BIT1,LED1;
MOV L4BIT2,LED2;
MOV L4BIT3,LED3;
MOV L4BIT4,LED4;
LJMP KBOUT4
SAVEL5: LCALL DLS1
JB P1.4,SELNUM21
LJMP LOOKA1;
;--------------------------------------------------------------
ADDONE: ACALL ADD1; 按键 加1
CLR P1.0
JB P1.0,ADDONE1;
LCALL DLS1;
SETB P1.0
JNB P1.0,ADDONE2; 若按下大于1秒则跳到快速加1程序
SELNUM21:AJMP SELNUM2;
ADDONE1: LCALL DISPLAY
LCALL DL1S
LCALL DL1S
AJMP ADDONE
ADDONE2: ACALL ADD1; 按键 快速加1程序
ACALL DISPLAY
LCALL DL1S
LCALL DL1S
LCALL DL1S
SETB P1.0
JNB P1.0,ADDONE2
AJMP SELNUM2
DECONE: ACALL DEC1; 按键 减1
CLR P1.1
JB P1.1,DECONE1;
LCALL DLS1;
SETB P1.1
JNB P1.1,DECONE2; 若按下大于1秒则跳 快速减1
AJMP SELNUM2;
DECONE1: LCALL DISPLAY
LCALL DL1S
LCALL DL1S
AJMP DECONE
DECONE2: ACALL DEC1; 按键 快速减1
ACALL DISPLAY
LCALL DL1S
LCALL DL1S
LCALL DL1S
SETB P1.1
JNB P1.1,DECONE2;
AJMP SELNUM2; 退回
;***************;
; 中断0 加1程序 ;
;***************;
INTEXT0: PUSH ACC; 进栈
PUSH PSW;
INC LED0; 寄存单元LED0加1
MOV A,LED0; 小数加1
CJNE A,#0AH,INT0OUT; LED0数是否在10内0-9
MOV LED0,#00H; 如到了则将LED0置0
ACALL ADD1; 调用加1程序整数部分
INT0OUT: POP PSW; 出栈
POP ACC
RETI; 中断返回
;***************;
;中断1 减1程序 ;
;***************;
INTEXT1: PUSH ACC; 进栈
PUSH PSW
DEC LED0; LED0减1
MOV A,LED0 ;
CLR C; 清进位标致
CJNE A,#0FFH,INT1OUT; 判断LED0是不在0-9中
MOV LED0,#09H; 不是将LED0置9
ACALL DEC1; 调用减1程序
INT1OUT: POP PSW
POP ACC
RETI; 中断返回
;**************;
; 加1程序 ;
;**************;
ADD1: INC LED1; LED1加1
MOV A,LED1
CJNE A,#0AH,ADD1OUT; 显存单元在0-9
MOV LED1,#00H; 如是10时则置零
INC LED2; LED2加1
MOV A,LED2
CJNE A,#0AH,ADD1OUT; .
MOV LED2,#00H
INC LED3
MOV A,LED3
CJNE A,#0AH,ADD1OUT; .
MOV LED3,#00H
INC LED4
MOV A,LED4
CJNE A,#0AH,ADD1OUT
MOV LED4,#00H
ADD1OUT: RET
;**************;
; 减1程序 ;
;**************;
DEC1: DEC LED1; LED1减1
MOV A,LED1
CLR C; 清进位标志
CJNE A,#0FFH,DEC1OUT; .
MOV LED1,#09H; .
DEC LED2;
MOV A,LED2
CLR C;
CJNE A,#0FFH,DEC1OUT
MOV LED2,#09H
DEC LED3
MOV A,LED3
CLR C;
CJNE A,#0FFH,DEC1OUT
MOV LED3,#09H
DEC LED4
MOV A,LED4
CLR C;
CJNE A,#0FFH,DEC1OUT
MOV LED4,#09H
DEC1OUT: RET
;************;
; 显示程序 ;
;************;
DISPLAY: MOV DPTR,#NUMTAB; 指针指向数据字符码
MOV A,LED0
MOVC A,@A+DPTR; 查表
MOV P1,A
SETB P1.7
CLR P3.0; 选中小数位显示
ACALL D1MS
SETB P3.0
MOV A,LED1
MOVC A,@A+DPTR
MOV P1,A
SETB P1.7
CLR P3.1; 选中个位数显示
ACALL D1MS
SETB P3.1
MOV A,LED2
MOVC A,@A+DPTR
MOV P1,A
SETB P1.7
CLR P3.4; 选中十位数显示
ACALL D1MS
SETB P3.4
MOV A,LED3
MOVC A,@A+DPTR
MOV P1,A
SETB P1.7
CLR P3.7; 选中百位数显示
ACALL D1MS
SETB P3.7
MOV A,LED4
MOVC A,@A+DPTR
MOV P1,A
SETB P1.7
CLR P3.5; 选中千位数显示
ACALL D1MS
SETB P3.5
RET
;****************************************************************;
; 显示程序2 因电机控制引脚和显示输出引脚共用,所以要再处理一次 ;
;****************************************************************;
DISPLAY0: MOV DPTR,#NUMTAB
MOV A,LED0
MOVC A,@A+DPTR
MOV P1,A
CLR P1.7; 保持锁定电机
CLR P3.0
ACALL D1MS
SETB P3.0
MOV A,LED1
MOVC A,@A+DPTR
MOV P1,A
CLR P1.7
CLR P3.1
ACALL D1MS
SETB P3.1
MOV A,LED2
MOVC A,@A+DPTR
MOV P1,A
CLR P1.7
CLR P3.4
ACALL D1MS
SETB P3.4
MOV A,LED3
MOVC A,@A+DPTR
MOV P1,A
CLR P1.7
CLR P3.7
ACALL D1MS
SETB P3.7
MOV A,LED4
MOVC A,@A+DPTR
MOV P1,A
CLR P1.7
CLR P3.5
ACALL D1MS
SETB P3.5
RET
;*************;
; 显示灭灯程序 ;
;*************;
LEDOFF: MOV LED0,#0DH; 灭灯
MOV LED1,#0DH
MOV LED2,#0DH
MOV LED3,#0DH
MOV LED4,#0DH
ACALL DISPLAY
LCALL DLS1
RET
;*******;
;延时程序;
;*******;
D1MS: MOV R7,#2; 显示延时程序
DJNZ R7,$
RET
DL1S: LCALL DL05S; 延时程序,用作按键时间的长短判断
LCALL DL05S
RET
DL05S: MOV R5,#80H
DL05S1: LCALL DISPLAY0
DJNZ R5,DL05S1
RET
DLS1: SETB P1.7; 开机显示延时程序
JNB P1.7,STAR; 如清零键按下跳至清零确认程序
MOV R6,#50H
DLS2: LCALL DL05S
LCALL DISPLAY0
DJNZ R6,DLS2
RET
DLS3: MOV R6,#40H
DLS4: LCALL DL05S
LCALL DISPLAY0
DJNZ R6,DLS4
RET
STAR: LJMP CLEAR
LODLED: MOV P1,#0FFH;
MOV P3,#0FFH
MOV LED4,#0DH; 开机显示
MOV LED3,#0DH
MOV LED2,#0DH
MOV LED1,#0DH
MOV LED0,#0AH
ACALL DISPLAY0
LCALL DLS3
MOV LED1,#0AH
MOV LED0,#0BH
ACALL DISPLAY0
LCALL DLS1
MOV LED2,#0AH
MOV LED1,#0BH
MOV LED0,#0CH
ACALL DISPLAY0
LCALL DLS3
MOV LED3,#0AH
MOV LED2,#0BH
MOV LED1,#0CH
MOV LED0,#013H
ACALL DISPLAY0
LCALL DLS3
MOV LED4,#0AH;L
MOV LED3,#0BH;I
MOV LED2,#0CH;N
MOV LED1,#013H;-
MOV LED0,#0EH;P
LCALL DLS1
LCALL DLS1
MOV LED4,#2H;
MOV LED3,#0H;
MOV LED2,#0H;
MOV LED1,#5H;
MOV LED0,#3H;
LCALL DLS1
LCALL DLS1
MOV LED4,#0DH;
MOV LED3,#0DH
MOV LED2,#0DH
MOV LED1,#0DH
MOV LED0,#0EH
ACALL DISPLAY0
LCALL DLS3
MOV LED1,#0EH
MOV LED0,#0FH
ACALL DISPLAY0
LCALL DLS3
MOV LED2,#0EH
MOV LED1,#0FH
MOV LED0,#013H
ACALL DISPLAY0
LCALL DLS3
MOV LED3,#0EH
MOV LED2,#0FH
MOV LED1,#013H
MOV LED0,#2H
ACALL DISPLAY0
LCALL DLS3
MOV LED4,#0EH; P
MOV LED3,#0FH; C
MOV LED2,#013H; -
MOV LED1,#2H; 2
MOV LED0,#7H; 7
LCALL DLS1
LCALL DLS1
LJMP CLEAR
;*********;
; 查表 ;
;*********;
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
DB 030H;I
DB 037H;N
DB 000H;
DB 073H;P
DB 058H;c
DB 050H;r
DB 079H;E
DB 078H;t
DB 040H;-
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -