|
发表于 2007-11-17 17:42:21
|
显示全部楼层
哈,也是用22.1184的时钟。
前段时间做了个遥控音量电路,也是用这个频率的晶体。
一会找找程序,贴出来参考一下。
这个用的遥控器是长虹液晶LT3212的,长虹DVD的摇控器也一样接收。这些码的特点是以时间长度确定Bit0和Bit1的,连续按有一特定码。
时钟22.1184M。- #include <stdio.h>
- #include <reg52.h>
- #include <sio.c>
- #include <intrins.h>
- /*
- FF 61
- 08 08 08 09 08 08 10 08
- 10 10 11 10 10 10 08 10
- 09 10 08 10 08 08 08 08
- 11 08 10 08 10 10 11 10
- FF 51
- */
- bit s=0,t=0;
- union{
- struct{unsigned char h,hr,l,lr;}c;
- unsigned char b[4];
- }irbuf;
- bit irok=0;
- void inittimer0(void)
- {
- TMOD&=0xf0;
- TMOD|=0x02;
- TH0=0x0;
- TL0=0x0;
- TR0=1;
- ET0=1;
- EA=1;
- }
- void timer0(void) interrupt 1
- {
- static unsigned char ir=0,irc=0,ird=0,irp=0;
- static bit int1;
- if(ir!=0xff)ir++;
- if(INT1){
- int1=1;
- }else if(int1){
- int1=0;
- if(ir>0x5c && ir<0x66){
- irc=0;ird=0;irp=0;
- }else if(ir>0x4c && ir<0x56){
- irok=1;
- }else if(ir>0x5 && ir<0xc){
- irc<<=1;
- ird++;
- if(ird>=8 && irp<4){
- irbuf.b[irp]=irc;
- irp++;
- ird=0;
- irc=0;
- }
- }else if(ir>0xd && ir<0x14){
- irc<<=1;
- irc|=1;
- ird++;
- if(ird>=8 && irp<4){
- irbuf.b[irp]=irc;
- irp++;
- ird=0;
- irc=0;
- }
- }
- ir=0;
- }
- }
- main()
- {
- initsio();
- inittimer0();
- while(1){
- PCON|=1;
- if(irok && irbuf.c.h==~irbuf.c.hr && irbuf.c.l==~irbuf.c.lr){
- int i;
- irok=0;
- putchar('\n');
- for(i=0;i<4;i++)printf("%02bX ",irbuf.b[i]);
-
- }
-
- }
- }
复制代码
[ 本帖最后由 翌阳 于 2007-11-17 17:46 编辑 ] |
|