| 
 | 
用一个817光耦控制相机的快门按钮(需要拆开相机焊接),实现相机的定时间间隔拍摄,时间间隔从3秒到5分钟可选 
 
原理图 
 
 
 
 
延时摄影程序 
 
#include <avr/io.h> 
#include <util/delay_basic.h> 
 
// PB0 快门 
// PB3 按钮 
 
#ifndef cbi 
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) 
#endif 
#ifndef sbi 
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) 
#endif 
 
uint16_t snaptime[] = {300, 500, 1000, 1500, 3000, 6000, 12000, 30000}; 
 
// 适用9.6M频率 
void delay_10ms(uint16_t n) 
{ 
        for(uint16_t c=0;c<n;c++) 
        { 
                _delay_loop_2(24000); 
        } 
} 
 
int main(void) 
{ 
        uint8_t n = 0; 
        uint16_t tc = 0; // 时间计数器,单位是0.01秒 
         
        DDRB = _BV(PB0); 
        PORTB = _BV(PB3); // 打开上拉电阻 
 
        for(;;) 
        { 
                if((PINB & _BV(3))==0) // 短接一下,改变拍摄间隔时间 
                { 
                        n++; 
                        if(n>7) n = 0; 
                         
                        delay_10ms(50); 
                } 
                 
                delay_10ms(1); 
                tc++; 
                 
                if(tc>=snaptime[n]) 
                { 
                        sbi(PORTB, PB0); 
                        delay_10ms(10); 
                        cbi(PORTB, PB0); 
                        tc = 0; 
                } 
        } 
} 
 
 
 |   
 
 
 
 |