OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5590|回复: 5

PS2鼠标数据中符号位问题

[复制链接]

7

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2014-3-9
在线时间
11 小时
发表于 2015-1-14 18:12:34 | 显示全部楼层 |阅读模式
5金钱
 有个问题请教您::您的PS2鼠标实验中,并未读取使用byte【1】中的X、Y方向符号位,,这样怎么知道是左移还是右移呢?如何知道是上移还是下移呢??不解。。。。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-1-14 22:43:28 | 显示全部楼层
你看我们代码,是如何判断的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2014-3-9
在线时间
11 小时
 楼主| 发表于 2015-1-15 11:52:34 | 显示全部楼层
回复【2楼】正点原子:
------------------------------
原子哥,PS2鼠标输出数据有9位啊,最高位符号位在第一个字节。您的程序中只使用了第二个字节。
假如:鼠标输出9bit为-203,为1  1100  1011 。由于是补码输出,应输出 1  0011  0101,STM32收到后只使用了1100 1011 ,强制类型转换signed char 为有符号的,不就认为是+53了吗?可是鼠标实际输出的是-203啊??真心不解。。搜了很久资料,,还是不知为何不行。
我改成这样还是不行:
if(PS2_DATA_BUF[0] & 0X10)   若符号位为1
    MouseX.x_pos = MouseX.x_pos - (~(PS2_DATA_BUF[1]-1));处理8位数据,补码转换为原码
else  若符号位为0
    MouseX.x_pos = MouseX.x_pos + S2_DATA_BUF[1];补码就是原码。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-1-15 23:33:10 | 显示全部楼层
回复【3楼】超越者:
---------------------------------
我们例程运行良好啊,关键.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2014-3-9
在线时间
11 小时
 楼主| 发表于 2015-1-16 00:25:30 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
是的,原子哥,您的程序可以运行。但是我想在鼠标移动速度较慢时运行良好,一旦鼠标移动很快时,比如输出-203,也即 1  0011  0101。您的程序便会认为是0011 0101 ,认为是+53,就会在坐标上加53.而事实应该是-203。。。有待测试。
还请批评指正。
我修改的程序调好了:
if(PS2_DATA_BUF[0] & 0X10)
MouseX.x_pos = MouseX.x_pos - (u8)(~(PS2_DATA_BUF[1]-1));
else
MouseX.x_pos = MouseX.x_pos + (u8)PS2_DATA_BUF[1];
加了个强制类型转换符(u8)。对KEIL编译器类型自动转换不懂。。。。。
谢谢原子哥。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-1-16 00:28:21 | 显示全部楼层
回复【5楼】超越者:
---------------------------------
恭喜
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-27 00:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表