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

2020-02-01 16:38发布

本帖最后由 downtoearth 于 2012-11-25 19:00 编辑

IR_Driver.jpg (24.34 KB, 下载次数: 0) 下载附件 2012-11-25 16:57 上传
想做一个鼠标呼吸灯,请教大家鼠标待机时的检测方法?
就是鼠标待机,呼吸灯开始工作,鼠标工作呼吸灯就关闭。
用的是STC15F104E,我把一个IO设成高阻连到三极管基极,
但好像检测不到电平变化。鼠标待机是红外LED是快闪的,没有
示波器,程序就当它按键这样处理,程序在测试是连到高低电平,
是受控的,现在请教大家为什么检测不到电平变化,或者有什么更
好的办法!程序如下:
  1. ********************************************************************/
  2. #include <stdlib.h>
  3. #include "..My_Header_FilesMacroAndConst.H"
  4. #include "..STC_Header_FilesSTC15.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. /*******************************************************************/
复制代码为什贴出的代码会这样乱,无语!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。