📄 main.c.bak
字号:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
ISR(TIM0_OVF_vect)
{
static unsigned char pulse = 0;
static unsigned int envelope = 0;
static unsigned char enval = 255;
static unsigned char endrv = 255;
static long temp;
static unsigned char acosum = 0;
static unsigned long timeout = 675000L;
if(timeout > 0) --timeout;
if((pulse < 102) || (timeout == 0)) PORTB &= ~(1 << PB2);
else PORTB |= (1 << PB2);
acosum += (ACSR & (1 << ACO)) >> ACO;
if(++pulse == 106)
{
pulse = 0;
if(envelope < 45) endrv = 255;
else if(envelope < 65) endrv = 0;
else if(envelope < 95) endrv = 60;
else if(envelope < 140) endrv = 40;
else if(envelope < 335) endrv = 0;
else if(envelope < 340) endrv = 40;
else if(envelope < 400) endrv = 75;
else if(envelope < 440) endrv = 90;
else if(envelope < 480) endrv = 110;
else if(envelope < 490) endrv = 180;
else if(envelope < 510) endrv = 190;
else if(envelope < 530) endrv = 200;
else endrv = 255;
temp = temp + (endrv - enval);
enval = temp >> 5;
if((acosum > 50) || (timeout == 0))
{
if(envelope < ((timeout)?272:520)) PORTB &= ~(1 << PB3);
else PORTB |= (1 << PB3);
}
else PORTB |= (1 << PB3);
acosum = 0;
if(++envelope == 544)
{
envelope = 0;
}
OCR0A = (timeout) ? enval : 255;
}
}
int main(void)
{
ACSR = 0x40;
TCCR0A = 0xc3;
TCCR0B = 0x01;
OCR0A = 0xff;
DDRB = 0x0d;
TIMSK0 = 0x02;
sei();
for (;;)
{
sleep_mode();
}
return (0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -