最近入手佳能600D一台,无奈穷屌丝一枚,买了机就没钱买遥控器了,你想啊,作为一名屌丝,没有遥控器这种自拍神器怎么可能活下去呢,于是决定动手DIY一个遥控器,经过不断找资料,研究佳能遥控器之后发现佳能RC-1这款遥控器山寨起来不困难,已经有人发出AVR代码了,虽然我不懂AVR,但是单片机的东西多看几下应该是没问题的,最后成功山寨。看帖
/************************************************************************************************************************/
这个是简化之后的原理图,玩电子的一看就明白了,不必多说
/*********************************程序******************************/
//************************************单片机DIY佳能相机遥控器RC-1***********************************
#include "reg52.h"
sbit ir=P1^0;//红外发射管控制脚,使用24M晶振
sbit ka=P3^2;//即按即拍
sbit kb=P3^3;//延时拍摄
unsigned int count, set_count,pulen;
bit irflag,keyflag;
//---------------------------------------------------------------------------
void delay(unsigned int a)//延时,晶振24M ,此处延时不需很精确
{
unsigned char i;
while(--a!=0)
for(i=300;i>0;i--);
}
//---------------------------------------------------------------------------
void keyscan() // 按键扫描
{
if(ka==0)
{
keyflag=1;pulen=479;//a键按下,发送编码中的空闲(7.33ms,480个脉冲时长)
}
if(kb==0)
{
keyflag=1;pulen=349;//b键按下,发送编码中的空闲(5.36ms,350个脉冲时长),利用pulen传递空闲脉冲数
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void ir_send() //发送红外数据
{
set_count=31;//发送编码中的脉冲码(16个脉冲周期共计489us,32个峰谷)
irflag=1; //启动红外发射二极管发射,发射第一个脉冲群
count=0; //中断计数清0
TR0=1;
while(count<set_count);
TR0=0;
set_count=pulen; //利用pulen传递空闲脉冲数
irflag=0; //停止红外发射二极管发射
count=0; //中断计数清0
TR0=1;
while(count<set_count);
TR0=0;
set_count=31;//发送编码中的脉冲码(16个脉冲周期共计489us,32个峰谷)
irflag=1; //启动红外发射二极管发射,发射第二个脉冲群
count=0; //中断计数清0
TR0=1;
while(count<set_count);
TR0=0;
}
//---------------------------------------------------------------------------
void timer0_init() //定时器初始化
{
EA=1;
TMOD=0x02; //定时0 8位自动重装模式
ET0=1;
TH0=0xe1;//0xf1; //定时15us,32700hz红外矩形波,晶振24M (//后为11.0592M晶振下的数值)
TL0=0xe1;//0xf1;
}
//---------------------------------------------------------------------------
void main()
{
timer0_init(); //定时0初始化
count=0; //中断计数先清0
irflag=0; //红外发射标志先置0
while(1)
{
keyscan(); //键值扫描
if(keyflag) //若有按键按下
{
ir_send(); //发送红外编码
delay(500);
keyflag=0;//清零
}
}
}
//---------------------------------------------------------------------------
void timer0() interrupt 1 //定时器0中断
{
count++;
if((keyflag==1)&&(irflag==1))
ir=~ir; //有发射标志,则发射32700hz的矩形波
else ir=1; //否则不发射,即相当于发射编码中的低电平
}
/**************************程序完**************************/
接下来就是焊接,组装。由于焊接组装过程忘记拍摄了,就直接发成品吧,看原理图就知道很简单的东西,不必再拍了。
最后来张遥控自拍效果图,哈哈哈哈