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

📄 3085aaa76789001d1e908c0bc771dfd8

📁 基于ALTERA公司的NIOSII的通用TFT-LCD控制器及PS2鼠标设计
💻
字号:
#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);
    }
    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);    
    }

    return displacement_y;
}
    

int x = 150;
int y = 100;
void handle_mouse_interrupts(void* context, alt_u32 id)
{
    alt_u8 mous_info[3];
    alt_up_ps2_read_data_byte(context,&mous_info[0]);
    alt_up_ps2_read_data_byte(context,&mous_info[1]);
    alt_up_ps2_read_data_byte(context,&mous_info[2]);
    int button = getButton_down(mous_info[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(mous_info[0],mous_info[1]);
    if(x > 320){
        x = 280;
    }
    if(x < 0){
        x = 0;
    }
    y += getMouse_displacement_y(mous_info[0],mous_info[2]) / 10;
    if(y > 230){
        y = 230;
    }
    if(y < 0){
        y = 0;
    }
    setCursorPosition(x,y);   
    printf("Current Position:x:%d ,y:%d\n",x,y);
}    

int main()
{
    init_lcd();
    //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 + -