找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 3668|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

DMAVR-L的紅外遙控器解碼通信實(shí)驗(yàn)源程序,采用一體化紅外接收頭進(jìn)行信號接收,查詢方式

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:559337 發(fā)表于 2019-7-24 20:21 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
//DMAVR-L的紅外遙控器解碼通信實(shí)驗(yàn)源程序,采用一體化紅外接收頭進(jìn)行信號接收,查詢方式
//按鍵值直接反應(yīng)到LED燈上,比如按0鍵,鍵值為0,送入LED燈,8個(gè)全亮,按鍵1,亮7個(gè),D1不亮,以此類推
//硬件相關(guān)的配置文件在Config.h里,自己建立項(xiàng)目時(shí),需要復(fù)制到項(xiàng)目文件夾下
//系統(tǒng)時(shí)鐘16MHZ,設(shè)置熔絲位為外部高頻石英晶體振蕩,啟動(dòng)時(shí)間4.1ms
//編譯環(huán)境 AVR Studio 4.19/AVR ToolChain V3.4

  1. //***********************************************************************
  2. //                包含文件
  3. //***********************************************************************
  4. #include <string.h>
  5. #include <stdio.h>
  6. #define         F_CPU        16000000                                // 單片機(jī)主頻為16MHz,用于延時(shí)子程序,熔絲位必須設(shè)置到外部高頻晶振才行
  7. #include <util/delay.h>
  8. #include <avr/io.h>
  9. #include <avr/iom128.h>
  10. #include <avr/interrupt.h>                           //中斷信號頭文件
  11. #include  <avr/pgmspace.h>                          //須增加的頭文件,用來將數(shù)據(jù)存放在flash中
  12. #include "Config.h"                         //配置頭文件,與硬件相關(guān)的配置在這里更改

  13. //***********************************************************************
  14. //                        定義變量區(qū)
  15. //***********************************************************************
  16. uchar key;
  17. uint temp_value;
  18. uint temp,A;                                           //定義的變量,顯示數(shù)據(jù)處理
  19. uchar code_value=0;
  20. uchar key_code[4];
  21. uint l,p;

  22. //***********************************************************************
  23. //                        遙控器鍵碼
  24. //***********************************************************************

  25. #define KEY_0     0x16                 //鍵0
  26. #define KEY_1     0x0C                 //鍵1
  27. #define KEY_2     0x18                 //鍵2
  28. #define KEY_3     0x5E                 //鍵3
  29. #define KEY_4     0x08                 //鍵4
  30. #define KEY_5     0x1C                 //鍵5
  31. #define KEY_6     0x5A                 //鍵6
  32. #define KEY_7     0x42                 //鍵7
  33. #define KEY_8     0x52                 //鍵8
  34. #define KEY_9     0x4A                 //鍵9
  35. #define KEY_POWER 0x45                 //電源
  36. #define KEY_MODE  0x46                 //模式
  37. #define KEY_SOUND 0x47                 //靜音


  38. //***********************************************************************
  39. //                        IO端口初始化
  40. //***********************************************************************

  41. void system_init()
  42. {

  43.         LED = 0xFF;               //關(guān)LED
  44.         LEDDDR = 0xFF;

  45.     RED_SET;
  46.         RED_IN;
  47. }

  48. //*************************************************************************
  49. //            顯示采集到的數(shù)據(jù)到LED燈
  50. //*************************************************************************

  51. void Display_Key(uint data_KEY)
  52. {   
  53.     LED = data_KEY;      //鍵值顯示到LED燈上,二進(jìn)制的形式顯示,只識別0~9
  54. }

  55. //*************************************************************************
  56. //                        遙控器鍵值賦功能值子程序
  57. //*************************************************************************
  58. void Key_Icode(void)
  59. {
  60.    switch(key_code[2])
  61.    {
  62.     case KEY_0:key=0;break;
  63.         case KEY_1:key=1;break;
  64.         case KEY_2:key=2;break;
  65.         case KEY_3:key=3;break;
  66.         case KEY_4:key=4;break;
  67.         case KEY_5:key=5;break;
  68.         case KEY_6:key=6;break;
  69.         case KEY_7:key=7;break;
  70.         case KEY_8:key=8;break;
  71.         case KEY_9:key=9;break;
  72.         default:key=10;break;
  73.    }
  74. }

  75. //*************************************************************************
  76. //                        遙控器解碼子程序
  77. //*************************************************************************

  78. void Red_Code()
  79. {
  80. uchar i,j,k = 0;

  81. for(i = 0;i < 19;i++)
  82. {
  83.   delay_us(400);           //延時(shí)400us
  84.   if(RED_R)                //9ms內(nèi)有高電平,則判斷為干擾,退出處理程序
  85.   {
  86.       return;
  87.   }
  88. }

  89. while(!RED_R);            //等待9ms低電平過去



  90. for(i=0;i<5;i++)          //是否連發(fā)碼
  91. {
  92.   delay_us(500);
  93.   if(!RED_R)
  94.    {
  95.      return;
  96.    }
  97. }


  98. while(RED_R);               //等待4.5ms高電平過去

  99. for(i = 0;i < 4;i++)        //接收4個(gè)字節(jié)的數(shù)據(jù)
  100. {
  101.   for(j = 0;j < 8;j++)      //每個(gè)字節(jié)的數(shù)據(jù)8位
  102.   {


  103.    while(!RED_R);         //等待變高電平
  104.    while(RED_R)           //計(jì)算高電平時(shí)間
  105.    {
  106.     delay_us(100);
  107.     k++;
  108.     if(k >= 22)           //高電平時(shí)間過長,則退出處理程序
  109.     {
  110.      return;              //
  111.     }

  112.    }

  113.    code_value>>=1;        //接受一位數(shù)據(jù)
  114.    if(k >= 8)
  115.    {
  116.     code_value|=0x80;           //高電平時(shí)間大于0.56,則為數(shù)據(jù)1
  117.    }
  118.    k = 0;                  //計(jì)時(shí)清零
  119.   }
  120.   key_code[i]=code_value;  //四個(gè)字節(jié)的數(shù)據(jù)
  121. }

  122.   Key_Icode();             //調(diào)用賦值函數(shù)

  123.   Display_Key(key);        //顯示按鍵值

  124. }


  125. //*************************************************************************
  126. //                        主程序
  127. //*************************************************************************
  128. int main(void)
  129. {
  130.   system_init();         //系統(tǒng)初始化
  131.   while(1)
  132. {
  133.     Red_Code();          //調(diào)用遙控器解碼子程序

  134. }

  135. }
復(fù)制代碼


iRED.zip

22.75 KB, 下載次數(shù): 12, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表