单片机源程序如下:
/*
*********************************************************************************************************
*
* 模块名称 : 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) // 置一
上一篇:STM8单片机+EV1527无线315&433通用遥控解码
下一篇:stm8的18b20温度显示程序
推荐阅读
史海拾趣
品质是CLANDELL公司一直以来的核心竞争力。公司建立了严格的质量管理体系,从原材料采购到产品生产的每一个环节都进行严格把控。同时,公司还加强了售后服务体系建设,确保客户在使用过程中能够得到及时、有效的支持。这些举措不仅提升了CLANDELL公司的产品品质,也赢得了客户的信任和好评。
在电子产品市场日益同质化的背景下,CLANDELL公司意识到技术创新的重要性。公司投入大量资源研发新型电子元件,通过优化设计和材料选择,成功推出了具有更高性能、更低能耗的电子产品。这一创新不仅提升了CLANDELL公司的市场竞争力,也为整个行业带来了技术进步的推动力。
随着电子行业的快速发展,客户对环形变压器的性能要求也越来越高。Amveco公司敏锐地捕捉到了这一市场变化,加大了在技术创新和产品升级上的投入。公司研发团队不断攻克技术难关,成功开发出了一系列具有更高效率、更低损耗的环形变压器产品,满足了客户对高性能产品的需求。同时,公司还不断优化生产工艺,提高了产品的可靠性和稳定性。
在技术创新和产品研发的过程中,赛微高度重视知识产权的保护和管理。公司积极申请各类专利和软件著作权,加强知识产权保护力度。截至目前,赛微已经拥有国际/国内软件著作权98项,国际/国内专利166项,正在申请的国际/国内专利64项。这些知识产权的积累不仅提升了公司的核心竞争力,也为公司的长期发展奠定了坚实基础。
EM Microelectronic-Marin SA,作为斯沃琪集团公司(The Swatch Group)的一部分,自1971年起便开始了对超低功率集成电路的探索。在当时,电子设备的功耗是一个重要的挑战,尤其是在移动和便携式设备中。EM Microelectronic-Marin凭借其前瞻性的技术视野,投入大量资源进行研发,逐渐在行业内建立了低功耗技术的领先地位。
品质是Big-Sun Electronics Co Ltd公司一直以来的核心竞争力。公司建立了严格的质量管理体系,从原材料采购到生产流程控制,再到产品出厂检验,每一个环节都严格把关。同时,Big-Sun还注重品牌建设,通过广告宣传和客户服务,不断提升品牌知名度和美誉度。
今天又帮妈找钥匙,累的一身汗。妈上了年纪,记性不好了,每次出门前都是一顿找,做电子的我感觉这也不是个难事儿,无线收发模块就能解决,钥匙上放一个发射器,再做一个接收器,上面配一个小灯,亮度或者闪烁频率表示和目标的 ...… 查看全部问答∨ |
|
我有个动态链接库,头文件里定义了结构体和函数名 struct FvFixed { CString m_str; public: friend FvFixed const operator+(const FvFixed x, const ...… 查看全部问答∨ |
|
ST又出了新的数据手册 Rev 6,其中可以看出AD精度很高,跟我以前做过的试验相符,请看,第65页:Table 46. ADC accuracy - limited test conditionsSymbol Parameter &nb ...… 查看全部问答∨ |
最近在学习使用STM32的ADC,单ADC已经调试成功了,LCD可以显示实际波形。 看到有双ADC快速交替模式,可以提高一倍的速度,就改为该模式,用二个ADC采样同一个输入。 但是无论如何都调试不出来,只有ADC1的值,没有ADC2的值。 看了论坛几乎 ...… 查看全部问答∨ |
各位大虾:我在DM642里面对TLV320AIC23进行Transmit操作时,遇到一个问题。代码如下,各同步时钟信号AFSX、ACLKX、AHCLKX由AIC23提供。 MCASP_ConfigSrctl MysrctlRegs = { 0x00000009, //AXR00=Xmt &nbs ...… 查看全部问答∨ |
上次参加富士通MB86H61+茁壮的iPanel的推荐会时,富士通和茁壮的人对他们软硬件整体方案表现出了非常强的信心,主要有以下几点优势:成本低,据说实现的整体方案可以比同类的竞争方案低15%(好像没算因为只仅用双层板带来的生产成本,大约还可节约2 ...… 查看全部问答∨ |