在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 紅外解碼程序換種寫法

      紅外解碼程序換種寫法

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

      /******************************************************************/
      /* 外部中斷初始化 */
      /******************************************************************/
      void EX0init(void)
      {
      IT0 = 1; //指定外部中斷0下降沿觸發(fā),INT0 (P3.2)
      EX0 = 1; //使能外部中斷
      EA = 1; //開總中斷
      }
      /******************************************************************/
      /* 紅外鍵值處理 */
      /******************************************************************/
      void Ir_work(void) //紅外鍵值散轉程序
      {

      TimeNum[5] = Tab[IRcord[0]/16]; //處理客戶碼并顯示
      TimeNum[6] = Tab[IRcord[0]%16];
      TimeNum[8] = Tab[IRcord[1]/16]; //處理客戶碼并顯示
      TimeNum[9] = Tab[IRcord[1]%16];
      TimeNum[11] = Tab[IRcord[2]/16]; //處理數(shù)據(jù)碼并顯示
      TimeNum[12] = Tab[IRcord[2]%16];
      TimeNum[14] = Tab[IRcord[3]/16]; //處理數(shù)據(jù)反碼并顯示
      TimeNum[15] = Tab[IRcord[3]%16];

      ShowString(1,TimeNum);//顯示處理過后的碼值

      switch(IRcord[3])
      {
      case 0xf3: beep1();break;
      case 0xe7: beep2();break;
      case 0xa1: beep3() ;break;
      case 0xf6: shan() ;break;

      }

      irpro_ok=0; //處理完成后清楚標志位

      }
      /******************************************************************/
      /* 紅外解碼函數(shù)處理 */
      /******************************************************************/
      void Ircordpro(void)//紅外碼值處理函數(shù)
      {
      uchar i, j, k;
      uchar cord,value;
      k=1;
      for(i=0;i<4;i++) //處理4個字節(jié)
      {
      for(j=1;j<=8;j++) //處理1個字節(jié)8位
      {
      cord=irdata[k];
      if(cord>7)//大于某值為1,這個和晶振有絕對關系,這里使用12M計算,此值可以有一定誤差
      {
      value=value|0x80;
      }
      else
      {
      value=value;
      }
      if(j<8)
      {
      value=value>>1;
      }
      k++;
      }
      IRcord[i]=value;
      value=0;
      }
      irpro_ok=1;//處理完畢標志位置1

      }

      /******************************************************************/
      /* 毫秒函數(shù)聲明 */
      /******************************************************************/
      void DelayMs(int z)
      {
      int x,y;
      for(x=z;x>0;x--)
      for(y=220;y>0;y--);
      }
      /******************************************************************/
      /* 寫入命令函數(shù) */
      /******************************************************************/
      void Write_com(uchar c)
      {
      DelayMs(5);//操作前短暫延時,保證信號穩(wěn)定
      E=0;
      RS=0;
      RW=0;
      DelayMs(5);
      E=1;
      P0=c;
      E=0;
      }
      /******************************************************************/
      /* 寫入數(shù)據(jù)函數(shù) */
      /******************************************************************/
      void Write_dat(uchar c)
      {
      DelayMs(5); //操作前短暫延時,保證信號穩(wěn)定
      E=0;
      RS=1;
      RW=0;
      DelayMs(5);
      E=1;
      P0=c;
      E=0;
      RS=0;
      }
      /******************************************************************/
      /* 寫入字節(jié)函數(shù) */
      /******************************************************************/
      void ShowChar(uchar pos,uchar c)
      {
      unsigned char p;
      if (pos>=0x10)
      p=pos+0xb0; //是第二行則命令代碼高4位為0xc
      else
      p=pos+0x80; //是第二行則命令代碼高4位為0x8
      Write_com (p);//寫命令
      Write_dat (c); //寫數(shù)據(jù)
      }
      /******************************************************************/
      /* 寫入字符串函數(shù) */
      /******************************************************************/
      void ShowString (uchar line,char *ptr)
      {
      uchar l,i;
      l=line<<4;
      for (i=0;i<16;i++)
      ShowChar (l++,*(ptr+i));//循環(huán)顯示16個字符
      }
      /******************************************************************/
      /* 初始化函數(shù) */
      /******************************************************************/
      void InitLcd()
      {
      DelayMs(15);
      Write_com(0x38); //display mode
      Write_com(0x38); //display mode
      Write_com(0x38); //display mode
      Write_com(0x06); //顯示光標移動位置
      Write_com(0x0c); //顯示開及光標設置
      Write_com(0x01); //顯示清屏
      }

      本文引用地址:http://www.biyoush.com/article/201612/324683.htm

      /******************************************************************/
      /* 主函數(shù) */
      /******************************************************************/
      void main(void)
      {
      EX0init(); //初始化外部中斷
      TIM0init();//初始化定時器
      InitLcd();
      DelayMs(15);
      while(1)
      {
      if(irok) //如果接收好了進行紅外處理
      {
      Ircordpro();
      irok=0;
      }
      if(irpro_ok) //如果處理好后進行工作處理,如按對應的按鍵后顯示對應的數(shù)字等
      {
      Ir_work();
      }
      }
      }


      上一頁 1 2 下一頁

      評論


      技術專區(qū)

      關閉