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

📄 16x16_164.lst

📁 提供了LED点阵显示的Proteus仿真电路
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  16X16_164                                                            02/17/2009 12:40:10 PAGE     1


MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN 16X16_164.OBJ
ASSEMBLER INVOKED BY: E:\Keil\C51\BIN\A51.EXE 16X16_164.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

  0030                 1             ZISHU           EQU     30H     ;字数
  0031                 2             SHOWTIME        EQU     31H     ;一个字重复扫描的次数
  0032                 3             SAOMIAO         EQU     32H     ;扫描指针
  0033                 4             QUMA            EQU     33H     ;取码指针
  0034                 5             DIS_BUF_C       EQU     34H     ;缓冲区字数,这里是2
  0035                 6             OFFSET          EQU     35H     ;取码指针偏移量
                       7             ;********************************************
  0040                 8             DIS_BUFL        EQU     40H     ;显示缓冲低字节区(40H~60H攻32字节)
  0060                 9             DIS_BUFH        EQU     60H     ;显示缓冲高字节区(60H~80H攻32字节)
  0080                10             LOD_BUFL        EQU     80H     ;加载缓冲低字节区(80H~90H)
  0090                11             LOD_BUFH        EQU     90H     ;加载缓冲高字节区(90H~A0H)
0000                  12             ORG     0000H
0000 020100           13             LJMP    START
0100                  14             ORG     0100H
0100                  15     START:  
0100 759800           16             MOV     SCON,#00H       ;串行口初始化为方式0
0103 75300E           17             MOV     ZISHU,#14
0106 12017F           18             LCALL   CLRBUF          ;把显示缓冲区清零
0109 900208           19             MOV     DPTR,#TABLE
010C AA30             20             MOV     R2,ZISHU
010E 7880             21     NEXT:   MOV     R0,#LOD_BUFL
0110 7990             22             MOV     R1,#LOD_BUFH    
0112 120188           23             LCALL   LOADING         ;把字型码加载到加载缓冲区
0115 7B10             24             MOV     R3,#16          ;这个字是否每一行都移动了?
0117 12019C           25     LOOP3:  LCALL   SHIFT           ;把显示缓冲区内的字型移位
011A 75310A           26             MOV     SHOWTIME,#10
011D 7C10             27     LOOP2:  MOV     R4,#16          ;一个字需要扫描的16次行
011F 753280           28             MOV     SAOMIAO,#80H    ;扫描指针清零,p1.7=1,译码器无效
0122 753300           29             MOV     QUMA,#0H        ;取码指针清零
0125 E532             30     LOOP1:  MOV     A,SAOMIAO
0127 F590             31             MOV     P1,A            ;扫描指针输入
0129 0532             32             INC     SAOMIAO         ;扫描指针+1     
012B 753402           33             MOV     DIS_BUF_C,#2H   ;缓冲区有2个字
012E 120146           34             LCALL   DIS_LINE
0131 C297             35             CLR     P1.7    
0133 0533             36             INC     QUMA            ;取码指针+1
0135 1201F6           37             LCALL   DELAY1
0138 D297             38             SETB    P1.7
013A DCE9             39             DJNZ    R4,LOOP1        ;一个字需要扫描的16次行
013C D531DE           40             DJNZ    SHOWTIME,LOOP2  ;一个字的显示时间是否完成?
013F DBD6             41             DJNZ    R3,LOOP3        ;是否一个字的每一行的移动了
0141 DACB             42             DJNZ    R2,NEXT
                      43     
0143 020143           44             LJMP    $
                      45     ;****************************************************************************
0146                  46      DIS_LINE:                      ;输入一行子程序,入口参数DIS_BUF_C,与缓冲区字数相等
0146 C0D0             47             PUSH    PSW
0148 C0E0             48             PUSH    ACC
014A 753500           49             MOV     OFFSET,#0H      ;取码指针偏移量,多一个字就多+16
014D 7840             50     NE1:    MOV     R0,#DIS_BUFL
014F E8               51             MOV     A,R0
0150 2533             52             ADD     A,QUMA
0152 2535             53             ADD     A,OFFSET
0154 F8               54             MOV     R0,A
0155 E6               55             MOV     A,@R0
0156 C299             56             CLR     TI
0158 F599             57             MOV     SBUF,A
015A 3099FD           58             JNB     TI,$
A51 MACRO ASSEMBLER  16X16_164                                                            02/17/2009 12:40:10 PAGE     2

015D C299             59             CLR     TI              ;清发送完标志   
015F 7860             60             MOV     R0,#DIS_BUFH
0161 E8               61             MOV     A,R0
0162 2533             62             ADD     A,QUMA
0164 2535             63             ADD     A,OFFSET
0166 F8               64             MOV     R0,A
0167 E6               65             MOV     A,@R0
0168 C299             66             CLR     TI
016A F599             67             MOV     SBUF,A
016C 3099FD           68             JNB     TI,$
016F C299             69             CLR     TI              ;清发送完标志
                      70     
0171 E535             71             MOV     A,OFFSET
0173 2410             72             ADD     A,#16           ;取下一个字需要加16的偏移量
0175 F535             73             MOV     OFFSET,A
0177 D534D3           74             DJNZ    DIS_BUF_C,NE1
017A D0E0             75             POP     ACC
017C D0D0             76             POP     PSW
017E 22               77             RET
                      78             
                      79     ;**********************************************************************************
                      80     ;把显示缓冲区清零
017F                  81     CLRBUF:
017F 7840             82             MOV     R0,#DIS_BUFL
0181 7600             83     L1:     MOV     @R0,#0
0183 08               84             INC     R0
0184 B880FA           85             CJNE    R0,#80H,L1      
0187 22               86             RET
                      87     ;**********************************************************************************
                      88     ;把字型码加载到加载缓冲区
0188                  89     LOADING:
0188 C002             90             PUSH    02h     ;push r2
018A 7A10             91             MOV     R2,#16
018C                  92     L2:
018C 7400             93             MOV     A,#0
018E 93               94             MOVC    A,@A+DPTR
018F F6               95             MOV     @R0,A   ;把偶数个数字码存放在R0开始的缓冲区,共可以存放16个字码
0190 08               96             INC     R0
0191 A3               97             INC     DPTR        
0192 E4               98             CLR     A
0193 93               99             MOVC    A,@A+DPTR
0194 F7              100             MOV     @R1,A   ;把奇数个数字码存放在R1开始的缓冲区,共可以存放16个字码
0195 09              101             INC     R1
0196 A3              102             INC     DPTR
0197 DAF3            103             DJNZ    R2,L2   
0199 D002            104             POP     02h     ;pop r2
019B 22              105             RET
                     106     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;     
019C                 107     SHIFT:
019C C0D0            108             PUSH    PSW
019E C0E0            109             PUSH    ACC
01A0 D2D4            110             SETB    RS1             ;选择另外一组工作寄存器
01A2 7B00            111             MOV     R3,#00H         ;偏移量
01A4 7C10            112             MOV     R4,#16
01A6                 113     LOOPS:
01A6 C3              114             CLR     C               ;清进位标志C
01A7 7490            115             MOV     A,#LOD_BUFH
01A9 2B              116             ADD     A,R3
01AA F8              117             MOV     R0,A
01AB E6              118             MOV     A,@R0
01AC 33              119             RLC     A               ;带进位左移,高字节的最高位移进Cy
01AD F6              120             MOV     @R0,A           ;移位后放回缓冲区
01AE 7480            121             MOV     A,#LOD_BUFL
01B0 C0D0            122             PUSH    PSW             ;保护Cy,避免ADD进位影响
01B2 2B              123             ADD     A,R3    
01B3 F8              124             MOV     R0,A
A51 MACRO ASSEMBLER  16X16_164                                                            02/17/2009 12:40:10 PAGE     3

01B4 E6              125             MOV     A,@R0
01B5 D0D0            126             POP     PSW
01B7 33              127             RLC     A               ;高字节最高位移进低字节最低位   低字节高位进入Cy
01B8 F6              128             MOV     @R0,A
                     129     
01B9 7460            130             MOV     A,#DIS_BUFH
01BB C0D0            131             PUSH    PSW
01BD 2B              132             ADD     A,R3
01BE 2410            133             ADD     A,#16           ;取下一个字的高字节需要+16的偏移量
01C0 F8              134             MOV     R0,A
01C1 E6              135             MOV     A,@R0
01C2 D0D0            136             POP     PSW
01C4 33              137             RLC     A
01C5 F6              138             MOV     @R0,A
                     139     
01C6 7440            140             MOV     A,#DIS_BUFL
01C8 C0D0            141             PUSH    PSW
01CA 2B              142             ADD     A,R3
01CB 2410            143             ADD     A,#16
01CD F8              144             MOV     R0,A
01CE E6              145             MOV     A,@R0
01CF D0D0            146             POP     PSW
01D1 33              147             RLC     A
01D2 F6              148             MOV     @R0,A
                     149     
01D3 7460            150             MOV     A,#DIS_BUFH     ;显示缓冲区地址送A
01D5 C0D0            151             PUSH    PSW
01D7 2B              152             ADD     A,R3
01D8 F8              153             MOV     R0,A
01D9 E6              154             MOV     A,@R0
01DA D0D0            155             POP     PSW
01DC 33              156             RLC     A               ;上缓冲区低字节的高位进入  这个缓冲区高字节低位,
01DD F6              157             MOV     @R0,A
                     158     
01DE 7440            159             MOV     A,#DIS_BUFL
01E0 C0D0            160             PUSH    PSW
01E2 2B              161             ADD     A,R3
01E3 F8              162             MOV     R0,A
01E4 E6              163             MOV     A,@R0
01E5 D0D0            164             POP     PSW
01E7 33              165             RLC     A
01E8 F6              166             MOV     @R0,A
                     167             
                     168     
                     169     

⌨️ 快捷键说明

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