历史上的今天

今天是:2024年11月25日(星期一)

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

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

单片机源程序如下:

  1. /*

  2. *********************************************************************************************************

  3. *

  4. *        模块名称 : EV1527遥控解码

  5. *

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

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

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

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

  10. *********************************************************************************************************

  11. */

  12. #include "EV1527.h"

  13. #include "led.h"

  14. #include "tim1.h"

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

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

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

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

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

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

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

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

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

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

  25. u8  EV1527_pin_state_buf;            //引脚定义缓存

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

  27. u16 TongBuMa_low=0;

  28. u16 a_count=0;              

  29. bool  LearningModel=FALSE;           //学习模式

  30. bool  INT_bit=FALSE;

  31. // 定时器2配置函数

  32. void EV1527_TIM1_Config(void)

  33. {

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

  35.   TIM1_ARRPreloadConfig(ENABLE);

  36.   TIM1_ITConfig(TIM1_IT_UPDATE , ENABLE);

  37.   TIM1_Cmd(ENABLE);//DISABLE

  38. }

  39. /*

  40.     初始化

  41. */

  42. void EV1527_Init()

  43. {

  44.           /* 输入模式 */

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

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

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

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

  49.     EV1527_TIM1_Config();

  50. }

  51. /*

  52. ********************************************************************************

  53.             定时器溢出中断内处理

  54. ********************************************************************************

  55. */

  56. void EV1527_TIM_IT_Updata_Handdle(void)

  57. {

  58.     TIM1_SetCounter(0);

  59.     EV1527_Status=0;

  60.     EV1527_Receive_Count=0;

  61.     //EV1527_repeat=0;

  62.     //EV1527_Receive_Data=0;

  63.     Interval_tim_low=0;   

  64.     EV1527_time_out_buf=0;   

  65.    // TIM1_Cmd(DISABLE);   

  66.     TIM1_ClearITPendingBit(TIM1_IT_UPDATE);   

  67.    

  68. }


  69. /*

  70.     外部中断触发函数

  71. 开始接收地址码跟数据码

  72. */

  73. void EV1527_ChuLi(void)

  74. {      

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

  76.   EV1527_Receive_Count=0;

  77.   while(EV1527_Receive_Count<48)

  78.   {   

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

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

  81.     TIM1_SetCounter(0);

  82.     EV1527_Receive_Data[EV1527_Receive_Count].Width=Interval_tim_high;

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

  84.     EV1527_Receive_Count++;         

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

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

  87.     TIM1_SetCounter(0);

  88.     EV1527_Receive_Data[EV1527_Receive_Count].Width=Interval_tim_low;

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

  90.     EV1527_Receive_Count++;

  91.     if(EV1527_Status==0)

  92.     {

  93.       EV1527_Receive_Count=49;//超时退出

  94.     }

  95.   }

  96.   if(EV1527_Status==0)

  97.   {

  98.     EV1527_receive_ok=0;

  99.     EV1527_Receive_Count=0;  

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

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

  102.     TIM1_SetCounter(0);      

  103.   }

  104.   else

  105.   {

  106.     EV1527_receive_ok=1;

  107.   }

  108. }


  109. void EV1527_Receive_Handle(void)

  110. {   

  111.   if(INT_bit==TRUE)

  112.   {

  113.     INT_bit=FALSE;  

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

  115.     a_count=0;

  116.     TongBuMa_low=0;

  117.     EV1527_Status=1;

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

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

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

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

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

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

  124.     {                                   

  125.       EV1527_ChuLi();     

  126.     }

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

  128.     {

  129.       EV1527_Status=0;

  130.       EV1527_Receive_Count=0;  

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

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

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

  134.     }

  135.   }

  136.   

  137. }


  138. /*

  139.     数据处理

  140. */

  141. u8 EV1527_Process()

  142. {

  143.   u8 EV1527_Data=0;

  144.   

  145.   if(EV1527_receive_ok>=1)

  146.   {

  147.     u8 i=0;

  148.     u8 beishu=0;

  149.     u8 EV1527_DataTemp[24]={0};

  150.     u8 EV1527_addTemp_high=0;

  151.     u8 EV1527_addTemp_low=0;

  152. //    High_Low  Level_0,Level_1;        //电平   

  153.     u16       Width_0,Width_1;        //宽度


  154.     while(i<48)

  155.     {

  156.      // Level_0= EV1527_Receive_Data[i].Level;

  157.       Width_0=EV1527_Receive_Data[i].Width;

  158.       i++;

  159.     //  Level_1= EV1527_Receive_Data[i].Level;

  160.       Width_1=EV1527_Receive_Data[i].Width;      

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

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

  163.       {

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

  165.       }      

  166.       else

  167.       {

  168.         i=50;

  169.       }

  170.       i++;

  171. //      if(i>=46)

  172. //      {

  173. //        Level_0= EV1527_Receive_Data[i].Level;

  174. //      }

  175.     }

  176.     if(i<49)

  177.     {

  178.       //解析地址

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

  180.       {  

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

  182.         {

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

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

上一篇:STM8单片机+EV1527无线315&433通用遥控解码
下一篇:stm8的18b20温度显示程序

推荐阅读

我国已连续五年位列全球最大的工业机器人市场,国产工业机器人的占比首次下降—两组数据之后,是中国机器人产业走到了创新能力亟待提升的关键时刻。 2017年,中国工业机器人市场销量再创新高,超过14万台,平均增速达到60%。“但是,整个国产机器人的占比突然下滑6个百分点,这是非常大的特点。” 创新迫在眉睫 “向价值链上游爬升,是中国机器人产业...
//调试总结://显著的问题是,写时序、读时序中,PIC MCU向总线写1是通过改方向为输入方向由上拉电阻拉高数据线实现的,而非在输出方向下输出1,与AVR不同//某IO口8位未全使用时,对整个IO口读取进行位运算无效//使用if(dat2&0xf8==0xf8)时,进错分支导致显示乱码仍未找到原因,用if(dat2>=240)代替正常#include<pic.h>#define uchar unsigned char#defi...
作为设计和生产创新性半导体材料的全球领军企业,法国 Soitec 半导体公司于 11 月 18 日公布了 2021 上半财年业绩(截止至 2020 年 9 月 30 日)。该财务报表 4 于 11 月 18 日获董事会批准。 Soitec 首席执行官 Paul Boudre 评论道:“2021 上半财年,凭借稳定的收入和略高于 30%的电子产品业务 EBITDA,我们有望实现全财年财...
11月24日,2022年IEEE Fellow名单正式公布。新增311名Fellow,73名华人学者当选。清华大学电子工程系主任汪玉、清华大学软件学院副教授杨铮均上榜。其中,清华大学电子工程系主任汪玉当选2022 IEEE Fellow,以表彰他对领域专用加速器设计做出的贡献。据公开资料显示,1982年3月,汪玉出生于安徽枞阳人,本硕博就读于清华大学,博士阶段师从杨华中教授和...

史海拾趣

问答坊 | AI 解惑

DSP培训第一天全部资料

第一天的资料分两个部分,一个是学习资料,一个是练习作业的源码。…

查看全部问答∨

单片机做的智能台灯

这是用片机做的智能台灯,大家看看....…

查看全部问答∨

征求意见,无线钥匙追踪器

    今天又帮妈找钥匙,累的一身汗。妈上了年纪,记性不好了,每次出门前都是一顿找,做电子的我感觉这也不是个难事儿,无线收发模块就能解决,钥匙上放一个发射器,再做一个接收器,上面配一个小灯,亮度或者闪烁频率表示和目标的 ...…

查看全部问答∨

求Proteus仿真例子

我现在正在学单片机仿真,希望各位多提供关于这方面的资料,谢谢…

查看全部问答∨

EVC 隐式调用动态链接库得问题

我有个动态链接库,头文件里定义了结构体和函数名 struct FvFixed {         CString m_str; public:         friend FvFixed const        operator+(const FvFixed x, const ...…

查看全部问答∨

STM32的AD精度-±1.3LSB

ST又出了新的数据手册 Rev 6,其中可以看出AD精度很高,跟我以前做过的试验相符,请看,第65页:Table 46. ADC accuracy - limited test conditionsSymbol Parameter   &nb ...…

查看全部问答∨

请问:STM32中双ADC快速交替模式如何使用?

最近在学习使用STM32的ADC,单ADC已经调试成功了,LCD可以显示实际波形。 看到有双ADC快速交替模式,可以提高一倍的速度,就改为该模式,用二个ADC采样同一个输入。 但是无论如何都调试不出来,只有ADC1的值,没有ADC2的值。 看了论坛几乎 ...…

查看全部问答∨

求助:关于TLV320AIC23的操作

各位大虾:我在DM642里面对TLV320AIC23进行Transmit操作时,遇到一个问题。代码如下,各同步时钟信号AFSX、ACLKX、AHCLKX由AIC23提供。 MCASP_ConfigSrctl MysrctlRegs = {      0x00000009,    //AXR00=Xmt &nbs ...…

查看全部问答∨

08.17【每周讨论】AVS,神马的浮云?

上次参加富士通MB86H61+茁壮的iPanel的推荐会时,富士通和茁壮的人对他们软硬件整体方案表现出了非常强的信心,主要有以下几点优势:成本低,据说实现的整体方案可以比同类的竞争方案低15%(好像没算因为只仅用双层板带来的生产成本,大约还可节约2 ...…

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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