GIẢI MÃ REMOTE HỒNG NGOẠI

*

giải thuật hồng ngoại, RF cũng có khá nhiều cách.Hôm ni mình giới thiệu cách sử dụng bộ input đầu vào Capture.Bộ remote sử dụnglà Remote của quạt Vinawind

Đo demo tín hiệu của bộ Remote vạc ra

*

từng nút nhấn có thể được biểu diễn bằng một số ít 12 bit

*
*

Code giải mã bằng phương pháp sử dụng input đầu vào CaptureDùng chân P12 để bắt biểu đạt vào

Mã nguồn tệp tin IR.h


Bạn đang xem: Giải mã remote hồng ngoại

#ifndef MY_IR_H_#define MY_IR_H_#define IR_OFF 0x027E#define IR_ON_SPEED 0x027D#define IR_MODE 0x027B#define IR_TIME 0x0277#define IR_SWING 0x026F#include "ms51.h"#include void IR_Init(void);uint8_t IR_Check(uint32_t *pu32Cmd);#endif

#include "myIR.h"#define IR_IN_VAL P12#define NUM_BIT 12#define MIN_LOW 100#define MAX_LOW 1600#define LOW_VAL 800#define MIN_HI 100#define MAX_HI 1600static void tim2_init(void);static void cap_init(void);#define STATE_IDLE 0#define STATE_RECEIVE 1#define STATE_CHECK_BIT_0 2#define STATE_CHECK_BIT_1 3#define STATE_DECODE_SUCC 4typedef void (*pfunc)(void);void idle_state(void);void receive_state(void);void check_bit_0_state(void);void check_bit_1_state(void);void decode_succ_state(void);static pfunc funcSet<> = idle_state,receive_state,check_bit_0_state,check_bit_1_state,decode_succ_state;static uint8_t u8State = STATE_IDLE;static uint8_t u8Count = 0;static uint32_t u32Result = 0;void idle_state(void)if (!IR_IN_VAL) u8Count = 0;u32Result = 0;u8State = STATE_RECEIVE;void receive_state(void){uint16_t u16Tmp;if (IR_IN_VAL) u16Tmp = C0H * 256 + C0L;if (u16Tmp MAX_LOW) u8State = STATE_IDLE;return;if (u16Tmp > LOW_VAL) u32Result MAX_HI) u8State = STATE_IDLE;return;if (u16Tmp MAX_HI) u8State = STATE_IDLE;return;if (u16Tmp > LOW_VAL) u8State = STATE_RECEIVE; else u8State = STATE_IDLE;void decode_succ_state(void)static void tim2_init(void){ /* pre-scalar = 1 / 16*/ T2MOD &= ~(0x70); T2MOD |= (0x20); /* auto reload mode */ CM_RL2 = 0;/* tự động clear */T2MOD |= (1

Xem thêm: Doraemon Movie 15: Nobita Và Ba Chàng Hiệp Sĩ Mộng Mơ Full Vietsub

Hàm delay sử dụng timer 0 như mã mối cung cấp ở bài viết này http://lisinoprilfast.com/ms51fb9ae-mot-so-ham-tao-delay.html

Mã nguồn file main.c


#include "ms51.h"#include #include "myIR.h"#include "delay.h"uint32_t u32Cmd;void main(void){ P1M1 &= ~(1
Mỗi lúc ấn nút Bật/Tốc độ thì led bên trên KIT VĐK 1.0 đang sáng.Mỗi khi ấn nút Tắt trên Remote thì led bên trên KIT VĐK 1.0 sẽ tắt.

Toàn bộ Project:https://drive.google.com/open?id=1UECUHGP9ED5-YT_zAsxtGeGQE_4cyLZl

Leave a Reply

Your email address will not be published. Required fields are marked *