#1楼主:匠人的寒假作业——改进后的STM32鼠标程序
文章发表于:2009-02-01 22:28
匠人的寒假作业——改进后的STM32鼠标程序
//--------------------------------------------------------
// 项目:鼠标程序
// 模块:主程序
// 说明:
// 设计:程序匠人(版权所有,引用者请保留原作者姓名)
//--------------------------------------------------------
/*
版本说明:
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
}
//略。。。。。