|   | 
           ORG 0000H             AJMP PLAY             ORG 001BH             AJMP JONG 
 
  PLAY:        MOV P1, #0FFH: 程序初始化             MOV P2, #00H              MOV 70H, #00H             MOV 71H, #00H             MOV 72H, #00H             MOV 73H, #00H             MOV 74H, #00H             MOV 75H, #00H             MOV 76H, #00H             MOV 77H, #00H             MOV R1, #00H             MOV R2, #00H             MOV TMOD, #50H             MOV TL1, #0FFH             MOV TH1, #0FFH             SETB TR1             SETB ET1             SETB EA  ;////////////////////////////////////////////////////////////////////////  
MAIN:        MOV SP, #80H;                      ACALL S0;          调用运行子程序             ACALL S1;          调用停止子程序             ACALL S2;          调用个位数按键子程序             ACALL S3;           调用十位数按键子程序             ACALL S4;          调用百位数按键子程序             ACALL S5;          调用千位数按键子程序             ACALL ESJJ;         调用显示延时子程序             AJMP MAIN;           返回主程序 
  ;//////////////////////////////////////////////////////////////////////// 
  
S0:         JB P1.0, S01;        运行按键子程序             SETB P2.0;         如果按键1.0为0,则置位2.0 
  S01:         RET  
;///////////////////////////////////////////////////////////////////////  
 S1:         JB P1.1, S11;          停止按键子程序             CLR P2.0;           如果按键1.1为0,则置位2.0  S11:         RET  
;//////////////////////////////////////////////////////////////////////  
S2:         JB P1.2, S23;          个位数按键子程序             MOV A, 60H;             CJNE A, #09H, S21;       个位数是否小于9,小于加1             MOV 60H, #00H;         大于清0             AJMP S210;  S21:         INC 60H;  S210:        JB P1.6, S211;        判断此数为长度数还是数量            MOV 70H, 60H;        数量数送到70H单元                  AJMP S22;  S211:        MOV 74H, 60H;             ACALL K11;           长度数送到74H单元  S22:         ACALL DL            调用按键延时子程序  S23:         RET  
;///////////////////////////////////////////////////////////////////// 
  S3:         JB P1.3, S33;           十位按键子程序              MOV A, 61H;             CJNE A, #09H, S31;             MOV 61H, #00H;             AJMP S310;  S31:         INC 61H;  S310:        JB P1.6, S311;             MOV 71H, 61H;             AJMP S32;  S311:        MOV 75H, 61H;             ACALL K11;  S32:         ACALL DL  S33:         RET  
;////////////////////////////////////////////////////////////////////  
S4:        JB P1.4, S43;           百位按键子程序             MOV A, 62H;                 CJNE A, #09H, S41;             MOV 62H, #00H;            AJMP S410;  S41:        INC 62H;  S410:       JB P1.6, S411;            MOV 72H, 62H;            AJMP S42;   S411:       MOV 76H, 62H;            ACALL K11;  S42:        ACALL DL;  S43:        RET  
;////////////////////////////////////////////////////////////////////  
S5:        JB P1.5, S53;           千位按键子程序            MOV A, 63H;              CJNE A, #09H, S51;            MOV 63H, #00H;            AJMP S510;  S51:        INC 63H;  S510:       JB P1.6, S511;            MOV 73H, 63H;            AJMP S52;  S511:       MOV 77H, 63H;            ACALL K11;  S52:        ACALL DL;  S53:        RET  
;////////////////////////////////////////////////////////////////////         长度数BCD转二进制码子程序  ;转换数为77H(千位) 76H(百位) 75H(十位) 74H(个位)  ;结果存于67H(H) 66H(L)  
K11:       MOV A, #38H;          千位数转            MOV B, 77H;            MUL AB            MOV 67H, B;            MOV 66H, A;            MOV A, #03H;            MOV B, 77H;            MUL AB            ADD A, 67H;            MOV 67H, A;  ;------------------------------  
           MOV A, #64H;          百位数转            MOV B, 76H;            MUL AB            ADD A, 66H            MOV 66H, A;            MOV A, B;            MOV B, 77H;            ADDC A, 67H;            MOV 67H, A;  ;------------------------------  
         MOV A, #0AH;          十位数转            MOV B, 75H;            MUL AB            ADD A, 66H;            MOV 66H, A;            MOV A, B;            ADDC A, 67H;            MOV 67H, A;  ;------------------------------  
         MOV A, 74H;           个位数转            ADD A, 66H;            MOV 66H, A;            MOV A, #00H;            ADDC A, 67H;            MOV 67H, A;            RET 
  ;//////////////////////////////////////////////////////////////// ;中断子程序  
         JONG: CLR P2.0;          启动剪线开关            ACALL DL;            ACALL DL;            SETB P2.1;  ;--------------------            MOV A, #0FFH;         长度数送到计数子程序            CLR C;            SUBB A, 66H;            MOV TL1, A;            MOV A, #0FFH;            SUBB A, 67H;            MOV TH1, A;  ;--------------------            ACALL DL;           延时            ACALL DL;            ACALL DL;            ACALL DL;            CLR P2.1;          关闭剪线开关            ACALL DL;            ACALL BCD0;          数量减一子程序            RETI; 
  ;/////////////////////////////////////////////////////////////////  ;数量数减一子程序  ;被减数为73H(千位) 72H(百位) 71H(十位) 70H(个位)  
BCD0:       MOV A, 70H;            JZ BCD1;            DEC 70H;            AJMP BCD5;  ;------------------------------- 
  BCD1:       MOV A, 71H;            JZ BCD2;            DEC 71H;            MOV 70H, #09H;            AJMP BCD5;  ;-------------------------------  BCD2:       MOV A, 72H;            JZ BCD3;            DEC 72H;            MOV 71H, #09H;            MOV 70H, #09H;            AJMP BCD5;  ;-------------------------------  BCD3:       MOV A, 73H;            JZ BCD4;            DEC 73H;            MOV 72H, #09H;            MOV 71H, #09H;            MOV 70H, #09H;            AJMP BCD5;  ;-------------------------------  BCD4:       CLR P2.0            AJMP BCDQ;  ;-------------------------------  BCD5:       SETB P2.0  BCDQ:       RET  
;///////////////////////////////////////////////////////////// DL:        MOV 68H, #20;             按键延时子程序  DL1:       ACALL ESJJ;            DEC 68H;            MOV A, 68H;            CJNE A, #00H, DL1;            RET  ;///////////////////////////////////////////////////////////////// 
ESJJ:       JB P1.6, ESJJ1;            显示子程序            MOV 60H, 70H;            MOV 61H, 71H;            MOV 62H, 72H;            MOV 63H, 73H;            AJMP ESJJ2  ESJJ1:      MOV 60H, 74H;            MOV 61H, 75H;            MOV 62H, 76H;            MOV 63H, 77H;  ESJJ2:       MOV A, 60H;            ADD A, #30H;            MOVC A, @A+PC;            CLR P2.3            MOV P0, A;            SETB P2.6;            ACALL DDY;            MOV A, 61H;            ADD A, #23H            MOVC A, @A+PC;            CLR P2.6;            MOV P0, A;            SETB P2.5;            ACALL DDY;            MOV A, 62H;            ADD A, #16H;            MOVC A, @A+PC;   
         CLR P2.5;            MOV P0, A;            SETB P2.4;             ACALL DDY;            MOV A, 63H;            ADD A, #09H;            MOVC A, @A+PC;            CLR P2.4;            MOV P0, A;            SETB P2.3;            ACALL DDY;            RET  BS:        DB 01H;            DB 0E7H;            DB 0C8H;            DB 0C2H;            DB 0A6H;            DB 92H;            DB 90H;            DB 87H;            DB 80H;            DB 82H;            DDY: MOV R1, #20            DDY1: MOV R2, #80            DDY2: DJNZ R2, DDY2;            DJNZ R1, DDY1;            RET            END  
   |