/* ********************************************************************************************************* * 函 数 名: Init_Mouse * 功能说明: 用于初始化鼠标 * 形 参:无 * 返 回 值: 返回0表示成功返回 否则没有成功 ********************************************************************************************************* */ u8 Init_Mouse(void) { u8 t; PS2_Init(); delay_ms(800); /* 等待上电复位完成 */ PS2_Status=CMDMODE; /* 进入命令模式 */ /* 复位鼠标 */ t=PS2_Send_Cmd(PS_RESET); if(t!=0) return 1; t=PS2_Get_Byte(); if(t!=0XFA) return 2; t=0; /* 等待复位完毕 */ while((PS2_Status&0x80)==0) { t++; delay_ms(10); if(t>50)return 3; } PS2_Get_Byte(); /* 得到0XAA */ PS2_Get_Byte(); /* 得到ID 0X00 */ /* 进入滚轮模式的特殊初始化序列 分别设置200,100,80采样率 */ PS2_Send_Cmd(SET_SAMPLE_RATE); /* 进入设置采样率 */ if(PS2_Get_Byte()!=0XFA)return 4; /* 传输失败 */ PS2_Send_Cmd(0XC8); /* 采样率200 */ if(PS2_Get_Byte()!=0XFA)return 5; /* 传输失败 */ PS2_Send_Cmd(SET_SAMPLE_RATE); /* 进入设置采样率 */ if(PS2_Get_Byte()!=0XFA)return 6; /* 传输失败 */ PS2_Send_Cmd(0X64); /* 采样率100 */ if(PS2_Get_Byte()!=0XFA)return 7; /* 传输失败 */ PS2_Send_Cmd(SET_SAMPLE_RATE); /* 进入设置采样率 */ if(PS2_Get_Byte()!=0XFA)return 8; /* 传输失败 */ PS2_Send_Cmd(0X50); /* 采样率80 */ if(PS2_Get_Byte()!=0XFA)return 9; /* 传输失败 */ /* 序列完成 */ PS2_Send_Cmd(GET_DEVICE_ID); /* 读取ID */ if(PS2_Get_Byte()!=0XFA)return 10; /* 传输失败 */ MOUSE_ID=PS2_Get_Byte(); /* 得到MOUSE ID */ PS2_Send_Cmd(SET_SAMPLE_RATE); /* 再次进入设置采样率 */ if(PS2_Get_Byte()!=0XFA)return 11; /* 传输失败 */ PS2_Send_Cmd(0X0A); /* 采样率10 */ if(PS2_Get_Byte()!=0XFA)return 12; /* 传输失败 */ PS2_Send_Cmd(GET_DEVICE_ID); /* 读取ID */ if(PS2_Get_Byte()!=0XFA)return 13; /* 传输失败 */ MOUSE_ID=PS2_Get_Byte(); /* 得到MOUSE ID */ PS2_Send_Cmd(SET_RESOLUTION); /* 设置分辨率 */ if(PS2_Get_Byte()!=0XFA)return 14; /* 传输失败 */ PS2_Send_Cmd(0X03); /* 8点/mm */ if(PS2_Get_Byte()!=0XFA)return 15; /* 传输失败 */ PS2_Send_Cmd(SET_SCALING11); /* 设置缩放比率为1:1*/ if(PS2_Get_Byte()!=0XFA)return 16; /* 传输失败 */ PS2_Send_Cmd(SET_SAMPLE_RATE); /* 设置采样率 */ if(PS2_Get_Byte()!=0XFA)return 17; /* 传输失败 */ PS2_Send_Cmd(0X28); /* 40 */ if(PS2_Get_Byte()!=0XFA)return 18; /* 传输失败 */ PS2_Send_Cmd(EN_DATA_REPORT); /* 使能数据报告 */ if(PS2_Get_Byte()!=0XFA)return 19; /* 传输失败 */ PS2_Status=MOUSE; /* 进入鼠标模式 */ return 0; /* 无错误,初始化成功 */ }
//初始化鼠标 //返回:0,初始化成功 //其他:错误代码 //CHECK OK 2010/5/2 u8 Init_Mouse(void) { u8 t; PS2_Init(); delay_ms(800); //等待上电复位完成 PS2_Status=CMDMODE; //进入命令模式 t=PS2_Send_Cmd(PS_RESET); //复位鼠标 if(t!=0)return 1; t=PS2_Get_Byte(); if(t!=0XFA)return 2; t=0; while((PS2_Status&0x80)==0)//等待复位完毕 { t++; delay_ms(10); if(t>50)return 3; } PS2_Get_Byte();//得到0XAA PS2_Get_Byte();//得到ID 0X00 //进入滚轮模式的特殊初始化序列 PS2_Send_Cmd(SET_SAMPLE_RATE);//进入设置采样率 if(PS2_Get_Byte()!=0XFA)return 4;//传输失败 PS2_Send_Cmd(0XC8);//采样率200 if(PS2_Get_Byte()!=0XFA)return 5;//传输失败 PS2_Send_Cmd(SET_SAMPLE_RATE);//进入设置采样率 if(PS2_Get_Byte()!=0XFA)return 6;//传输失败 PS2_Send_Cmd(0X64);//采样率100 if(PS2_Get_Byte()!=0XFA)return 7;//传输失败 PS2_Send_Cmd(SET_SAMPLE_RATE);//进入设置采样率 if(PS2_Get_Byte()!=0XFA)return 8;//传输失败 PS2_Send_Cmd(0X50);//采样率80 if(PS2_Get_Byte()!=0XFA)return 9;//传输失败 //序列完成 PS2_Send_Cmd(GET_DEVICE_ID); //读取ID if(PS2_Get_Byte()!=0XFA)return 10;//传输失败 MOUSE_ID=PS2_Get_Byte();//得到MOUSE ID PS2_Send_Cmd(SET_SAMPLE_RATE);//再次进入设置采样率 if(PS2_Get_Byte()!=0XFA)return 11;//传输失败 PS2_Send_Cmd(0X0A);//采样率10 if(PS2_Get_Byte()!=0XFA)return 12;//传输失败 PS2_Send_Cmd(GET_DEVICE_ID); //读取ID if(PS2_Get_Byte()!=0XFA)return 13;//传输失败 MOUSE_ID=PS2_Get_Byte();//得到MOUSE ID PS2_Send_Cmd(SET_RESOLUTION); //设置分辨率 if(PS2_Get_Byte()!=0XFA)return 14;//传输失败 PS2_Send_Cmd(0X03);//8点/mm if(PS2_Get_Byte()!=0XFA)return 15;//传输失败 PS2_Send_Cmd(SET_SCALING11); //设置缩放比率为1:1 if(PS2_Get_Byte()!=0XFA)return 16;//传输失败 PS2_Send_Cmd(SET_SAMPLE_RATE); //设置采样率 if(PS2_Get_Byte()!=0XFA)return 17;//传输失败 PS2_Send_Cmd(0X28);//40 if(PS2_Get_Byte()!=0XFA)return 18;//传输失败 PS2_Send_Cmd(EN_DATA_REPORT); //使能数据报告 if(PS2_Get_Byte()!=0XFA)return 19;//传输失败 PS2_Status=MOUSE;//进入鼠标模式 return 0;//无错误,初始化成功 }