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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1293|回復: 1
收起左側

STC89C52單片機紅外線遙控器按鍵碼值解碼顯示程序

[復制鏈接]
ID:437129 發表于 2024-12-23 12:30 | 顯示全部樓層 |閱讀模式
紅外線接收按鍵碼值檢測電路圖.jpg 遙控器按鍵碼檢測結果1.jpg 遙控器按鍵碼檢測結果2.jpg 遙控器按鍵碼檢測結果3.jpg 遙控器按鍵碼檢測結果4.jpg 遙控器碼實物和碼值圖片.png
最近在學習紅外線遙控繼電器,手頭有一個閑置遙控器,但不知道按鍵碼值,在網上搜索相關資源后獲到一個程序,經測試好用,在這里分享發給大家。
原程序來源于“知乎”,原文網址:https://zhuanlan.zhihu.com/p/662116293,在這里對原創作者“玄宇鷹魂”表示感謝。
因本論壇下載附件需要“黑幣”,為了避免原作者有可能誤判利用他的原作盈利,在這里只貼出程序內容,不上傳附件。
請有需求的壇友復制后自行生成工程文件和hex文件。
  1. /*********************************************************************************************
  2. 使用51單片機和一體化紅外線接收管檢測遙控器發射的紅外線信號,并將按鍵碼值顯示在P0口數碼管上
  3. 程序在STC89C52RC單片機配合共陽數碼管運行正常
  4. 原始程序來源于知乎,網址:https://zhuanlan.zhihu.com/p/662116293
  5. 在這里對原文章作者“玄宇鷹魂”表示感謝!
  6. *********************************************************************************************/
  7. #include <reg51.h>

  8. sbit smg1=P2^0;//數碼管第1位驅動
  9. sbit smg2=P2^1;//數碼管第2位驅動

  10. unsigned char Time0;
  11. unsigned char IrValue[6];
  12. unsigned char shijian;

  13. sbit IRIN=P3^2;//一體化紅紅外線接收引腳
  14. unsigned char shu[]={'0','0','0','0'};
  15. //unsigned char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7C,0x39,0x5E,0x79,0x71};//共陰數碼管編碼
  16.   unsigned char code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共陽數碼管編碼

  17. unsigned char num=0;
  18. void IrInit();
  19. void delay(unsigned int x);
  20. void DelayMs(unsigned int i)
  21. {
  22. while(i--)
  23. delay(100);
  24. }

  25. //主函數: main
  26. void main()
  27. {
  28. IrInit();
  29. while(1)
  30.      {
  31. //顯示
  32.      P0=smgduan[num>>4];
  33.      smg1=0;
  34.      delay(100);
  35.      smg1=1;
  36.      P0=smgduan[num & 0x0f];
  37.      smg2=0;
  38.      delay(100);
  39.      smg2=1;
  40.     }
  41. }

  42. //紅外線接收初始化函數IrInit()
  43. void IrInit()
  44. {
  45. IT0=1;//下降沿出發
  46. EX0=1;//打開中斷0允許
  47. EA=1; //打開總中斷

  48. IRIN=1;//初始化端口
  49. }

  50. //延時函數DelayMs()
  51. void delay(unsigned int x) //0.14ms誤差0us
  52. {
  53. while(x--) ;
  54. }

  55. //紅外線接收程序
  56. void ReadIr() interrupt 0
  57. {
  58. unsigned char j,k;
  59. unsigned int err;
  60. Time0=0;
  61. delay(700);  //7ms
  62. if(IRIN==0)  //確認是否真的接收到真正的信號
  63.       {
  64.       err=1000; //1000*10us=10ms,超過說明接收到錯誤的信號
  65. //當兩個條件都為真是循環,如果有一個條件為假的時候跳出循環,免得程序出錯的時候程序死在這里
  66.       while((IRIN==0)&&(err>0)) //等待前面9ms的低電平過去
  67.           {
  68.           delay(1);
  69.           err--;
  70.           }
  71.       if(IRIN==1) //如果正確等到9ms低電平
  72.           {
  73.               err=500;
  74.               while((IRIN==1)&&(err>0)) //等待4.5ms的起始高電平過去
  75.                     {
  76.                     delay(1);
  77.                     err--;
  78.                     }
  79.       for(k=0;k<4;k++) //共有4組數據
  80.                     {
  81.                         for(j=0;j<8;j++) //接收一組數據
  82.                             {  
  83.                             err=60;
  84.                             while((IRIN==0)&&(err>0))//等待信號前面的560us低電平過去
  85.                                 {
  86.                                     delay(1);
  87.                                     err--;
  88.                                 }
  89.                             err=500;
  90.                             while((IRIN==1)&&(err>0)) //計算高電平的時間長度
  91.                                 {
  92.                                 delay(10); //0.1ms
  93.                                 Time0++;
  94.                                 err--;
  95.                                 if(Time0>30)
  96.                                     {
  97.                                     return;
  98.                                     }
  99.                                 }
  100. IrValue[k]>>=1; //k表示第幾組數據
  101. if(Time0>=8) //如果高電平出現大于565us,那么是1
  102.                                 {
  103.                                 IrValue[k]|=0x80;
  104.                                 }
  105.                                 Time0=0; //用完時間要重新賦值
  106.                             }
  107.                    }
  108.         }
  109. if(IrValue[2]!=~IrValue[3])
  110.           {
  111.           return;
  112.           }
  113.           else
  114. num=IrValue[2];
  115.       }

  116. }
復制代碼







評分

參與人數 1黑幣 +50 收起 理由
admin + 50

查看全部評分

回復

使用道具 舉報

ID:163139 發表于 2024-12-23 20:32 | 顯示全部樓層
學習下
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲福利一区二区 | 国产一区二区 | a毛片| 福利网址 | 欧美日韩国产一区二区三区 | 成人亚洲一区 | 亚洲第一av | av色噜噜 | 欧美黑人国产人伦爽爽爽 | 中文字幕视频在线 | 99视频在线免费观看 | 在线看av的网址 | 日韩欧美一区二区三区免费观看 | 精品一区二区三区免费视频 | 一级黄色录像毛片 | 欧美日韩福利视频 | 欧美日韩精品一区二区三区四区 | 夜夜久久| 日韩欧美一区二区三区免费看 | 久久久精品影院 | 久久久久久国产一区二区三区 | 成人h免费观看视频 | 久久久www成人免费无遮挡大片 | 亚洲一区二区精品视频在线观看 | 成人午夜免费网站 | 欧美一区二区综合 | 久久久在线视频 | 亚洲高清av在线 | 欧美激情在线精品一区二区三区 | 国产精品久久久久久久久久免费看 | 久久久久久免费看 | 日操操| 天天干天天谢 | 中文字幕国产视频 | 超碰在线免费公开 | 91久久久久久久久久久久久 | 视频一区二区三区中文字幕 | 在线观看国产www | 狠狠色综合久久丁香婷婷 | 亚洲欧美另类在线观看 | 中文字幕动漫成人 |