本帖最后由 yihui184 于 2012-10-12 09:35 编辑
做遥控器做了三个月来了,
还没有做到让自己满意的地步!特地来这里请教高人,
帮助帮助我,鳖的急了,真是有点恨自己了,
怎么就做不出来,在网上找资料感觉没有什么收获,这么久了,
现在我就想快点把这个学习型遥控器做出来,
尽快,我再也等不了,再拖,我自己都原谅不了我自己,
很郁闷,真的.现在确实是碰到了瓶颈了!
我做的第一个遥控器程序是专门解NEC的,参考了本论坛楼主BXAK的程序.
第二个做的是看到51hei论坛上的一个学习型遥控器,我把它该造成了存入eeprom中去,但是感觉这个路波型的学习型遥控器,感觉时间不是很准确,不是用定时器录波的,感觉不可靠,但是试了试所有的身边的电视都可以实现
接收码,再发射码都能控制电视。代码如下:有遇到点问题,里面都有注释:
学习型遥控器.rar
(40.29 KB, 下载次数: 88)
2012-10-11 23:10 上传
点击文件名下载附件
第三个是我现在做的,根据百度文库上面的一个文章写的,文章如下:
学习型遥控器设计.pdf
(121.82 KB, 下载次数: 125)
2012-10-11 23:12 上传
点击文件名下载附件
我写的程序如下:
- /*
- 时间:2012.10.10
- 功能:学习型遥控器
- */
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- sbit study_key=P1^0; //学习按键
- sbit studylamp=P2^1; //学习状态指示灯
- sbit send_key=P1^1; //发射键
- sbit remotein=P2^0; //遥控信号输入口
- sbit remoteout= P3^4; // 遥控信号输出口
- sbit txkey=P1^1; //待定
- bit flag=0;
- uchar dat[80]; //用于记录高低电平的记时值!80个.一的电平要2个字节.
- void Delay1ms(uint t)
- {
- uint x,y;
- for(x=0;x<t;x++)
- for(y=0;y<120;y++);
- }
- void delete_dat()
- {
- uchar t;
- for(t=0;t<80;t++)
- {
- dat[t]=0;
- }
- }
- void init_io()
- {
- TMOD=0x21;
- TH1=0xF3;
- TL1=0xF3;
- remotein=1;
- remoteout=1;
- studylamp=0;
- EA=1;
- }
- void main()
- {
- uchar i=0;
- init_io();
- delete_dat();
- while(1)
- {
- if(!study_key) //学习键按下,开始接收红外码.用于记录整个码的高低电平.
- {
- Delay1ms(10);
- if(!study_key)
- {
- while(!study_key);
- while( remotein ); //当红外接收端为 1 时一直等待,为 0 跳入循环.开始接收程序.
- while(1)
- {
- TH0=0;
- TL0=0;
- TR0=1;
- while(!remotein); //当为 1 时 跳出循环.
- TR0=0;
- dat[i++]=TH0; //保存 0 的记时时间.
- dat[i++]=TL0;
- TH0=0; //重新赋初值.
- TL0=0;
- TR0=1;
- while(remotein) //当接收的时候,1 的值是否有溢出,有的话,跳出当前循环,给一个标志位,用于跳出大循环,不再接收.
- if(TF0)
- {
- TF0=0;
- TR0=0;
- flag=1;
- dat[i++]=0;
- studylamp=1;
- break;
- }
- if(flag)
- break;
- TR0=0;
- dat[i++]=TH0;
- dat[i++]=TL0;
- }
- }
- }
-
- if(!send_key) //发射键按下,用于发射接收到的码的高低电平.
- {
- Delay1ms(10);
- if(!send_key)
- {
- while(!send_key);
- if(flag)
- {
- i=0;
- ET1=1; //把发送载波的中断开启.
- while(1)
- {
- TH0=256-dat[i++]; //先发 1 ,给定时器赋初值,取反,
- TL0=256-dat[i++];
- TR0=1;
- TR1=1; //启动载波
- while(!TF0); //溢出后,发下一组.
- TF0=0;
- TR0=0;
- TR1=0;
- remoteout=0; //发送 低 电平
- TH0=256-dat[i++]; //发 0
- TL0=256-dat[i++];
- if( dat[i] == 0 ) //当发的数据中没有植,为0时,停止发送.
- {
- delete_dat();
- flag=0;
- studylamp=0;
- ET1=0;
- break;
- }
- TR0=1;
- while(!TF0);
- TF0=0;
- TR0=0;
- }
- }
- }
- }
- }
-
- }
- //40KHz发生器
- void time_intt1(void) interrupt 3
- {
- remoteout=~remoteout;
- }
复制代码请问一下:
我上面的这个程序,我根据PDF那份文档,写的程序:
看了这么多程序,我觉得要做学习型遥控器,我现在是要做记录波形的这种,我觉得只要把高低电平保存起来就可以了嘛,
我上面的这个程序,根据上面那份PDF文档写的,我感觉逻辑上没有错,可是就是控制不了,硬件上面没有问题,希望有经验的
大侠能教教我。
帮我看下我上面写的那个接收码和发射码,哪里是不是有问题呢?还是思路有问题呢?
载波是38KHZ的,我用示波器抓出来看了,我现在是,在红外接收时,用定时器把低电平和高电平保持多久的时间记录下来,红外发射的时候再根据记录的值发射出去.载波是没有问题,
我就觉得我记录波形那有哪是不是没有考虑到呢?
一周热门 更多>