[21IC首页] [21IC资料下载] [21IC器件搜索[alldatasheet网] [中国芯片手册网] [电子查询网] [磁动力工作室] [驱动程序开发网] [射频网络] [液晶之家] [可控硅应用技术网]

Computer○○的家当®

《圈圈教你玩USB》
网上购书点

当当网    淘宝网
中国互动出版社
卓越亚马逊
更多网点...
 
 
载入中...
   
                             设置为首页      [站长入口]    站点2: [EDN站点]   站点3: [与非站点]   站点4: [电子园站点]   我的USB专区: [圈圈的USB专区]

 




载入中...

日志内容


自制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键盘源代码包.rar
 
 
以下是通过串口返回的调试信息:
 
系统启动................................
断开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晕,密码就是computer00啊,就放在那个压缩包的注释当中,另外在压缩包中还有个解压说明,可以直接打开的。
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
融化(游客)发表评论于2009-5-25 8:59:00

融化(游客)密码是什么啊,楼主,没有密码解不了压缩啊
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
aa(游客)发表评论于2009-3-23 6:03:00

aa(游客)有密码?
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
computer00发表评论于2008-12-11 5:51:00

computer00晕……你照着数据手册告诉你的去连就行了...
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
菲菲(游客)发表评论于2008-12-11 3:15:00

菲菲(游客)那如果接上会有错误吗,我要是不接他就不好使 啊

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
computer00发表评论于2008-12-3 5:09:00

computer00那要看什么芯片,这个芯是不用接的。
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
菲菲(游客)发表评论于2008-12-3 1:40:00

菲菲(游客)USB的复位引脚不接行不行啊
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
computer00发表评论于2008-12-2 12:47:00

computer00晕……我懒得去找了...你自己搜索一下ESC应该都能找到啊……
串口的我没搞过...

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
00(游客)发表评论于2008-12-2 11:11:00

00(游客)我同学做上位机,是通过串口上下通信,您有串口的上位机的相关程序吗???
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
00(游客)发表评论于2008-12-2 11:00:00

00(游客)我还想知道ESC的InBuffer[i++]=?的什值,谢谢您给我的资料,可是都是英文的我看不懂
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
菲菲(游客)发表评论于2008-12-2 5:29:00

菲菲(游客)USB的复位引脚不接行不行啊
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
computer00发表评论于2008-11-26 5:23:00

computer00page up是0x4B,page down是0x4E,你可以参考这个帖下面的附件中的hut1_12.pdf。
http://group.ednchina.com/93/197.aspx

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
00(游客)发表评论于2008-11-26 2:39:00

00(游客)请教一下:PageUp和 PageDoown应该给InBuffer[i++]=?什么值啊!谢谢

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
computer00发表评论于2008-11-25 6:31:00

computer00这个要看HID协议哦,里面定义了每个按键的值的……
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
wap20080808(游客)发表评论于2008-11-24 10:00:00

wap20080808(游客)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

computer00这从每个函数的名字上就能看出来了呀……查查那几个单词的意思吧。
个人主页 | 引用 | 返回 | 删除 | 回复       


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

computer00不用。windows自带的。
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
菲菲(游客)发表评论于2008-11-10 16:34:00

菲菲(游客)用您这个程序是不是不用软件驱动啊?
总来麻烦你真的不好意~~~~

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
computer00发表评论于2008-11-8 19:54:00

computer00是低电平产生中断啊
个人主页 | 引用 | 返回 | 删除 | 回复       


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

computer00不好意思,有些太基础的知识还是靠自己多补充下,我也帮不上忙。
个人主页 | 引用 | 返回 | 删除 | 回复       


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

computer00可能是LED你装反了吧……
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
菲菲(游客)发表评论于2008-11-5 20:13:00

菲菲(游客)我用的是你的程序,为什么接电源后二极管不亮啊,可能是哪出了问题啊~急!!!谢谢了
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
computer00发表评论于2008-10-22 23:38:00

computer00你去搜索一下,可能有得卖的。

无线翻页, 你做成USB键盘就OK了。

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
菲菲(游客)发表评论于2008-10-22 19:59:00

菲菲(游客)圈圈你好,进入你的博客很高兴,我做无线翻页笔,也用到了USB接口,能给你意见和想法吗?非常感谢谢。
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
CL(游客)发表评论于2008-10-22 16:31:00

CL(游客)圈圈,你的这块板子 旱好的 淘宝上有卖的吗? 我想买个旱好的 自己插的怎么也没有反映``
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
computer00发表评论于2008-10-17 18:13:00

computer00那你可以试试我推荐的那个串口调试助手:
http://blog.21ic.com/user1/2198/archives/2007/43994.html

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
CL(游客)发表评论于2008-10-17 10:41:00

CL(游客)USB主机上我用的是网上下的串口调试工具,连通串口和USB以后,过一会会出现很多乱码,还会自己换行的,这个时候我即使拔掉串口和USB,调试工具上仍然会出现乱码,很多,看上去有规律,没有出现枚举,求圈圈提示.
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
computer00发表评论于2008-10-16 17:15:00

computer00直接当作字符串发送就行了。请参看里面的源代码。
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
CL(游客)发表评论于2008-10-16 11:43:00

CL(游客)请问用什么方法可以打印出调试的中文?
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
computer00发表评论于2008-10-16 0:21:00

computer00通过串口就可以把一些想要查看的变量、过程打印出来呀……
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
CL(游客)发表评论于2008-10-15 18:13:00

CL(游客)还有个问题,照这个连了以后D12的灯不亮 一般是什么原因?
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
CL(游客)发表评论于2008-10-15 16:33:00

CL(游客)我晶振用的11.0952M的要在哪做些修改呢?
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
CL(游客)发表评论于2008-10-15 15:03:00

CL(游客)圈圈,你上面那些通过串口调试的过程是通过什么得来的?
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:自制USB键盘来玩玩~~~~(源代码,原理图)
CL(游客)发表评论于2008-10-15 11:18:00

CL(游客)圈圈大哥平时都怎么调试硬件程序的啊?我是小菜菜``请指点,用什么软件什么方法,最好给些资料谢谢!
个人主页 | 引用 | 返回 | 删除 | 回复       

发表评论:
载入中...

 
 

 

用户信息

载入中...

    
    
 
家当信息
载入中...

站长简介:  

    Computer00,男。B型血,天蝎座。爱好电子技术及计算机技术。21IC中国电子网[技术交流]版版主。

 

最新回复

载入中...

圈圈公告 
载入中...

最新家当

载入中...

友情链接 

 

家当主题

载入中...

最新留言

载入中...

搜我的家当 

          chunyang工作室
        为您提供无线通讯模块