//-------------------------------------------------------- // 项目:鼠标程序 // 模块:主程序 // 说明: // 设计:程序匠人(版权所有,引用者请保留原作者姓名) //-------------------------------------------------------- /* 版本说明:
V01 2009-2-1 22:11:47 在原DEMO程序上改进如下: 1.4个方向键,原来是单击有效,每次击键,鼠标移动一次.现在改为连击有效,当方向键连续按下时,鼠标持续移动 2.鼠标每次移动的步长,原来固定30点.现在改为由电位器调节,步长范围=ADC采样结果的高4位+1(1~16) 3.原来只支持"上下左右"4个方向,现在支持"正上正下正左正右左上右上左下右下"8个方向 4.KEY2改为鼠标左键 5.KEY3改为鼠标右键 6.KEY4(方向键中间键)改为鼠标中键 7.LCD显示内容改为:"CXJR" 8.按键原来是用中断检测,改为在主程序中查询. */ //--------------------------------------------------------
//略。。。。。
//-------------------------------------------------------- //主函数 //-------------------------------------------------------- int main(void) {
//略。。。。。 while(1) { write_string("CXJR"); Mouse_Send(); } }
//-------------------------------------------------------- //鼠标报告描述符发送 //-------------------------------------------------------- void Mouse_Send(void) { u8 Mouse_Buffer[4] = {0, 0, 0, 0}; s8 X = 0, Y = 0;
//========方向键处理(步长=ADC采样结果的高4位+1(1~16)) if (!GPIO_ReadInputDataBit(GPIOD, JOY_RIGHT)) { X += (ADC_ConvertedValue/256+1); } if (!GPIO_ReadInputDataBit(GPIOD, JOY_LEFT)) { X -= (ADC_ConvertedValue/256+1); } if (!GPIO_ReadInputDataBit(GPIOD, JOY_UP)) { Y -= (ADC_ConvertedValue/256+1); } if (!GPIO_ReadInputDataBit(GPIOD, JOY_DOWN)) { Y += (ADC_ConvertedValue/256+1); } Mouse_Buffer[1] = X; // prepare buffer to send Mouse_Buffer[2] = Y;
//========按键处理 if (!GPIO_ReadInputDataBit(GPIOD, MOUSE_LEFT)) { Mouse_Buffer[0] = 0X01; } if (!GPIO_ReadInputDataBit(GPIOD, MOUSE_RIGHT)) { Mouse_Buffer[0] = 0X02; } if (!GPIO_ReadInputDataBit(GPIOD, JOY_SEL)) { Mouse_Buffer[0] = 0X04; }
//======== UserToPMABufferCopy(Mouse_Buffer, GetEPTxAddr(ENDP1), 4); //copy mouse position info in ENDP1 Tx Packet Memory Area SetEPTxValid(ENDP1); // enable endpoint for transmission } //略。。。。。
|