历史上的今天

今天是:2024年11月12日(星期二)

2021年11月12日 | STM8单片机+EV1527无线315&433通用遥控解码

发布者:SereneJourney 来源: eefocus关键字:STM8  单片机  EV1527 手机看文章 扫描二维码
随时随地手机看文章

STM8_无线315&433通用解码


单片机源程序如下:

/*

*********************************************************************************************************

*

*模块名称 : EV1527遥控解码

*上升沿触发 触发中断后延时一段时间后检测引脚电平从而判断0 1

采集上升沿触发后第6 10 14     个振荡周期时的引脚电平 RF98

PT2262 连续触发是每个周期的间隔在15MS左右

EV1527   宽电平时间 500US 窄 250us 同步码 5.7MS

*********************************************************************************************************

*/

#include "EV1527.h"

#include "led.h"

#include "tim1.h"

u8  EV1527_Status=0;                 //接收处理状态

u8  EV1527_Receive_Count=0;          //接收数据位计数

Receive_Data  EV1527_Receive_Data[48];      //24位的脉冲

u8  EV1527_receive_ok=0;             //接收完成标志

//u8  EV1527_gather_count=3;           //每个码位采集3次

//u8  EV1527_code[3];                  //用来暂时存储采集3次得到的值

//u8  EV1527_repeat;                   //重复触发计数

u8  EV1527_check_level_bit;          //外部中断触发(上升沿)标志。有外部中断触发后则开始检测引脚电平是否有变化。

u16 Interval_tim_high=0;             //上升沿触发后高电平时间

u16 Interval_tim_low=0;              //上升沿触发后低电平时间

u8  EV1527_pin_state_buf;            //引脚定义缓存

u16 EV1527_time_out_buf;             //定时器超时时间缓存

u16 TongBuMa_low=0;

u16 a_count=0;              

bool  LearningModel=FALSE;           //学习模式

bool  INT_bit=FALSE;

// 定时器2配置函数

void EV1527_TIM1_Config(void)

{

  TIM1_TimeBaseInit(8,TIM1_COUNTERMODE_UP,50000,0); //8分频,定时50MS,1uS的分辨率

  TIM1_ARRPreloadConfig(ENABLE);

  TIM1_ITConfig(TIM1_IT_UPDATE , ENABLE);

  TIM1_Cmd(ENABLE);//DISABLE

}

/*

    初始化

*/

void EV1527_Init()

{

          /* 输入模式 */

    GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_PU_IT);                 //配置浮空输入。

        /* 将GPIOD端口设置为下降沿触发中断-*/

    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);//下降沿触发。

    GPIO_Init(LED_PORTD, (LED_2|LED_3), GPIO_MODE_OUT_PP_HIGH_FAST );   

    EV1527_TIM1_Config();

}

/*

********************************************************************************

            定时器溢出中断内处理

********************************************************************************

*/

void EV1527_TIM_IT_Updata_Handdle(void)

{

    TIM1_SetCounter(0);

    EV1527_Status=0;

    EV1527_Receive_Count=0;

    //EV1527_repeat=0;

    //EV1527_Receive_Data=0;

    Interval_tim_low=0;   

    EV1527_time_out_buf=0;   

   // TIM1_Cmd(DISABLE);   

    TIM1_ClearITPendingBit(TIM1_IT_UPDATE);   

   

}


/*

    外部中断触发函数

开始接收地址码跟数据码

*/

void EV1527_ChuLi(void)

{      

   //for(EV1527_Receive_Count=0;EV1527_Receive_Count<48;EV1527_Receive_Count++)

  EV1527_Receive_Count=0;

  while(EV1527_Receive_Count<48)

  {   

    while((EV1527_port->IDR &EV1527_pin)&&(EV1527_Status==1));         //如果是高电平就等待  

    Interval_tim_high=TIM1_GetCounter();                               //记录高电平时间     

    TIM1_SetCounter(0);

    EV1527_Receive_Data[EV1527_Receive_Count].Width=Interval_tim_high;

    EV1527_Receive_Data[EV1527_Receive_Count].Level=1;                 //保存到数组中                  

    EV1527_Receive_Count++;         

    while(!(EV1527_port->IDR &EV1527_pin)&&(EV1527_Status==1));       //如果是低电平就等待   

    Interval_tim_low=TIM1_GetCounter();                               //记录高电平时间  

    TIM1_SetCounter(0);

    EV1527_Receive_Data[EV1527_Receive_Count].Width=Interval_tim_low;

    EV1527_Receive_Data[EV1527_Receive_Count].Level=0;                 //保存到数组中     

    EV1527_Receive_Count++;

    if(EV1527_Status==0)

    {

      EV1527_Receive_Count=49;//超时退出

    }

  }

  if(EV1527_Status==0)

  {

    EV1527_receive_ok=0;

    EV1527_Receive_Count=0;  

    GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_PU_IT);//配置上啦输入。

    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);//下降沿触发。

    TIM1_SetCounter(0);      

  }

  else

  {

    EV1527_receive_ok=1;

  }

}


void EV1527_Receive_Handle(void)

{   

  if(INT_bit==TRUE)

  {

    INT_bit=FALSE;  

    /* 开启定时器 0 记录低电平持续的时间,并检测是否为同步码 */     

    a_count=0;

    TongBuMa_low=0;

    EV1527_Status=1;

    while(!(EV1527_port->IDR &EV1527_pin)&&(EV1527_Status==1));   //如果是低电平就等待      

    if(EV1527_Status==TRUE) TongBuMa_low=TIM1_GetCounter();       //记录低电平时间

    TIM1_SetCounter(0);                                           //从新计时。

    /* 检测是否为同步码*/

    if((TongBuMa_low>=5000)&&(TongBuMa_low<=38000))               //检测前一个低电平时间,是否符合同步码标

                                                                  //是同步码 关闭外部中断,并开始接收地址码跟数据码

    {                                   

      EV1527_ChuLi();     

    }

    else                                                         //不是,则重新打开中断,继续检测同步码

    {

      EV1527_Status=0;

      EV1527_Receive_Count=0;  

      GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_PU_IT);          //配置上啦输入。

      EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);//下降沿触发。

      TIM1_SetCounter(0);                                        //定时器计数值清零

    }

  }

  

}


/*

    数据处理

*/

u8 EV1527_Process()

{

  u8 EV1527_Data=0;

  

  if(EV1527_receive_ok>=1)

  {

    u8 i=0;

    u8 beishu=0;

    u8 EV1527_DataTemp[24]={0};

    u8 EV1527_addTemp_high=0;

    u8 EV1527_addTemp_low=0;

//    High_Low  Level_0,Level_1;        //电平   

    u16       Width_0,Width_1;        //宽度


    while(i<48)

    {

     // Level_0= EV1527_Receive_Data[i].Level;

      Width_0=EV1527_Receive_Data[i].Width;

      i++;

    //  Level_1= EV1527_Receive_Data[i].Level;

      Width_1=EV1527_Receive_Data[i].Width;      

      beishu=(Width_0>Width_1)?(Width_0/Width_1):(Width_1/Width_0);

      if(beishu>=2)//如果两个宽度的倍数大于等于2说明是有效电平

      {

        EV1527_DataTemp[i/2]= (Width_0>Width_1)?1:0;

      }      

      else

      {

        i=50;

      }

      i++;

//      if(i>=46)

//      {

//        Level_0= EV1527_Receive_Data[i].Level;

//      }

    }

    if(i<49)

    {

      //解析地址

      for(i=0;i<20;i++)

      {  

        if(i<10)//解析高位  EV1527_address_high

        {

          if(EV1527_DataTemp[i]==1)        // 置一

          {

            EV1527_addTemp_high<<=1;

            EV1527_addTemp_high=EV1527_addTemp_high|0x01;                          

          }

          else if(EV1527_DataTemp[i]==0)      //置零

          {

            EV1527_addTemp_high<<=1;

          }   

        }

        else //解析低位

        {

          if(EV1527_DataTemp[i]==1)        // 置一

          {

            EV1527_addTemp_low<<=1;

[1] [2]
关键字:STM8  单片机  EV1527 引用地址:STM8单片机+EV1527无线315&433通用遥控解码

上一篇:STM8S005K6单片机点亮流水灯程序
下一篇:最后一页

推荐阅读

        11月11日消息,据外媒报道,知名苹果分析师郭明錤发布啦一份全新的研究报告,报告内容显示,2019年iPhone新机将会采用新的天线技术,使用新的MPI技术。  报告称,苹果将在明年的新机上放弃使用LCP天线技术。一方面,苹果面对LCP材料供应商具有“相对较低的议价权”,同时,由于“复杂的生产过程”,导致苹果很难再增加其他的LCP供应商。...
前些时间,根据路透社报道丰田将采购 5 万套松下的圆柱电池来做 PHEV,主要是卡罗拉(Corolla)和雷凌(Levin)的 PHEV 上。由于这款车的信息不多,现在网上有比较细节的信息发布出来,我做一些整理。这款电池系统确实是基于 18650 的电芯来做的,15 个电芯并联,然后 4 组串联形成一个模组。一共分成了 20 个模组,分成四个区块分总成。 60...
仓储物流机器人属于工业机器人的范畴,是指应用在仓储环节,可通过接受指令或系统预先设置的程序,自动执行货物转移、搬运等操作的机器装置。仓储物流机器人作为智慧物流的重要组成部分,顺应了新时代的发展需求,成为物流行业在解决高度依赖人工、业务高峰期分拣能力有限等瓶颈问题的突破口。近日,OFweek机器人网有幸采访到木蚁机器人CEO钱永强,为我们...
2021年10月23日,矽典微发布了毫米波传感器生命存在感应参考设计XenD101Pro。以高集成、低功耗、小体积的毫米波传感器SoC S3KM111L为核心,XenD101Pro得以把复杂的毫米波呼吸检测技术用于探测人体存在。人体在运动、微动、静坐、静卧等状态下均能准确检测,实现高灵敏度的生命存在感应能力。同时,XenD101Pro先进的抗干扰算法和高精度的测距,提升了传感...

史海拾趣

问答坊 | AI 解惑

HT1380串行时钟芯片

HT1380串行时钟芯片一般来说,HT系列的芯片在串行口的应用一直以来就是很好的在单片机 这个领域,串行时钟一直占着很重要的位置…

查看全部问答∨

毕业设计资料---气体检测

毕业设计资料---气体检测…

查看全部问答∨

Introduction to NI VeriStand

Introduction to NI VeriStand…

查看全部问答∨

奇怪了,请大家看下做标记的那几行代码

请大家看下下面打问号几行代码,抛开其功能不说,真的是奇怪了,我都看了又看,头都大了,就是不知道为什么,请朋友们指点下 #include<reg52.h>                     &nbs ...…

查看全部问答∨

显示驱动字体问题

各位,我的LCD屏换了片选脚后,凡是在打出字的部分,都有白色方框,这是什么问题,据说是什么透明度,什么没把数据写进去之类的原因,大家可否告诉我吗?…

查看全部问答∨

si4010有没有人用过,求探讨

si4010有没有人用过,求探讨,开发软件,调试软件,烧录工具等等…

查看全部问答∨

STM32的驱动库好用吗?效率高吗?优化的吗?准备上STM32

    N多年没买过开发板了,也没用过仿真器了。都是用软件编译调试好,直接ISP,然后通过串口命令开启调试信息的输出。    昨天买了块STM32F103全功能型开发板,他们的办事效率真低(深圳到广州通常当 ...…

查看全部问答∨

最适用于图像处理的TI公司DSP

请问用哪款TI的DSP板做图像处理比较好,要可以和Matlab连接使用,且可通过Real Time Work Shop工具箱自动生成代码,要是版本新一些就更好了 最近需要买一块板子,请大家多多给建议啊 谢谢…

查看全部问答∨

求IAR Embedded Workbench for MCS-51 完整版

各位高手,小弟求IAR Embedded Workbench for MCS-51完整版,有哪位高人有,能否分享一下。我的邮箱jinghongchen@126.com…

查看全部问答∨

猎头招聘

世界500强招聘压力传感器SAE,如有兴趣可发简历至:aerie.song@seek-jobs.com.cn 要求:至少五年以上相关工作经验,英文流利。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved