zzh2118 发表于 2020-10-18 20:49 遥控器配对功能已实现,但目前不是在10秒内 而是在整个期间按指定键实现。。还需要优化 |
在主机上电10秒内 按压遥控器指定按键 实现配对功能 这个又是怎么实现的呢? 目前还是不懂 |
PT2262的按键可以扩展到31个以上 (地址码保留的情况下) |
谢谢关注 |
无线解码程序已搞定,现在测试了4个遥控器都可以,分别是PT2262 震荡电阻3.3M 和4.7M 任意地址都可以。另外2个是单片机写的20按键和21按键,时序和2262芯片基本一致。 |
这份是从网上找的,试过了也不行啊,程序中没有同步码解码 #include<reg52.h> //库文件 #include< stdio.h> #define uchar unsigned char//宏定义无符号字符型 #define uint unsigned int //宏定义无符号整型 uint addr,key; uchar cntint;//外部中断0计数 void eint0(void) interrupt 0//外部中断0 { static uint tempaddr;//接收地址缓存 static uint tempkey;//接收数据缓存 uint timecnt; timecnt=TH0*256+TL0; TH0=0; TL0=0; if(cntint<16)//接收地址码 { tempaddr=tempaddr<<1;//将接收的到最低位移到最高位 if(timecnt>1000)//210为宽脉冲与低脉冲界线,当振荡电阻为1M时,窄脉冲为110uS,宽脉冲为320uS { tempaddr|=1;//宽脉冲为1 } cntint++;//中断次数加1 } else if(cntint<24)//接收数据码 { tempkey=tempkey<<1; if(timecnt>1000) { tempkey|=1; } cntint++; } else//cntint大于24也就是中断了25次时,关闭外部中断0,等待同步码 { TMOD&=0xf0;//设定时器0为定时方式 TMOD|=0x01; TH0=0xf9; TL0=0x66; cntint=0; EX0=0;//关外部中断0 addr=tempaddr; key=tempkey; tempaddr=0; tempkey=0; } } void timer0(void) interrupt 1//定时器0中断,只有初始化时,空闲时和同步码到来时才中断 { TMOD&=0xf0;//将定时器0的工作方式设为门控定时,用以检测脉宽。 TMOD|=0x09; cntint=0;//外部中断0中断次数设为0 TH0=0;//设定时器0定时初值为0 TL0=0; EX0=1;//允许外部中断0 IE0=0;//清除外部中断0标志 } void main(void) { // void sendd(unsigned int intnum); unsigned int i; TMOD=0x21;//设定定时器0和定时器1,定时器1用来驱动串口 TH0=0xf9;//设定定时器的初始值,这个值必小于同步码 TL0=0x66; // TH1=243;//12M晶振时,串口波特率为2400 // TL1=243; TH1=0xdc;//11.0592M晶振时,串口波特率为9600 TL1=0xdc; SCON=0x50;//设定串口工作方式 TI=1;//要用printf就将其设为1 EA=1;//开所有中断 ET0=1;//开定时器0中断 EX0=0;//关外部中断0,在Timer0中断里面将其打开 IT0=1;//外部中断0设为跳变触发 TR0=1;//定时器0启动 TR1=1;//定时器1启动 while(1) { // P2=key; // P0=key>>8; printf("%u\n",addr);//输出解码地址 printf("%u\n\n",key);//输出解码数据 for(i=0;i<65500;i++);//这个用来防止串口不同步 } } /******************************************************************** 结束 *********************************************************************/ |
理论上可行,为什么实物却不行,请大佬帮我解惑。
|
本帖最后由 zzh2118 于 2020-10-8 13:29 编辑 用第三个接收模块 (τ 宝买的超再生)却根本接收不到这款的发射信号,其它的接收都正常,包括汽车遥控,滚动码,三个波形都一致。滚动码的脉冲多达95个 |