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

📄 16x16.asm

📁 点阵动态扫描的程序
💻 ASM
字号:
;***********************************************************************
;要求1 滚动显示。先每行点亮, 扫描完成16行, 然后每列点亮,
; 扫描完16列,然后每点点亮,从最外圈跑完,然后次外圈, 
;只到最中心轮流只到每一个点完成扫描。 
;***********************************************************************
;考虑到单片机最小系统,不使用扩展。
;试验一下,没有 xl1000的实验仪 ,自己想的,使用 Proteus 6.9 做为硬件仿真

;考虑到单片机最小系统,不使用扩展,若想使用扩展,可以使用 74HC145 来开展I/O口
;本系统使用P0,P1 做高电平有效;P2,P3底电平有效;
;Proteus 6.9中没有16X16的点阵,所以用4片8X8点阵连成,

;* Create by :ng_cgj 于南阳    
;=============================

ORG 0000H
         MOV  SP,#50H       ;设堆栈指针
;逐行点亮(通过分别移位P0口,P1口来点亮各行)
ST1:     MOV   P1,#00H      ;置P0口为底电平	
         MOV   P0,#01H      ;选中第1行
         MOV   P3,#00H      ;置P3口为底电平
         MOV   P2,#00H      ;置P2口为底电平
         MOV   R0,#08       ;设置移位的次数
LOOP:    LCALL DELAY        ;调用延时
         MOV   A,P0         ;读取P0口
         RL    A            ;左移一位
         MOV   P0,A         ;送值回P0口
         DJNZ  R0, LOOP     ;判断移位8次数
         MOV   P0,#00H      ;置P0口为底电平
         MOV   P1,#01H      ;选中第9行
         MOV   R0,#08       ;设置移位的次数
LOOP2:   LCALL DELAY        ;调用延时
         MOV   P1,A         ;读取P1口
         RL    A            ;左移一位
         MOV   P1,A         ;送值回P1口
         DJNZ  R0, LOOP2    ;判断移位8次数
         MOV   P1,#00H      ;置P1口为底电平,熄灭最后一行
;逐列点亮(通过同时移位P2口,P3口来点亮各行)
ST2:     MOV   P0,#0FFH     ;置P0口为高电平    
         MOV   P1,#0FFH     ;置P1口为高电平
         MOV   P3,#0FFH     ;置P3口为高电平 
         MOV   P2,#0FEH     ;选中右边第1列
         MOV   R0,#08       ;设置移位的次数
LOOP3:   LCALL DELAY        ;调用延时
         MOV   A,P2         ;读取P2口    
         RL    A            ;左移一位 
         MOV   P2,A         ;送值回P2口
         DJNZ  R0,LOOP3     ;判断移位8次数 
         MOV   P2,#0FFH     ;置右8列为0
         MOV   P3,#0FEH     ;选中第9列
         MOV   R0,#08       ;设置移位的次数
LOOP4:   LCALL DELAY        ;调用延时
         MOV   A,P3         ;读取P3口    
         RL    A            ;左移一位   
         MOV   P3,A         ;送值回P3口
         DJNZ  R0,LOOP4     ;判断移位8次数
         MOV   P3,#0FFH     ;熄灭最后一列
           
;逐点点亮

ST5: 
        MOV    30H,#07      ;设置移位的次数 
        MOV    B,#07        ;设置移位的次数       
;行点点亮    
        MOV    P0,#01H      ;选中第1行      
        MOV    P3,#0FFH     ;置P3口为高电平 
        MOV    P2,#0FEH     ;点亮有上角第一点
        MOV    P1,#00H      ;置P1口为底电平 
ST4:    MOV    R1,B         ;取移位的次数的数值    
        LCALL  DELAY1       ;调用延时
        LCALL  P2RL         ;调用P2口左移
        MOV    P2,#7FH      ;点亮第8点
        LCALL  DELAY1       ;调用延时
ST6:    MOV    P2,#0FFH     ;置P2口为高电平
        MOV    P3,#0FEH     ;点亮第9点
        LCALL  DELAY1       ;调用延时
        MOV    R1,B         ;取移位的次数的数值  
        LCALL  P3RL         ;调用P3口左移
;列点点亮
        MOV    R1,B         ;取移位的次数的数值  
        LCALL  DELAY1       ;调用延时
        LCALL  P0RL         ;调用P0口左移
        MOV    P0,#00H      ;置P0口为底电平          
        MOV    P1,#01H      ;点亮列点  
        MOV    R1,B         ;取移位的次数的数值  
        LCALL  DELAY1       ;调用延时
        LCALL  P1RL         ;调用P1口左移
;行点点亮 
        MOV    R1,B         ;取移位的次数的数值 
        LCALL  DELAY1       ;调用延时
        LCALL  P3RR         ;调用P3口右移
        MOV    P2,#07FH     ;点亮行点     
        MOV    P3,#0FFH     ;置P3口为高电平
        MOV    R1,B         ;取移位的次数的数值 
        LCALL  DELAY1       ;调用延时
        LCALL  P2RR         ;调用P2口右移
;列点点亮 
        MOV   R1,B          ;取移位的次数的数值 
        LCALL DELAY1        ;调用延时
        LCALL P1RR          ;调用P1口右移
        MOV   P0,#80H       ;点亮列点
        MOV   P1,#00H       ;置P1口为底电平
        LCALL DELAY1        ;调用延时
        JC    FOUR          ;判断是否扫描到最后四点?
        DEC   30H           ;扫描完1圈,移位数减1        
        MOV   B,30H         ;保存移位数值
        MOV   R1,B          ;取移位的次数的数值
        LCALL DELAY1        ;调用延时
        LCALL P0RR          ;调用P0口右移 
        MOV   A,30H         ;取移位数值
        CJNE  A,#1,BACK     ;比较循环的次数,没完则继续点亮下一点
;点亮最后4X4
        MOV   R1,#02        ;取移位的次数的数值
        LCALL P2RL          ;调用P2口左移 
        MOV   P2,#0FFH      ;置P2口为高电平
        MOV   P3,#0FEH         
        MOV   30H,#01       ;设置移位的次数的数值
        MOV   B,30H         ;保存移位数值
        SETB  C             ;置位C
        LJMP  ST6           ;没有点亮完,返回继续
;点亮最后4点
FOUR:   MOV   P2,#7FH       ;点亮倒数第四点
        LCALL DELAY1

        MOV   P2,#0FFH      ;点亮倒数第三点
        MOV   P3,#0FEH
        LCALL DELAY1
      
        MOV   P0,#00H       ;点亮倒数第二点
        MOV   P1,#01H
        MOV   P3,#0FEH
        LCALL DELAY1

        MOV   P2,#07FH      ;点亮倒数第一点
        MOV   P1,#01H 
        MOV   P3,#0FFH
        LCALL DELAY1

WAIT:   LCALL DELAY2        ;等待          
        LJMP  ST1           ;重新开始
 
BACK:   LJMP  ST4           ;没有点亮完,返回继续   
;移位子程序
P0RR:   MOV   A,P0          ;读取P0口 
        RR    A             ;右移
        MOV   P0,A          ;送值回P0口
        LCALL DELAY1        ;调用延时
        DJNZ  R1,P0RR       ;判断移位次数
        RET                 ;返回
P0RL:   MOV   A,P0
        RL    A
        MOV   P0,A
        LCALL DELAY1
        DJNZ  R1,P0RL
        RET
P1RL:   MOV   A,P1
        RL    A
        MOV   P1,A
        LCALL DELAY1
        DJNZ  R1,P1RL
        RET
P1RR:   MOV   A,P1
        RR    A
        MOV   P1,A
        LCALL DELAY1
        DJNZ  R1,P1RR
        RET      
P2RL:   MOV   A,P2
        RL    A
        MOV   P2,A
        LCALL DELAY1
        DJNZ  R1,P2RL
        RET
P2RR:   MOV   A,P2
        RR    A
        MOV   P2,A
        LCALL DELAY1
        DJNZ  R1,P2RR
        RET
P3RL:   MOV   A,P3
        RL    A
        MOV   P3,A
        LCALL DELAY1
        DJNZ  R1,P3RL
        RET
P3RR:   MOV   A,P3
        RR    A
        MOV   P3,A
        LCALL DELAY1
        DJNZ  R1,P3RR
        RET

;延时子程序
DELAY1:     MOV  R6,#200       ;
DS3:        MOV  R7,#248
DS4:        DJNZ R7,DS4
            DJNZ R6,DS3  
            RET
         
DELAY:      MOV  R5,#5        ; 
DS1:        MOV  R6,#100      ; 
DS2:        MOV  R7,#248
            DJNZ R7,$
            DJNZ R6,DS2
            DJNZ R5,DS1
            RET
DELAY2:     MOV  R5,#100      ; 
DS7:        MOV  R6,#100      ; 
DS8:        MOV  R7,#248
            DJNZ R7,$
            DJNZ R6,DS8
            DJNZ R5,DS7
            RET
END

⌨️ 快捷键说明

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