📄 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 + -