📄 mouse_driver.c
字号:
#include "includes.h"
static uchar mouse_data[3],xx1=96,yy1=32,xx2,yy2;
//extern void GUI_Mouse(uchar x1,y1) ;
//extern void delay(unsigned int x);
sbit MOUSE_IO=P1^4;
sbit MOUSE_CK=P3^2;
//////////////////读取鼠标数据/////////////////////////////
uchar Read_Mouse(void) //reentrant
{
uchar i,d;
bit jy=0;
while(MOUSE_CK); //等待时钟线低
while(!MOUSE_CK);//等待时钟线高
for(i=0;i<8;i++)
{
d=(d>>1);
while(MOUSE_CK);//等待时钟线低
if(MOUSE_IO){d+=0x80;jy=~jy;}
while(!MOUSE_CK);//等待时钟线高
}
while(MOUSE_CK);//等待时钟线低
while(!MOUSE_CK);//等待时钟线高
while(MOUSE_CK);//等待时钟线低
while(!MOUSE_CK); //等待时钟线高
return d;
}
/////////////////向鼠标发送数据/////////////////////////////
void Write_Mouse(uchar d) //reentrant
{
uchar i;
bit jy=0;
MOUSE_CK=0;
MOUSE_IO=0;
while(--i); //时钟线低
MOUSE_CK=1;//钟线高
for(i=0;i<8;i++)
{
while(MOUSE_CK);//等待时钟线低
if(d&0x01){MOUSE_IO=1;jy=~jy;}else {MOUSE_IO=0;}
while(!MOUSE_CK);//等待时钟线高
d=(d>>1);
}
while(MOUSE_CK);//等待时钟线低
if(jy)MOUSE_IO=0;
while(!MOUSE_CK);//等待时钟线高
while(MOUSE_CK);//等待时钟线低
MOUSE_IO=1;
while(!MOUSE_CK);//等待时钟线高
while(MOUSE_CK);//等待时钟线低
while(!MOUSE_CK);//等待时钟线高
i=Read_Mouse();
}
//////////////////鼠标初始化/////////////////////////////////
void mouse_init(void)
{
delay(100);
Write_Mouse(0xf4);
EX0=1;
}
//////////////////禁止鼠标/////////////////////////////
void stop_mouse(void)
{
MOUSE_CK=0;
}
void start_mouse(void)
{
MOUSE_CK=1;
}
/////////////////
void receive_packet(void)
{
mouse_data[0]=Read_Mouse(); //接收鼠标的数据
mouse_data[1]=Read_Mouse();
mouse_data[2]=Read_Mouse();
}
//////////////////////
void fresh_mouse(void)
{
GUI_Mouse(xx1,63-yy1);
}
////////////////////
void move_mouse(void)
{
stop_mouse(); //禁用鼠标
if(mouse_data[1]!=0)
{
if(mouse_data[0]&0x10)
{
if(~(mouse_data[1]-1)>4)xx1-=~(mouse_data[1]-1)/2;
else xx1-=1;
if(xx1>192)xx1=0;
}
else
{
if(mouse_data[1]>4)xx1+=mouse_data[1]/2;
else xx1+=1;
if(xx1>191)xx1=191;
}
}
///////
if(mouse_data[2]!=0)
{
if(mouse_data[0]&0x20)
{
if(~(mouse_data[2]-1)>4)yy1-=~(mouse_data[2]-1)/2;
else yy1-=1;
if(yy1>63)yy1=0;
}
else
{
if(mouse_data[2]>4)yy1+=mouse_data[2]/2;
else yy1+=1;
if(yy1>63)yy1=63;
}
}
if((xx1!=xx2)||(yy1!=yy2))
{
GUI_Mouse(xx1,63-yy1);
xx2=xx1;
yy2=yy1;
}
start_mouse();
EX0=1;
}
//////////////////
uchar get_x(void)
{
return xx1;
}
uchar get_y(void)
{
return yy1;
}
uchar mouse_left(void)
{
return(mouse_data[0]&0x01);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -