在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 1894|回复: 0

7219驱动

[复制链接]
发表于 2006-9-19 15:15:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
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        ;FormatUTY CYCLE 19/32
        LCALL    _disp_in1

        MOV    R7,#0BH        ;REGISTER:Scan Limit
        MOV    R5,#07H        ;Formatisplay 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);
        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=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();
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-28 17:36 , Processed in 0.016514 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表