100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 红外通信模块 NEC红外收发模块(2)——两个红外模块交互信息

红外通信模块 NEC红外收发模块(2)——两个红外模块交互信息

时间:2023-11-24 14:13:20

相关推荐

红外通信模块 NEC红外收发模块(2)——两个红外模块交互信息

上次文章写的是红外模块的是否正常验证,和基本功能的展示与掌握,本次要完成两个红外模块,借助单片机进行互相交互信息:

需要完成两个功能:

1.通过串口助手给单片机发送信息(这里要注意:我们使用两个红外模块,PC端一个,单片机端也接一个,实现远程传输信息),如果单片机收到信息,则实现P2口的LED灯进行闪烁

2.设置单片机按键,来模拟给PC发信息,然后在电脑上的串口助手进行显示,进行验证是否如单片机所要发的数据一致。

红外线模块1,它是与PC端连接的。

红外模块2,它是与单片机相连的。

单片机中的代码如下:

#include <reg52.h>#include <string.h>#include <stdio.h>sbit EN = P1^0; // 电机输入输出1,2sbit IN1 = P1^1; // 输入1sbit IN2 = P1^2; // 输入2sbit P32=P3^2;char Recive_table[20]=""; //接收缓冲,最大20个字节char Recive_state = 0; //接收完成标志void Uart_Init(void);void ms_delay(int t);void LED(void);int main (void){ /********************功能初始化***********************/Uart_Init();//串口初始化,波特率为9600ms_delay(1000) ;/****************************************************//**********************主循环************************/while(1){ ms_delay(10) ;if(Recive_state == 1){ES=0; //清空接收标志位 if(Recive_table[0]==51)//接收到的字符串形式{LED();LED();LED();LED();LED();}memset(Recive_table,'\0',20);Recive_state = 0;ES=1; //打开接收标志位}if(0 == P32) // 通过串口给手机发送字符串 wantin{ms_delay(400);if(0 == P32){ES = 0;TI = 1; //printf("%bd",0XA1);//printf("A1F11C2F33");SBUF= 0XA1;ms_delay(10);SBUF= 0XF1;ms_delay(10);SBUF= 0X1C;ms_delay(10);SBUF= 0X2F;ms_delay(10);SBUF= 0X33;ms_delay(10);LED();ms_delay(1000) ;while(!TI);TI = 0;ES = 1;}while(0 == P32);} }/****************************************************/}/******************************************************************函 数: void Uart_Interrupt() interrupt 4功 能: 串口中断函数,将收到的字符存到Recive_table[]数组中参 数: 无返回值: 无*******************************************************************/void Uart_Interrupt() interrupt 4 { static char i=0; //因为是一位一位接收,所以用staticif(RI==1) { ES = 0;RI=0; Recive_table[i]=SBUF; i++; if((Recive_table[i] == '\0')){ i=0; Recive_state = 1;}ES = 1;}elseTI = 0;} /******************************************************************函 数: void Uart_Init(void)功 能: 串口初始化,波特率为9600(这个不会,上网百度)参 数: 无返回值: 无*******************************************************************/void Uart_Init(void){ TMOD=0x20;TH1=0xfD;TL1=0xfD;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;}/******************************************************************函 数: void ms_delay(int t)功 能: 毫秒级延时参 数: 无返回值: 无*******************************************************************/void ms_delay(int t) { int i,j; for(i=t;i>0;i--) for(j=110;j>0;j--); }/******************************************************************函 数: void LED(void)功 能: 发送完命令后显示用的函数参 数: 无返回值: 无*******************************************************************/void LED(void){P2 = 0;ms_delay(1000);P2 = 0xff;ms_delay(1000);}

这是我的完整代码,大家可以下载尝试。

代码中sbit P32=P3^2;是指按键,他与P32口相连

代码还可以读到,单片机想给PC传输的数据为:A1 F1 1C 2F 33,也就是说数据为1C 2F 33

现在来上电验证:

1.验证电脑向单片机发送数据:

|-发送数据 A1 F1 1C 2F 33,因为代码是判断最后一个字节是否为0X33,如果是则让灯闪烁,如果不是则不闪烁。

发现等的确闪烁了,无法拍视频。

|-如果我不发送数据 A1 F1 1C 2F 33,而是发送A1 F1 1C 2F 44,也就是使得最后一个字节部位0X33,验证是不是单片机上灯就不会闪烁了,验证开始。

灯是不能闪烁的。

2.验证单片机按键按一下能给电脑发送数据,数据为1C 2F 33,然后在串口上显示出来,验证开始。

按一下按键,观看串口助手,如图:

发现数据接收正常,因此这里就完成了PC端和单片机通过红外模块的正常信息交互了,下次文章准备写一下,通过两个红外模块完成对电机的正反转操作。O(∩_∩)O哈哈~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。