8024|18

1万

帖子

16

TA的资源

版主

楼主
 

CH554评测:七,改下复合设备例程问题解决 [复制链接]

 
本帖最后由 ddllxxrr 于 2017-11-21 17:42 编辑

这周我改了下,USB的复合设备,就是键盘同鼠标复合设备那个,原理很简单,我用P1.6和P1.7两个管脚当键盘,当P1.6为低时鼠标向
上,当P1.7低时鼠标向下。
在主函数里声明管脚

          Port1Cfg(1,6);
          Port1Cfg(1,7);


然后始终在执行

        
  1. if(Ready)
  2.         {
  3.           while(1)
  4.                              {                        
  5.                                         HIDValueHandle();
  6.                                         }        
  7.         }
复制代码


而在HIDValueHandle中,是这样:

  1. oid HIDValueHandle()
  2. {
  3.     UINT8 i;
  4.         if(P1^6 == 0)
  5.         {

  6.                                          i = 1;
  7.                                 }
  8.                else if(P1^7 == 0)
  9.                                 {

  10.                                         i = 2;
  11.                                        
  12.                                 }
  13.         else
  14.           i = 0;                                       
  15.                switch(i)
  16.         {
  17. //êó±êêy¾YéÏ′«ê¾ày
  18.         case 1:                                                        //×ó¼ü
  19.             HIDMouse[2] = -1;
  20.             Enp2IntIn();
  21.                                     i=0;

  22.             break;
  23.         case 2:                                                        //óò¼ü
  24.             HIDMouse[2] = 1;
  25.             Enp2IntIn();
  26.                                     i=0;

  27.             break;
  28. //¼üÅìêy¾YéÏ′«ê¾ày
  29.         case 'A':                                                         //A¼ü
  30.             FLAG = 0;
  31.             HIDKey[2] = 0x04;                                             //°′¼ü¿aê¼
  32.             Enp1IntIn();
  33.             HIDKey[2] = 0;                                                //°′¼ü½áêø
  34.             while(FLAG == 0)
  35.             {
  36.                 ;    /*μè′yéÏò»°ü′«êäíê3é*/
  37.             }
  38.             Enp1IntIn();
  39.             break;
  40.         case 'P':                                                         //P¼ü
  41.             FLAG = 0;
  42.             HIDKey[2] = 0x59;
  43.             Enp1IntIn();
  44.             HIDKey[2] = 0;                                                //°′¼ü½áêø
  45.             while(FLAG == 0)
  46.             {
  47.                 ;    /*μè′yéÏò»°ü′«êäíê3é*/
  48.             }
  49.             Enp1IntIn();
  50.             break;
  51.         case 'Q':                                                         //Num Lock¼ü
  52.             FLAG = 0;
  53.             HIDKey[2] = 0x53;
  54.             Enp1IntIn();
  55.             HIDKey[2] = 0;                                                //°′¼ü½áêø
  56.             while(FLAG == 0)
  57.             {
  58.                 ;    /*μè′yéÏò»°ü′«êäíê3é*/
  59.             }
  60.             Enp1IntIn();
  61.             break;
  62.         default:                                                          //ÆäËû
  63.             UEP1_CTRL = UEP1_CTRL & ~ MASK_UEP_T_RES | UEP_T_RES_NAK;     //ĬèÏó|′eNAK
  64.             UEP2_CTRL = UEP2_CTRL & ~ MASK_UEP_T_RES | UEP_T_RES_NAK;     //ĬèÏó|′eNAK
  65.             break;
  66.         }
  67. }
复制代码


我编译完后,可以看到鼠标自动向上移动,说明可以以每次每格的速度移动鼠标,但是我的问题是
我没有给管脚拉低,它确自动向上移动,我用万用表量了,确实是5V电压,但我用杜绑线拉低时也没有见它下来。

请问大家这是为什么?????

奇怪的是,我单独试按键程序如下:
  1. void main( )
  2. {
  3.     UINT16 j = 0;
  4.     CfgFsys( );                                                                //CH554ê±ÖóÑ¡ÔñÅäÖà  
  5.     mDelaymS(20);
  6.     mInitSTDIO( );                                                             //′®¿ú03õê¼»ˉ
  7.     printf("start ...\n");
  8.           Port1Cfg(1,6);                                                             //P14éèÖÃ3éàà51Ë«Ïòģ꽠        

  9.     if(TIN4 == 0)
  10.                 {
  11.                     printf("press\n");
  12.     }
  13. }
复制代码


而我用串口监视,确又是好的,即可以输出"PRESS",而我不接地时输出“Start。。。”


上传个视频:一插上就向上,但我还没有连接任何的导线。http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1



上述问题解决了
首先谢谢回贴个位:我把程序改为
  1. if(MISO == 0)
  2.         {

  3.                                          i = 1;
  4.                                 }
  5.                else if(SCK == 0)
  6.                                 {

  7.                                         i = 2;
  8.                                        
  9.                                 }
  10.         else
  11.           i = 0;                                       
复制代码

就好了,上下可以随便动了。

此内容由EEWORLD论坛网友ddllxxrr原创,如需转载或用于商业用途需征得作者同意并注明出处







此帖出自单片机论坛

最新回复

真是难得给力的帖子啊   详情 回复 发表于 2018-12-23 19:06
点赞 关注(1)
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 

回复
举报

63

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
        if(P1^6 == 0)这种IO访问居然编译没报错,如果是真的建议你重装keil.
此帖出自单片机论坛

点评

确实没报错,嘿嘿  详情 回复 发表于 2017-11-21 12:20
 
 

回复

63

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
正常访问你需要重定义或者调用已声明的IO才可以,比如P17 ,CH554.H定义的是SCK,或者你sbit SCK1 =P1^7;
此帖出自单片机论坛

点评

按你的方法解决了,唉,话说也是老司机了,今天在这儿载了一下。丢人啊  详情 回复 发表于 2017-11-21 17:38
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(中级)

4
 
然后访问的时候,应该是if(SCK == 0)或者if(SCK1 == 0)这种方法。
另外你的第二个使用,明显就是芯片程序跑飞了,程序最后要加返回,这个你可能也不是特别了解,你随便找个网上的汇编看看,最后都要加个 END,while(1)作用跟它差不多。
所以要么你程序最后加while(1);要么你最后写个while(1)把TIN判断包含进去。
此帖出自单片机论坛

点评

是,我的第二个只是测一下,管脚到底好用不好用,所以没想那么多,确实应加while  详情 回复 发表于 2017-11-21 12:19
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(中级)

5
 
看了你的帖子,我觉得吧,应该叫交流贴,是你自己的问题,名字起的好像芯片有BUG一样,不太合适。
因为芯片本身没有任何问题,性价比,外设,USB资源很丰富,而且内置晶振,你程序的问题,其实我觉得仔细看看都不是问题。
此帖出自单片机论坛

点评

奥,是这样我说了评测发八篇的,但碰到问题也得发,否则你的篇数不够,关系到信誉问题,至于芯片是好芯片,群众的眼睛是雪亮地。也不是我一个人说的算地。等到问题解决了,我好好夸夸芯片哈  详情 回复 发表于 2017-11-21 12:24
 
 
 

回复

1万

帖子

16

TA的资源

版主

6
 
SuiBianLiuLiu 发表于 2017-11-21 09:34
然后访问的时候,应该是if(SCK == 0)或者if(SCK1 == 0)这种方法。
另外你的第二个使用,明显就是芯片程序 ...

是,我的第二个只是测一下,管脚到底好用不好用,所以没想那么多,确实应加while
此帖出自单片机论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1万

帖子

16

TA的资源

版主

7
 
SuiBianLiuLiu 发表于 2017-11-21 09:26
        if(P1^6 == 0)这种IO访问居然编译没报错,如果是真的建 ...

确实没报错,嘿嘿
此帖出自单片机论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1万

帖子

16

TA的资源

版主

8
 
SuiBianLiuLiu 发表于 2017-11-21 09:40
看了你的帖子,我觉得吧,应该叫交流贴,是你自己的问题,名字起的好像芯片有BUG一样,不太合适。
因为芯 ...

奥,是这样我说了评测发八篇的,但碰到问题也得发,否则你的篇数不够,关系到信誉问题,至于芯片是好芯片,群众的眼睛是雪亮地。也不是我一个人说的算地。等到问题解决了,我好好夸夸芯片哈
此帖出自单片机论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1305

帖子

0

TA的资源

纯净的硅(高级)

9
 
我也在评测USB HOST!  沁恒的CH554确实牛!这个价位的MCU支持USB HOST。


我是把PC键盘接入CH554,昨天实验没问题,今天准备写帖子时结果发现不正常了。后面我也是准备弄复合设备。要向你好好学习啊。
此帖出自单片机论坛

点评

太客气了,我还没想到接入真的键盘,你已经比我想得远多了  详情 回复 发表于 2017-11-21 13:48
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(中级)

10
 
操作键盘不正常了吗?截图发出来看看呢?
此帖出自单片机论坛

点评

昨天测试正常,通过串口转发收到的USB数据。是HID协议。(有个小插曲,开始设成9600波特率,结果收到的数据自己总觉得有问题,后来尝试改为115200波特率,就恍然大悟,明显是HID鼠标键盘协议吗!) 今天再测就发  详情 回复 发表于 2017-11-21 14:27
 
 
 

回复

1万

帖子

16

TA的资源

版主

11
 
yang_alex 发表于 2017-11-21 13:13
我也在评测USB HOST!  沁恒的CH554确实牛!这个价位的MCU支持USB HOST。


我是把PC键盘接入CH554,昨 ...

太客气了,我还没想到接入真的键盘,你已经比我想得远多了
此帖出自单片机论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1305

帖子

0

TA的资源

纯净的硅(高级)

12
 
SuiBianLiuLiu 发表于 2017-11-21 13:28
操作键盘不正常了吗?截图发出来看看呢?

昨天测试正常,通过串口转发收到的USB数据。是HID协议。(有个小插曲,开始设成9600波特率,结果收到的数据自己总觉得有问题,后来尝试改为115200波特率,就恍然大悟,明显是HID鼠标键盘协议吗!)

今天再测就发现串口驱动不正常,串口收不到数据。有可能跟我昨晚做的其他实验有关。正在找原因。
此帖出自单片机论坛
 
 
 

回复

1万

帖子

16

TA的资源

版主

13
 
SuiBianLiuLiu 发表于 2017-11-21 09:28
正常访问你需要重定义或者调用已声明的IO才可以,比如P17 ,CH554.H定义的是SCK,或者你sbit SCK1 =P1^7;

按你的方法解决了,唉,话说也是老司机了,今天在这儿载了一下。丢人啊
此帖出自单片机论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

63

帖子

0

TA的资源

一粒金砂(中级)

14
 
程序默认的波特率是57600吧。
此帖出自单片机论坛

点评

对,默认波特率是57600. 我现在正是满头雾水了。现在插上PC键盘就是没反应。先插PC键盘再上电,或者反过来,上电后,插上PC键盘。两种情况串口都收不到信息。  详情 回复 发表于 2017-11-22 11:55
YES  详情 回复 发表于 2017-11-22 09:02
 
 
 

回复

1万

帖子

16

TA的资源

版主

15
 
SuiBianLiuLiu 发表于 2017-11-21 19:08
程序默认的波特率是57600吧。

YES
此帖出自单片机论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1305

帖子

0

TA的资源

纯净的硅(高级)

16
 
SuiBianLiuLiu 发表于 2017-11-21 19:08
程序默认的波特率是57600吧。

对,默认波特率是57600.  我现在正是满头雾水了。现在插上PC键盘就是没反应。先插PC键盘再上电,或者反过来,上电后,插上PC键盘。两种情况串口都收不到信息。
此帖出自单片机论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(中级)

17
 
你看看你的串口能不能正常输出,T和R短接一下,试试自发自收,没问题的话。
看看程序里面是不是屏蔽了打印,我记得DEBUG.H里面可以关闭打印调试的,有个 PRINTF的宏定义。
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

18
 
楼主,能分享一下您的这个程序给我参考一下吗?程序里面的HIDMouse[2]和HIDKey是您自己定义的嘛?我是一个小菜鸟来的
此帖出自单片机论坛
 
 
 

回复

869

帖子

0

TA的资源

禁止发言

19
 
真是难得给力的帖子啊
此帖出自单片机论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表