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

📄 max7219Ц-

📁 max7219演示程序
💻
字号:
;本程序实用于测试芯片:MAX7219演示
;使用AT89C51单片机,使用晶振24MHz
;使用小板编号:无
;*************************************************************
;以下为常量定义
;*************************************************************
;以下为变量定义
CLOOP1	EQU	2CH
CLOOP2	EQU	2DH
DISD	EQU	2EH		;输入的模拟电压
DNUM	EQU	2FH		;显示的数据量
CABUF	EQU	30H		;MAX7219控制或地址寄存器
DABUF	EQU	38H		;MAX7219数据寄存器
ADCBUF	EQU	40H		;转换后的DA值,共32字节
;*************************************************************
;以下为位控变量的定义
GOOD    BIT     00H             ;测试结果标志
;*************************************************************
;以下为各口地址的定义
PIN01	BIT	P0.0		;PIN01
PIN02	BIT	P0.1		;PIN02
PIN03	BIT	P0.2		;PIN03
PIN04	BIT	P0.3		;PIN04
PIN05	BIT	P0.4		;PIN05
PIN06	BIT	P0.5		;PIN06
SPEAKER	BIT	P0.6		;PIN07
FLASH	BIT	P0.7		;PIN08
PIN09	BIT	P1.0		;PIN09
PIN10	BIT	P1.1		;PIN10
PIN11	BIT	P1.2		;PIN11
PIN12	BIT	P1.3		;PIN12
PIN13	BIT	P1.4		;PIN13
PIN14	BIT	P1.5		;PIN14
PIN15	BIT	P1.6		;PIN15
PIN16	BIT	P1.7		;PIN16
PIN17	BIT	P2.0		;PIN17
PIN18	BIT	P2.1		;PIN18
PIN19	BIT	P2.2		;PIN19
PIN20	BIT	P2.3		;PIN20
PIN21	BIT	P2.4		;PIN21
PIN22	BIT	P2.5		;PIN22
PIN23	BIT	P2.6		;PIN23
PIN24	BIT	P2.7		;PIN24
PIN25	BIT	P3.0		;PIN25
PIN26	BIT	P3.1		;PIN26
PIN27	BIT	P3.2		;PIN27
PIN28	BIT	P3.3		;PIN28
PIN29	BIT	P3.4		;PIN29
DIN	BIT	P3.5		;PIN30
CSLD	BIT	P3.6		;PIN31
CLK	BIT	P3.7		;PIN32
;*************************************************************
;以下为各程序及其功能
;1.     START   		主程序
;2.	TESTOK			测试OK子程序
;3.	ERROR			测试bad子程序
;4.	DEL40MS			软件延时40ms
;5.	DEL50MS			软件延时50ms
;6.	DEL100MS		软件延时100ms
;7.	DEL120MS		软件延时120ms
;8.	DEL250MS		软件延时250ms
;9.	INT0INT			INT0中断子程序
;10.	INT1INT			INT1中断子程序
;11.	T0INT			T0中断子程序
;12.	T1INT			T1中断子程序
;13.	UART			UART串口中断子程序
;*************************************************************
;MAIN PROGRAM START
        ORG     0000H
        LJMP    START
        ORG     0003H
        LJMP    INT0INT         ;外部中断0
        ORG     000BH
        LJMP    T0INT           ;T0中断
        ORG     0013H
        LJMP    INT1INT         ;外部中断1
        ORG     001BH
        LJMP    T1INT           ;T1中断
        ORG     0023H
        LJMP    UART            ;未来通信使用
        ORG     0040H
DB      00H,02H,00H,00H,02H,00H,00H
START:  CLR     EA
        MOV     P2,#0FFH
        MOV     P1,#0FFH
	MOV	P0,#0FFH
        MOV     R7,#0AH         ;24.0MHz晶振,上电延时1ms
LOOP1:  MOV     R6,#64H
LOOP2:  DJNZ    R6,LOOP2
        DJNZ    R7,LOOP1
        MOV     P2,#0FFH
        MOV     P1,#0FFH
	MOV	P0,#0FFH
        CLR     EA
        MOV     SP,#60H         ;堆栈设置
        MOV     TCON,#00H       ;关闭所有定时器中断
        MOV     IE,#00H         ;关闭所有中断
MAIN:	LCALL	CSHDIS
TT11:	MOV	DISD,#00H
TT12:	MOV	R0,#ADCBUF
	MOV	R6,#04H
TT13:	MOV	A,DISD
	MOV	@R0,A
	INC	R0
	DJNZ	R6,TT13
	LCALL	DISADC
	CLR	C
	MOV	A,#11H
	ADD	A,DISD
	MOV	DISD,A
	JNC	TT12
	SJMP	TT11
	NOP			;测试完毕
;*********************************************************************
;程序功能:显示读取的数据
;直接调用子程序:
;入口参数:无
;出口参数:无
;占用资源:
;修改记录:
;*********************************************************************
DISADC:	MOV	R4,#01H		;控制循环次数
	MOV	CLOOP1,#01H	;显示的第几个通道参数
	MOV	CLOOP2,#ADCBUF	;CLOOP2指向ADCBUF首址
DISA1:	MOV	R0,#CABUF	;显示位置寄存器首址
	MOV	R1,#DABUF	;显示数据寄存器首址
	MOV	DNUM,#08H	;显示8个数据
	MOV	@R0,#01H
	MOV	@R1,#7EH	;0
	INC	R0
	INC	R1
	MOV	@R0,#02H
	MOV	@R1,#30H	;1
	INC	R0
	INC	R1
	MOV	@R0,#03H
	MOV	@R1,#08H	;下划线"_"
	INC	R0
	INC	R1
	MOV	@R0,#04H
	MOV	A,CLOOP1	;第几个通道的参数
	ANL	A,#0F0H		;取出高4位
	SWAP	A		;调整到低4位上
	MOV	DPTR,#LEDTAB	;获取显示代码
	MOVC	A,@A+DPTR
	MOV	@R1,A		;显示类型寄存器数据
	INC	R0
	INC	R1
	MOV	@R0,#05H
	MOV	A,CLOOP1
	ANL	A,#0FH		;取出低4位
	MOV	DPTR,#LEDTAB
	MOVC	A,@A+DPTR
	MOV	@R1,A
	INC	R0
	INC	R1
	MOV	@R0,#06H
	MOV	@R1,#00H
	INC	R0
	INC	R1
	MOV	@R0,#07H
	MOV	@R1,#00H
	INC	R0
	INC	R1
	MOV	@R0,#08H
	MOV	@R1,#00H
;	LCALL	DISPLAY
;	LCALL	DEL600MS
;	LCALL	DEL600MS
;	LCALL	DEL600MS
	MOV	R0,CLOOP2
	LCALL	DIS1_2		;将数据拆分并到缓冲区并显示2S
	INC	CLOOP1		;显示下一个通道
	MOV	A,CLOOP2
	ADD	A,#04H		;指向下一个通道(或一个通道的后4个)的数据地址
	MOV	CLOOP2,A
	DJNZ	R4,DISA1
	RET
;*********************************************************************
;程序功能:将数据缓冲区的数据进行拆分后进行显示
;调用子程序:
;入口参数:
;出口参数:
;占用资源:
;修改记录:
;*********************************************************************
DIS1_2:	MOV	R1,#DABUF
	MOV	R5,#04H
	MOV	DPTR,#LEDTAB
DIS1_21:MOV	A,@R0		;先将数据进行拆分
	ANL	A,#0F0H
	SWAP	A
	MOVC	A,@A+DPTR	;取LED代码
	MOV	@R1,A
	INC	R1		;指向缓冲区下一个单元
	MOV	A,@R0
	ANL	A,#0FH
	MOVC	A,@A+DPTR	;取LED代码
	MOV	@R1,A
	INC	R0
	INC	R1
	DJNZ	R5,DIS1_21
	MOV	R0,#CABUF
	MOV	@R0,#01H
	INC	R0
	MOV	@R0,#02H
	INC	R0
	MOV	@R0,#03H
	INC	R0
	MOV	@R0,#04H
	INC	R0
	MOV	@R0,#05H
	INC	R0
	MOV	@R0,#06H
	INC	R0
	MOV	@R0,#07H
	INC	R0
	MOV	@R0,#08H
	MOV	DNUM,#08H
	LCALL	DISPLAY
	LCALL	DEL600MS
;	LCALL	DEL600MS
;	LCALL	DEL600MS
;	LCALL	DEL600MS
;	LCALL	DEL600MS
;	LCALL	DEL600MS
;	LCALL	DEL600MS
	RET
;*********************************************************************
;程序功能:初使化显示
;直接调用子程序:
;入口参数:无
;出口参数:无
;占用资源:
;修改记录:
;*********************************************************************
CSHDIS:	MOV	R0,#CABUF	;初始化显示
	MOV	R1,#DABUF
	MOV	DNUM,#05H	;输出5个参数
	MOV	@R0,#09H	;设置译码方式为"全部不译码"
	MOV	@R1,#00H
	INC	R0
	INC	R1
	MOV	@R0,#0AH	;设置亮度为"07H"
	MOV	@R1,#07H
	INC	R0
	INC	R1
	MOV	@R0,#0BH	;设置扫描范围是"0-7段全部"
	MOV	@R1,#07H
	INC	R0
	INC	R1
	MOV	@R0,#0CH	;设置为正常显示模式
	MOV	@R1,#01H
	INC	R0
	INC	R1
	MOV	@R0,#0FH	;设置为"非测试模式"
	MOV	@R1,#00H
	LCALL	DISPLAY
	MOV	DPTR,#DISNON	;不显示
	LCALL	DISBUF
	RET
;*********************************************************************
;程序功能:调数据到显示缓冲区并显示
;调用子程序:
;入口参数:
;出口参数:
;占用资源:
;修改记录:
;*********************************************************************
DISBUF:	NOP			;调数据到显示缓冲区并显示
	MOV	R0,#CABUF
	MOV	R1,#DABUF
	MOV	R6,#08H
DTO1:	CLR	A
	MOVC	A,@A+DPTR
	MOV	@R0,A		;存储地址或控制字节
	CLR	A
	INC	DPTR		;指向数据
	MOVC	A,@A+DPTR
	MOV	@R1,A		;存储数据
	INC	R0
	INC	R1
	INC	DPTR
	DJNZ	R6,DTO1
	MOV	DNUM,#08H
	LCALL	DISPLAY
	RET
;*********************************************************************
;程序功能:显示子程序
;调用子程序:
;入口参数:DNUM--需要显示的数据量(最多8个)
;出口参数:无
;占用资源:R0--指向控制字/地址缓冲区首址
;	  R1--指向数据缓冲区首址
;	  R6--8位控制循环
;修改记录:
;*********************************************************************
DISPLAY:NOP			;显示子程序,LOAD=0
	MOV	R5,DNUM		;要显示的数据量到R5
	MOV	R0,#CABUF	;控制字或地址
	MOV	R1,#DABUF	;数据首址
DIS0:	CLR	CSLD
	MOV	R6,#08H		;先送8位地址
	MOV	A,@R0		;送控制字或地址
	INC	R0		;指向下一个地址
DIS1:	RLC	A
	MOV	DIN,C
	CLR	CLK
	SETB	CLK
	DJNZ	R6,DIS1
	MOV	R6,#08H		;再送8位数据
	MOV	A,@R1		;送数据
	INC	R1		;指向下一个数据
DIS2:	RLC	A
	MOV	DIN,C
	CLR	CLK
	SETB	CLK
	DJNZ	R6,DIS2
	SETB	CSLD		;LOAD上升沿
	DJNZ	R5,DIS0
	RET
;*********************************************************************
;程序功能:测试OK程序
;直接调用子程序:DEL100MS,DEL250MS
;入口参数:无
;出口参数:无
;占用资源:R5,R6
;修改记录:
;*********************************************************************
TESTOK: CLR	SPEAKER		;蜂鸣器响100MS
	LCALL	DEL100MS
	SETB	SPEAKER
FL:	CLR	FLASH
	LCALL	DEL250MS	;亮0.25S
	SETB	FLASH
	LCALL	DEL250MS	;灭0.25S
	SJMP	FL
	RET
;*********************************************************************
;程序功能:测试ERROR程序
;直接调用子程序:DEL40MS,DEL120MS,DEL250MS
;入口参数:无
;出口参数:无
;占用资源:R5,R6
;修改记录:
;*********************************************************************
ERROR:	NOP
;	LCALL	DISADC
	CLR	SPEAKER		;蜂鸣器响0.40MS,三声
	LCALL	DEL40MS
	SETB	SPEAKER
	LCALL	DEL40MS
	CLR	SPEAKER
	LCALL	DEL40MS
	SETB	SPEAKER
	LCALL	DEL40MS
	CLR	SPEAKER
	LCALL	DEL40MS
	SETB	SPEAKER
ERR:	CLR	FLASH		;亮0.12S
	LCALL	DEL120MS
	SETB	FLASH		;灭0.12S
	LCALL	DEL120MS
	CLR	FLASH
	LCALL	DEL120MS
	SETB	FLASH
	LCALL	DEL120MS
	CLR	FLASH
	LCALL	DEL120MS
	SETB	FLASH
	LCALL	DEL120MS
	LCALL	DEL250MS	;中间停0.35S
	SJMP	ERR
	RET
;*********************************************************************
;程序功能:软件延时5US
;直接调用子程序:无
;入口参数:无
;出口参数:无
;占用资源:R6
;修改记录:
;*********************************************************************
DEL5US:	MOV	R6,#05H
DEL5U1:	DJNZ	R6,DEL5U1
	RET
;*********************************************************************
;程序功能:软件延时100US
;直接调用子程序:无
;入口参数:无
;出口参数:无
;占用资源:R6
;修改记录:
;*********************************************************************
DEL100US:MOV	R6,#64H
DEL100U1:DJNZ	R6,DEL100U1
	RET
;*********************************************************************
;程序功能:软件延时40ms
;直接调用子程序:无
;入口参数:无
;出口参数:无
;占用资源:R5,R6
;修改记录:
;*********************************************************************
DEL40MS:MOV	R6,#0C8H	;延时40ms
DEL40M1:MOV	R5,#0C8H
DEL40M2:DJNZ	R5,DEL40M2
	DJNZ	R6,DEL40M1
	RET
;*********************************************************************
;程序功能:软件延时50ms
;直接调用子程序:无
;入口参数:无
;出口参数:无
;占用资源:R5,R6
;修改记录:
;*********************************************************************
DEL50MS:MOV	R6,#0C8H	;延时50MS
DEL501:	MOV	R5,#0FAH
DEL502:	DJNZ	R5,DEL502
        DJNZ	R6,DEL501
	RET
;*********************************************************************
;程序功能:软件延时100ms
;直接调用子程序:DEL50MS
;入口参数:无
;出口参数:无
;占用资源:R5,R6
;修改记录:
;*********************************************************************
DEL100MS:LCALL	DEL50MS		;延时100ms
	LCALL	DEL50MS
	RET
;*********************************************************************
;程序功能:软件延时120ms
;直接调用子程序:DEL40MS
;入口参数:无
;出口参数:无
;占用资源:R5,R6
;修改记录:
;*********************************************************************
DEL120MS:LCALL	DEL40MS		;延时120ms
	LCALL	DEL40MS
	LCALL	DEL40MS
	RET
;*********************************************************************
;程序功能:软件延时250ms
;直接调用子程序:DEL50MS
;入口参数:无
;出口参数:无
;占用资源:R5,R6
;修改记录:
;*********************************************************************
DEL250MS:LCALL	DEL50MS		;延时150ms
	LCALL	DEL50MS
	LCALL	DEL50MS
	LCALL	DEL50MS
	LCALL	DEL50MS
	RET
;*********************************************************************
;程序功能:软件延时600ms
;直接调用子程序:DEL250MS,DEL100MS
;入口参数:无
;出口参数:无
;占用资源:R5,R6
;修改记录:
;*********************************************************************
DEL600MS:LCALL	DEL250MS	;延时600ms
	LCALL	DEL250MS
	LCALL	DEL100MS
	RET
;*********************************************************************
;程序功能:INT0中断入口
;直接调用子程序:
;入口参数:
;出口参数:
;占用资源:
;修改记录:
;*********************************************************************
INT0INT:NOP			;INT0中断
	NOP
	NOP
	RETI
;*********************************************************************
;程序功能:INT1中断入口
;直接调用子程序:
;入口参数:
;出口参数:
;占用资源:
;修改记录:
;*********************************************************************
INT1INT:NOP			;INT1中断
	NOP
	NOP
	RETI
;*********************************************************************
;程序功能:T0中断入口
;直接调用子程序:
;入口参数:
;出口参数:
;占用资源:
;修改记录:
;*********************************************************************
T0INT:	NOP			;T0中断
	NOP
	NOP
	RETI
;*********************************************************************
;程序功能:T1中断入口
;直接调用子程序:
;入口参数:
;出口参数:
;占用资源:
;修改记录:
;*********************************************************************
T1INT:	NOP			;T1中断
	NOP
	NOP
	RETI
;*********************************************************************
;程序功能:UART串口中断入口
;直接调用子程序:
;入口参数:
;出口参数:
;占用资源:
;修改记录:
;*********************************************************************
UART:	NOP
	NOP
	NOP
	RETI
	ORG	0800H
DISBAD:	DB	01H,1FH,02H,0FDH,03H,3DH,04H,00H	;显示BaD
	DB	05H,00H,06H,00H,07H,00H,08H,00H
DISNON:	DB	01H,00H,02H,00H,03H,00H,04H,00H		;不显示
	DB	05H,00H,06H,00H,07H,00H,08H,00H
;*********************************************************************
;以下是LED的译码表
	ORG	0A00H
LEDTAB:	DB	7EH,30H,6DH,79H,33H,5BH,5FH,70H		;0-7
	DB	7FH,7BH,77H,1FH,4EH,3DH,4FH,47H		;8-F
	DB	3EH					;地址10H,显示"U"
	DB	01H					;地址11H,显示"-"
ADCTAB:	DB	0CH,85H,0CH,0B0H,0DH,82H,0DH,0AAH
	END

⌨️ 快捷键说明

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