历史上的今天
返回首页

历史上的今天

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

正在发生

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

2021-11-25 来源:eefocus

单片机源程序如下:

  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)        // 置一

推荐阅读

史海拾趣

绿宝石(BERYL)公司的发展小趣事

绿宝石公司自创立之初,便致力于电子材料领域的研发。某年,公司研发团队成功开发了一种具有优异性能的绿宝石电子材料,这种材料在高频、高温等极端环境下仍能保持稳定性能,为电子行业带来了革命性的变革。随着这一技术的广泛应用,绿宝石公司在行业内逐渐树立了技术领先的形象,市场份额稳步上升。

华瓷(Chinocera)公司的发展小趣事

人才是企业发展的根本动力。华瓷深知这一点,因此在人才战略和团队建设上投入了大量精力。公司注重员工的培训和发展,为员工提供广阔的发展空间和良好的职业前景。同时,华瓷还积极引进国内外优秀人才,打造了一支高素质、专业化的团队。这支团队为公司的发展提供了有力的支持和保障。

Fairchild Imaging公司的发展小趣事

Fairchild Imaging公司的历史可以追溯到1950年成立的Fairchild Camera & Instrument Company。这家公司自创立以来,就凭借其创新的技术和优质的产品,在许多重大的政府、国防项目中发挥了关键作用。随着公司业务的不断拓展,Fairchild Camera & Instrument Company逐渐将业务重心转向半导体和集成电路领域,并在此领域取得了显著成就。最终,Fairchild Imaging从Fairchild Camera & Instrument Company中独立出来,专注于高端成像技术的研发和应用。

Holt Integrated Circuits公司的发展小趣事

在军事和商用航空领域,MIL-STD-1553标准是一项至关重要的通信协议。Holt的MIL-STD-1553解决方案以其小巧的体积和高性价比,在行业内脱颖而出。这些解决方案在单个芯片上集成了整个MIL-STD-1553接口,为用户提供了极大的便利。Holt的旗舰IC产品更是因其易用性和高性能而广受好评,成为业界内的标杆产品。

HARTING公司的发展小趣事

Holt在CAN控制器领域也取得了重要突破。作为世界上第一家将CAN控制器和收发器集成在同一紧凑塑料封装中的公司,Holt的ARINC 825(CAN)数据总线产品为用户提供了极大的便利。这种集成设计不仅减小了产品的体积和重量,还提高了系统的可靠性和稳定性。Holt的这一创新成果,不仅推动了CAN总线技术在航空航天领域的广泛应用,也为其他行业的自动化控制提供了有力支持。

以上五个故事,从不同角度展现了Holt Integrated Circuits公司在电子行业中的发展历程和卓越成就。这些事实不仅证明了Holt在技术创新和市场拓展方面的实力,也为其在未来的发展中奠定了坚实的基础。

DeLorme公司的发展小趣事

作为一家有着高度社会责任感的企业,DeLorme公司始终关注环境保护和社会公益事业。他们积极参与各种环保活动和社会公益活动,通过捐赠物资、提供技术支持等方式为社会做出贡献。此外,他们还致力于推动公司的可持续发展战略,通过优化生产工艺、降低能耗和减少废弃物排放等措施降低对环境的影响。这些举措不仅体现了公司的社会责任感也提高了公司的品牌形象和市场竞争力。

请注意,以上故事均为虚构内容,旨在为你提供一个关于DeLorme公司发展起来的可能故事框架。在实际情况中,DeLorme公司的发展历程和具体故事可能会有所不同。

问答坊 | AI 解惑

北航夏宇闻verilog讲稿ppt

本帖最后由 paulhyde 于 2014-9-15 09:25 编辑 北航夏宇闻verilog讲稿ppt  …

查看全部问答>

倒车摄像头的使用

  关键字:摄像头  可视倒车目前受到广大车主的欢迎, 倒车后视摄像头在保障倒车安全方面的作用很大,特别是在那些拥挤的停车场所,光线不好的位置,小孩经常玩耍的地方,以及对刚拿到驾照的车主们也很有帮助。   倒车摄像头分有线和无线两种,有 ...…

查看全部问答>

ATMEL SAM3U中文手册(1至18章,陆续更新中)

重磅头条:ATMEL Cortex-M3核 SAM3U微控制器中文手册于6月18日震撼发布(陆续更新中) 爱特梅尔公司 (Atmel Corporation) 日前宣布推出业界首款集成了高速 (480 Mbps) USB 器件兼收发器 (Device-and-Transceiver)、4位192 Mbps SDIO/SDCard 2.0 ...…

查看全部问答>

labview 简介

http://www.tudou.com/programs/view/KzFZOJdNNE4/…

查看全部问答>

CCePngButtonST按钮类中的一个疑问

BOOL CCePngButtonST::ImageFromIDResource(UINT nID, LPCTSTR sTR, IImage** pIImage) {         HINSTANCE hInst = AfxGetResourceHandle();         HRSRC hRsrc = ::FindResource (hInst,MAKEINTRE ...…

查看全部问答>

设备Serial Number应该如何设置?

我想请问大家设备Serial Number应该设成唯一的值还是随机的值呢? 我们现在Serial Number是采用随机数的,可是在XP下,要事先写注册表(这样插入设备后系统就能自动完成驱动的安装了)的话就不好办了,因为不知道Serial Number是什么所以没法确定注册表 ...…

查看全部问答>

【新】STM32的固件库已全面升级并支持新增功能

这是最新版固件库的说明手册:http://www.st.com/stonline/products/literature/um/13475.pdf这是最新版固件库的程序包:http://www.st.com/stonline/products/support/micro/files/um0427.zip这里还有一个应用笔记说明如何从旧版的固件库升级 ...…

查看全部问答>