查看: 1027|回复: 0
打印 上一主题 下一主题

开源了!奉上双MAX7219串联驱动16位数码管的GCC驱动程序

[复制链接]
跳转到指定楼层
沙发
发表于 2016-6-21 21:42:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*

*********************************************************************************************************

*                                        MAX7219驱动程序头文件  

*  

*                                         All Rights Reserved

*

*                                               V1.00

*

* File Name     : max7219.h

* Developed By  : Lv Gao Pan

* Email         : lvgaopan@gmail.com

* Target MCU    : ATMEGA16L

* Complier      : gccavr 3.4.3 + gccavrlibc 1.2.3

* Develope Date : 2005.11.18

* Latest Change : 2005.12.05

* Note          : 用于综合显示仪的双芯片串连驱动

*********************************************************************************************************

*/

#ifndef __MAX7219_H__

#define __MAX7219_H__

#include <avr/io.h>



// 寄存器地址定义

#define NO_OP                0x00

#define DECODE_MODE        0x09

#define INTENSITY        0x0a

#define SCAN_LIMIT        0x0b

#define SHUTDOWN        0x0c

#define DISP_TEST        0x0f



// 管脚定义

#define MAX7219_DIN                PA7

#define MAX7219_CLK                PD1

#define MAX7219_LOAD        PD0



#define MAX7219_DIN_PORT        PORTA

#define MAX7219_CLK_PORT        PORTD

#define MAX7219_LOAD_PORT        PORTD



// 端口操作宏定义

#define MAX7219_DIN_SET                (MAX7219_DIN_PORT |= (1<<MAX7219_DIN))

#define MAX7219_DIN_CLR                (MAX7219_DIN_PORT &= ~(1<<MAX7219_DIN))

#define MAX7219_CLK_SET                (MAX7219_CLK_PORT |= (1<<MAX7219_CLK))

#define MAX7219_CLK_CLR                (MAX7219_CLK_PORT &= ~(1<<MAX7219_CLK))

#define MAX7219_LOAD_SET        (MAX7219_LOAD_PORT |= (1<<MAX7219_LOAD))

#define MAX7219_LOAD_CLR        (MAX7219_LOAD_PORT &= ~(1<<MAX7219_LOAD))



// 函数原型

void max_init( void );

void display(unsigned char addr1,unsigned char data1,unsigned char addr2,unsigned char data2);



#endif







/*

*********************************************************************************************************

*                                           MAX7219驱动程序  

*  

*                                         All Rights Reserved

*

*                                               V1.00

*

* File Name     : max7219.c

* Developed By  : Lv Gao Pan

* Email         : lvgaopan@gmail.com

* Target MCU    : ATMEGA16L

* Complier      : gccavr 3.4.3 + gccavrlibc 1.2.3

* Develope Date : 2005.11.18

* Latest Change : 2005.12.05

* Note          : 用于综合显示仪的双芯片串连驱动

*********************************************************************************************************

*/

#include "max7219.h"



void max_init(void)

{

        unsigned char MAX7219_Loop;

        display( INTENSITY, 0x03, INTENSITY, 0x03);

        display( SCAN_LIMIT, 0x07, SCAN_LIMIT, 0x07 );

        display( DECODE_MODE, 0xff, DECODE_MODE, 0xff );

        display( SHUTDOWN, 0x01, SHUTDOWN, 0x01 );

        for( MAX7219_Loop = 0; MAX7219_Loop < 8; MAX7219_Loop++ )

        {

                display(( MAX7219_Loop + 1 ), 0x0a, ( MAX7219_Loop + 1 ), 0x0a );

        }

}

//IDDIS.PCB数码管分布示意

/*

addr2=4,addr2=3,addr2=2,addr2=1

addr2=8,addr2=7,addr2=6,addr2=5

addr1=8,addr1=7,addr1=6,addr1=5

addr1=4,addr1=3,addr1=2,addr1=1

*/

void display(unsigned char addr1,unsigned char data1,unsigned char addr2,unsigned char data2)

{

        unsigned long Send_Data;

        unsigned char Dis_Loop;

        Send_Data  = addr1;

        Send_Data <<= 8;

        Send_Data += data1;

        Send_Data <<= 8;

        Send_Data += addr2;

        Send_Data <<= 8;

        Send_Data += data2;



        MAX7219_CLK_CLR;

        MAX7219_LOAD_CLR;

        for( Dis_Loop = 0; Dis_Loop < 32; Dis_Loop++ )

        {               

                MAX7219_CLK_CLR;

                if( Send_Data & 0x80000000 )

                        MAX7219_DIN_SET;

                else

                        MAX7219_DIN_CLR;



                Send_Data <<= 1;

               

                MAX7219_CLK_SET;

        }

        MAX7219_LOAD_SET;

}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表