16×16点阵显示-test2.asm
来自「基于51的DS18B20_1Wire温度控制等C,ASM源程序」· 汇编 代码 · 共 185 行
ASM
185 行
;*******************************************************************
;* *
;* ME500单片机开发系统演示程序 - 16×16点阵测试
;* *
;* 16×16LED点阵显示
;* *
;* 版本: V1.0 (2006/11/20) *
;* 作者: gguoqing (Email: gguoqing@willar.com) *
;* 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界) *
;* 邮箱: support@willar.com *
;* *
;*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
;* *
;*******************************************************************
ORG 0000H
LJMP MAIN
ORG 0030H
;--------------------------------------------------------------
SDATA_595 EQU P0.0 ;串行数据输入
SCLK_595 EQU P2.7 ;移位时钟脉冲
RCK_595 EQU P0.2 ;输出锁存器控制脉冲
G_74138 EQU P2.4 ;显示允许控制信号端口
;--------------------------------------------------------------
MAIN:
MOV SP,#70H
MOV 30H,#00H ;取码指针初值(初值为0)
MOV A,#0FFH
MOV P2,A
MOV P0,A
CLR RCK_595
CLR G_74138
MAIN1:
MOV R1,#50H ;字停留时间
MAIN2:
MOV R6,#16 ;每字16组码
MOV R4,#00H ;扫描地址初值(从00-0FH)
MOV R0,30H ;取码指针存入R0
MAIN3:
MOV DPTR,#TAB_TEST1
CALL WR_LED
INC R0
INC R0
MOV A,R4 ;扫描地址载入A
MOV P2,A ;扫描输出
INC R4 ;扫描下一个
MOV R3,#2
DEL1MS:
MOV R5,#240 ;延时
DJNZ R5,$
DJNZ R3,DEL1MS
DJNZ R6,MAIN3 ;显示1个字了?
DJNZ R1,MAIN2 ;停留时间到了?
MOV 30H,R0
CJNE R0,#96,MAIN1 ;显示完3个字?
MOV R6,#03H
MAIN4:
MOV R0,#00H ;取码指针存入R0
MOV R4,#00H ;扫描地址初值(从00-0FH)
MAIN5:
MOV DPTR,#TAB_TEST3
CALL WR_LED
INC R0
INC R0
TEST1:
MOV A,R4 ;扫描地址载入A
MOV P2,A ;扫描输出
INC R4 ;扫描下一个
MOV R3,#4
DEL1MSA:
MOV R5,#120 ;延时
DJNZ R5,$
DJNZ R3,DEL1MSA
CJNE R4,#10H,TEST1
CJNE R0,#32,MAIN5
MAIN6:
MOV R0,#00H ;取码指针存入R0
MOV R4,#00H ;扫描地址初值(从00-0FH)
MOV DPTR,#TAB_TEST2
CALL WR_LED
TEST2:
MOV A,R4 ;扫描地址载入A
MOV P2,A ;扫描输出
INC R4 ;扫描下一个
MOV R3,#0FFH
DEL1MSB:
MOV R5,#0FFH ;延时
DEL1MSC:
NOP
NOP
DJNZ R5,DEL1MSC
DJNZ R3,DEL1MSB
CJNE R4,#10H,TEST2
DJNZ R6,MAIN4
JMP MAIN
;--------------------------------------------------------------
;WR_LED
;--------------------------------------------------------------
WR_LED:
SETB G_74138 ;关行显示,准备刷新
CLR RCK_595
INC R0 ;取行右边字节偏址
MOV A,R0 ;取码指针载入A
;MOV DPTR,TABLE
MOVC A,@A+DPTR
LCALL WR_595
CLR RCK_595
DEC R0 ;取行左边字节偏址
MOV A,R0 ;取码指针载入A
;MOV DPTR,TABLE
MOVC A,@A+DPTR
LCALL WR_595
NOP
NOP
NOP
SETB RCK_595 ;上升沿将数据送到输出锁存器
NOP
NOP
NOP
NOP
NOP
NOP
CLR RCK_595 ;恢复低电平
NOP
NOP
CLR G_74138 ;开显示
RET
;--------------------------------------------------------------
;移位寄存器接收数据子程序
;--------------------------------------------------------------
WR_595:
MOV R7,#08H
WR_LOOP:
RLC A
MOV SDATA_595,C
SETB SCLK_595 ;上升沿发生移位
NOP
NOP
NOP
NOP
CLR SCLK_595
DJNZ R7,WR_LOOP
RET
;--------------------------------------------------------------
TAB_TEST1:
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
TAB_TEST2:
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
;--------------------------------------------------------------
TAB_TEST3:
DB 07FH,0FFH,0BFH,0FFH,0DFH,0FFH,0EFH,0FFH
DB 0F7H,0FFH,0FBH,0FFH,0FDH,0FFH,0FEH,0FFH
DB 0FFH,07FH,0FFH,0BFH,0FFH,0DFH,0FFH,0EFH
DB 0FFH,0F7H,0FFH,0FBH,0FFH,0FDH,0FFH,0FEH
;--------------------------------------------------------------
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?