main.lst

来自「周立功单片机上的源程序」· LST 代码 · 共 1,180 行 · 第 1/5 页

LST
1,180
字号
0530                 598     Delay:
0530 758CDC          599             MOV     TH0, #0xDC
0533 758A66          600             MOV     TL0, #0x66
0536 D28C            601             SETB    TR0
0538 308DFD          602             JNB     TF0, $
053B C28C            603             CLR     TR0
053D C28D            604             CLR     TF0
A51 MACRO ASSEMBLER  MAIN                                                                 07/01/2006 11:23:03 PAGE    15

053F DFEF            605             DJNZ    R7, Delay
0541 22              606             RET
                     607     
                     608     
                     609     ;*************************************************************************
                     610     ;函数:isupper()
                     611     ;功能:判断字符c是否为大写字母
                     612     ;*************************************************************************
                     613     ; bit isupper(unsigned char c)
                     614     ; c = R7
                     615     ; 返回值 = CY
0542                 616     isupper:
                     617     ;{
                     618     ;       if ( (c >= 'A') && (c <= 'Z') )
                     619             BLO     R7, #'A', isupper_endif
                     624             BHI     R7, #'Z', isupper_endif
                     629     ;       {
                     630     ;               return 1;
054E D3              631                     SETB    C
054F 22              632                     RET
                     633     ;       }
0550                 634     isupper_endif:
                     635     ;       return 0;
0550 C3              636             CLR     C
                     637     ;}
0551 22              638             RET
                     639     
                     640     
                     641     ;*************************************************************************
                     642     ;函数:islower()
                     643     ;功能:判断字符c是否为小写字母
                     644     ;*************************************************************************
                     645     ; bit islower(unsigned char c)
                     646     ; c = R7
                     647     ; 返回值 = CY
0552                 648     islower:
                     649     ;{
                     650     ;       if ( (c >= 'a') && (c <= 'z') )
                     651             BLO     R7, #'a', islower_endif
                     656             BHI     R7, #'z', islower_endif
                     661     ;       {
                     662     ;               return 1;
055E D3              663                     SETB    C
055F 22              664                     RET
                     665     ;       }
0560                 666     islower_endif:
                     667     ;       return 0;
0560 C3              668             CLR     C
                     669     ;}
0561 22              670             RET
                     671     
                     672     
                     673     ;*************************************************************************
                     674     ;函数:void PutChar(unsigned char c)
                     675     ;功能:滚动显示一个字母或汉字
                     676     ;参数:
                     677     ;       c:字母或汉字的编码,当c>=0x80时视为汉字
                     678     ;*************************************************************************
                     679     ; void PutChar(unsigned char c)
                     680     ; c = R7
0562                 681     PutChar:
                     682     ;{
                     683     ;       unsigned int a;         //地址变量
                     684     ;       unsigned char i,j;      //循环变量
                     685     ;       unsigned char t;        //临时变量
                     686     ;       unsigned char code *Tab;        //指针,用于查表
A51 MACRO ASSEMBLER  MAIN                                                                 07/01/2006 11:23:03 PAGE    16

                     687     ;       分配:a = (R2,R3)
                     688     ;       分配:i = R4
                     689     ;       分配:j = R5
                     690     ;       分配:t = R6
                     691     ;       分配:*Tab = (0x18,0x19)
0562 C002            692             PUSH    0x02
0564 C003            693             PUSH    0x03
0566 C004            694             PUSH    0x04
0568 C005            695             PUSH    0x05
056A C006            696             PUSH    0x06
056C C018            697             PUSH    0x18
056E C019            698             PUSH    0x19
                     699     ;       t = 8;
0570 7E08            700             MOV     R6, #8
                     701     ;       if ( c >= 0x80 )        //如果c是汉字
                     702             BLO     R7, #0x80, PutChar_elseif1
                     707     ;       {
                     708     ;               t = 16;
0578 7E10            709                     MOV     R6, #16
                     710     ;               a = 32 * ( c - 0x80 );
057A EF              711                     MOV     A, R7
057B C3              712                     CLR     C
057C 9480            713                     SUBB    A, #0x80
057E 75F020          714                     MOV     B, #32
0581 A4              715                     MUL     AB
0582 AAF0            716                     MOV     R2, B
0584 FB              717                     MOV     R3, A
                     718     ;               Tab = HanziTab;
0585 751803          719                     MOV     0x18, #HIGH(HanziTab)
0588 75195E          720                     MOV     0x19, #LOW(HanziTab)
                     721     ;       }
058B 8032            722             SJMP    PutChar_endif
                     723     ;       else if ( isupper(c) )  //如果c是大写字母
058D                 724     PutChar_elseif1:
058D 120542          725             LCALL   isupper
0590 5013            726             JNC     PutChar_elseif2
                     727     ;       {
                     728     ;               a = 16 * ( c - 'A' );
0592 EF              729                     MOV     A, R7
0593 C3              730                     CLR     C
0594 9441            731                     SUBB    A, #'A'
0596 75F010          732                     MOV     B, #16
0599 A4              733                     MUL     AB
059A AAF0            734                     MOV     R2, B
059C FB              735                     MOV     R3, A
                     736     ;               Tab = UpperTab;
059D 751800          737                     MOV     0x18, #HIGH(UpperTab)
05A0 75191E          738                     MOV     0x19, #LOW(UpperTab)
                     739     ;       }
05A3 801A            740             SJMP    PutChar_endif
                     741     ;       else if ( islower(c) )  //如果c是小写字母
05A5                 742     PutChar_elseif2:
05A5 120552          743             LCALL   islower
05A8 5013            744             JNC     PutChar_else
                     745     ;       {
                     746     ;               a = 16 * ( c - 'a' );
05AA EF              747                     MOV     A, R7
05AB C3              748                     CLR     C
05AC 9461            749                     SUBB    A, #'a'
05AE 75F010          750                     MOV     B, #16
05B1 A4              751                     MUL     AB
05B2 AAF0            752                     MOV     R2, B
05B4 FB              753                     MOV     R3, A
                     754     ;               Tab = LowerTab;
05B5 751801          755                     MOV     0x18, #HIGH(LowerTab)
05B8 7519BE          756                     MOV     0x19, #LOW(LowerTab)
A51 MACRO ASSEMBLER  MAIN                                                                 07/01/2006 11:23:03 PAGE    17

                     757     ;       }
05BB 8002            758             SJMP    PutChar_endif
                     759     ;       else    //如果是其它字符
05BD                 760     PutChar_else:
                     761     ;       {
                     762     ;               return;
05BD 8040            763                     SJMP    PutChar_end
                     764     ;       }
05BF                 765     PutChar_endif:
                     766     ;       for ( j=0; j<t; j++ )
05BF 7D00            767             MOV     R5, #0
05C1                 768     PutChar_for1:
                     769     ;       {
                     770     ;               for ( i=0; i<15; i++ )
05C1 7C00            771                     MOV     R4, #0
05C3                 772     PutChar_for2:
                     773     ;               {
                     774     ;                       DispBuf[i] = DispBuf[i+1];
05C3 7430            775                             MOV     A, #DispBuf
05C5 2C              776                             ADD     A, R4
05C6 F8              777                             MOV     R0, A
05C7 04              778                             INC     A
05C8 F9              779                             MOV     R1, A
05C9 E7              780                             MOV     A, @R1
05CA F6              781                             MOV     @R0, A
                     782     ;                       DispBuf[16+i] = DispBuf[17+i];
05CB E8              783                             MOV     A, R0
05CC 2410            784                             ADD     A, #16
05CE F8              785                             MOV     R0, A
05CF 04              786                             INC     A
05D0 F9              787                             MOV     R1, A
05D1 E7              788                             MOV     A, @R1
05D2 F6              789                             MOV     @R0, A
                     790     ;               }
05D3 0C              791                     INC     R4
05D4 BC0FEC          792                     CJNE    R4, #15, PutChar_for2
                     793     ;               DispBuf[i] = Tab[a+j];
05D7 7430            794                     MOV     A, #DispBuf
05D9 2C              795                     ADD     A, R4
05DA F8              796                     MOV     R0, A
05DB E519            797                     MOV     A, 0x19
05DD 2B              798                     ADD     A, R3
05DE F582            799                     MOV     DPL, A
05E0 E518            800                     MOV     A, 0x18
05E2 3A              801                     ADDC    A, R2
05E3 F583            802                     MOV     DPH, A
05E5 ED              803                     MOV     A, R5
05E6 93              804                     MOVC    A, @A+DPTR
05E7 F6              805                     MOV     @R0, A
                     806     ;               DispBuf[16+i] = Tab[a+j+t];
05E8 E8              807                     MOV     A, R0
05E9 2410            808                     ADD     A, #16
05EB F8              809                     MOV     R0, A
05EC ED              810                     MOV     A, R5
05ED 2E              811                     ADD     A, R6
05EE 93              812                     MOVC    A, @A+DPTR
05EF F6              813                     MOV     @R0, A
                     814     ;               Delay(SCROLL_SPEED);
05F0 C007            815                     PUSH    0x07
05F2 7F0F            816                     MOV     R7, #SCROLL_SPEED
05F4 120530          817                     LCALL   Delay
05F7 D007            818                     POP     0x07
                     819     ;       }
05F9 0D              820             INC     R5
                     821             BLO     R5, R6, PutChar_for1
05FF                 826     PutChar_end:
A51 MACRO ASSEMBLER  MAIN                                                                 07/01/2006 11:23:03 PAGE    18

05FF D019            827             POP     0x19
0601 D018            828             POP     0x18
0603 D006            829             POP     0x06
0605 D005            830             POP     0x05
0607 D004            831             POP     0x04
0609 D003            832             POP     0x03
060B D002            833             POP     0x02
060D 22              834             RET
                     835     
                     836     
                     837     ;*************************************************************************
                     838     ;函数:PutStr()
                     839     ;功能:滚动显示一个文字串
                     840     ;参数:
                     841     ;       *str:以'\0'结尾的文字串
                     842     ;       *str可以同时包含字母和汉字,其中汉字必须是小汉字库内的汉字
                     843     ;*************************************************************************
                     844     ; void PutStr(unsigned char code *str)
                     845     ; *str = (R6,R7)
060E                 846     PutStr:
060E C002            847             PUSH    0x02
0610 C003            848             PUSH    0x03
0612 EE   

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?