电路设计,软件开发,专业项目团队承接电子产品开发!


ISPRO下载型编程器
火爆销售中

RS232/TTL转换器
全IC串口窃电

RS232/TTL转换线
全IC串口窃电

ByteBlasterMV Cable
CPLD/FPGA并口下载线

ByteBlaster II Cable ISPRO下载型编程器
支持S51/AVR/PIC
超级51开发板套件
前卫实用超值

PC/MCU/CPLD
三合一学习套件

全新万年历方案
AVR单片机开发板
 

Min51单片机仿真机
迷你型

ARM7开发板
仅售260元!
 

RS-232/RS-485双向接口电平转换器  

51单片机升级STM32
火爆销售中
MPLAB-ICD2
火爆销售中
LED51开发板
玩具又名图文显示棒

面板模块/开发板
经济危机明智决择

       

GSM MODEM GSM猫

SMS短信模块 工业级/全自动
火爆销售中

大功率数传电台

高速数传电台

您当前位置:电子技术资料 -> 外围驱动 -> 数码管显示 ->

祝您阅读愉快!

ISPRO下载型编程器

RS232 TO TTL转换器
↑↑本文相关产品介绍↑↑

两片max7219的串联程序


类别:技术文章
来源:未知
作者:未知
关键字:max7219
加入日期:2010-8-4

两片max7219的串联程序如下:

;*********************************************
; Max7219 最底层调用函数
; UPDATA:2001.10.13
;*********************************************
;中国电子网
;www.ec66.com

NAME DISP
?PR?CLR_DISP?DISP SEGMENT CODE
?PR?CSH_DISP?DISP SEGMENT CODE
?PR?DISP_IN1?DISP SEGMENT CODE
?PR?DISP_IN2?DISP SEGMENT CODE
PUBLIC CLR_DISP,CSH_DISP,_DISP_IN1,_DISP_IN2

PCLK bit P1.7
PLD bit P1.5
PIN bit P1.6

;*********************************************
; 函数名: CLR_DISP
; 功 能: CLEAR DISPLAY
;*********************************************
RSEG ?PR?CLR_DISP?DISP
CLR_DISP: MOV R7,#8 ;8 digits
CLR_DISP0: MOV R5,#0FH ;blank
LCALL _disp_in1 ;主max7219
DJNZ R7,CLR_DISP0

MOV R7,#8 ;8
digits
CLR_DISP1: MOV R5,#0FH ;blank
LCALL _disp_in2 ;从max7219
DJNZ R7,CLR_DISP1
RET

;*********************************************
; 函数名: CSH_DISP
; 功 能: 初始化7219各个寄存器
;*********************************************
RSEG ?PR?CSH_DISP?DISP
CSH_DISP: CLR PLD
MOV R1,#50 ;delay 100us
DJNZ R1,$
SETB PLD
MOV R1,#50
DJNZ R1,$

;初始化主max7219各个寄存器
MOV R7,#0CH ;Shutdown
MOV R5,#1 ;Normal Operation 1
LCALL _disp_in1

MOV R7,#0FH ;Display Test
MOV R5,#01H ;1: display 8.
LCALL _disp_in1

MOV R1,#50
DJNZ R1,$

MOV R7,#09H ;Decode-Mode
MOV R5,#0FFH ;8 digits Code B Font
LCALL _disp_in1

MOV R7,#0AH ;REGISTER:Intensity
MOV R5,#9 ;Format:DUTY CYCLE 19/32
LCALL _disp_in1

MOV R7,#0BH ;REGISTER:Scan Limit
MOV R5,#07H ;Format:Display didits 0-7
LCALL _disp_in1

MOV R7,#0FH ;Display Test
MOV R5,#00H ;0: Normal Operation
LCALL _disp_in1

CLR PLD
MOV R1,#50
DJNZ R1,$
SETB PLD
MOV R1,#50
DJNZ R1,$

;初始化从max7219各个寄存器
;命令字和格式同上

MOV R7,#0CH
MOV R5,#01H
LCALL _disp_in2

MOV R7,#0FH
MOV R5,#01H
LCALL _disp_in2

MOV R1,#50
DJNZ R1,$

MOV R7,#09H
MOV R5,#0FFH
LCALL _disp_in2

MOV R7,#0AH
MOV R5,#9
LCALL _disp_in2

MOV R7,#0BH
MOV R5,#07H
LCALL _disp_in2

MOV R7,#0FH
MOV R5,#00H
LCALL _disp_in2

RET

;*********************************************
; 函数名: _disp_in1
; 功 能: 将16位数据送入主max7219寄存器
; 输 入: R7 寄存器,地址
; R5 寄存器,数据
;*********************************************
RSEG ?PR?disp_in1?DISP
_disp_in1: CLR PLD ;LOAD=0

MOV R6,#16
MOV A,#0
DIN_LP0: CLR PCLK
RLC A ;带进位C的循环
MOV PIN,C
SETB PCLK
DJNZ R6,DIN_LP0
;通过16个CLK,将16个0通过DOUT送入从max7219的DIN
;也可以不需要这16个循环,只是为了同从max7219的程序区别起见

MOV R6,#8
MOV A,R7 ;将第一个字节的8位送入
DIN_LP1: CLR PCLK ;寄存器,地址
RLC A
MOV PIN,C
SETB PCLK
DJNZ R6,DIN_LP1

MOV R6,#8
MOV A,R5 ;将第二个字节的8位送入
DIN_LP2: CLR PCLK ;寄存器,数据
RLC A
MOV PIN,C
SETB PCLK
DJNZ R6,DIN_LP2

SETB PLD ;LOAD 上升沿
RET

;*********************************************
; 函数名: _disp_in2
; 功 能: 将16位数据送入从max7219寄存器
; 输 入: R7 寄存器,地址
; R5 寄存器,数据
;*********************************************
RSEG ?PR?disp_in2?DISP
_DISP_IN2: CLR PLD

MOV R6,#08H
MOV A,R7 ;R7 第一个字节8位
DIN_LP3: CLR PCLK
RLC A
MOV PIN,C
SETB PCLK
DJNZ R6,DIN_LP3

MOV R6,#08H
MOV A,R5 ;R5 第二个字节8位
DIN_LP4: CLR PCLK
RLC A
MOV PIN,C
SETB PCLK
DJNZ R6,DIN_LP4

MOV R6,#16
MOV A,#0
DIN_LP5: CLR PCLK
RLC A
MOV PIN,C
SETB PCLK
DJNZ R6,DIN_LP5

;通过16个clk,将R7,R5的16位数据通过DOUT送入从max7219的DIN

SETB PLD ;LOAD 上升沿
RET

END

测试程序:

#include <string.h>
#include <max7219.h>
#include <delay.h>

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

uchar led_buf[17];
extern void led_printf();
extern void show_int(bit mode,ulong n);

void main()
{
csh_disp();
clr_disp();
memset(led_buf,15,16); // 初始化缓冲区
的内容,不显示

while(1)
{
show_int(0,12345678); // 主max7219显示12345678
show_int(1,98765432); // 从max7219显示98765432

delay_10ms(100);
clr_disp();
delay_10ms(100);
}
}

void led_printf()
{
uchar i;
for(i=0;i<8;i++)
{
disp_in1(i+1,led_buf[i]);
disp_in2(i+1,led_buf[8+i]);
}
}

void show_int(bit mode,ulong n)
{
ulong temp;
uchar i=0;
temp=n;
if(!mode)
{
for(i=0;i<7;i++)
led_buf[i]=15;
led_buf[7]=0;
i=0;
while(temp>0)
{
led_buf[7-i]=temp%10;
temp/=10;
i++;
}

}
else
{
for(i=0;i<7;i++)
led_buf[8+i]=15;
led_buf[15]=0;
i=0;
while(temp>0)
{
led_buf[15-i]=temp%10;
temp/=10;
i++;
}
}
led_printf();
}


您可能还会关注的相关技术资料:

中国电子网
www.EC66.com
QQ:34740080 EMAIL:iloveaoe@163.com
最佳浏览:1024*768
Copyright (C) 2001-2010 EC66.COM All Rights Reserved
Aoe/帝国 制作维护
粤ICP备18061901号