在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > LPC1114 紅外遙控解碼程序(RC5 )

            LPC1114 紅外遙控解碼程序(RC5 )

            作者: 時間:2016-11-11 來源:網(wǎng)絡 收藏
            1. /********************************************************************
            2. ;
            3. ;modified LPC1114 sample code
            4. ;
            5. ; RC5 format:
            6. ; | S | F | C | 5 sytem bits | 6 command bits |
            7. ; | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
            8. ;
            9. ; -----+ +-+ +-+ +-+ +-+ +-+ +---+ +-+ +---+ +-+ +-+ +-+ +----
            10. ; | | | | | | | | | | | | | | | | | | | | | | | |
            11. ; +-+ +---+ +-+ +-+ +-+ +-+ +-+ +---+ +-+ +-+ +-+ +-+
            12. ;
            13. ********************************************************************/
            14. #include "LPC11xx.h" /* LPC11xx Peripheral Registers */
            15. #define RC5_INPUT_PIN (1<< 0x01)
            16. #define MIN_HALF_BIT 640 // 640 us
            17. #define HALF_BIT_TIME 889 // 889 us
            18. #define MAX_HALF_BIT 1140 // 1140 us
            19. #define MIN_FULL_BIT 1340 // 1340 us
            20. #define FULL_BIT_TIME 1778 // 1778 us
            21. #define MAX_FULL_BIT 2220 // 2220 us
            22. unsigned char RC5_System; // Format 1 E/N ts4 s3 s3 s1 s0
            23. unsigned char RC5_Command; // Format 00c5 c4 c3 c2 c1 c0
            24. unsigned char RC5_flag;
            25. static signed int low_time;
            26. static signed int high_time;
            27. static unsigned char half_bit;
            28. static unsigned char sys; // system byte
            29. static unsigned char cmd; // Command byte
            30. void RC5_Init(void)
            31. {
            32. //GPIO setup
            33. //assign input for IR sensor
            34. LPC_GPIO0->DIR &= ~(RC5_INPUT_PIN);
            35. LPC_IOCON->PIO0_1 |= (1<<5); //turn on hysteresis
            36. LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6);//enable GPIO clock
            37. NVIC_EnableIRQ(EINT0_IRQn);
            38. //timer16 0 setup
            39. LPC_SYSCON->SYSAHBCLKCTRL |= (1<<7);
            40. LPC_TMR16B0->PR= 48; // prescaler 48, timer runs at 48 MHz / 48 = 1 MHz
            41. LPC_TMR16B0->MR0 = 12000; //load match register 0
            42. LPC_TMR16B0->MCR = 3; // Interrupt and Reset on MR0
            43. NVIC_EnableIRQ(TIMER_16_0_IRQn);
            44. LPC_GPIO0->IS &= ~(0x1<<0x01);//interrupt sense - 0 = edge sensitive
            45. LPC_GPIO0->IBE |= 0x1<<0x01; //interrupt both edges - 1 = both edges
            46. LPC_GPIO0->IE |= ( 0x1 << 0x01); //interrupt enable
            47. LPC_TMR16B0->TCR = 1; //Start timer
            48. }
            49. static void RC5_Shift_Bit(char val)
            50. {
            51. if (sys & 0x80)
            52. {
            53. if (cmd & 0x80) // command full ?
            54. {
            55. sys = 0; // yes, ERROR
            56. cmd = 0;
            57. }
            58. else
            59. cmd = (cmd << 1) | val; // shift command
            60. }
            61. else
            62. sys = (sys << 1) | val; // shift system
            63. }
            64. /************************************************************************
            65. ; RC5_Decode (we only take action at a rising edge)
            66. ;
            67. ; Half(prev) Bit Low Time High Time Action New Half Bit
            68. ; -------------------------------------------------------------------
            69. ; 0 0 0 Shift 0 0
            70. ; 0 0 1 Shift 1 1
            71. ; 0 1 0 -ERROR- *
            72. ; 0 1 1 Shift 1,0 0
            73. ; 1 0 0 Shift 1 1
            74. ; 1 0 1 -ERROR- *
            75. ; 1 1 0 Shift 1,0 0
            76. ; 1 1 1 -ERROR- *
            77. ;
            78. ***********************************************************************/
            79. static void RC5_Decode(void)
            80. {
            81. unsigned char action;
            82. action = half_bit << 2;
            83. // Check High Time
            84. if ((high_time > MIN_FULL_BIT) && (high_time < MAX_FULL_BIT))
            85. action = action | 1; // high_time = long
            86. else if (!((high_time > MIN_HALF_BIT) && (high_time < MAX_HALF_BIT)))
            87. {
            88. sys = 0; // RC5 ERROR
            89. cmd = 0;
            90. return;
            91. }
            92. // Check Low Time
            93. if ((low_time > MIN_FULL_BIT) && (low_time < MAX_FULL_BIT))
            94. action = action | 2; // low_time = long
            95. else if (!((low_time > MIN_HALF_BIT) && (low_time < MAX_HALF_BIT)))
            96. {
            97. sys = 0; // RC5 ERROR
            98. cmd = 0;
            99. return;
            100. }
            101. switch (action)
            102. {
            103. case 0:RC5_Shift_Bit(0); // short low, short high, shift 0
            104. break;
            105. case 1:RC5_Shift_Bit(1); // short low, long high, shift 1
            106. half_bit = 1; // new half bit is true
            107. break;
            108. case 2:sys = 0; // long low, short high, ERROR
            109. cmd = 0;
            110. case 3:RC5_Shift_Bit(1); // long low, long high, shift 1,0
            111. RC5_Shift_Bit(0);
            112. break;
            113. case 4:RC5_Shift_Bit(1); // short low, short high, shift 1
            114. break;
            115. case 5:sys = 0; // short low, long high, ERROR
            116. cmd = 0;
            117. break;
            118. case 6:RC5_Shift_Bit(1); // long low, short high, shift 1,0
            119. RC5_Shift_Bit(0);
            120. half_bit = 0; // new half bit is false
            121. break;
            122. case 7:sys = 0; // long low, long high, ERROR
            123. cmd = 0;
            124. default: break; // invalid
            125. }
            126. }
            127. void PIOINT0_IRQHandler(void)
            128. {
            129. uint32_t regVal;
            130. LPC_TMR16B0->TCR = 0; //disable timer
            131. regVal =LPC_GPIO0->MIS & (0x1<<0x01);//get interrupt status
            132. if ( regVal )
            133. {
            134. if( (LPC_GPIO0->DATA & RC5_INPUT_PIN) == RC5_INPUT_PIN) // check rising or falling edge
            135. {
            136. if (sys == 0) // First pulse ?
            137. {
            138. low_time= HALF_BIT_TIME; // assume short low time
            139. high_time = HALF_BIT_TIME; // assume short high time
            140. half_bit= 1; // assume half bit is true
            141. cmd = 0x02; // = 00000010, prepare command byte
            142. }
            143. else
            144. low_time = LPC_TMR16B0->TC; // rising, so capture low time
            145. RC5_Decode();
            146. }
            147. else
            148. high_time = LPC_TMR16B0->TC; // falling, so capture high time
            149. }
            150. LPC_TMR16B0->TCR = 1; //enable timer
            151. LPC_TMR16B0->TCR = 2; //reset timer
            152. LPC_GPIO0->IC |= ( 0x1 << 0x01);//clear interrupt
            153. LPC_TMR16B0->TCR = 1; //enable timer
            154. }
            155. void TIMER16_0_IRQHandler(void)
            156. {
            157. if ( LPC_TMR16B0->IR & 0x1 )
            158. {
            159. //timeout has occured.
            160. if (cmd & 0x80) // command full ?
            161. {
            162. RC5_Command = cmd & 0x7F; // OK ! Save command byte
            163. RC5_System = sys; // save system byte
            164. RC5_flag = 1; // set event to application
            165. }
            166. sys = 0;
            167. cmd = 0;
            168. }
            169. LPC_TMR16B0->IR = 1; // clear interrupt flag
            170. }


            關(guān)鍵詞: LPC1114紅外遙控解碼程

            評論


            技術(shù)專區(qū)

            關(guān)閉