找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6198|回复: 6
打印 上一主题 下一主题
收起左侧

基于UI017+51单片机制作的PPT翻页笔程序源码与资料

[复制链接]
跳转到指定楼层
楼主
楼主整理的资源,大家可以来看看哈
模拟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 语言示例”。

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>

  3. typedef unsigned int uint;
  4. typedef unsigned char uchar ;
  5. uchar R_data;
  6. bit R_flag=0;
  7. uchar page_up[] = {0x80,0x4b};
  8. uchar page_down[] = {0x80,0x4e};
  9. uchar f5[] = {0x80,0x3e};
  10. uchar esc[] = {0x80,0x29};
  11. /********************************************************************
  12. * 名称 : Uart_Init()
  13. * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
  14. * 输入 : 无
  15. * 输出 : 无
  16. ***********************************************************************/
  17. void Uart_Init(void)
  18. {
  19.      TMOD = 0x20;   //定时器工作在定时器1的方式2
  20.      PCON = 0x00;   //不倍频
  21.      SCON = 0x50;        //串口工作在方式1,并且启动串行接收       
  22.      TH1 = 0xFd;    //设置波特率 9600
  23.      TL1 = 0xFd;
  24.      TR1 = 1;                //启动定时器1
  25.          ES = 1;                //开串口中断
  26.          EA = 1;                //开总中断               
  27. }
  28. /********************************************************************
  29. * 名称 : Uart_SendByte(uchar Byte)
  30. * 功能 : 串口发送1字节数据
  31. * 输入 : 无
  32. * 输出 : 无
  33. ***********************************************************************/
  34. void Uart_SendByte(uchar Byte)
  35. {
  36.         SBUF =        Byte;
  37.         while(!TI)                   //如果发送完毕,硬件会置位TI
  38.         {
  39.                 _nop_();       
  40.         }
  41.         TI = 0;       
  42. }
  43. /********************************************************************
  44. * 名称 : Main()
  45. * 功能 : 主函数
  46. * 输入 : 无
  47. * 输出 : 无
  48. ***********************************************************************/
  49. void main()
  50. {
  51.         uchar i;
  52.         Uart_Init();
  53.         while(1)
  54.         {
  55.                 if(R_flag==1)
  56.                 {
  57.                         switch(R_data)
  58.                         {
  59.                                 case 1:{for(i=0;i<2;i++) Uart_SendByte(page_up[i]);break;}
  60.                                 case 2:{for(i=0;i<2;i++) Uart_SendByte(page_down[i]);break;}
  61.                                 case 3:{for(i=0;i<2;i++) Uart_SendByte(f5[i]);break;}
  62.                                 case 4:{for(i=0;i<2;i++) Uart_SendByte(esc[i]);break;}
  63.                         }
  64.                         //P1 =  R_data;
  65.                         //Uart_SendByte(R_data);
  66.                         R_flag=0;
  67.                 }       
  68.         }               
  69. }
  70. /********************************************************************
  71. * 名称 : Uart_Int()
  72. * 功能 : 串口中断子函数
  73. * 输入 : 无
  74. * 输出 : 无
  75. ***********************************************************************/
  76. void Uart_Int(void) interrupt 4
  77. {
  78. //        static uchar i = 7;    //定义为静态变量,当重新进入这个子函数时 i 的值不会发生改变
  79.         EA = 0;
  80.         if(RI == 1)   //当硬件接收到一个数据时,RI会置位
  81.         {
  82.                 R_data= SBUF; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
  83.                 RI = 0;  
  84.                 R_flag=1;
  85.         }
  86.         EA = 1;
  87. }
复制代码

所有资料51hei提供下载:
PPT翻页笔.rar (854.49 KB, 下载次数: 56)




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:252657 发表于 2018-10-24 15:29 | 只看该作者
就这些吗,都没用到
回复

使用道具 举报

板凳
ID:624752 发表于 2019-10-15 22:26 | 只看该作者
可以可以
回复

使用道具 举报

地板
ID:624752 发表于 2019-10-15 22:27 | 只看该作者
您好,楼主,可以请你做一款翻页笔吗?
回复

使用道具 举报

5#
ID:720798 发表于 2020-4-2 10:57 | 只看该作者
您好,有Proteus的仿真图嘛?
回复

使用道具 举报

6#
ID:748894 发表于 2020-5-11 10:31 来自手机 | 只看该作者
1095798460 发表于 2020-4-2 10:57
您好,有Proteus的仿真图嘛?

你用的什么单片机?
回复

使用道具 举报

7#
ID:1018233 发表于 2022-4-30 22:32 | 只看该作者
有原理图吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表