找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2044|回复: 1
打印 上一主题 下一主题
收起左侧

单片机的红外发射与接受程序源码

[复制链接]
跳转到指定楼层
楼主
分享一个51单片机主控的红外发射与红外接受的程序

单片机源程序如下:
  1. #include "ir_send.h"



  2. /*------------初始化IO------------*/
  3. void ir_init(void)
  4. {
  5.         P2M0 = 0x80;                    //P2.7强推挽
  6.         P2M1 = 0x00;
  7.         TMOD = 0x01;                   //T0  16位 定时        
  8.         IR   = 0;
  9. }

  10. /*-------发射数据 + 载波---------*/
  11. void ir_t(bit BT , uint p)
  12. {
  13.         TH0 = p>>8;                    
  14.         TL0 = p;
  15.     TF0=0;                              
  16.     TR0=1;                                                                                                   //启动定时器0
  17.     if(BT == 0)                                                                                                   //BT=0时,不发射38KHz载波只延时;BT=1发射38KHz脉冲且延时
  18.         {
  19.                 while(!TF0);
  20.     }
  21.         else while(1)                                                                                         //38KHz载波,(低电平)占空比5:26                        
  22.             {
  23.                   IR = 1;
  24.                   if(TF0)break;if(TF0)break;
  25.                   if(TF0)break;if(TF0)break;
  26.                   if(TF0)break;if(TF0)break;
  27.                   if(TF0)break;

  28.                   IR = 0;
  29.                 if(TF0)break;if(TF0)break;
  30.                  if(TF0)break;if(TF0)break;
  31.                  if(TF0)break;if(TF0)break;
  32.                  if(TF0)break;if(TF0)break;
  33.                  if(TF0)break;if(TF0)break;
  34.                 if(TF0)break;if(TF0)break;
  35.                  if(TF0)break;if(TF0)break;
  36.                  if(TF0)break;if(TF0)break;
  37.                  if(TF0)break;if(TF0)break;
  38.                  if(TF0)break;if(TF0)break;
  39.                 if(TF0)break;if(TF0)break;
  40.                  if(TF0)break;if(TF0)break;
  41.                  if(TF0)break;if(TF0)break;
  42.                  if(TF0)break;if(TF0)break;
  43.                  if(TF0)break;if(TF0)break;
  44.                 }
  45.     TR0=0;                                                                                                   //关闭定时器0
  46.     TF0=0;                                                                                       
  47.     IR =0;                                                               
  48. }


  49. /*-----------发送一帧数据-----------*/
  50. void ir_send_byt(uchar temp)
  51. {
  52.   uchar i;
  53.         for (i = 0; i < 8; i++ )                     //循环8次移位
  54.         {     
  55.             ir_t( 1 , m_56 );                                   //高电平0.65mS                                 
  56.                 if( temp & 0x01 )
  57.                 ir_t( 0 , m1_6 );                                               //先发送最低位               
  58.                 else         
  59.                 ir_t( 0 , m_56 );                              
  60.                 temp >>= 1;               
  61.         }   
  62. }

  63. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  64. 函数:NEC编码发送程序
  65. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  66. void ir_send(uchar p)
  67. {  
  68.         ir_t( 1 , m9   );                               //高电平9mS
  69.         ir_t( 0 , m4_5 );                    //低电平4.5mS

  70.   /*┈ 发送4帧数据┈*/
  71.         ir_send_byt( user_h );                              //用户码高8位                                                                                                               
  72.         ir_send_byt( user_l );                           //用户码低8位
  73.         ir_send_byt(  p  );                           //操作码
  74.         ir_send_byt( ~p  );                           //操作码反码

  75.   /*┈┈ 结束码 ┈┈*/
  76.     ir_t( 1 , m_56 );
  77.          ir_t( 0 , m40  );
  78. /*┈┈ 重复码 ┈┈*/
  79.         while(0)
  80.         {
  81.         ir_t( 1 , m9         );
  82.         ir_t( 0 , m2_25 );

  83.         ir_t( 1 , m_56        );
  84.         ir_t( 0 , m40         );
  85.                 ir_t( 0 , m56         );                                 
  86.     }                  
  87. }
复制代码


所有资料51hei提供下载:
0822、单片机之红外发射接受.zip (70.32 KB, 下载次数: 33)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-10-24 19:32 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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