- YS-IRTM模块
- 模块组成
- 模块通信
- 发射指令说明:
- 模块反馈
- 解码信息输出
- 51单片机测试代码
YS-IRTM模块
- 这个模块在某宝非常容易买到,内置刷好了固件的单片机,串口给指令就能直接发射NEC红外信号,用串口助手调试非常方便
- 红外发射头:用于发射红外信号, 波长为940nm 38k NEC编码信号的发射
- 红外接收头:用于接收 NEC 红外信号, 进而单片机进行分析解码操作
- 红外头扩展: 该接口为红外发射头的扩展, 可以连接多个红外发射头( 常称红外发射模块) , 用于安放到不同的位置实现多方位控制
- UART 单片机串口通信接口:该端口为单片机串口( TTL) , 作为与外界单片机的通信桥梁, 其默认设置的波特率为9600bps
| 地址 | 操作位 | 数据位1 | 数据位2 | 数据位3 |
|---|---|---|---|---|
| 0xA1(0xFA) | 0xF1或0xF2或0xF3 | 8bit | 8bit | 8bit |
- 地址:A1为默认地址( 可改); FA 为通用地址 ( 不可改)
- 操作位:该位的数据用于代表当前的工作状态:
- F1:红外发射状态。 例:发射 NEC 信号编码为 1C 2F 33 {A1,F1,1C,2F,33}
- F2:进入修改串口通信地址状态。 例:改串口通信地址为0xA5 {A1,F2,A5,00,00}
- F3 进入修改波特率状态。 例:改波特率为9600bps {A1,F3,02,00,00}
- 波特率对应序号:
- 01 4800bps
- 02 9600bps
- 03 19200bps
- 04 57600bp
- F1 :发射成功
- F2 :串口地址修改成功
- F3 :波特率设置成功
- 无返回代表指令接收错误、 操作不成功, 以上指令操作重启有效
-
NEC 红外信号编码由1个16位用户码( 分为高低8 位) 、 1个命令码和1个命令码的反码组成。用户码1+用户码2+命令码+命令码反码
-
我们在做解码操作时, 只需要将遥控器对准红外接收头, 按下要解码的按键, 即可通过串口调试助手 查看到解码的结果,结果输出为用户码1+用户码2+ 命令码 三位。 在做编码发送时也只需要发送这三位 即可。
-
我家遥控器(华为IPTV)的几个按键解码:
电源 0xB3 0x4C 0xDC 静音 0xB3 0x4C 0x9C 加台 0xB3 0x4C 0x85 减台 0xB3 0x4C 0x86 加音 0xB3 0x4C 0x80 减音 0xB3 0x4C 0x81
#include#define uchar unsigned char #define key P1 //6个按键连到了P1 void delay(unsigned int ms) //@11.0592MHz { unsigned char i, j; while(ms--){ i = 2; j = 199; do{ while (--j); } while (--i); } } void uartInit(void) { PCON |= 0x80; //使能波特率倍速位SMOD SCON = 0x50; //8位数据,可变波特率 TMOD &= 0x0F; //设置定时器模式 TMOD |= 0x20; //设置定时器模式 TL1 = 0xFA; //设置定时初始值 TH1 = 0xFA; //设置定时重载值 ET1 = 0; //禁止定时器%d中断 TR1 = 1; //定时器1开始计时 } void sendData(char* c){ //发送字符数组给串口 uchar i=0; for(i=0;i<5;i++){ SBUF = c[i]; while(!TI); TI = 0; } } void main(void) { uchar power[5]={0xA1,0xF1,0xB3,0x4C,0xDC}; //电源 uchar slience[5]={0xA1,0xF1,0xB3,0x4c,0x9C}; //静音 uchar chAdd[5]={0xA1,0xF1,0xB3,0x4c,0x85}; //加台 uchar chMin[5]={0xA1,0xF1,0xB3,0x4c,0x86}; //减台 uchar volAdd[5]={0xA1,0xF1,0xB3,0x4c,0x80}; //加音量 uchar volMin[5]={0xA1,0xF1,0xB3,0x4c,0x81}; //减音量 uartInit(); while(1){ key = 0xff; if(key != 0xff){ delay(20); while(key == 0xff); delay(20); switch(key){ case 0xfe:sendData(power);break; case 0xf7:sendData(slience);break; case 0xfd:sendData(chAdd);break; case 0xef:sendData(chMin);break; case 0xfb:sendData(volAdd);break; case 0xdf:sendData(volMin);break; } } } }



