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