久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

基于單片機的紅外發(fā)送程序(Infineon--XC866)

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2010年11月14日   【字體:

   本程序適用于Infineon--XC866的單片機,載波為38KHZ,通過P3_0作為發(fā)送端口,其中:0由0.56m的高電平和0.56ms的低電平組成,1由0.56的高電平和1.68ms的電平組成。稍加修改可應(yīng)用于C51。

發(fā)送程序如下:
 

//****************************************************************************
// @Module        Project Settings
// @Filename      MAIN.C
// @Project       20W.dav
//----------------------------------------------------------------------------
// @Controller    Infineon XC866-2FR
//
// @Compiler      Keil
//
// @Codegenerator 2.0
//
// @Description   This file contains the Project initialization function.
//
//----------------------------------------------------------------------------
// @Date          2010-11-4 15:54:56
//
//****************************************************************************

// USER CODE BEGIN (MAIN_General,1)

// USER CODE END

//****************************************************************************
// @Project Includes
// 完整代碼下載地址:點這里
// 與本程序?qū)?yīng)的紅外接收程序代碼:http://www.zg4o1577.cn/mcu/1096.html
//****************************************************************************

#include "MAIN.H"

// USER CODE BEGIN (MAIN_General,2)
#include<intrins.h>
#define uint  unsigned int   //宏定義
#define uchar unsigned char

#define  HWTx  P3_0     //位聲明:紅外發(fā)射管腳 
bit  HWTx_Out;      //紅外發(fā)射管腳的狀態(tài)
bit  Key_Flag,Flag;     //分別是:按鍵按下的標(biāo)志位,定時器開始的標(biāo)志位
uint Count,Set_Count;    //控制定時時間的變量
uchar Table_Tx[4]={0x40,0,0,0};//待發(fā)送的緩沖區(qū)
uchar HWTx_Code,HWTx_data;
// USER CODE END


//****************************************************************************
// @Macros
//****************************************************************************

// USER CODE BEGIN (MAIN_General,3)

// USER CODE END


//****************************************************************************
// @Defines
//****************************************************************************

// USER CODE BEGIN (MAIN_General,4)

// USER CODE END


//****************************************************************************
// @Typedefs
//****************************************************************************

// USER CODE BEGIN (MAIN_General,5)

// USER CODE END


//****************************************************************************
// @Imported Global Variables
//****************************************************************************

// USER CODE BEGIN (MAIN_General,6)

// USER CODE END


//****************************************************************************
// @Global Variables
//****************************************************************************

// USER CODE BEGIN (MAIN_General,7)

// USER CODE END


//****************************************************************************
// @External Prototypes
//****************************************************************************


// USER CODE BEGIN (MAIN_General,8)

// USER CODE END


//****************************************************************************
// @Prototypes Of Local Functions
//****************************************************************************

// USER CODE BEGIN (MAIN_General,9)

// USER CODE END


//****************************************************************************
// @Function      void MAIN_vInit(void) 
//
//----------------------------------------------------------------------------
// @Description   This function initializes the microcontroller. It is 
//                assumed that the SFRs are in their reset state.
//
//----------------------------------------------------------------------------
// @Returnvalue   None
//
//----------------------------------------------------------------------------
// @Parameters    None
//
//----------------------------------------------------------------------------
// @Date          2010-11-4
//
//****************************************************************************

// USER CODE BEGIN (MAIN_Init,1)

// USER CODE END

void MAIN_vInit(void)
{
  // USER CODE BEGIN (MAIN_Init,2)

  // USER CODE END

  ///  -----------------------------------------------------------------------
  ///  Configuration of the System Clock:
  ///  -----------------------------------------------------------------------
  ///  - On Chip Osc is Selected
  ///  - PLL Mode, NDIV = 2
  ///  - input frequency is 10 MHz

 

  ///  *********************************************************************************
  ///  Note : All peripheral related IO configurations are done in the 
  ///  respective peripheral modules (alternate functions selection)
  ///  *********************************************************************************


  ///  Initialization of module 'GPIO'
  IO_vInit();

  //   Interrupt Priority

  IP            =  0x00;         // load Interrupt Priority Register
  IPH           =  0x00;         // load Interrupt Priority High Register
  IP1           =  0x00;         // load Interrupt Priority 1 Register
  IPH1          =  0x00;         // load Interrupt Priority 1 High Register


  // USER CODE BEGIN (MAIN_Init,3)

  // USER CODE END

  //   globally enable interrupts
  EA            =  1;           

} //  End of function MAIN_vInit


//****************************************************************************
// @Function      void main(void) 
//
//----------------------------------------------------------------------------
// @Description   This is the main function.
//
//----------------------------------------------------------------------------
// @Returnvalue   None
//
//----------------------------------------------------------------------------
// @Parameters    None
//
//----------------------------------------------------------------------------
// @Date          2010-11-4
//
//****************************************************************************

// USER CODE BEGIN (MAIN_Main,1)
void delay(uint z) //延時時間約為 1ms*X  晶振為12M
{
   uint x=0,y=0;
        for(x=z;x>0;x--)
             for(y=54;y>0;y--);
}

void Key_Scan()
{
         uchar Key_Temp=0,i=0;
         if(P3_1!=1)
   {
      delay(10);
      if(P3_1!=1)
      { 
         while(!P3_1);
              Key_Flag=1; 
                        for(i=1;i<4;i++)
                        Table_Tx[i]=i+0xaa;
                 }
        } 
}

void Send_Code8()
{
         uchar i=0;   //循環(huán)變量
         for(i=0;i<8;i++) //8位數(shù)據(jù),顧循環(huán)8次
        {
                 Set_Count=0x002b;//準(zhǔn)備發(fā)送長達0.56ms(13*43=560us)的方波
                 Flag=1;    //置標(biāo)志位(通過該標(biāo)志位控制高低電平的轉(zhuǎn)換),

                                   因為高電平器件,38K的波形不會改變
      Count=0;  //清零,準(zhǔn)備計數(shù)
      TR0=1;   //啟動定時器
      while(Count<Set_Count); //定時0.56ms,先發(fā)送0.56ms的高電平
      TR0=0;    //關(guān)閉定時器

      if(HWTx_Code&0x01) //判斷待發(fā)送的數(shù)據(jù)的最低位為1或0,
      {       //將決定低電平時間的長短,便于接收裝置的接收
        Set_Count=130; //如果是1,則產(chǎn)生1.69ms(13*130=1690us)的低電平
      }
      else
      {
         Set_Count=43; //如果是0,則產(chǎn)生0.56ms(13*43=560us)的低電平
      }

      Flag=0;    //用于產(chǎn)生低電平的標(biāo)志位
      Count=0;   //清零,準(zhǔn)備計數(shù)
      TR0=1;    //啟動定時器
      while(Count<Set_Count);//產(chǎn)生長達對應(yīng)時間的低電平
      TR0=0;       //關(guān)閉定時器

      HWTx_Code=HWTx_Code>>1;//右移一位,準(zhǔn)備發(fā)送  
   }
}


void Send_Code()
{
   uchar i=0;

        Set_Count=690;//準(zhǔn)備產(chǎn)生9ms(13*690=9000)的高電平 
        Flag=1;    //置標(biāo)志位,取反(該標(biāo)志位控制高低電平的轉(zhuǎn)換)
        Count=0;   //定時器計數(shù)
        TR0=1;    //啟動定時器
        while(Count<Set_Count);//定時9ms,產(chǎn)生9ms的高電平
        TR0=0;   //關(guān)閉定時器

        Set_Count=340;//準(zhǔn)備產(chǎn)生4.5ms(13*340=4500)的低電平
        Flag=0;    //置位,取反(該標(biāo)志位控制高低電平的轉(zhuǎn)換)
   Count=0;   //清零,準(zhǔn)備計數(shù)
        TR0=1;    //啟動定時器T0
        while(Count<Set_Count); //產(chǎn)生4.5ms的低電平
        TR0=0;

        for(i=0;i<4;i++) //發(fā)送緩沖區(qū)里的數(shù)據(jù)
        {
                HWTx_Code=Table_Tx[i]; //賦值,等待發(fā)送
                Send_Code8();    //發(fā)送
        }

        Set_Count=43;//準(zhǔn)備產(chǎn)生4.5ms(13*340=4500)的低電平
        Flag=1;    //置位,取反(該標(biāo)志位控制高低電平的轉(zhuǎn)換)
        Count=0;   //清零,準(zhǔn)備計數(shù)
        TR0=1;    //啟動定時器T0
        while(Count<Set_Count); //產(chǎn)生4.5ms的低電平
        TR0=0;

        HWTx=1;   //置發(fā)射引腳的狀態(tài)為高電平
   delay(23);//延時23ms

        Set_Count=690; //準(zhǔn)備產(chǎn)生9.12ms的低電平,作為結(jié)束標(biāo)志
        Flag=1;
        Count=0;
        TR0=1;
         while(Count<Set_Count);//產(chǎn)生時間長達9.12ms的低電平
         TR0=0;       //關(guān)閉定時器

         Set_Count=340;//準(zhǔn)備產(chǎn)生4.5ms的高電平,作為結(jié)束標(biāo)志
         Flag=0;
         Count=0;
         TR0=1;
         while(Count<Set_Count);
         TR0=0;

         HWTx=1;    //輸出引腳拉高
}

void init_timer0()
{
         EA=1;
         TMOD=0x02;//工作在方式2,8位自動重裝模式
         ET0=1;    //開分控
         TH0=0x52; //定時時間為13us,晶振12M
         TL0=0x52;
}
// USER CODE END

void main(void)
{
  // USER CODE BEGIN (MAIN_Main,2)

  // USER CODE END

       MAIN_vInit();

  // USER CODE BEGIN (MAIN_Main,3)
       init_timer0(); //定時器T0的初始化函數(shù)
       Count=0;    //定時器計數(shù)值清零
       Flag=0;     //高低電平變化標(biāo)志位
       HWTx_Out=1;    //發(fā)射引腳的狀態(tài)
  // USER CODE END

  while(1)
  {

  // USER CODE BEGIN (MAIN_Main,4)
           Key_Scan();    //按鍵掃描函數(shù)
          if(Key_Flag==1)   //按鍵按下的標(biāo)志,是否置位
    {
       Send_Code(); //發(fā)送數(shù)據(jù)
       delay(100);  //延時5s
       Key_Flag=0;  //按鍵按下標(biāo)志位清零
          }
  // USER CODE END

    }

} //  End of function main


// USER CODE BEGIN (MAIN_General,10)
void timer0() interrupt 1 //定時器T0
{
          Count++;   //變量計數(shù),可得出進入T0的次數(shù),便可得出定時時間
          if(Flag==1)
         {
                  HWTx_Out=~HWTx_Out;  //取反,不斷輸出周期為26us的方波
         }
        else
        {
      HWTx_Out=0;  //這里決定在接受程序,是以高電平還是低電平作為

                                          判斷1  和0的依據(jù)
        }
        HWTx=HWTx_Out;  
}
// USER CODE END

 
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 欧美日韩国产高清 | 可以在线观看av的网站 | 污书屋| 91精品无人区卡一卡二卡三 | www.亚洲精品 | 久久久蜜桃 | 亚洲免费av一区 | 日本韩国欧美在线观看 | 欧美日韩国产精品一区二区 | 精品自拍视频 | 久热m3u8| 午夜一级做a爰片久久毛片 精品综合 | 日韩久久久久久 | 日韩精品免费视频 | 成人永久免费视频 | 日韩成人在线播放 | 一区二区三区欧美在线 | 日韩淫片免费看 | 亚洲一区 中文字幕 | 精品视频一二区 | 亚洲成av人片在线观看 | 中文字幕一区在线 | 亚洲成人综合在线 | 久久高清国产视频 | 日本一道本视频 | 99这里只有精品视频 | 在线成人免费视频 | 国产一区二区精华 | 欧洲一区在线观看 | 欧美日韩中文国产一区发布 | 亚洲激情在线观看 | 男女国产网站 | 亚洲影视在线 | 久久综合成人精品亚洲另类欧美 | 久久91精品久久久久久9鸭 | 欧美www在线 | 久久综合九色综合欧美狠狠 | 福利网址 | 成人免费视频观看 | 黄网免费看| 天天草天天爱 |