f08e03188d8f001d1bc0efe2c8487106

来自「基于ALTERA公司的NIOSII的对对碰游戏的设计」· 代码 · 共 63 行

TXT
63
字号
#include "keyboard.h"
#include "alt_types.h"
#include "sys/alt_irq.h"
#include "altera_avalon_pio_regs.h"
#include "system.h"
#include "gui.h"

#include "sys/alt_irq.h"
#include "alt_types.h"
//#include "sys/alt_irq_entry.h"
//#include "priv/alt_irq_table.h"
#include <stdio.h>

void handle_keyboard_interrupts(void* context, alt_u32 id)
{
    unsigned char i;
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEYBOARD_PIO_0_BASE, 0);
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEYBOARD_PIO_0_BASE, 0xff);
    i = IORD_ALTERA_AVALON_PIO_DATA(KEYBOARD_PIO_0_BASE);
    keyboard_action(i);
}

void init_keyboard_pio()
{
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEYBOARD_PIO_0_BASE, 0xff);
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEYBOARD_PIO_0_BASE, 0x0);
    alt_irq_register( KEYBOARD_PIO_0_IRQ, NULL, handle_keyboard_interrupts );
}   

//Key_UP是键松开标识,Shift是Shift键按下标识
static unsigned char key_UP = 0;
 //注意:如SHIFT+G为12H 34H F0H 34H F0H 12H,也就是说shift的通码+G的通码+shift的断码+G的断码
void keyboard_action(unsigned char scanCode)
{
    //当键盘松开时
    if (!key_UP){
        if(scanCode == 0xf0){ // 当收到0xF0,key_UP置1表示断码开始
            key_UP = 1;
        }
    }
    else{   
        key_UP = 0;
        switch (scanCode){
            case KEY_UP:
                printf("UP\n");
                break;
            case KEY_DOWN:
                printf("DOWN\n");
                break;
            case KEY_LEFT:
                printf("LEFT\n");
                break;
            case KEY_RIGHT:
                printf("RIGHT\n");
                break;            
            case KEY_ENTER:
                printf("ENTER\n");
                break;                
            default:                        
                break;                
        }
    }
}     

⌨️ 快捷键说明

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