📄 208e5ddb9a8f001d1bc0efe2c8487106
字号:
#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>
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:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -