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

📄 16x16_164.asm

📁 提供了LED点阵显示的Proteus仿真电路
💻 ASM
字号:
	ZISHU		EQU	30H	;字数
	SHOWTIME	EQU	31H	;一个字重复扫描的次数
	SAOMIAO		EQU	32H	;扫描指针
	QUMA		EQU	33H	;取码指针
	DIS_BUF_C	EQU	34H	;缓冲区字数,这里是2
	OFFSET		EQU	35H	;取码指针偏移量
	;********************************************
	DIS_BUFL	EQU	40H	;显示缓冲低字节区(40H~60H攻32字节)
	DIS_BUFH	EQU	60H	;显示缓冲高字节区(60H~80H攻32字节)
	LOD_BUFL	EQU	80H	;加载缓冲低字节区(80H~90H)
	LOD_BUFH	EQU	90H	;加载缓冲高字节区(90H~A0H)
	ORG  	0000H
	LJMP	START
	ORG	0100H
START:	
	MOV 	SCON,#00H	;串行口初始化为方式0
	MOV	ZISHU,#14
	LCALL	CLRBUF		;把显示缓冲区清零
	MOV	DPTR,#TABLE
	MOV	R2,ZISHU
NEXT:	MOV	R0,#LOD_BUFL
	MOV	R1,#LOD_BUFH	
	LCALL	LOADING		;把字型码加载到加载缓冲区
	MOV	R3,#16		;这个字是否每一行都移动了?
LOOP3:	LCALL	SHIFT		;把显示缓冲区内的字型移位
	MOV	SHOWTIME,#10
LOOP2:	MOV	R4,#16		;一个字需要扫描的16次行
	MOV	SAOMIAO,#80H	;扫描指针清零,p1.7=1,译码器无效
	MOV	QUMA,#0H	;取码指针清零
LOOP1:	MOV	A,SAOMIAO
	MOV	P1,A		;扫描指针输入
	INC	SAOMIAO		;扫描指针+1	
	MOV	DIS_BUF_C,#2H	;缓冲区有2个字
	LCALL	DIS_LINE
	CLR	P1.7	
	INC	QUMA		;取码指针+1
	LCALL	DELAY1
	SETB	P1.7
	DJNZ	R4,LOOP1	;一个字需要扫描的16次行
	DJNZ	SHOWTIME,LOOP2	;一个字的显示时间是否完成?
	DJNZ	R3,LOOP3	;是否一个字的每一行的移动了
	DJNZ	R2,NEXT

	LJMP	$
;****************************************************************************
 DIS_LINE:			;输入一行子程序,入口参数DIS_BUF_C,与缓冲区字数相等
 	PUSH	PSW
	PUSH	ACC
	MOV	OFFSET,#0H	;取码指针偏移量,多一个字就多+16
NE1:	MOV	R0,#DIS_BUFL
	MOV	A,R0
	ADD	A,QUMA
	ADD	A,OFFSET
	MOV	R0,A
	MOV	A,@R0
	CLR	TI
	MOV 	SBUF,A
	JNB  	TI,$
  	CLR  	TI     		;清发送完标志	
	MOV	R0,#DIS_BUFH
	MOV	A,R0
	ADD	A,QUMA
	ADD	A,OFFSET
	MOV	R0,A
	MOV	A,@R0
	CLR	TI
	MOV 	SBUF,A
	JNB  	TI,$
  	CLR  	TI     		;清发送完标志

	MOV	A,OFFSET
	ADD	A,#16		;取下一个字需要加16的偏移量
	MOV	OFFSET,A
	DJNZ	DIS_BUF_C,NE1
	POP	ACC
	POP	PSW
	RET
	
;**********************************************************************************
;把显示缓冲区清零
CLRBUF:
	MOV	R0,#DIS_BUFL
L1:	MOV	@R0,#0
	INC	R0
	CJNE	R0,#80H,L1	
	RET
;**********************************************************************************
;把字型码加载到加载缓冲区
LOADING:
	PUSH	02h	;push r2
	MOV 	R2,#16
L2:
        MOV 	A,#0
        MOVC 	A,@A+DPTR
        MOV 	@R0,A	;把偶数个数字码存放在R0开始的缓冲区,共可以存放16个字码
        INC 	R0
        INC 	DPTR        
        CLR 	A
        MOVC 	A,@A+DPTR
        MOV 	@R1,A	;把奇数个数字码存放在R1开始的缓冲区,共可以存放16个字码
        INC 	R1
        INC 	DPTR
        DJNZ 	R2,L2	
	POP	02h	;pop r2
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
SHIFT:
	PUSH	PSW
	PUSH 	ACC
        SETB 	RS1		;选择另外一组工作寄存器
        MOV 	R3,#00H		;偏移量
        MOV 	R4,#16
LOOPS:
        CLR 	C		;清进位标志C
        MOV 	A,#LOD_BUFH
        ADD 	A,R3
        MOV 	R0,A
        MOV 	A,@R0
        RLC	A		;带进位左移,高字节的最高位移进Cy
        MOV 	@R0,A		;移位后放回缓冲区
        MOV 	A,#LOD_BUFL
        PUSH 	PSW		;保护Cy,避免ADD进位影响
        ADD 	A,R3	
        MOV 	R0,A
        MOV 	A,@R0
        POP 	PSW
        RLC 	A		;高字节最高位移进低字节最低位   低字节高位进入Cy
        MOV 	@R0,A

	MOV 	A,#DIS_BUFH
        PUSH 	PSW
        ADD 	A,R3
	ADD	A,#16		;取下一个字的高字节需要+16的偏移量
        MOV 	R0,A
        MOV 	A,@R0
        POP 	PSW
        RLC 	A
        MOV 	@R0,A

	MOV 	A,#DIS_BUFL
        PUSH 	PSW
        ADD 	A,R3
	ADD	A,#16
        MOV 	R0,A
        MOV 	A,@R0
        POP 	PSW
        RLC 	A
        MOV 	@R0,A

        MOV 	A,#DIS_BUFH	;显示缓冲区地址送A
        PUSH 	PSW
        ADD 	A,R3
        MOV 	R0,A
        MOV 	A,@R0
        POP 	PSW
        RLC 	A		;上缓冲区低字节的高位进入  这个缓冲区高字节低位,
        MOV 	@R0,A

        MOV 	A,#DIS_BUFL
        PUSH 	PSW
        ADD 	A,R3
        MOV 	R0,A
        MOV 	A,@R0
        POP 	PSW
        RLC 	A
        MOV 	@R0,A
	


        INC 	R3		;偏移量+1,准备移下一对字节(下一行)
        DJNZ 	R4,LOOPS 	;一个字的16行是否都移动了?
        CLR 	RS1
        POP 	ACC
	POP	PSW


	LCALL	DELAY2
	RET

;***********************************************************************************
DELAY1:
	SETB	RS0
	MOV	R2,#100
J1:	DJNZ	R2,J1
	CLR	RS0
	RET

DELAY2:	
	MOV	R5,#5
J3:	MOV	R4,#200
J2:	DJNZ	R4,J2
	DJNZ	R5,J3
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TABLE :
 ;今
DB  01H,00H,01H,00H,02H,80H,04H,40H
DB  08H,20H,12H,10H,21H,8EH,0C0H,84H
DB  00H,00H,1FH,0F0H,00H,10H,00H,20H
DB  00H,20H,00H,40H,00H,80H,01H,00H

;天
DB  00H,08H,7FH,0FCH,01H,00H,01H,00H
DB  01H,00H,01H,04H,0FFH,0FEH,01H,00H
DB  02H,80H,02H,80H,04H,40H,04H,40H
DB  08H,20H,10H,10H,20H,0EH,0C0H,04H

;是
DB  0FH,0E0H,08H,20H,08H,20H,0FH,0E0H
DB  08H,20H,08H,20H,0FH,0E0H,00H,04H
DB  0FFH,0FEH,01H,00H,09H,20H,09H,0F0H
DB  09H,00H,15H,00H,23H,00H,40H,0FEH

;年
DB  08H,00H,08H,08H,0FH,0FCH,11H,00H
DB  11H,00H,21H,10H,5FH,0F8H,11H,00H
DB  11H,00H,11H,04H,0FFH,0FEH,01H,00H
DB  01H,00H,01H,00H,01H,00H,01H,00H

;月
DB  00H,10H,0FH,0F8H,08H,10H,08H,10H
DB  08H,10H,0FH,0F0H,08H,10H,08H,10H
DB  08H,10H,0FH,0F0H,08H,10H,08H,10H
DB  10H,10H,10H,10H,20H,50H,40H,20H

;日
DB  00H,10H,1FH,0F8H,10H,10H,10H,10H
DB  10H,10H,10H,10H,10H,10H,1FH,0F0H
DB  10H,10H,10H,10H,10H,10H,10H,10H
DB  10H,10H,1FH,0F0H,10H,10H,00H,00H

;星
DB  00H,08H,3FH,0FCH,20H,08H,3FH,0F8H
DB  20H,08H,3FH,0F8H,01H,00H,21H,08H
DB  3FH,0FCH,21H,00H,41H,10H,0BFH,0F8H
DB  01H,00H,01H,04H,0FFH,0FEH,00H,00H

;期
DB  22H,04H,22H,7EH,22H,44H,7FH,44H
DB  22H,44H,3EH,7CH,22H,44H,3EH,44H
DB  22H,44H,22H,7CH,0FFH,0C4H,00H,44H
DB  24H,44H,22H,84H,41H,14H,82H,08H

;空格
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
;空格
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
end

⌨️ 快捷键说明

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