現在、市場での赤外線リモコンは、このようなようにテレビのリモコン、リモコン照明、リモートコントロールのおもちゃとして、より広く使用しました。
ここでは主に書かれた赤外線リモコン受信機、コードの赤外線受信機を見てコードを紹介:
1 空隙 user_gpio_init(ボイド) 2 { 3 / * <出力プッシュプル、ローレベル、10MHzの!* / 4 GPIO_Init(GPIOC、GPIO_PIN_LNIB、GPIO_MODE_OUT_PP_LOW_SLOW)。// FI 0..3 5 GPIO_Init(GPIOC、GPIO_PIN_4、GPIO_MODE_OUT_PP_LOW_SLOW)。// BI 6 / * !<入力プルアップ、外部割込み* / 7 GPIO_Init(GPIOC、GPIO_PIN_7、GPIO_MODE_IN_PU_IT)。 // データ 8 / * 選択したポートの外部割り込み感度を設定し@brief。* / 9 / *!<割り込み立ち下がりエッジでのみ* / 10 EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC、EXTI_SENSITIVITY_FALL_ONLY)。 11 } 12 //は割り込みルーチン 13 空隙 portC_isr(ボイド) 14 { 15 静的U8のone_byteと、 16 静的U8指数; 17 静的U8のbits_of_byte。 18 スイッチ(IR_State) 19 { 20 ケースIDL: 21 { 22 time_125us = 0 。 23 IR_State ++ ; 24 ブレーク; 25 } 26 ケースSTART: 27 { 28が あれば(time_125us> 104)// OK、準備完了データを受信するための 29 { 30 time_125us = 0 。 31 one_byte = 0 。 32 インデックス= 0 。 33 bits_of_byte = 0 。 34 IR_State ++ ; 35 } 36 他IR_State-- ; 37 ブレーク; 38 } 39 ケースDATA: 40 { 41 であれば((time_125us < 14)&&(time_125us> 6))// 0 42 { 43 one_byte << = 1 。 44 bits_of_byte ++ ; 45 } 46 他の 場合((time_125us> 14)&&(time_125us < 23))// 1 47 { 48 one_byte << =1 ; 49 one_byte + = 1 ; 50 bits_of_byte ++ ; 51 } 52 他の 53 { 54 IR_State = IDL。 55 } 56 time_125us = 0 。 57 であれば(bits_of_byte> = 8) // 得1バイト準備 58 { 59 g_u8arr_buf [インデックス++] = one_byte。 60 time_release_125us = 0 。 61 もし(インデックス> = 4 ) 62 { 63 // __disable_interrupt()。 64 であれば((g_u8arr_buf [ 3 ] == 0x13に)&&(g_u8arr_buf [ 2 ] == 0xEC)&&(g_u8arr_buf [ 1 ] == 0xFFで)&& g_u8arr_buf [ 0 ] == 0x00の)// 0x00FFEC13 65 { 66 なら g_motor_busy(! = $ 00 ) 67 { 68 エンジン停止。 69 g_motor_busy = 0 。 70 } 71 } 72 他の 場合((g_u8arr_buf [ 3 ] == $ 53)&&(g_u8arr_buf [ 2 ] == 0xACの)&&(g_u8arr_buf [ 1 ] == 0xFFで)&& g_u8arr_buf [ 0 ] == 0x00の)// 0x00FFAC53 73 { 74 // time_release_125us = 0; 75 であれば(g_motor_busy =!0x5a ) 76 { 77 MotorForward。 78 g_motor_busy = 0x5a; 79 } 80 } 81 他の 場合((g_u8arr_buf [ 3 ] == 0x33の)&&(g_u8arr_buf [ 2 ] == 0xCC)&&(g_u8arr_buf [ 1 ] == 0xFFで)&& g_u8arr_buf [ 0 ] == 0x00の)// 0x00FFCC33 82 { 83 // time_release_125us = 0。 84 であれば(g_motor_busy =!0x3cの) 85 { 86 MotorBackward。 87 g_motor_busy =0x3cの; 88 } 89 } 90 他の 91 { 92 であれば(!g_motor_busy = $ 00 ) 93 { 94 MotorStop。 95 g_motor_busy = 0 。 96 } 97 } 98 IR_State = IDL。 99 // __enable_interrupt(); 100 } 101 bits_of_byte = 0 。 102 one_byte =0 ; 103 } 104 ブレーク。 105 } 106 デフォルト: 107 { 108 IR_State = IDL。 109 ブレーク。 110 } 111 } 112 }
共通の赤外線コードの形式は:ヘッダは、データ送信開始後13.5ms信号です。エンコードされたデータは、約1ミリ秒で約2msの1又は0を表し、0又は1を表します。これは、定義された自分自身を見ることが主な理由です。
アルゴリズムの焦点は、タイマーの精度、および赤外線連続読み出しの感度を調整されています。