<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機萬能紅外遙控解碼程序

          51單片機萬能紅外遙控解碼程序

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏

          void Delay1(uint ms)//延時子程序
          {
          uint x,y;
          for(x=ms;x>0;x--)
          for(y=0;y<2400;y++);
          }

          本文引用地址:http://www.ex-cimer.com/article/201612/324220.htm

          /**********************************************************************************************/


          /*********************************************************************************************
          函數(shù)名:定時/計數(shù)器初始化函數(shù)
          調(diào) 用:T_C_init();
          參 數(shù):無
          返回值:無
          結(jié) 果:設(shè)置SFR中T/C1和(或)T/C0相關(guān)參數(shù)
          備 注:本函數(shù)控制T/C1和T/C0,不需要使用的部分可用//屏蔽
          /**********************************************************************************************/
          void T_C_init (void){
          TMOD = 0x01; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]
          TH0 = 0xfe; //16位計數(shù)寄存器T0高8位
          TL0 = 0x0c; //16位計數(shù)寄存器T0低8位(100uS延時)
          TR0 = 1; //T/C0啟動開關(guān)
          ET0 = 1; //T/C0中斷開關(guān)
          EA = 1; //中斷總開關(guān)
          }
          /**********************************************************************************************/
          /*********************************************************************************************
          函數(shù)名:定時/計數(shù)器0中斷處理函數(shù)
          調(diào) 用:[T/C0溢出后中斷處理]
          參 數(shù):無
          返回值:無
          結(jié) 果:重新寫入16位計數(shù)寄存器初始值,處理用戶程序
          備 注:必須允許中斷并啟動T/C本函數(shù)方可有效,重新寫入初值需和T_C_init函數(shù)一致
          /**********************************************************************************************/
          void T_C0 (void) interrupt 1 using 1{ //切換寄存器組到1
          TH0 = 0xfe; //16位計數(shù)寄存器T0高8位(重新寫入初值)
          TL0 = 0x0c; //16位計數(shù)寄存器T0低8位(100uS延時)
          //函數(shù)內(nèi)容
          TCC++;
          }
          /**********************************************************************************************/

          /*********************************************************************************************
          函數(shù)名:UART串口初始化函數(shù)
          調(diào) 用:UART_init();
          參 數(shù):無
          返回值:無
          結(jié) 果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產(chǎn)生波特率(占用)
          備 注:振蕩晶體為12MHz,PC串口端設(shè)置 [ 4800,8,無,1,無 ]
          /**********************************************************************************************/
          void UART_init (void){
          //EA = 1; //允許總中斷(如不使用中斷,可用//屏蔽)
          //ES = 1; //允許UART串口的中斷

          TMOD = 0x20; //定時器T/C1工作方式2
          SCON = 0x50; //串口工作方式1,允許串口接收(SCON = 0x40 時禁止串口接收)
          TH1 = 0xF3; //定時器初值高8位設(shè)置
          TL1 = 0xF3; //定時器初值低8位設(shè)置
          PCON = 0x80; //波特率倍頻(屏蔽本句波特率為2400)
          TR1 = 1; //定時器啟動
          }


          /**********************************************************************************************/
          /*********************************************************************************************
          函數(shù)名:外部中斷INT初始化函數(shù)
          調(diào) 用:INT_init();
          參 數(shù):無
          返回值:無
          結(jié) 果:啟動外部中斷INT1、INT0中斷,設(shè)置中斷方式
          備 注:
          /**********************************************************************************************/
          void INT_init (void){
          EA = 1; //中斷總開關(guān)
          //EX0 = 1; //允許外部中斷0中斷
          IT0 = 1; //1:下沿觸發(fā) 0:低電平觸發(fā)
          }

          void INT_0 (void) interrupt 0 using 2{ //切換寄存器組到2
          EX0 = 0; //允許外部中斷0中斷
          //用戶函數(shù)內(nèi)容
          for(i=0;i<46;i++)
          {
          //獲取低電平寬度
          TH0 = 0xfe; //16位計數(shù)寄存器T0高8位
          TL0 = 0x0c; //16位計數(shù)寄存器T0低8位(100uS延時)
          TCC=0;
          TR0 = 1; //T/C0啟動開關(guān)
          while(Rc==0);
          TR0=0;
          Ldate[i]=TCC;

          //獲取高電平寬度
          TH0 = 0xfe; //16位計數(shù)寄存器T0高8位
          TL0 = 0x0c; //16位計數(shù)寄存器T0低8位(100uS延時)
          TCC=0;
          TR0 = 1; //T/C0啟動開關(guān)
          while(Rc==1);
          TR0=0;
          Hdate[i]=TCC;
          }

          LED_zs=0;
          Delay1(100);
          LED_zs=1;
          Delay1(100);
          LED_zs=1;
          Delay1(300);
          LED_zs1=0;

          }

          void fs(void)
          {
          int fs;
          for(fs=0;fs<46;fs++)
          {
          TH0 = 0xfe; //16位計數(shù)寄存器T0高8位
          TL0 = 0x0c; //16位計數(shù)寄存器T0低8位(100uS延時)
          TCC=0;
          TR0 = 1; //T/C0啟動開關(guān)
          while(TCCTR0=0;
          TH0 = 0xfe; //16位計數(shù)寄存器T0高8位
          TL0 = 0x0c; //16位計數(shù)寄存器T0低8位(100uS延時)
          TCC=0;
          TR0 = 1; //T/C0啟動開關(guān)
          while(TCCTR0=0;
          }

          }

          void main (void)
          {
          int n;
          IP=0x02;
          T_C_init();
          INT_init();
          UART_init();
          LED_zs=1;
          LED_zs1=0;
          red=0;
          while(1)
          {
          Key_f=1;
          if( Key_f!=1)
          {
          Delay1(2);
          Key_f=1;
          if(Key_f!=1)
          {
          for(n=0;n<46;n++)
          {
          SBUF = Ldate[n]; //將接收的數(shù)據(jù)發(fā)送回去
          while(TI == 0); //檢查發(fā)送中斷標志位
          TI = 0;
          }
          for(n=0;n<46;n++)
          {
          SBUF = Hdate[n]; //將接收的數(shù)據(jù)發(fā)送回去
          while(TI == 0); //檢查發(fā)送中斷標志位
          TI = 0;
          }
          while(!Key_f){fs();Delay1(100);}
          }
          }
          Key_s=1;
          if(Key_s!=1)
          {
          Delay1(2);
          if(Key_s!=1)
          {
          EX0=1;
          LED_zs1=1;
          while(!Key_s);
          }
          }

          }}


          上一頁 1 2 下一頁

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();