找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4132|回复: 4
收起左侧

新唐N7600E003输入捕获解码无线遥控源码

[复制链接]
ID:31094 发表于 2018-12-14 21:17 | 显示全部楼层 |阅读模式
新唐N7600E003输入捕获解码无线遥控

0.png

单片机源程序如下:
  1. #include "N76E003.h"
  2. #include "Common.h"
  3. #include "Delay.h"
  4. #include "SFR_Macro.h"
  5. #include "Function_define.h"
  6. #include <stdio.h>
  7. #include <string.h>



  8. // Leader code range                   13.5ms
  9. #define     IR_LDC_MAX                 14500  //14.5ms
  10. #define     IR_LDC_MIN          12500  //12.5ms

  11. // Bit = 1 range                                        2.25ms
  12. #define     IR_BIT_1_MAX               2500         //2.5ms
  13. #define     IR_BIT_1_MIN        2000         //2ms
  14. // Bit = 0 range                                        1.12ms
  15. #define     IR_BIT_0_MAX              1250         //1.25ms
  16. #define     IR_BIT_0_MIN              1000         //1ms

  17. volatile    uint8_t             IR_State = 0;       // IR State
  18. volatile    uint8_t             IR_LDC_Ready = 0;   // LeaDer Code is Ready
  19. volatile    uint8_t             IR_CTC_Ready = 0;   // CusTomer Code is Ready
  20. volatile    uint8_t             IR_CTC0 = 0;        // Received CusTomer Code 0
  21. volatile    uint8_t             IR_CTC1 = 0;        // Received CusTomer Code 1
  22. volatile    uint8_t             IR_DAC = 0;         // Received DAta Code
  23. volatile    uint8_t             IR_DAB = 0;         // Received DAta Bar code
  24. volatile    uint8_t             IR_cnt = 0;
  25. uint8_t             IR_CODE[4]  =   {0x00, 0x00, 0x00, 0x00};
  26. void IrDa_NEC_Rx(uint16_t Capture_Time)
  27. {
  28.     if(IR_State == 0)
  29.     {
  30.         IR_LDC_Ready = 0;           // Clear LeaDer Code Ready
  31.         IR_CTC_Ready = 0;           // Clear CusTomer Code Ready
  32.         IR_State++;
  33.     }
  34.     // Leader or Repeater code
  35.     else if(IR_State == 1)
  36.     {
  37.         // Leader code
  38.         if((Capture_Time >= IR_LDC_MIN) && (Capture_Time <= IR_LDC_MAX))
  39.         {
  40.             IR_LDC_Ready = 1;       // Set LeaDer Code Ready
  41.             IR_State++;
  42.         }
  43.         else
  44.         {
  45.             IR_State = 1;
  46.             IR_LDC_Ready = 0;           // Clear LeaDer Code Ready
  47.             IR_CTC_Ready = 0;           // Clear CusTomer Code Ready
  48.         }
  49.     }
  50.     // Customer code 0
  51.     else if((IR_State >= 2 && IR_State < 10) && (IR_LDC_Ready == 1))
  52.     {
  53.         IR_State++;
  54.         IR_CTC0 = IR_CTC0 >> 1;
  55.         if((Capture_Time >= IR_BIT_0_MIN) && (Capture_Time <= IR_BIT_0_MAX))          // 1.12ms = 0
  56.             IR_CTC0 &= 0x7f;
  57.         else if((Capture_Time >= IR_BIT_1_MIN) && (Capture_Time <= IR_BIT_1_MAX)) // 2.25ms = 1
  58.             IR_CTC0 |= 0x80;
  59.         else
  60.             IR_State = 0;
  61.     }
  62.     // Customer code 1
  63.     else if((IR_State >= 10 && IR_State < 18) && (IR_LDC_Ready == 1))
  64.     {
  65.         IR_State++;
  66.         IR_CTC1 = IR_CTC1 >> 1;
  67.         if((Capture_Time >= IR_BIT_0_MIN) && (Capture_Time <= IR_BIT_0_MAX))          // 1.12ms = 0
  68.             IR_CTC1 &= 0x7f;
  69.         else if((Capture_Time >= IR_BIT_1_MIN) && (Capture_Time <= IR_BIT_1_MAX)) // 2.25ms = 1
  70.             IR_CTC1 |= 0x80;
  71.         else
  72.             IR_State = 0;
  73.     }
  74.     // Data
  75.     else if((IR_State >= 18 && IR_State < 26) && (IR_LDC_Ready == 1))
  76.     {
  77.         IR_State++;
  78.         IR_DAC = IR_DAC >> 1;
  79.         if((Capture_Time >= IR_BIT_0_MIN) && (Capture_Time <= IR_BIT_0_MAX))          // 1.12ms = 0
  80.             IR_DAC &= 0x7f;
  81.         else if((Capture_Time >= IR_BIT_1_MIN) && (Capture_Time <= IR_BIT_1_MAX))     // 2.25ms = 1
  82.             IR_DAC |= 0x80;
  83.         else
  84.             IR_State = 0;

  85.     }
  86.     // Data bar
  87.     else if((IR_State >= 26 && IR_State < 34) && (IR_LDC_Ready == 1))
  88.     {
  89.         IR_State++;
  90.         IR_DAB = IR_DAB >> 1;
  91.         if((Capture_Time >= IR_BIT_0_MIN) && (Capture_Time <= IR_BIT_0_MAX))      // 1.12ms = 0
  92.             IR_DAB &= 0x7f;
  93.         else if((Capture_Time >= IR_BIT_1_MIN) && (Capture_Time <= IR_BIT_1_MAX))     // 2.25ms = 1
  94.             IR_DAB |= 0x80;
  95.         else
  96.             IR_State = 0;

  97.         if(IR_State == 34)
  98.         {
  99.             if((IR_DAC ^ IR_DAB) == 0xff)
  100.             {
  101.                 IR_LDC_Ready = 0;   // Clear LeaDer Code Ready
  102.                 IR_CODE[0] = IR_CTC0;
  103.                 IR_CODE[1] = IR_CTC1;
  104.                 IR_CODE[2] = IR_DAC;
  105.                 IR_CODE[3] = IR_DAB;
  106.                 IR_cnt++;
  107.                  printf("IR_cnt=%Bd,CTC0=%bX,CTC1=%bX,DAC=%bX,DAB=%bX\n", IR_cnt,IR_CTC0,IR_CTC1,IR_DAC,IR_DAB);
  108.            }
  109.             IR_State = 0;
  110.         }
  111.     }
  112. }
  113. /************************************************************************************************************
  114. *    Timer2 Capture interrupt subroutine
  115. ************************************************************************************************************/
  116. void Capture_ISR (void) interrupt 12
  117. {
  118.                                 uint16_t T2_count;
  119.                                 T2_count =(C0H<<8)+C0L;
  120.                                 IrDa_NEC_Rx(T2_count);
  121.                                 clr_CAPF0;                          // clear capture0 interrupt flag       
  122.                                 clr_TF2;       
  123. }

  124. /************************************************************************************************************
  125. *    Main function
  126. ************************************************************************************************************/
  127. void main(void)
  128. {
  129.         Set_All_GPIO_Quasi_Mode;
  130.         InitialUART0_Timer3(115200);
  131.         P15_Input_Mode;
  132.         P15 = 1;
  133.        
  134.         T2MOD = 0XA9;                        // 定时器2时钟定义为16分频,捕获事件发生后计数值自动清0
  135.         T2CON&=~SET_BIT0;  //定义定时器2功能为自动重装载模式
  136.        
  137.         IC7_P15_CAP0_FallingEdge_Capture;  //下降沿捕获

  138.         TL2 = 0;
  139.         TH2 = 0;

  140.         set_EA;
  141.         set_ECAP;                                   //Enable Capture interrupt
  142.         set_TR2;                                    //Triger Timer2

  143.        
  144.         while(1);
  145. }
复制代码

所有资料51hei提供下载:
N76E003_necR_samplecode_time2_capture.zip (1.11 MB, 下载次数: 66)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:327071 发表于 2019-5-20 19:27 | 显示全部楼层
好东西,正好需要,学习学习
回复

使用道具 举报

ID:633827 发表于 2019-11-1 14:09 | 显示全部楼层
谢谢楼主的无私精神
回复

使用道具 举报

ID:615610 发表于 2020-6-21 16:29 | 显示全部楼层
真是好东西,谢谢楼主分享
回复

使用道具 举报

ID:1017899 发表于 2022-9-30 14:05 来自手机 | 显示全部楼层
wxbdcmh 发表于 2020-6-21 16:29
真是好东西,谢谢楼主分享

你试了没
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表