NO_OP EQU 00H;单片7219不用
DIG0 EQU 01H
DIG1 EQU 02H
DIG2 EQU 03H
DIG3 EQU 04H
DIG4 EQU 05H
DIG5 EQU 06H
DIG6 EQU 07H
DIG7 EQU 08H
DECODE_MODE EQU 09H
INTENSITY BIT 0AH
SCAN_LIMIT BIT 0BH
SHUTDOWN BIT 0CH
DISPLAY_TEST EQU 0FH
DIN EQU P2.0;通讯引脚定义
CLK EQU P2.1
LOAD EQU P2.2;89C51的P2.O,P2.1,P2.2分别与MAX7219的DIN,CLK,LOAD端相连
ORG 0000H
LJMP START
ORG 0500H
START:
MOV SP,#60H
LCALL MAX7219_INITIAL;初始化MAX7219
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+ 标号:MAX7219_DISPLAY 功能:MAX7219的显示程序
;+ 入口:27H~20H之间的单元
;+ 备注:从左至右27H~20H分别为DIG8~DIG1的数据缓冲区
;+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MAX7219_DISPLAY:
; MOV R0,#20H;20H~27H为待显示数据暂存区
;MOV R5,#08H
;--------------
;MOV 20H,#2
;MOV 21H,#2
;--------------
MOV 22H,#0AH
;--------------
;MOV 23H,#1
;MOV 24H,#2
;--------------
MOV 25H,#0AH
;--------------
;MOV 26H,#0
;MOV 27H,#2
;------------------------------------------------------
MOV R3,#DIG7;R2 中存放呆显示数据BCD(低四位有效)
MOV R4,27H ;写入8个位显示存储区
LCALL MAX7219_WRITE
MOV R3,#DIG6
MOV R4,26H
LCALL MAX7219_WRITE
MOV R3,#DIG5
MOV R4,25H
LCALL MAX7219_WRITE
MOV R3,#DIG4
MOV R4,24H
LCALL MAX7219_WRITE
MOV R3,#DIG3
MOV R4,23H
LCALL MAX7219_WRITE
MOV R3,#DIG2
MOV R4,22H
LCALL MAX7219_WRITE
MOV R3,#DIG1
MOV R4,21H
LCALL MAX7219_WRITE
MOV R3,#DIG0
MOV R4,20H
LCALL MAX7219_WRITE
RET
MAX7219_INITIAL:;初始化7219
MOV R3,#SHUTDOWN
MOV R4,#01H
LCALL MAX7219_WRITE;开机工作
MOV R3,#DECODE_MODE
MOV R4,#0FFH
LCALL MAX7219_WRITE;设置解码方式为BCD
MOV R3,#INTENSITY
MOV R4,#05H
LCALL MAX7219_WRITE;亮度为中
MOV R3,#SCAN_LIMIT
MOV R4,#07H
LCALL MAX7219_WRITE;扫描8位LED
;MOV R3,#DISPLAY_TEST
;MOV R4,#01H
;LCALL MAX7219_WRITE;测试8位LED
MOV R3,#DISPLAY_TEST
MOV R4,#00H
LCALL MAX7219_WRITE;正常显示
RET
MAX7219_WRITE:PUSH 00H
MOV A,R3;R3中为控制寄存器的地址,R4中为传送的命令字或待显示的数据
;ClR LOAD;片选(MAX7221需加此命令,片选)
NOP
LCALL MAX7219_SEND;传送地址
MOV A,R4
LCALL MAX7219_SEND;传送数据或命令
ClR LOAD
NOP
SETB LOAD;第16个clk上升沿,LOAD变为高16位数据被锁存到内部寄存器中
NOP
NOP
CLR LOAD
NOP
POP 06H
RET
MAX7219_SEND:MOV R0,#08H;向MAX7219传送8位数据或地址
MAX7219_LOOP:NOP
NOP
CLR CLK
RLC A;移位先送高位
MOV DIN,C
NOP
NOP
SETB CLK
DJNZ R0,MAX7219_LOOP
RET
;---------------------------------------------------------
END