標(biāo)題: 單片機(jī)紅外發(fā)射與接收源程序 [打印本頁]

作者: ssl9187    時(shí)間: 2019-12-19 20:14
標(biāo)題: 單片機(jī)紅外發(fā)射與接收源程序
純分享設(shè)計(jì)

發(fā)送端單片機(jī)源程序如下:
  1. #include "ir_send.h"



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

  10. /*-------發(fā)射數(shù)據(jù) + 載波---------*/
  11. void ir_t(bit BT , uint p)
  12. {
  13.         TH0 = p>>8;                   
  14.         TL0 = p;
  15.     TF0=0;                               
  16.     TR0=1;                                                                                                   //啟動定時(shí)器0
  17.     if(BT == 0)                                                                                                   //BT=0時(shí),不發(fā)射38KHz載波只延時(shí);BT=1發(fā)射38KHz脈沖且延時(shí)
  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;                                                                                                   //關(guān)閉定時(shí)器0
  46.     TF0=0;                                                                                       
  47.     IR =0;                                                               
  48. }


  49. /*-----------發(fā)送一幀數(shù)據(jù)-----------*/
  50. void ir_send_byt(uchar temp)
  51. {
  52.   uchar i;
  53.         for (i = 0; i < 8; i++ )                     //循環(huán)8次移位
  54.         {     
  55.             ir_t( 1 , m_56 );                                   //高電平0.65mS                                  
  56.                 if( temp & 0x01 )
  57.                 ir_t( 0 , m1_6 );                                               //先發(fā)送最低位               
  58.                 else         
  59.                 ir_t( 0 , m_56 );                              
  60.                 temp >>= 1;               
  61.         }   
  62. }

  63. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  64. 函數(shù):NEC編碼發(fā)送程序
  65. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  66. void ir_send(uchar p)
  67. {  
  68.         ir_t( 1 , m9   );                               //高電平9mS
  69.         ir_t( 0 , m4_5 );                    //低電平4.5mS

  70.   /*┈ 發(fā)送4幀數(shù)據(jù)┈*/
  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.   /*┈┈ 結(jié)束碼 ┈┈*/
  76.     ir_t( 1 , m_56 );
  77.         ir_t( 0 , m40  );
  78. /*┈┈ 重復(fù)碼 ┈┈*/
  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. }
復(fù)制代碼

所有資料51hei提供下載:
單片機(jī)之紅外發(fā)射接受.zip (57.92 KB, 下載次數(shù): 51)



作者: admin    時(shí)間: 2019-12-20 00:09
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者: lyseg    時(shí)間: 2019-12-20 09:51
謝謝分享。
作者: vkbvfhp    時(shí)間: 2020-12-13 14:34
下載學(xué)習(xí)后,發(fā)現(xiàn)這是一個(gè)很好的程序,不是常規(guī)的下降沿中斷接收,程序工整強(qiáng)大。受溢非淺。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1