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

📄 max7219.c

📁 nios环境下数码管驱动芯片max7219驱动程序
💻 C
字号:
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include <stdio.h>

#include "max7219.h"

#define Max7219_Code    0x09    // 译码模式,后接Data
#define Max7219_NoC     0x00    // 0x00: 非译码  
#define Max7219_0C      0x01    // 0x01: D0译码,D1~D7非译码
#define Max7219_03C     0x0F    // 0x0F: D0~D3译码,D1~D7非译码
#define Max7219_AC      0xFF    // 0xFF: D0~D7全译码
#define Max7219_Bright  0x0A    // 调亮命令,后接Data:0x00~0x0f
#define Max7219_Show    0x0B    // 显示数字,后接Data:
                                // 0x00: 0b10000000     0x01: 0b11000000
                                // 0x02: 0b11100000     0x03: 0b11110000
                                // 0x04: 0b11111000     0x05: 0b11111100
                                // 0x06: 0b11111110     0x07: 0b11111111
#define Max7219_Close   0x0C    // 关闭模式,后接Data: 0x00 关闭显示 0x01 正常显示
#define Max7219_Test    0x0F    // 显示测试,后接Data: 0x00 关闭测试 0x01 开启测试 
#define Max7219_Nop     0x00    // 空操作
#define MAX7219_TIME    3

alt_u8 Max7219_Num[] = { 
    0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B, 0x5F, 0x70, 0x7F, 0x7B, // 0~9          
    0xFE, 0xB0, 0xED, 0xF9, 0xB3, 0xDB, 0xDF, 0xF0, 0xFF, 0xFB, // 0.~9.        
    0x77, 0x1F, 0x4E, 0x3D, 0x4F, 0x47, 0x37, 0x0E, 0x67, 0x01, // ABCDEFHLP-   
    0xF7, 0x9F, 0xCE, 0xBD, 0xCF, 0xC7, 0xB7, 0x8E, 0xE7, 0x81, // ABCDEFHLP-.  
    0x00, 0x80                                                  // 消隐,全亮
};

// 公共函数
                        
void Max7219_Init( void ) // 初始化,参数为译码方式,默认为不译码,中亮,全部显示
{
    IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_CLK_BASE, 0x00 );
    IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_CS_BASE, 0x00 );
    IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_DATA_BASE, 0x00 );
    Max7219_Command( Max7219_Code, 0x00 );      // 非译码模式 
    Max7219_Command( Max7219_Bright, 0x03 );    // 中亮度       
    Max7219_Command( Max7219_Show, 0x07 );      // 全显示 
    Max7219_Command( Max7219_Close, 0x01 );     // 开启显示     
}

void Max7219_Show_Num( alt_u8 address, alt_u8 num ) // 控制一个数码管显示数字
{
    alt_u8 ref = address % 8;
    if( ref == 0x00 ) ref = 0x08;
    Max7219_Command( ref, Max7219_Num[ num % 42 ] );           
}

void Max7219_All_Num( alt_u8 d1, alt_u8 d2, alt_u8 d3, alt_u8 d4, alt_u8 d5, alt_u8 d6, alt_u8 d7, alt_u8 d8 ) // 控制全部数码管显示数字
{
    Max7219_Show_Num( 1, d1 );
    Max7219_Show_Num( 2, d2 );
    Max7219_Show_Num( 3, d3 );
    Max7219_Show_Num( 4, d4 );
    Max7219_Show_Num( 5, d5 );
    Max7219_Show_Num( 6, d6 );
    Max7219_Show_Num( 7, d7 );
    Max7219_Show_Num( 8, d8 );
}

// 私有函数

void Max7219_Command( alt_u8 max_comm, alt_u8 max_data ) // Max7219单条命令
{
    alt_u8 i, ref;
    
    IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_CS_BASE, 0x00 ); Max7219_Delay();
    
    for( i = 0; i < 4; i++ ) { 
        IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_CLK_BASE, 0xFF ); Max7219_Delay();
        IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_CLK_BASE, 0x00 ); Max7219_Delay(); 
    }
    
    max_comm = max_comm << 4;
    
    for( i = 0; i < 4; i++ ) {
        IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_CLK_BASE, 0x00 );
        ref = max_comm & 0x80;
        
        if( ref ) IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_DATA_BASE , 0xFF );
        else IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_DATA_BASE , 0x00 );
        
        max_comm = max_comm << 1; Max7219_Delay();
        
        IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_CLK_BASE, 0xFF );
        Max7219_Delay();
    }
    for( i = 0; i < 8; i++ ) {
        IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_CLK_BASE, 0x00 ); ref = max_data & 0x80;
        
        if( ref ) IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_DATA_BASE, 0xFF );
        else IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_DATA_BASE, 0x00 );
        
        max_data = max_data << 1;
        Max7219_Delay();
        IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_CLK_BASE, 0xFF );
        Max7219_Delay();
    }
    IOWR_ALTERA_AVALON_PIO_DATA( MAX7219_CS_BASE, 0xFF );
}

void Max7219_Delay( void ) // MAX7219初始化
{
    volatile int i;
    for( i = 0; i<MAX7219_TIME; i++ );
}

⌨️ 快捷键说明

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