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

📄 mouse_driver.c

📁 用51编写的鼠标的驱动程序,使用时将c文件包含到工程中,在主程序中调用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 + -