|
日志内容
| 自制USB键盘来玩玩~~~~(源代码,原理图) |
|
电脑圈圈 发表于 2007-3-22 17:54:00 | 哈哈,终于搞了一回USB HID设备,做了一个USB键盘来玩玩~~~~
其中的报告描述符让我晕了几天~~~~~几份HID相关的协议还是蛮长的~~~~~~ 明天再弄个USB鼠标设备玩玩~~~~~~~有空的话再搞个红外遥控器玩玩~~~ 这回是拿以前做的Mass storage来改的,所以比较快,修改了一下描述符 以及端点处理等,就行了。用了一个4*4的小键盘,有0-9十个数字键, Num Lock键,Caps Lock键,Shift键,Ctrl键,Alt键,回车键等。
最多可以有三个键同时按下,如果相交的话,最多只能两个键按下。
以下是通过串口返回的调试信息:
系统启动................................ 断开USB连接........................ USBD12芯片初始化 设置地址..................... 地址为: 0 连接USB............... USB总线复位................................ USB总线挂起................................ USB总线复位................................ USB总线挂起................................ USB总线复位................................ USB标准请求................................ 获取描述符................................ 获取设备描述符................................ USB总线复位................................ USB标准请求................................ 设置地址..................... 地址为: 2 USB标准请求................................ 获取描述符................................ 获取设备描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ 获取配置描述符................................ USB标准请求................................ 获取描述符................................ 获取字符串描述符................................ 获取语言ID................................ USB标准请求................................ 获取描述符................................ 获取字符串描述符................................ 获取设备序列号................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ 获取配置描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ 获取字符串描述符................................ 获取语言ID................................ USB标准请求................................ 获取描述符................................ 获取字符串描述符................................ 获取产品字符串................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ 获取字符串描述符................................ 获取语言ID................................ USB标准请求................................ 获取描述符................................ 获取字符串描述符................................ 获取产品字符串................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ 获取设备描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ 获取配置描述符................................ USB标准请求................................ 获取描述符................................ 获取配置描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 获取描述符................................ USB标准请求................................ 设置配置................................ USB类请求................................ 设置空闲................................ USB标准请求................................ 获取描述符(从接口).............................. 获取报告描述符................................ USB标准请求................................ 获取描述符(从接口).............................. USB标准请求................................ 获取描述符(从接口).............................. USB标准请求................................ 获取描述符(从接口).............................. USB标准请求................................ 获取描述符(从接口).............................. USB标准请求................................ 获取描述符(从接口).............................. USB标准请求................................ 获取描述符(从接口).............................. USB标准请求................................ 获取描述符(从接口).............................. 端点2输出................................ 端点2的数据是 0x01 端点2输出................................ 端点2的数据是 0x03 端点2输出................................ 端点2的数据是 0x01 端点2输出................................ 端点2的数据是 0x00 端点2输出................................ 端点2的数据是 0x02 端点2输出................................ 端点2的数据是 0x03
在设备管理器里看到的图:

原理图 (用的是以前做IDE转USB的板,所以上面还有个IDE接口和573锁存器,可以不用理会它们):
(注意:原理图上所标的晶体值是以前的,这个程序中使用的是22.1184M的晶体.它关系到串口波特率,如果你不使用串口,那么可以不用理会它.)
注意:图中串口电平转换部分的C8和C10接反了,C11负端应接VDD。D12的SUSPEND(12脚)应该接地。USB接头的D+和D-跟芯的D+和D-之间应该串联22欧姆的匹配电阻。片由于图得比较匆忙,所以没留意。右击选择图片另存为可以看到完整图片了.

实物图片(键盘是外接的):
|
| 阅读全文 | 回复(214) | 引用通告 | 编辑
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2009-5-25 16:12:00 |
晕,密码就是computer00啊,就放在那个压缩包的注释当中,另外在压缩包中还有个解压说明,可以直接打开的。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
融化(游客)发表评论于2009-5-25 8:59:00 |
密码是什么啊,楼主,没有密码解不了压缩啊
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
aa(游客)发表评论于2009-3-23 6:03:00 |
有密码?
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-12-11 5:51:00 |
晕……你照着数据手册告诉你的去连就行了...
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
菲菲(游客)发表评论于2008-12-11 3:15:00 |
那如果接上会有错误吗,我要是不接他就不好使 啊
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-12-3 5:09:00 |
那要看什么芯片,这个芯是不用接的。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
菲菲(游客)发表评论于2008-12-3 1:40:00 |
USB的复位引脚不接行不行啊
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-12-2 12:47:00 |
晕……我懒得去找了...你自己搜索一下ESC应该都能找到啊…… 串口的我没搞过...
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
00(游客)发表评论于2008-12-2 11:11:00 |
我同学做上位机,是通过串口上下通信,您有串口的上位机的相关程序吗???
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
00(游客)发表评论于2008-12-2 11:00:00 |
我还想知道ESC的InBuffer[i++]=?的什值,谢谢您给我的资料,可是都是英文的我看不懂
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
菲菲(游客)发表评论于2008-12-2 5:29:00 |
USB的复位引脚不接行不行啊
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-11-26 5:23:00 |
page up是0x4B,page down是0x4E,你可以参考这个帖下面的附件中的hut1_12.pdf。 http://group.ednchina.com/93/197.aspx
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
00(游客)发表评论于2008-11-26 2:39:00 |
请教一下:PageUp和 PageDoown应该给InBuffer[i++]=?什么值啊!谢谢
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-11-25 6:31:00 |
这个要看HID协议哦,里面定义了每个按键的值的……
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
wap20080808(游客)发表评论于2008-11-24 10:00:00 |
oo: 你好: 打扰一下. 下面的代码部分不明白: // 截的部分代码 if(KeyMapOk&(1<<2)) //左ALT键 { InBuffer[0]|=1<<2; } else { InBuffer[0]&=~(1<<2); } i=2; if(KeyMapOk&(1)) { InBuffer[i++]=0x28; //回车键 } if(KeyMapOk&(1<<1)) { InBuffer[i++]=0x62; //0键 } if(KeyMapOk&(1<<4)) { InBuffer[i++]=0x5B; //3键 } if(KeyMapOk&(1<<5)) { InBuffer[i++]=0x5A; //2键 } if(KeyMapOk&(1<<6)) { InBuffer[i++]=0x59; //1键 } if(KeyMapOk&(1<<8)) { InBuffer[i++]=0x5E; //6键 } if(KeyMapOk&(1<<9)) { InBuffer[i++]=0x5D; //5键 } if(KeyMapOk&(1<<10)) { InBuffer[i++]=0x5C; //4键 } if(KeyMapOk&(1<<11)) { InBuffer[i++]=0x39; //Caps Lock键 } if(KeyMapOk&(1<<12)) { InBuffer[i++]=0x61; //9键 } if(KeyMapOk&(1<<13)) { InBuffer[i++]=0x60; //8键 } if(KeyMapOk&(1<<14)) { InBuffer[i++]=0x5F; //2键 } if(KeyMapOk&(1<<15)) { InBuffer[i++]=0x53; //Num Lock键 } for(;i<8;i++) { InBuffer[i]=0; //多余的清0 } } } else //如果无按键按下,则返回0 { for(i=0;i<8;i++) { InBuffer[i]=0; } } KeyMapCanChange=1; //允许修改按键值 //返回8个字节数据 write_endpoint_buff(5,8,InBuffer); } if(KeyMapOk&(1<<14)) { InBuffer[i++]=0x5F; //2键 例如:为什么是代表2了. 不好意思.初学者请见笑. 硬件之间是怎么建立的桥梁.
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
菲菲(游客)发表评论于2008-11-20 7:27:00 |
*************************定时器0中断处理***************************************/ void Timer0Isr(void) interrupt 1 { uint8 temp; TH0=0xee; TL0=0x00; //定时器0重装 KeyIO=0xFF; if((KeyIO&0x0F)==0xFF) //如果现在没有按键按下 { KeyMapCurrent=0; //没有键按下 } else { //开始键值扫描 KeyIO=0xFF; //保存键值位状态 temp=KeyIO&0xFF; //保存取反后的键值 //KeyMapCurrent|=(~temp); //KeyMapCurrent^=0x0F; KeyMapCurrent=temp; KeyMapCurrent^=0xF0; KeyMapOk=KeyMapCurrent; } } 这个是我根据您的改的,我就给他送两个值,为什么到这就跳不出去了.真的很急,谢谢了.
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
菲菲(游客)发表评论于2008-11-20 7:27:00 |
*************************定时器0中断处理***************************************/ void Timer0Isr(void) interrupt 1 { uint8 temp; TH0=0xee; TL0=0x00; //定时器0重装 KeyIO=0xFF; if((KeyIO&0x0F)==0xFF) //如果现在没有按键按下 { KeyMapCurrent=0; //没有键按下 } else { //开始键值扫描 KeyIO=0xFF; //保存键值位状态 temp=KeyIO&0xFF; //保存取反后的键值 //KeyMapCurrent|=(~temp); //KeyMapCurrent^=0x0F; KeyMapCurrent=temp; KeyMapCurrent^=0xF0; KeyMapOk=KeyMapCurrent; } } 这个是我根据您的改的,我就给他送两个值,为什么到这就跳不出去了.真的很急,谢谢了.
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-11-12 20:49:00 |
这从每个函数的名字上就能看出来了呀……查查那几个单词的意思吧。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
菲菲(游客)发表评论于2008-11-12 16:42:00 |
圈圈麻烦你帮我注释一下每个函数的功能吧,我看不太懂~~万分的感谢您!!! read_interrupt_register(); if(Interrupt_Register.Interrupt.bus_reset){usb_bus_reset();continue;} if(Interrupt_Register.Interrupt.suspend_change){usb_bus_suspend();continue;} if(Interrupt_Register.Interrupt.control_out_port){endp0_out();continue;} if(Interrupt_Register.Interrupt.control_in_port&&usb_flags.flags.usb_endp0_in){endp0_in();continue;} // if(Interrupt_Register.Interrupt.port_out_1)endp1_out(); // if(Interrupt_Register.Interrupt.port_in_1)endp1_in(); if(Interrupt_Register.Interrupt.main_out_port){endp2_out();} if(Interrupt_Register.Interrupt.main_in_port){endp2_in();} }
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-11-11 11:03:00 |
不用。windows自带的。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
菲菲(游客)发表评论于2008-11-10 16:34:00 |
用您这个程序是不是不用软件驱动啊? 总来麻烦你真的不好意~~~~
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-11-8 19:54:00 |
是低电平产生中断啊
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
菲菲(游客)发表评论于2008-11-8 16:45:00 |
if(!USB_INT)//中断产生 { read_interrupt_register(); if(Interrupt_Register.Interrupt.bus_reset){usb_bus_reset();continue;} if(Interrupt_Register.Interrupt.suspend_change){usb_bus_suspend();continue;} if(Interrupt_Register.Interrupt.control_out_port){endp0_out();continue;} if(Interrupt_Register.Interrupt.control_in_port&&usb_flags.flags.usb_endp0_in){endp0_in();continue;} // if(Interrupt_Register.Interrupt.port_out_1)endp1_out(); // if(Interrupt_Register.Interrupt.port_in_1)endp1_in(); if(Interrupt_Register.Interrupt.main_out_port){endp2_out();} if(Interrupt_Register.Interrupt.main_in_port){endp2_in();} } USB_INT运行时值是正确的,取非就进不去了。弄不懂了~~~求助!!!!!!
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-11-7 11:58:00 |
不好意思,有些太基础的知识还是靠自己多补充下,我也帮不上忙。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
菲菲(游客)发表评论于2008-11-6 19:03:00 |
还有就是 USBD12的20脚接不接电啊,我找有的电路图是不接的! 谢谢~~~
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
菲菲(游客)发表评论于2008-11-6 18:51:00 |
谢谢你的回复,我也是初学者。不太懂,目前程序还没有弄懂呢,如果正常的话是不是我把U口插上,二极管就会亮啊!
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-11-6 10:52:00 |
可能是LED你装反了吧……
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
菲菲(游客)发表评论于2008-11-5 20:13:00 |
我用的是你的程序,为什么接电源后二极管不亮啊,可能是哪出了问题啊~急!!!谢谢了
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-10-22 23:38:00 |
你去搜索一下,可能有得卖的。 无线翻页, 你做成USB键盘就OK了。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
菲菲(游客)发表评论于2008-10-22 19:59:00 |
圈圈你好,进入你的博客很高兴,我做无线翻页笔,也用到了USB接口,能给你意见和想法吗?非常感谢谢。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
CL(游客)发表评论于2008-10-22 16:31:00 |
圈圈,你的这块板子 旱好的 淘宝上有卖的吗? 我想买个旱好的 自己插的怎么也没有反映``
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-10-17 18:13:00 |
那你可以试试我推荐的那个串口调试助手: http://blog.21ic.com/user1/2198/archives/2007/43994.html
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
CL(游客)发表评论于2008-10-17 10:41:00 |
USB主机上我用的是网上下的串口调试工具,连通串口和USB以后,过一会会出现很多乱码,还会自己换行的,这个时候我即使拔掉串口和USB,调试工具上仍然会出现乱码,很多,看上去有规律,没有出现枚举,求圈圈提示.
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-10-16 17:15:00 |
直接当作字符串发送就行了。请参看里面的源代码。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
CL(游客)发表评论于2008-10-16 11:43:00 |
请问用什么方法可以打印出调试的中文?
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
computer00发表评论于2008-10-16 0:21:00 |
通过串口就可以把一些想要查看的变量、过程打印出来呀……
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
CL(游客)发表评论于2008-10-15 18:13:00 |
还有个问题,照这个连了以后D12的灯不亮 一般是什么原因?
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
CL(游客)发表评论于2008-10-15 16:33:00 |
我晶振用的11.0952M的要在哪做些修改呢?
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
CL(游客)发表评论于2008-10-15 15:03:00 |
圈圈,你上面那些通过串口调试的过程是通过什么得来的?
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:自制USB键盘来玩玩~~~~(源代码,原理图) |
|
CL(游客)发表评论于2008-10-15 11:18:00 |
圈圈大哥平时都怎么调试硬件程序的啊?我是小菜菜``请指点,用什么软件什么方法,最好给些资料谢谢!
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
|
用户信息
载入中...
|