51单片机驱动红外编解码模块(YS-IRTM)

红外编解码模块

  • YS-IRTM模块
    • 模块组成
    • 模块通信
      • 发射指令说明:
      • 模块反馈
      • 解码信息输出
  • 51单片机测试代码


YS-IRTM模块

  • 这个模块在某宝非常容易买到,内置刷好了固件的单片机,串口给指令就能直接发射NEC红外信号,用串口助手调试非常方便

51单片机驱动红外编解码模块(YS-IRTM)_第1张图片

模块组成

  • 红外发射头:用于发射红外信号, 波长为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
    

51单片机测试代码

#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;
			}			
		}					
	}				
						

}

你可能感兴趣的:(MCU,单片机,物联网,串口通信,c语言,51单片机)