欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1989|回復: 0
打印 上一主題 下一主題
收起左側

單片機紅外遙控鍵值讀取器程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:41347 發表于 2021-2-3 17:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. /********************************************************************************
  2. *  描述:                                                                       *
  3. *         數碼管顯示 遙控鍵值讀取器                                            *
  4. *         遙控器接p3.2                                                         *
  5. *                                                                              *
  6. *                                                                              *
  7. *                                                                              *
  8. *******************************************************************************/
  9. #include <reg51.h>
  10. #include <intrins.h>
  11. #define  NOP() _nop_()  /* 定義空指令 */

  12. //譯碼器管腳定義
  13. sbit    LS138A=P2^2;       //管腳定義
  14. sbit    LS138B=P2^3;
  15. sbit    LS138C=P2^4;

  16. sbit RELAY= P2^0;         //繼電器驅動線
  17. sbit RELAY1= P2^1;         //繼電器驅動線
  18. sbit RELAY2= P2^5;         //繼電器驅動線
  19. sbit RELAY3= P2^6;         //繼電器驅動線
  20. sbit RELAY4= P2^7;         //繼電器驅動線

  21. unsigned char Y0;


  22. //此表為 LED 的字模, 共陰數碼管 0-9  -
  23. unsigned char code Disp_Tab[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

  24. unsigned long  LedOut[5],LedNumVal;
  25. extern  unsigned char  IRCOM[7];

  26. void delay(unsigned int i);      //函數聲名
  27. void display(unsigned char Key_Val);
  28. extern void IRInit();    //extern 是引用IR.C中的函數


  29. main()
  30. {
  31.           IRInit();
  32.         while(1)
  33.         {
  34.     //顯示紅外鍵碼
  35.         display(IRCOM[2]);

  36.    }
  37.             
  38. }

  39. void delay(unsigned int i)
  40. {
  41.     char j;
  42.     for(i; i > 0; i--)
  43.         for(j = 200; j > 0; j--);
  44. }


  45. void display(unsigned char Key_Val)
  46. {  
  47.    unsigned char i;
  48.    /********以下將鍵值送到LED數碼管顯示*************/
  49.       LedNumVal=Key_Val;      //把鍵值送到LedNumVal變量中
  50.           LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
  51.       LedOut[1]=Disp_Tab[LedNumVal%1000/100];
  52.       LedOut[2]=Disp_Tab[LedNumVal%100/10];         //十位
  53.       LedOut[3]=Disp_Tab[LedNumVal%10];    //個位
  54.             
  55.     for(i=0; i<4; i++)
  56.          
  57.             
  58.          
  59.           {               
  60.                  P0 = LedOut[i] ;
  61.                                                               
  62.                 switch(i)                                          
  63.          {                      //138譯碼
  64.                         case 3:LS138A=0; LS138B=0; LS138C=0; break;         
  65.             case 2:LS138A=1; LS138B=0; LS138C=0; break;                     
  66.             case 1:LS138A=0; LS138B=1; LS138C=0; break;
  67.             case 0:LS138A=1; LS138B=1; LS138C=0; break;
  68.          }
  69.                  
  70.                 delay(100);
  71.           }

  72.           P0 = 0;  


  73.   Y0=0;
  74.          switch(IRCOM[2])
  75.          {
  76.            case 0x16: Y0=0x01; break;
  77.            case 0x0c: Y0=0x02; break;
  78.            case 0x08: Y0=0x03; break;
  79.            case 0x42: Y0=0x04; break;
  80.            case 0x18: Y0=0x05; break;
  81.            case 0x1B: Y0=0x06; break;
  82.            case 0x11: Y0=0x07; break;
  83.            case 0x15: Y0=0x08; break;
  84.            case 0x17: Y0=0x09; break;

  85.           case 0x13: RELAY=1; break;
  86.           case 0x14: RELAY=1; break;
  87.           case 0x51: RELAY=0; break;
  88.          }

  89.         
  90.         
  91.         
  92.         if(Y0==0x01)RELAY=0;//打開繼電器
  93.         else RELAY=1;
  94.         if(Y0==0x02)RELAY1=0;
  95.         else RELAY1=1; //關閉繼電器
  96.         if(Y0==0x03)RELAY2=0;
  97.         else RELAY2=1;
  98.         if(Y0==0x04)RELAY3=0;
  99.         else RELAY3=1;
  100.         if(Y0==0x05)RELAY4=0;
  101.         else RELAY4=1;




  102. }
復制代碼


  1. /********************************************************************************
  2. *  描述:                                                                        *
  3. *         數碼管顯示 遙控鍵值讀取器                                             *
  4. *          遙控器接p3.2                                                         *
  5. *  現象:當按遙控器時,按下事 數碼管會有閃爍,為什么會閃爍呢                    *
  6. *                                                                               *
  7. *         連接方法:使用紅外功能時 J1跳線短接                                   *
  8. *****************************************************************************8**/

  9. #include <reg51.h>

  10. sbit IRIN = P3^2;         //紅外接收器數據線


  11. void IRdelay(char x);  //x*0.14MS
  12. void beep();

  13. unsigned char  IRCOM[7];
  14. extern unsigned char Y0;
  15. extern void display(unsigned char Key_Val);
  16. /*******************************************************************/
  17. void IRInit()
  18. {
  19.     IE |= 0x81;                 //允許總中斷中斷,使能 INT0 外部中斷
  20.     TCON |= 0x01;               //觸發方式為脈沖負邊沿觸發
  21.    
  22.     IRIN=1;                    //I/O口初始化
  23. }

  24. /**********************************************************/
  25. void IR_IN(void) interrupt 0
  26. {
  27.   unsigned char j,k,N=0;
  28.      EX0 = 0;  
  29.           
  30.          IRdelay(5);
  31.          if (IRIN==1)
  32.      { EX0 =1;
  33.            return;
  34.           }
  35.                            //確認IR信號出現
  36.   while (!IRIN)            //等IR變為高電平,跳過9ms的前導低電平信號。
  37.   {IRdelay(1);}

  38. for (j=0;j<4;j++)         //收集四組數據
  39. {
  40.   for (k=0;k<8;k++)        //每組數據有8位
  41.   {
  42.    while (IRIN)            //等 IR 變為低電平,跳過4.5ms的前導高電平信號。
  43.      {IRdelay(1);}
  44.     while (!IRIN)          //等 IR 變為高電平
  45.      {IRdelay(1);}
  46.      while (IRIN)           //計算IR高電平時長
  47.       {
  48.     IRdelay(1);
  49.     N++;           
  50.     if (N>=30)
  51.          { EX0=1;
  52.          return;}                  //0.14ms計數過長自動離開。
  53.       }                        //高電平計數完畢               
  54.      IRCOM[j]=IRCOM[j] >> 1;                  //數據最高位補“0”
  55.      if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //數據最高位補“1”
  56.      N=0;
  57.   }//end for k
  58.           
  59. }//end for j
  60.    
  61.    if (IRCOM[2]!=~IRCOM[3])
  62.    { EX0=1;
  63.      return;
  64.          
  65.         }

  66.        EX0 = 1;
  67. }


  68. /**********************************************************/
  69. void IRdelay(unsigned char x)    //x*0.14MS
  70. {
  71. unsigned char i;
  72.   while(x--)
  73. {
  74.   for (i = 0; i<13; i++) {}
  75. }
  76. }




復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表