搜索
bottom↓
回复: 8

想做一个鼠标呼吸灯,请教大家鼠标待机时的检测方法?

[复制链接]

出0入0汤圆

发表于 2012-11-25 17:10:20 | 显示全部楼层 |阅读模式
本帖最后由 downtoearth 于 2012-11-25 19:00 编辑


想做一个鼠标呼吸灯,请教大家鼠标待机时的检测方法?
就是鼠标待机,呼吸灯开始工作,鼠标工作呼吸灯就关闭。
用的是STC15F104E,我把一个IO设成高阻连到三极管基极,
但好像检测不到电平变化。鼠标待机是红外LED是快闪的,没有
示波器,程序就当它按键这样处理,程序在测试是连到高低电平,
是受控的,现在请教大家为什么检测不到电平变化,或者有什么更
好的办法!程序如下:
  1. ********************************************************************/
  2. #include <stdlib.h>
  3. #include "..\My_Header_Files\MacroAndConst.H"
  4. #include "..\STC_Header_Files\STC15.H"
  5. /*******************************************************************/
  6. #define ON  1
  7. #define OFF 0

  8. #define RED    0
  9. #define GREEN  1
  10. #define BLUE   2
  11. #define YELLOW 3
  12. #define PURPLE 4
  13. #define CYAN   5
  14. #define WHITE  6
  15. /*******************************************************************/
  16. sbit Mouse_Standby = P3^4 ;
  17. sbit Red_Led   = P3^3 ;
  18. sbit Green_Led = P3^1 ;
  19. sbit Blue_Led  = P3^0 ;

  20. bit Timer0_200UsFlag ;
  21. bit Breathe_Flag  ;
  22. uchar MouseWork_Time    ;
  23. /*******************************************************************/
  24. void Timer0_Init (void)
  25. {
  26. AUXR &= 0x7f ;
  27. TMOD &= 0xf0 ;
  28. TMOD |= 0x01 ;
  29. TH0   = (65535-200) / 256 ;
  30. TL0   = (65535-200) % 256 ;
  31. ET0   = 1 ;
  32. TR0   = 1 ;
  33. EA    = 1 ;
  34. }
  35. /*******************************************************************/
  36. void Timer0_Isr (void) interrupt 1 using 0
  37. {
  38. TH0   = (65535-200) / 256 ;
  39. TL0   = (65535-200) % 256 ;
  40. Timer0_200UsFlag = 1 ;       
  41. }
  42. /*******************************************************************/
  43. void Breathe_Control (void)
  44. {
  45. static uchar All_PWM ;
  46. static uchar PWM_Count ;
  47. static uchar Time_Count ;
  48. static uchar Led_Colour ;
  49. static bit   Direction = 1 ;
  50. if ( ++Time_Count == 100 )
  51.     {
  52.      Time_Count = 0 ;
  53.      if ( Direction )
  54.                             {
  55.                                                                  if ( ++All_PWM == 99 ) Direction = 0 ;
  56.                                                                 }
  57.                      else   {
  58.                  if ( --All_PWM == 0 )  
  59.                                                                     {
  60.                                                                                  Direction  = 1 ;
  61.                      if ( MouseWork_Time >= 60 )
  62.                                                                                                 {
  63.                                                                                                  MouseWork_Time = 0 ;
  64.                                                                                                  Breathe_Flag   = 0 ;
  65.                                                                                                 }
  66.                      Led_Colour = rand() % 7 ;
  67.                     }
  68.                 }   
  69.                  PWM_Count  = All_PWM ;                        
  70.     }         
  71. if ( PWM_Count > 0 )
  72.            {
  73.                                                 switch ( Led_Colour )
  74.                                                        {
  75.                                                         case RED    : Red_Led   = ON ;   Green_Led = Blue_Led = OFF ; break ;
  76.                                                         case GREEN  : Green_Led = ON ;   Red_Led   = Blue_Led = OFF ; break ;
  77.                                                                                 case BLUE   : Blue_Led  = ON ;   Green_Led = Red_Led  = OFF ; break ;
  78.                                                                                 case YELLOW : Red_Led = Green_Led = ON ; Blue_Led     = OFF ; break ;
  79.                                                                                 case PURPLE : Red_Led = Blue_Led  = ON ; Green_Led    = OFF ; break ;
  80.                                                                                 case CYAN   : Green_Led = Blue_Led= ON ; Red_Led      = OFF ; break ;
  81.                                                                                 case WHITE  : Red_Led = Green_Led = Blue_Led = ON ;           break ;
  82.                                                                                 default : break ;
  83.                    }
  84.                   PWM_Count-- ;
  85.            }
  86.                          else Red_Led = Green_Led = Blue_Led = OFF ;
  87. }
  88. /*******************************************************************/
  89. void main (void)
  90. {
  91. uchar Time50Ms_Count ;
  92. Timer0_Init();
  93. P3 = 0x10 ;
  94. P3M1 = 0x10 ;
  95. P3M0 = 0x0b ;
  96. srand(0xffff) ;
  97. while (1)
  98.       {
  99.        if ( Timer0_200UsFlag )
  100.                             {
  101.            Timer0_200UsFlag = 0 ;
  102.                                          if ( ++Time50Ms_Count == 250 )
  103.                                             {
  104.                                              Time50Ms_Count = 0 ;
  105.                                                          if ( Mouse_Standby == 0 )
  106.                                                                         {
  107.                                                                          Breathe_Flag   = 1 ;
  108.                                                                          MouseWork_Time = 0 ;
  109.                                                                         }
  110.                                                                  else {
  111.                                                                              if ( Breathe_Flag ) MouseWork_Time++ ;
  112.                                                                       }
  113.               }
  114.                                          if ( Breathe_Flag ) Breathe_Control() ;
  115.           }
  116.       }
  117. }
  118. /*******************************************************************/
复制代码
为什贴出的代码会这样乱,无语!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-11-25 21:15:54 | 显示全部楼层
本帖最后由 lcw_swust 于 2012-11-26 10:07 编辑

三极管基极到发射级是一个二极管,电压最高0.7V左右,单片机IO口要在2V左右才认为是高电平
最好是检测集电极(注意加上拉电阻)(不好意思,先前说成发射极了)

出0入0汤圆

发表于 2012-11-25 21:34:09 | 显示全部楼层
一个馊主意,如果是光电鼠标,待机的时候下面的发光二级管亮度会降低(目测是扫描频率降低了。。。。算么。。。(但是这样有个bug很多鼠标如果离开桌面下面的二极管亮度也会降低。。。

出0入0汤圆

发表于 2012-11-25 22:57:35 | 显示全部楼层
检测接收光线的元件的电压——应该要加运放

出0入0汤圆

 楼主| 发表于 2012-11-26 02:27:51 | 显示全部楼层
本帖最后由 downtoearth 于 2012-11-26 13:37 编辑

想到个办法不知可不可以,加个相同的NPN三极管再连单片机IO,大家比点意见。

出0入0汤圆

发表于 2012-11-30 22:13:24 | 显示全部楼层
鼠标上跟本没必要加这灯。只听说过笔记本键盘上有这个玩意

出0入0汤圆

发表于 2012-11-30 23:39:10 | 显示全部楼层
mark                  

出0入55汤圆

发表于 2012-12-1 00:02:39 来自手机 | 显示全部楼层
为什么不直接接鼠标LED检测?根本不用什么代码

出0入0汤圆

 楼主| 发表于 2012-12-1 02:20:41 | 显示全部楼层
本帖最后由 downtoearth 于 2012-12-1 02:26 编辑
jssd 发表于 2012-12-1 00:02
为什么不直接接鼠标LED检测?根本不用什么代码


大哥你看电路,如果接到红外LED那,就只会检测高电平1,三极管导通和截止都是高电平!我都不知我说得对不对,模电差!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 20:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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