搜索
bottom↓
回复: 4

自己做的一个红外发射的程序,求请教

[复制链接]

出0入0汤圆

发表于 2012-7-22 11:23:01 | 显示全部楼层 |阅读模式
此程序要一直发射,而且要离接收端很近很近才能断断续续的接受到一些乱码点亮LED灯。用相机观测红外发射头有紫色的光。
要求是要自己软件编程产生38KHZ的方波
求大神指导




#include<reg52.h>
#define uchar unsigned char
bit launch_start=1;
bit launch_flag1,launch_flag2,launch_flag21,launch_flag22;
unsigned int launch_count,launch_endcount;
bit op;
sbit k=P1^3;//用来显示单片机是否工作,,,
sbit launch_in=P3^3;//接红外的输入口,,
uchar launch_date[32];//用来存放数据的每一位,,
uchar date[4]={0x38,0x38,0x18,0xe7};//要发送的两个客户吗和数据码及其反码,,,
uchar duc;
uchar h;


void time1_set()
{ TMOD |=0x10;//工作模式1下的,计时13US,中断一次,,,
  TH1=(65536-13)/256;
  TL1=(65536-13)%256;
  EA=1;
  ET1=1;
  TR1=0;
}


void time1() interrupt 3
{ TH1=(65536-13)/256;
  TL1=(65536-13)%256;
  launch_count++;
  if(launch_start)
  {if(duc==2){op=~op;duc=0;}  // 产生占空比1:3。,,的38KHZ方波,,
   else{ op=0; duc++;}
  }
  else{ op=0;}
  launch_in=op;
}


void datelaunch()//将上面要发送的4个数据处理成32位,,,
{ uchar i,x;
  for(x=0;x<4;x++)
  { for(i=0;i<8;i++)
   { if(date[x]%2==1){ launch_date[h]=1;}
     else{ launch_date[h]=0;}
     date[x]=date[x]>>1;
     h++;
   }
  }
  h=0;
}

void launch()
{ static uchar j=0;
  TR1=1;
  if(launch_count>=692){ launch_flag1=1; launch_count=0;launch_start=0; }//引导码的9ms,
  if(launch_flag1==1){ if(launch_count>=346){ launch_count=0; launch_flag2=1; launch_flag1=0;launch_start=1;}}//引导码的4.5ms,,
  if(launch_flag2==1)
  { if(launch_date[j]==1)//发送数据1,,
    { if(launch_count>=43){launch_count=0;launch_start=0;launch_flag21=1;}//0.56ms
      if(launch_flag21==1){ if(launch_count>=129){ launch_flag21=0; launch_count=0; launch_start=1;j++;}}//1.68ms
    }
    else//发送数据0,,
    { if(launch_count>=43){ launch_count=0;launch_start=0;launch_flag22=1;}//0.56ms
      if(launch_flag22==1){ if(launch_count>=43){ launch_flag22=0; launch_count=0; launch_start=1;j++;}}//0.56ms
    }
  }
  if(j>32){ launch_flag2=0,TR1=0;j=0;}
}


void main()
{ time1_set();//定时器1初始化,,
  datelaunch();//4位要发送的数据处理成32个位数据,,,
  k=0;//led灯显示正常工作,,
  while(1)
  { launch();//发送,,
  }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-7-22 12:24:48 | 显示全部楼层
发射常规的红外信号
一般要有两部分
1.产生38KHz的载波
2.要有调制信号

出0入0汤圆

 楼主| 发表于 2012-7-22 14:10:14 | 显示全部楼层
if(launch_start)
  {if(duc==2){op=~op;duc=0;}  // 产生占空比1:3。,,的38KHZ方波,,
我这一部分是用来产生载波的
if(launch_date[j]==1)//发送数据1,,
    { if(launch_count>=43){launch_count=0;launch_start=0;launch_flag21=1;}//0.56ms
      if(launch_flag21==1){ if(launch_count>=129){ launch_flag21=0; launch_count=0; launch_start=1;j++;}}//1.68ms
    }
    else//发送数据0,,
    { if(launch_count>=43){ launch_count=0;launch_start=0;launch_flag22=1;}//0.56ms
      if(launch_flag22==1){ if(launch_count>=43){ launch_flag22=0; launch_count=0; launch_start=1;j++;}}//0.56ms
    }
这一部分就是产生调制的信号

出0入0汤圆

发表于 2012-7-22 21:28:39 | 显示全部楼层
不知道你用的是STC的哪哪种单片机,我用的是STC15D204EA。你可以用定时器的可编程时钟输出38KHZ的方波,然后采取延时或者是计数的方法实现对红外线的调制

出0入0汤圆

 楼主| 发表于 2012-7-23 09:39:21 | 显示全部楼层
我用的是stc89c54rd+           我上面的程序就是用定时器产生38KHZ的方波  在进行调制的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 17:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表