欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
一個433 315 RF的STM32解碼程序
[打印本頁]
作者:
boboxuexi
時間:
2020-10-23 13:04
標題:
一個433 315 RF的STM32解碼程序
RF 協議 同步信號 300us高電平 10MS 低電平,數據 “0” 300us 高電平 1ms 低電平。
數據 “1” 1ms 高電平 300us低電平。
只需要配置一個中斷,將這個函數放在中斷里調用,
void ir_interrupt_drives(void)//中斷50us中調用
在main 中 while(1)里面 調用 IR_Process(); 即可實現RF的解碼。
單片機源程序如下:
// Copyright (c) all rights reserved
//********************版權和版本的聲明**********************
//************************項目信息**************************
//項目名稱:
//客戶名稱:
//************************文件信息**************************
//文件名稱: hal_ir.c
//文件頭文件: hal_ir.h
//作 者:zenghb
//起止時間:2020年3月26日11:58:41
//文件版本:V2.0
//校 驗 和:
//************************硬件信息**************************
//目標器件:ob39s003
//源 時 鐘:
//PCBA型號:
//************************平臺信息**************************
//開發環境:keil
//燒錄環境:
//配置內容:
//************************功能信息**************************
//程序功能:
//函數列表:
//************************修改記錄**************************
// <author> <time> <version> <desc>
//1.zenghb 2020-03-26 V2.0
//2.
//**********************************************************
#include "hal_ir.h"
#define INTERRUPT_INT4 2
//-------------------------1-------------------------------------------------------------------
IR_Typedef IR1;
#define IR1_DECODE_VALUE 0x87
#define IR2_DECODE_VALUE 0x87
#define IR3_DECODE_VALUE 0x87
#define IR4_DECODE_VALUE 0x87
#define IR5_DECODE_VALUE 0x87
#define IR6_DECODE_VALUE 0x87
//unsigned int ProcessTime;
void ir_agreement_check(void)
{
static unsigned char i; //接收紅外信號處理
IR1.IrTimeOutCnt = 20;
IR1.Falg.bits.IrEndFlag = 0; //只要有下降沿,結束是不存在結束。
if(IR1.Falg.bits.StartFlag)
{
if( IR1.IrTime < 220 && IR1.IrTime >= 180)//引導碼 TC9012的頭碼,10.0ms
{
i=0;
}
if(!IR1.Falg.bits.IR_OK)
{
if(i>1)
{
if(IR1.IrTime < 4 || IR1.IrTime > 23)
{
IR1.Falg.bits.StartFlag = 0;
}
}
IR1.IrData[i++] = (unsigned char)IR1.IrTime;//存儲每個電平的持續時間,用于以后判斷是0還是1
IR1.IrTime = 0;
}
if(i >= 24)
{
IR1.Falg.bits.IR_OK=1;
i=0;
}
}
else
{
IR1.IrTime = 0;
IR1.Falg.bits.StartFlag = 1;
}
}
void ir_decode(void)//紅外碼值處理函數
{
unsigned char i,j, k,value;
k=1;
for(i=0;i<3;i++)
{
for(j=1;j<=8;j++) //處理1個字節8位
{
value<<=1;
if( IR1.IrData[k] > 17 && IR1.IrData[k] < 23)//大于某值為1,這個和晶振有絕對關系,這里使用12M計算,此值可以有一定誤差
{
value|=0x01;
}
k++;
}
IR1.IrCode[i] = value;
}
value=0;
}
void IR_Process(void)
{
if(IR1.Falg.bits.IR_OK) //如果接收好了進行紅外處理
{
ir_decode1();
if(IR1.ProcessTime>0)
{
IR1.IrCode[0]=0;
IR1.IrCode[1]=0;
IR1.IrCode[2]=0;
}
IR1.Falg.bits.IR_OK=0;
if(IR1.IrCode[0]==0xaa && IR1.IrCode[1]==0xaa)
{
IR1.ProcessTime = 10000;
}
}
}
void ir_interrupt_drives(void)//中斷100us中調用
{
static unsigned char CheckCnt,IRStatus=0;
if(IR1.ProcessTime>0)
{
IR1.ProcessTime--;
}
if(PIN_IR1)
{
if(++CheckCnt > 2)//在中斷中調用 值為2即可,快速掃描,適當加長可提高防抖效果。
{
CheckCnt = 2;
if(IRStatus==0)
{
ir_agreement_check1();//下降沿
}
IRStatus =1;
}
}
else
{
IR1.IrTime++;
if(CheckCnt)
{
CheckCnt--;
}
else
{
if(IRStatus)
{
IRStatus = 0;
}
}
}
}
復制代碼
作者:
aaa112
時間:
2021-8-1 15:08
不用中斷方式行嗎?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1