红外模块

xiaoxiao2021-02-28  102

学习红外模块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++;    }      }
转载请注明原文地址: https://www.6miu.com/read-2621724.html

最新回复(0)