📄 10533c876689001d1e908c0bc771dfd8
字号:
#include "system.h"
#include "altera_up_avalon_ps2.h"
#include "altera_up_ps2_mouse.h"
//#include "altera_up_avalon_ps2_regs.h"
#include <stdio.h>
#include "alt_types.h"
#include "GUI.h"
#define LEFT_BUTTON_DOWN 0
#define RIGHT_BUTTON_DOWN 1
int getButton_down(alt_u8 first_byte)
{
if(first_byte & 0x01){
return LEFT_BUTTON_DOWN;
}
else if(first_byte & 0x02){
return RIGHT_BUTTON_DOWN;
}
else{
return -1;
}
}
int getMouse_displacement_x(alt_u8 first_byte,alt_u8 second_byte)
{
int displacement_x;
//符号位
if(first_byte & 0x10){
second_byte = ~second_byte;
displacement_x = -(second_byte);
//printf("%d\n",displacement_x);
}
else{
displacement_x = second_byte;
}
return displacement_x;
}
int getMouse_displacement_y(alt_u8 first_byte,alt_u8 third_byte)
{
int displacement_y;
//符号位
if(first_byte & 0x20){
displacement_y = third_byte;
}
else{
third_byte = ~third_byte;
displacement_y = -(third_byte);
//printf("%d\n",displacement_y);
}
return displacement_y;
}
int x = 150;
int y = 100;
void handle_mouse_interrupts(void* context, alt_u32 id)
{
alt_u8 string[3];
alt_u8 temp;
alt_up_ps2_read_data_byte(context,&temp);
if(((temp & 0x08) != 0) && ((temp & 0x80) == 0) && ((temp & 0x40) == 0) && ((temp & 0x04) == 0) && temp != NULL){
string[0] = temp;
alt_up_ps2_read_data_byte(context,&string[1]);
alt_up_ps2_read_data_byte(context,&string[2]);
int button = getButton_down(string[0]);
/* if(button == LEFT_BUTTON_DOWN){
printf("Left button pressed\n");
}
else if(button == RIGHT_BUTTON_DOWN){
printf("Right button pressed\n");
} */
x += getMouse_displacement_x(string[0],string[1]);
if(x > 280){
x = 280;
}
if(x < 50){
x = 50;
}
y += getMouse_displacement_y(string[0],string[2]) / 10;
if(y > 200){
y = 200;
}
if(y < 50){
y = 50;
}
setCursorPosition(x,y);
}
else{
alt_up_ps2_clear_fifo(context);
}
}
int main()
{
init();
setColor(GUI_BLACK);
setCursorPosition(50,50);
alt_up_ps2_dev* mouse;
//打开鼠标设备
mouse = alt_up_ps2_open_dev("/dev/ps2_0");
//禁用timeout
mouse->timeout = 0;
//初始化
alt_up_ps2_init(mouse);
//复位
alt_up_ps2_mouse_reset(mouse);
//清FIFO
alt_up_ps2_clear_fifo(mouse);
//设置数据接收有效 让鼠标状态返回
alt_up_ps2_mouse_set_mode(mouse, MOUSE_ENABLE_DATA_REPORTING);
//重新设置采样率 设为10
alt_up_ps2_mouse_set_mode(mouse, MOUSE_SET_SAMPLE_RATE);
alt_up_ps2_mouse_set_mode(mouse, 10);
//设置分辨率 设为2count/mm
alt_up_ps2_mouse_set_mode(mouse, MOUSE_SET_RESOLUTION);
alt_up_ps2_mouse_set_mode(mouse, 0x02);
//开中断
IOWR_ALT_UP_PS2_PORT_CONTROL(PS2_0_BASE,0x01);
//启动流模式
alt_up_ps2_mouse_set_mode(mouse, MOUSE_STREAM_MODE);
//查看设备信息
alt_up_ps2_mouse_set_mode(mouse, MOUSE_REQUEST_STATUS);
int j;
alt_u8 temp;
for(j = 0;j < 3;j++){
alt_up_ps2_read_data_byte(mouse,&temp);
printf("%x\n",temp);
}
//注册中断
int i = alt_irq_register(PS2_0_IRQ,mouse,handle_mouse_interrupts);
while(1){
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -