Funktion
No | PB7 | PB6 | PB5 | PB4 | PB3 | PB2 | PB1 | PB0 | Ton |
---|---|---|---|---|---|---|---|---|---|
0 | |||||||||
1 | ![]() |
![]() |
|||||||
2 | ![]() |
![]() |
|||||||
3 | ![]() |
![]() |
|||||||
4 | ![]() |
![]() |
|||||||
Bumm! | |||||||||
5 | ![]() |
![]() |
|||||||
6 | ![]() |
![]() |
![]() |
![]() |
|||||
7 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|||
8 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
9 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|||
10 | ![]() |
![]() |
![]() |
![]() |
|||||
11 | ![]() |
![]() |
Nach dem Drücken der Taste PD0 wird ein langsam sinkener Ton abgespielt. Bumm und die Explosion mit Ton visualisiert.
Quelltext ohne Interrupt
/* BummBox V1.0 (c) Oliver Mezger 11.10.11
Version ohne Interrupt fuer STK200
*/
#include <avr/io.h>
#include <util/delay.h>
const unsigned char muster[] = {0,0b10000001,0b01000010,0b00100100,0b00011000, // LED-Muster
0b00111100,0b01111110,0b11111111,0b11100111,0b11000011,0b10000001};
const unsigned int ton[] = {F_CPU/264,F_CPU/275,F_CPU/297,F_CPU/317}; // Toene
int main(){
unsigned int i=0,t;
DDRB = 0xFF;
PORTB = 0xFF;
TCCR1A = 0b00100011; // Ausgang OC1B bei 0 setzen und bei OCR1B loeschen
TCCR1B = 0b00011001; // Waveform Generation Mode: Fast PWM mit OCR1A als Top, Timer mit CPU-CLK
while (1){
if(!(PIND&1)){ // wenn Taste PD0
t=3; // Init Tonnummer
for (i=1;i<5;i++){ // Zusammenlaufen bis Bumm
PORTB = ~muster[i]; // Muster invertiert ausgeben
OCR1A = ton[t]; // Ton ausgeben
OCR1B = ton[t--]>>1; // Impulslaenge = Periodendauer/2
TCCR1A |= 1<<COM1B1; // Ton an
_delay_ms(100);
TCCR1A &= ~(1<<COM1B1); // Ton aus
_delay_ms(900);
}
TCCR1A |= 1<<COM1B1;
for (i=4;i<=10;i++){ // Bumm und Auseinanderbersten
PORTB = ~muster[i];
for (t=0;t<4000;t++){ // BummSound
OCR1A = (OCR1A ^ 0xFFFF) +666+t;
OCR1B = OCR1A >>1;
}
}
TCCR1A &= ~(1<<COM1B1); // Ton aus
PORTB = 0xFF;
}
}
}