你说的是四键盘手持遥控器吧,那个是没有晶振的,采用pt2262芯片,在15和16脚之间有一个震荡电阻,这个电阻配合芯片内部电路产生编码信号,然后由315兆的声表面滤波器稳频 在315M的载波上发射
请参考板子配套的文档,内有详细的资料
我原文件给我改乱了遥不了谁能分享下程序呀LBQ691477940@126.COM
/****************************************** ******* 文件名:Decode.c ******* 描述:对PT2262的编码信号进行解码PT2262的输出信号经三极管反向后送入单片机的中断引脚 ******* 代码:A0 -- A11 中的每bit用2bit表示:0码:00 ;1码:11 ******* 备注:PT2262输出数据的顺序:A0 A1 -- A10 A11+同步码+A0 A1 -- A10 A11+同步码,连续发四次 *******************************************/ #include<reg51.h> //51系列头文件 #include<intrins.h> //方便调用_nop_();做延时用; unsigned char Receive[3] ; //解码缓冲区:Receive[0]:A0 A1 A2 A3 ; Recdive[1]:A4 A5 A6 A7 ; Receive[2]: D3 D2 D1 D0 //Recdive[x]:xx xx xx xx 代表4bit bit flag = 0 ; //解码完成标志位 sbit RemPin = P3^2 ; //编码信号输入脚 /****************************************************** 函数名:INT0_ISR( ) 描 述: 外部中断0服务函数,实现对PT2262的解码 参 数:输入参数:无 输出参数:无 *******************************************************/ void INT0_ISR(void) interrupt 0 using 1 { unsigned char i = 0 ; unsigned char j = 0 ; unsigned int temp = 0x0000; //EA = 0 ; TH0 = 0 ; TL0 = 0 ; while( !RemPin) ; //等待高电平的到来,检测同步头 TR0 = 1 ; //启动定时器0,开始测量高电平的宽度 while( RemPin) { if( TF0 == 1 ) { goto RemExit; //定时器超时溢出则退出 } } TR0 = 0 ; temp = TH0 ; temp = temp << 8 ; temp = temp + TL0 ; //取得高电平的宽度 if( ( 0x36B0 < temp ) && ( temp < 0x4100) ) //检测到同步头 { for( j = 0 ; j < 3 ; j ++) //循环3次 { for( i = 0 ; i < 8; i ++ ) { TH0 = 0 ; TL0 = 0 ; while( !RemPin);//等待高电平到来 TR0 = 1 ; //开启定时器0 ,测量高电平的宽度 while( RemPin) { if( TF0 == 1 ) { goto RemExit; //定时溢出则退出 } } TR0 = 0 ; temp = TH0 ; temp = temp << 8 ; temp = temp + TL0 ; //取得高电平的宽度 if( ( 1000 < temp ) && (temp< 1800 ) ) //判断得窄脉冲:1表示 { Receive[j] = Receive[j] << 1 ; Receive[j] = Receive[j] + 0x01 ; } else if( ( 300 < temp) && (temp< 700) )//判断得宽脉冲:0表示 { Receive[j] = Receive[j] << 1 ; } else return; } } flag = 1 ; //表示已解码完毕 return; } else { goto RemExit; } RemExit: { TR0 = 0 ; //TR1=1; EA = 1 ; TF0 = 0 ; RemPin = 1 ; return; } }
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |