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

📄 f0ff09649c8f001d1bc0efe2c8487106

📁 基于ALTERA公司的NIOSII的对对碰游戏的设计
💻
字号:
#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 <stdio.h>
#include "Player.h"

extern Player player;

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:
                player.move(0,-1);
                break;
            case KEY_DOWN:
                player.move(0,1);
                break;
            case KEY_LEFT:
                player.move(-1,0);
                break;
            case KEY_RIGHT:
                player.move(1,0);
                break;            
            case KEY_ENTER:
                if(player.getSel()){
                    player.setSel(true);
                }
                else{
                    player.setSel(false);
                }
                break;                
            default:                        
                break;                
        }
    }
}     

⌨️ 快捷键说明

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