楼主整理的资源,大家可以来看看哈
模拟USB键盘的USB接口芯片开发使用说明书
1. UI017简要介绍
UI017 通过模拟 USB 键盘,将 UART 接收来的数据转换为键盘格式的数据发给PC/安卓手机平板,从而在 PC/安卓手机平板上显示出来。
UI017 适用于需要将数据传给 PC/安卓手机平板显示的应用,如条码枪、电子秤、RFID读卡器、身份证读卡器等。UI017 还支持多个多媒体键。
UI017引脚图:
UI017管脚功能定义:
UI017电路图:
2. UI017功能、性能
您可以将希望在 PC 上显示的字符(ASCII)发给 UI017,由 UI017 转换为
USB 键盘的数据格式发给PC,在 PC的记事本、写字板或 WORD 等软件中就可
以显示出您想要的字符。发给PC 的数据相当于您在键盘上输入的数据。
全速/低速USB HID接口,无需安装驱动、应用软件,即插即用
支持5V 或 3.3V、9600N81 UART接口
支持windows2000/Xp/Vista/win7/8/10;支持 Linux;
支持安卓平板、手机OTG 连接(部分安卓平板、手机 OTG不支持全速,只支持低速)
支持全键盘、组合键操作(不能完整支持任意组合键)
使用 HID Usage ID
支持读取 NumLock、CapsLock、ScrollLock LED 的状态
支持输入0x01~0x7F 的ASCII
在 0x01~0x7F之外的字符将不予转换
ASCII 输入支持多国语言(2017 年6 月以后发货的芯片有此功能)
除了标准美式键盘外,还支持德语、英国英语、法语、西班牙语、葡萄牙语(国际、巴西)、意大利语
同时支持ASCII、HID Usage ID两种输入方式,可随意切换。
支持21 个多媒体按键
电源控制3 个:关闭电源、休眠、唤醒
快捷键4 个:打开邮件软件、打开计算器、打开资源管理器、打开资
源管理器查找界面
播放器控制 8 个:打开播放器、播放/暂停、停止、音量升高、音量降低、静音、上一个文件、下一个文件
网页浏览控制 6 个:打开浏览器/回到主页、后退、前进、停止、刷新、打开收藏夹
支持自动或不自动释放按键,更加灵活
全速芯片支持每秒256 个字符的输入速度, 相当于不到4ms 就可以在PC上显示1 个字符
低速芯片支持每秒50 个字符
简单的外围电路设计
不需要外围晶体、复位电路,只需两颗电容
SOP14/SOP18封装
注意:以下说明中,0x 表示后面的数据是十六进制。如0x80,表示十六进
制的 80。
4.开发使用指南
UI017 在正常工作时,外围电路只需要两颗电容,电脑/平板/手机上不需要装任何驱动,连接上USB 接口就可以使用。
4.1.引脚定义
UI017 有两种封装,请优先选择SOP14封装。
4.3.UART数据帧格式
UART的数据帧格式为:9600bps 波特率,8 位数据位,无校验位,1~2位停止位。上电后,UI017 的UART_RDY引脚输出低,表明 UI017正在等待上位机初始化,此时,UART_RX引脚不接收任何数据。UI017的 UART_RDY 引脚输出高后,UI017的 UART_RX 引脚就处于监听状态,一旦接收到数据,立即转换发送给上位机。
4.4.1.ASCII 输入方式
ASCII输入方式下,MCU 只需要将需要在 PC 上显示的ASCII值发给UI017就可以。ASCII表格请参考附录1。
ASCII输入方式下,MCU 输入1 个字节1 个字符,该方式下不能实现组合按键。
ASCII输入方式下,如果 MODE0=低时,MCU 只需发 0x00 就可以释放当前所有正常按键。
如果要在电脑上用串口调试工具发送命令,请参考“串口调试工具设置说明”。如果使用单片机发命令,请参考“单片机发命令 C 语言示例”。
单片机源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- typedef unsigned int uint;
- typedef unsigned char uchar ;
- uchar R_data;
- bit R_flag=0;
- uchar page_up[] = {0x80,0x4b};
- uchar page_down[] = {0x80,0x4e};
- uchar f5[] = {0x80,0x3e};
- uchar esc[] = {0x80,0x29};
- /********************************************************************
- * 名称 : Uart_Init()
- * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void Uart_Init(void)
- {
- TMOD = 0x20; //定时器工作在定时器1的方式2
- PCON = 0x00; //不倍频
- SCON = 0x50; //串口工作在方式1,并且启动串行接收
- TH1 = 0xFd; //设置波特率 9600
- TL1 = 0xFd;
- TR1 = 1; //启动定时器1
- ES = 1; //开串口中断
- EA = 1; //开总中断
- }
- /********************************************************************
- * 名称 : Uart_SendByte(uchar Byte)
- * 功能 : 串口发送1字节数据
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void Uart_SendByte(uchar Byte)
- {
- SBUF = Byte;
- while(!TI) //如果发送完毕,硬件会置位TI
- {
- _nop_();
- }
- TI = 0;
- }
- /********************************************************************
- * 名称 : Main()
- * 功能 : 主函数
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void main()
- {
- uchar i;
- Uart_Init();
- while(1)
- {
- if(R_flag==1)
- {
- switch(R_data)
- {
- case 1:{for(i=0;i<2;i++) Uart_SendByte(page_up[i]);break;}
- case 2:{for(i=0;i<2;i++) Uart_SendByte(page_down[i]);break;}
- case 3:{for(i=0;i<2;i++) Uart_SendByte(f5[i]);break;}
- case 4:{for(i=0;i<2;i++) Uart_SendByte(esc[i]);break;}
- }
- //P1 = R_data;
- //Uart_SendByte(R_data);
- R_flag=0;
- }
- }
- }
- /********************************************************************
- * 名称 : Uart_Int()
- * 功能 : 串口中断子函数
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void Uart_Int(void) interrupt 4
- {
- // static uchar i = 7; //定义为静态变量,当重新进入这个子函数时 i 的值不会发生改变
- EA = 0;
- if(RI == 1) //当硬件接收到一个数据时,RI会置位
- {
- R_data= SBUF; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
- RI = 0;
- R_flag=1;
- }
- EA = 1;
- }
复制代码
所有资料51hei提供下载:
PPT翻页笔.rar
(854.49 KB, 下载次数: 56)
|