红外模块

本文介绍了一个使用51单片机控制红外模块的学习和发送功能的实现方案。通过外部按键触发,单片机可以发送特定指令来让红外模块学习或发送预设的红外信号。此外,还介绍了如何通过串口接收语音模块命令来间接控制红外模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习红外模块51单片机代码

可以用


#include<reg51.h>

#include<intrins.h>


#define uchar unsigned char
#define uint  unsigned int


#define sever_receivr_buffer_len 50
typedef unsigned char BYTE;
typedef unsigned int WORD;
unsigned char RECEIVR_buffer[sever_receivr_buffer_len]={0};
unsigned char receive_number=0,flag1=0,acting=1,RF_ADD_H=0x2d,RF_ADD_L=0xd4;
unsigned char arry1[11]={0x7E,0x07,0x00,0x26,0x39,0x26,0x39,0x12,0x01,0x00,0x56};//学习序号为1的红外键值
unsigned char arry2[11]={0x7E,0x07,0x00,0x26,0x39,0x26,0x39,0x14,0x01,0x00,0x58};//发送序号为1的红外键值


sbit  key1  =P2^1;
sbit  key2  =P2^0;
sbit  key3  =P2^2;
sbit  key4  =P2^3;


void UART_init()
{  
SCON=0x50;
TMOD|=0x20;
TH1=0xfD;//没有倍频  12M的时候 2400为0XF3  11.0592M的时候9600为0xFD
TL1=0xfD;
TR1=1;
EA=1;
ES=1;
}
void delay()
{
uchar i,j;
for(i=0;i<50;i++)
for(j=0;j<200;j++);
}
void _delay_us(unsigned int _us)
{
  char a=0;
  for(_us;_us;_us--)
   for(a=0;a<1;a++);
}
void delay_ms(unsigned  int a)
{
while(a>0)
{a--;delay_us(1000);}
}


void COM_send(char string)
{  
    SBUF=string;
    while(!TI);
    TI=0;
}





void main()
{
int i;
key1=1;
key2=1;
key3=1;
key4=1;
UART_init();
while(1)
{
if(key1==0)//外部按键接处理器  发送串口数据控制红外模块学习1号键
{
 while(key1==0);//7E 07 00 26 39 26 39 12 01 00 56  学习1
for(i=0;i<11;i++)
 {
COM_send(arry1[i]);
 
}
delay_ms(1000);
}
if(key2==0)
{
 while(key2==0);////外部按键接处理器  发送串口数据控制红外模块发送1号键
for(i=0;i<11;i++)
{
COM_send(arry2[i]);
}
delay_ms(1000);
}
if(flag1==1)//如果接收标志被置位
{
flag1=0;//清除接收标志
if(RECEIVR_buffer[0]==‘A') //如果接收的命令是A
{
for(i=0;i<11;i++)//串口发送命令控制红外模块学习按键1
 {
COM_send(arry1[i]);
 
}

key3=0;//通过外部管脚的方式控制红外模块学习按键1
delay_ms(1000);
key3=1;
}
if(RECEIVR_buffer[0]==‘B')//如果接收的命令是B
{
for(i=0;i<11;i++)//串口发送命令控制红外模块发送按键1
 {
COM_send(arry2[i]);
 
}

key4=0;//通过外部管脚的方式控制红外模块发送按键1
delay_ms(1000);
key4=1;
}
}

}
}




//语音模块识别命令一后串口输出A\r\n,   语音模块识别命令二后串口输出B\r\n
void com_interrupt(void) interrupt 4 
{
unsigned int i,j;
   if(RI)                                 //处理接收中断
   {
      RI=0; 
      RECEIVR_buffer[receive_number]=SBUF;             //接收串口数据 
if ((RECEIVR_buffer[receive_number] ==0x0A)&&(RECEIVR_buffer[receive_number-1] ==0x0D))
{
flag1=1;//语音模块发送过来的串口命令接收完毕标志
receive_number=0;
}
else
receive_number++;   
}     
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值