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

📄 hd7279.c

📁 nios键盘数码管驱动芯片HD7279驱动程序
💻 C
字号:
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include <stdio.h>

#include "hd7279.h"

#define     KEY_0       61
#define     KEY_1       53
#define     KEY_2       45
#define     KEY_3       37
#define     KEY_4       29
#define     KEY_5       56
#define     KEY_6       48
#define     KEY_7       40
#define     KEY_8       32
#define     KEY_9       24
#define     KEY_Y       46
#define     KEY_N       62
#define     KEY_L       63
#define     KEY_R       47
#define     KEY_T       54
#define     KEY_B       55
#define     KEY_F1      38
#define     KEY_F2      30
#define     KEY_F3      39
#define     KEY_F4      31
#define     KEY_NONE    0

#define HD7279_LONG_TIME        930        
#define HD7279_SHORT_TIME_1     138
#define HD7279_SHORT_TIME_2     378

alt_u8 key_data = 0xFF;             // HD7279键值参数

// 公共函数

void Hd7279_Init( void ) // HD7279初始化
{
    IOWR_ALTERA_AVALON_PIO_DATA( HD7279_CS_BASE, 0x00 );
    IOWR_ALTERA_AVALON_PIO_DATA( HD7279_CLK_BASE, 0x00 );
    IOWR_ALTERA_AVALON_PIO_DATA( HD7279_IRQ_BASE, 0xFF );
}

void Hd7279_Read( void ) // HD7279读取命令
{
    alt_u8 i, ref_2 = 0x00;
    key_data = 0x00;
    
    IOWR_ALTERA_AVALON_PIO_DATA( HD7279_CS_BASE, 0x00 );    
    IOWR_ALTERA_AVALON_PIO_DIRECTION( HD7279_DATA_BASE, 0xFF );
    Hd7279_Long_Delay();
    
    for( i=0; i<2; i++ ) {
        IOWR_ALTERA_AVALON_PIO_DATA( HD7279_DATA_BASE, 0x00 ); 
        IOWR_ALTERA_AVALON_PIO_DATA( HD7279_CLK_BASE, 0xFF );
        Hd7279_Short_Delay_1(); 
        IOWR_ALTERA_AVALON_PIO_DATA( HD7279_CLK_BASE, 0x00 );
        Hd7279_Short_Delay_1(); 
    }
    
    for( i=0; i<3; i++ ) {
        IOWR_ALTERA_AVALON_PIO_DATA( HD7279_DATA_BASE, 0x00 ); 
        IOWR_ALTERA_AVALON_PIO_DATA( HD7279_CLK_BASE, 0xFF );
        Hd7279_Short_Delay_1(); 
        IOWR_ALTERA_AVALON_PIO_DATA( HD7279_CLK_BASE, 0x00 );
        Hd7279_Short_Delay_1();
        IOWR_ALTERA_AVALON_PIO_DATA( HD7279_DATA_BASE, 0xFF ); 
        IOWR_ALTERA_AVALON_PIO_DATA( HD7279_CLK_BASE, 0xFF );
        Hd7279_Short_Delay_1(); 
        IOWR_ALTERA_AVALON_PIO_DATA( HD7279_CLK_BASE, 0x00 );
        Hd7279_Short_Delay_1();
    }
    
    IOWR_ALTERA_AVALON_PIO_DATA( HD7279_DATA_BASE, 0xFF );
    IOWR_ALTERA_AVALON_PIO_DIRECTION( HD7279_DATA_BASE, 0x00 );
    Hd7279_Long_Delay();
    
    for( i=0; i<8; i++ ) {
        IOWR_ALTERA_AVALON_PIO_DATA( HD7279_CLK_BASE, 0xFF ); Hd7279_Short_Delay_2();
        key_data = key_data << 1;
        ref_2 = IORD_ALTERA_AVALON_PIO_DATA( HD7279_DATA_BASE );
        if( ref_2 & 0x01 ) key_data = key_data | 0x01;
        IOWR_ALTERA_AVALON_PIO_DATA( HD7279_CLK_BASE, 0x00 );
        Hd7279_Short_Delay_2();
    }
    
    IOWR_ALTERA_AVALON_PIO_DATA( HD7279_DATA_BASE, 0x00 );
}

// 私有函数

void Hd7279_Long_Delay( void ) // HD7279长延时
{
    volatile int i;
    for( i = 0; i<HD7279_LONG_TIME; i++ );
}

void Hd7279_Short_Delay_1( void ) // HD7279短延时
{
    volatile int i;
    for( i = 0; i<HD7279_SHORT_TIME_1; i++ );
}

void Hd7279_Short_Delay_2( void ) // HD7279短延时
{
    volatile int i;
    for( i = 0; i<HD7279_SHORT_TIME_2; i++ );
}

⌨️ 快捷键说明

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