娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM8單片機+EV1527無線315&433通用遙控解碼

發布者:SereneJourney最新更新時間:2021-11-12 來源: 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單片機點亮流水燈程序
下一篇:STM8單片機+EV1527無線315&433通用遙控解碼程序

推薦閱讀最新更新時間:2025-06-11 15:54

STM8單片機+RC522電路原理圖+讀寫卡源代碼
基于stm8的ds1302模塊千萬別把數據寫在第3個區,不然卡就鎖住了,只能寫在第2個區 電路原理圖如下: stm8單片機源碼: /* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/ #include stm8s.h #include stm8s_clk.h #include intrinsics.h #include stm8s
[單片機]
<font color='red'>STM8</font><font color='red'>單片機</font>+RC522電路原理圖+讀寫卡源代碼
STM8單片機串口發送引腳和接收引腳分開使用
在使用STM8S003單片機時,需要用到ADC采樣功能,STM8S003總共有5個ADC采樣口,但是其中兩個采樣口是和串口復用的,如果當ADC口用,就不能用串口,如果當串口用,就不能用ADC口。 通過芯片管腳的原理圖可以看到PD5口可以當作模擬采樣第5通道使用,也可以用當做串口發送口使用。PD6口可以當做模擬采樣第6通道使用,也可以當做串口接收口使用。 在項目中需要將串口當做AD口使用,但是也需要串口向外發送監控數據。AD功能和串口功能需要同時使用,于是想到,串口只用到了發送引腳,那么能不能將串口的接收引腳當做AD功能用。這樣PD5口作為串口發送引腳使用,PD6口作為模擬采樣第6通道使用。 先寫一個簡單的測試程序測試一
[單片機]
<font color='red'>STM8</font><font color='red'>單片機</font>串口發送引腳和接收引腳分開使用
STM8 ADC轉換模式-------帶緩存的連續模式
STM8單片機ADC支持5種轉換模式:單次模式,連續模式,帶緩存的連續模式,單次掃描模式,連續掃描模式。 連續和帶緩存的連在連 換模式中,將ADC設為連續模式,該模式是通過置位 ADC_CR1寄存器的 ADON 位來啟動的。 ● 如果緩存功能被使能(DBUF=1),那么某個選定滿數據緩存,當緩存被填滿時,EOC(轉換結束)標志被置位,如果EOCIE位已被置位,則會產生一個中斷,然后一個新的轉換自動開始。如果某個數據緩存寄存器在被讀走之前被覆蓋,OVR標志將置1。 如果要停止連續轉換,可以復位清零CONT位來停止轉換或者復位清零ADON位來關閉ADC的電 源。 使用連續模式帶緩存功能查詢方式讀取數據代碼如下: #
[單片機]
STM8學習筆記---Modbus通信協議簡單移植
Modbus是一種串行通信協議,在工業中應用是比較廣泛的。關于Modbus的介紹網上資料很多,這里就不細說了。剛開始接觸的時候看Modbus的介紹,光是協議的介紹有幾百頁,還有各種命令,各種鏈路層的應用,看了幾天,越看越糊涂,越看越不會用。 最后在單片機上移植成功后才感覺Modbus協議沒那么復雜,如果剛開始學的時候,沒必要把Modbus協議中每個功能都去了解。就把它當做簡單的串口協議,只使用最簡單的幾個命令就行了。熟悉之后再慢慢了解其他功能。 下面就從單片機串口通信角度去理解Modbus協議,及如何將協議移植到單片機上。 先看看Modbus的協議 從大的方面來講,協議總共由4部分組成: 地址、功能、數據、校驗。
[單片機]
<font color='red'>STM8</font>學習筆記---Modbus通信協議簡單移植
STM8 外部中斷配置方法
簡介:STM8 外部中斷配置方法 1:引用STM8 的中斷庫 #include stm8s_exti.h 2:配置外部中斷的觸發管腳 GPIO_Init(LEDS_PORT,MB,GPIO_MODE_IN_FL_IT ); 或者 GPIO_Init(LEDS_PORT,MB,GPIO_MODE_IN_PU_IT )... 1:引用STM8 的中斷庫 #include stm8s_exti.h 2:配置外部中斷的觸發管腳 GPIO_Init(LEDS_PORT,MB,GPIO_MODE_IN_FL_IT ); 或者 GPIO_Init(LEDS_PORT,MB,GPIO_MODE_IN_PU_IT );
[單片機]
STM8 中I2C讀寫函數
void I2C_write(u8 Addr, u8 *WriteData, u8 length) { /* Send STRAT condition */ I2C_GenerateSTART(ENABLE); /* Test on EV5 and clear it */ while(!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT)); /* Send EEPROM address for write */ I2C_Send7bitAddress(Addr, I2C_DIRECTION_TX); /* Test on EV6 and clear it */ while(!
[單片機]
STM8 RAM
我關于實現IAP的理解,如果有誤,希望可以得到大家的斧正 1.IAP部分程序和應用程序分開兩個項目編寫。 2.應用程序部分編譯前要修改ICF文件,使其代碼安排到IAP程序區外,如0x9000 3.IAP項目編譯前也要修改ICF文件 a.修改代碼編譯后所在ROM中的位置,如:0x8000-0x8FFF b.按網友dianzidog 給出的方法,實現ram運行代碼 ////////////////////////摘自網友dianzidog的帖子 /////////////////////////////////// icf文件里面 initialize by copy { ro section MyCod
[單片機]
今年嵌入式展,MCU開啟神仙打架
這幾天,德國Embedded World國際嵌入式展正式召開。和往年一樣,今年的嵌入式展各大MCU巨頭又開啟了神仙打架模式。 可以說,這些巨頭發布的產品,一個比一個夸張。 TI:小,實在是太小了 跟其他廠商的策略不一樣,德州儀器(TI)推出了一款全球最小的MCU——MSPM0C1104,進一步擴展了其MSPM0 MCU產品組合。 這款MCU沒別的,就是小,很小,非常小。其采用晶圓芯片級封裝 (WCSP) ,面積僅為 1.38mm2,相當于一粒黑胡椒。TI稱這款MCU比業界目前最小的MCU還小38%。具體有多小呢,看下面的圖就懂了。 別看它這么小,性能也不含糊,該有的功能都有。通過TI官網介紹,MSPM0C110
[嵌入式]
今年嵌入式展,<font color='red'>MCU</font>開啟神仙打架
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

隨便看看

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 城口县| 康保县| 抚远县| 茂名市| 昆山市| 佛教| 绥中县| 繁昌县| 松阳县| 镇康县| 绥化市| 桃园县| 休宁县| 漯河市| 澄迈县| 衡阳县| 绩溪县| 海兴县| 乳源| 台中县| 开远市| 利津县| 高邮市| 溧水县| 澳门| 潢川县| 屯昌县| 衡水市| 定日县| 虞城县| 通渭县| 宜城市| 澳门| 和田县| 利川市| 呼和浩特市| 邳州市| 工布江达县| 射洪县| 定陶县| 沂源县|