当前位置:首页 > 科技 > 正文

Arduino学习笔记A11

键盘作为经典的输入设备,使用在很多互动中都有特别的优势,比如我们可以通过键盘直接给flash传递按键事件。而无需通过串口之类的特殊接口,虽然我们可以拆一个传统的键盘,然后将里面的按键引出来,但是这样有一个缺点,就是键值不能动态改变并且不能一次多键。使用模拟键盘的话,我们就可以随意在程序设置按键的时间和键值。比如本文的例子就是按下一个按键,模拟键盘就在电脑输入“”。

硬件部分:

材料清单:

x1

68Ω电阻 x2 (没有68Ω的话,用50~100Ω电阻也行)

2.2kΩ电阻 x1 (没有2.2kΩ的话,用1.5k~2.2k电阻也行)

USB连接线(一端是USB口,另一端是电线) x1

3.6v 稳压管(建议选用功耗0.25~0.5w的)x2

Arduino学习笔记A11

Arduino学习笔记A11

电路原理图:

Arduino学习笔记A11

电路图解说:

1、两个68Ω的电阻起到限流和保护作用,防止在意外情况下损坏计算机的USB端口或单片机的端口。

2、2.2kΩ电阻是上拉电阻,用于分辨总线状态。如果上拉电阻接于D+和+5v端则是高速USB设备,接于D-与+5v端,则是低速设备。此处键盘传输速率不高,接到D-作为低速设备即可。

3、D+和D-上的3.6V稳压二极管D1和D2起到限制数据线上的电平的作用。因为在USB规范中规定数据线D+和D-上的电平范围是3.0V至3.6V,而AVR单片机的输出电平是Vcc。如果单片机的Vcc是5V,在没有D1和D2的情况下将造成电平不匹配,会造成在很多计算机中无法正确识别出USB设备。如果用户系统的Vcc在3.0V至3.6V之间,就可以省略这两个稳压二极管。从这里也可以看出用户系统的Vcc必须高于3V。

4、由于低速所需要的是1.5MHz时钟,而单片机每8条指令就能精确完成一个数据位的采集。所以最小单片机时钟频率是12MHz。并且可以使用的时钟频率有12MHz、12.8MHz、15MHz、16MHz、16.5MHz、20MHz,其他的不支持。所以如果使用最小系统制作此模拟键盘的话8MHz的话,不能用。

————————

软件部分:

支持库文件:

Arduino学习笔记A11

-模拟电脑键盘(基于AVR-USB的USB-HID设备)">.zip(112.45KB, 下载次数: 110)

文件下载后解压到编译器的文件夹下面。

注意:

1、库中,.h里面可以更改USB接线的引脚定义,下面给出一个大概解释(下面的PORTD是指AVR单片机的PORTD,要查询原理图才能得到是的哪个引脚):

#NAME D

USB输入输出引脚使用AVR单片机的PORTD,如果改成B就是使用PORTB

#_BIT 4

USB的D-接PORTD的第四位PD4,对应 D4

#BIT2

USB的D+接PORTD的第二位PD2,对应 D2

# D

USB上拉引脚使用AVR单片机的PORTD,如果改成B就是使用PORTB

#_BIT5

USB的上拉电阻接PORTD的第五位PD5,对应

2、在库的.h里面,有关于模拟键值的表

# KEY_A 4

# KEY_B 5

# KEY_C 6

# KEY_D 7

# KEY_E 8

等。但不齐全。经过测试,其实这个键盘基本可以模拟几乎所有键值(Power,Sleep,Pause似乎不能)。

比如方向键右左下上分别对应79,80,81,82数字。即写成

.(79);

.(81);

等。由于整理比较麻烦,大家可以自己下载个软件测试不同数字下面的键值。

程序示例:

下面的例子演示了用虚拟键盘的应用例子。打开记事本,然后将的D12引脚和GND连起来,就会打印字样。 代码复制打印

# ".h"int = 1;//按键接在D1引脚,也可以改成任何引脚void setup(){ &= !(1

有话要说...

取消
扫码支持 支付码