LOCAL INFORMATION
单片机红外线接收算法
| unavailable_source_assets | Array |
|---|
单片机红外线接收算法
红外线遥控目前在市面上用得比较的广泛,如遥控电视,遥控灯具,遥控玩具等等。
这里主要介绍一下红外遥控接收代码的编写,先看红外接收代码:
1 void user_gpio_init(void) 2 { 3 /*!< Output push-pull, low level, 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 /*!< Input pull-up, external interrupt */ 7 GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_IN_PU_IT); //Data 8 /*@brief Set the external interrupt sensitivity of the selected port.*/ 9 /*!< Interrupt on Falling edge only */ 10 EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY); 11 } 12 //interrupt routine 13 void portC_isr(void) 14 { 15 static u8 one_byte; 16 static u8 index; 17 static u8 bits_of_byte; 18 switch(IR_State) 19 { 20 case IDL: 21 { 22 time_125us=0; 23 IR_State++; 24 break; 25 } 26 case START: 27 { 28 if(time_125us>104)//ok , ready to receive data 29 { 30 time_125us=0; 31 one_byte = 0; 32 index=0; 33 bits_of_byte = 0; 34 IR_State++; 35 } 36 else IR_State--; 37 break; 38 } 39 case DATA: 40 { 41 if((time_125us<14)&&(time_125us>6))//0 42 { 43 one_byte <<=1; 44 bits_of_byte++; 45 } 46 else if((time_125us>14)&&(time_125us<23))//1 47 { 48 one_byte<<=1; 49 one_byte+=1; 50 bits_of_byte++; 51 } 52 else 53 { 54 IR_State = IDL; 55 } 56 time_125us=0; 57 if(bits_of_byte >= 8) // got one byte ready 58 { 59 g_u8arr_buf[index++]=one_byte; 60 time_release_125us=0; 61 if(index>=4) 62 { 63 //__disable_interrupt(); 64 if ((g_u8arr_buf[3]==0x13)&&(g_u8arr_buf[2]==0xEC)&&(g_u8arr_buf[1]==0xff)&&g_u8arr_buf[0]==0x00)//0x00FFEC13 65 { 66 if(g_motor_busy!=0x00) 67 { 68 MotorStop; 69 g_motor_busy=0; 70 } 71 } 72 else if ((g_u8arr_buf[3]==0x53)&&(g_u8arr_buf[2]==0xAC)&&(g_u8arr_buf[1]==0xff)&&g_u8arr_buf[0]==0x00)//0x00FFAC53 73 { 74 //time_release_125us=0; 75 if(g_motor_busy!=0x5a) 76 { 77 MotorForward; 78 g_motor_busy=0x5a; 79 } 80 } 81 else if ((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 if(g_motor_busy!=0x3c) 85 { 86 MotorBackward; 87 g_motor_busy=0x3c; 88 } 89 } 90 else 91 { 92 if(g_motor_busy!=0x00) 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 break; 105 } 106 default: 107 { 108 IR_State = IDL; 109 break; 110 } 111 } 112 }
红外编码常用格式为:报头为13.5ms信号,之后才开始传送数据。数据的编码:1ms左右代表0或者1, 2ms左右代表1或者0。这个主要看自己的定义了。
这个算法的重点是调好定时器的精度,以及红外线连续读取的灵敏度。
发布人:钟飞驰
平台审核不替代对信息真实性、权属及服务能力的核实。交易前请核对主体与合同条款,有疑问可向平台反馈。
MORE INFORMATION
同类信息
树莓派驱动28BYJ-48步进电机
2026-09-06 发布人:廖志行 联系电话: 树莓派驱动28BYJ-48步进电机 伺服电机(Servo Motor): 伺服电机确实是一个包含电机(直流、交流等)、传感器(如霍尔编码器或光电编码器)和控制器(如单片机)的系统。由于有传感器反馈(闭环系统),它可以精确知道电机转了多少圈,目前到什么角度,即使关机重启也能知道当前角度。 伺服电机通过编码器
根据光线强弱,自动开关窗帘
2026-09-07 发布人:冯子真 联系电话: 根据光线强弱,自动开关窗帘 情境: 希望能根据光线强弱,自动开关窗帘,例如天亮了,在一定亮度下,把窗帘打开,方便我们的生活 材料: 1、microbit控制板 2、robotbit扩展板 3、光线传感器 4、28BYJ-48 步进电机或舵机 6、连线 原理: 步进电机是将电脉冲信号转变为角位移,可以精确的控制
基于单片机智能窗帘控制系统设计
2026-09-19 发布人:史玉成 联系电话: 基于单片机智能窗帘控制系统设计 功能: 通过光敏电阻检测当前光强,通过按键设置光强范围来自动控制窗帘开关,同时可以通过按键手动控制窗帘开关,包含的电路有显示电路、按键电路、窗帘电机控制电路、传感器电路、单片机电路等。 ?123456789101112131415161718192021222324252627
树莓派操作案例1-使用python GPIO+TB6612驱动步进电机
2026-09-24 发布人:熊翰翮 联系电话: 树莓派操作案例1-使用python GPIO+TB6612驱动步进电机 原理图: 接口说明 A控制信号输入------PWMA VM ------电机驱动电压输入端(4.5V-15V) A电机输入端2 ------AIN2 VCC ------逻辑电平输入端(2.7V-5.5V) A电机输入端1 ------