⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 v27源程序.asm

📁 电动绕线机计数器(电路及源代码).很简单的入门的东东。 简要说明 2004年12月做的小项目
💻 ASM
📖 第 1 页 / 共 2 页
字号:
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 + -