CH375获取键值有时候不行,为什么?

CH375获取键值有时候不行,为什么?

在同时按下多个按键后,会出现按下无返回值,弹起返回0的情况[Emot]1[/Emot]

这和多个按键没有关系,CH375不会关心 你一次按了多少个按键,它只是定时的去取数据。


问题是按了多个以后,就出现抓不到数据的问题了


按下无中断,松开返回 0 时才中断

是不是和同步有关系?[Emot]1[/Emot]

tog = tog ? 0x80 : 0x00 这个怎么理解?


//***************************************************** //* NAME: get_int_in(UINT8 tog,UINT8 endp_int) //* FUCTION: 获取HID类设备的数据 //* 输入参数: 该设备的同步标志,端点号 //* 输出参数:操作状态 //* 说明: 支持复合设备的操作 //******************************************************

UINT8 get_int_in(UINT8 tog,UINT8 endp_int) { UINT8 s,t,j; tog = tog ? 0x80 : 0x00; issue_token(tog,( endp_int << 4 ) | DEF_USB_PID_IN); s = wait_interrupt( ); if(s == USB_INT_SUCCESS) { t = RD_USB_DATA(data_buf); //键盘中断端点数据长度一般为8字节,鼠标为4字节 for(j=0;j!=t;j++) printf("%02x ",(unsigned short)data_buf[j]); if( endp_int == Device_Atti.Device[0].Device_endp ) Device_Atti.Device[0].tog = Device_Atti.Device[0].tog ? FALSE : TRUE; else Device_Atti.Device[1].tog = Device_Atti.Device[1].tog ? FALSE : TRUE; } return s; }


USB键盘并不是你想同时按几个按键 就传几个键值!! 最多同时按键不可以超过6个,以及有一些按键是不可以同时按下的,这和键盘的扫描原理有关!! 用BUSHOUND软件看看 PC机是否可以取到键值


简单点说,就是单按A,有中断,返回的也是A值1C

再同时随便按任意2个键后,再按A,就没有中断了,只有再放开A时有中断,返回 0

望解答


用BUSHOUND软件看看 pc机可以取到键值 CH375同样可以取到, 不会不产生中断吧,不论有没有数据CH375都应该产生中断,除非你把程序当中设置重试次数那段代码 去掉了


CH376_WR_CMD_PORT( CMD20_SET_RETRY ); //设置CH376重试次数 CH376_WR_DAT_PORT( 0x25 ); CH376_WR_DAT_PORT( 0x00 ); //为了保证兼容性对于部分鼠标键盘需要设置有限次重试(0xc0),而对于复合设备, //比如USB转PS2的设备,复合键盘,则不需要重试(0x00)

以上是参考程序的,照搬下来用


是因为这个原因吗


上面的程序是设置CH375重试次数的,默认是无限次重试。 有没有使用BUSHOUND软件测试过???


如果键盘直接接PC机,用BUSHOUND测是有的

现在的接法是单片机接CH375,CH375再接键盘,这个用不了BUSHOUND吧?


应该是程序没写好,但不知道哪里的问题

请问有哪些地方需要注意的吗

现在抓取的方法: while(1){ endp6_mode = 0x80; toggle_rev(); issue_token( endp_int << 4 | DEF_USB_PID_IN); wait_interrupt(); //成功后进行数据处理 }


你上面的程序有问题啊! 哪个例子程序告诉你每次取数据从endp6_mode = 0x80开始取数据的? 麻烦你自己看下第4楼的程序怎么写的。


3楼说了没理解,没有解答

程序应该怎么改呢


4楼的代码没有问题, 每次成功获取数据之后 都应该切换当前的同步标志,以便后面的数据传输。


只有登录才能回复,可以选择微信账号登录