Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define F_CPU 1000000L
- #include <avr/io.h>
- #include <util/delay.h>
- #include <avr/interrupt.h>
- volatile int trybBIALY = 0;
- volatile int trybZOLTY = 0;
- volatile int trybRAZEM = 0;
- volatile int trybZMIANE = 0;
- volatile int licznik = 0;
- volatile int predkosc = 80;
- volatile int zmiana = 0;
- volatile int zmianaBialych;
- volatile int zmianaZoltych;
- int main(void){
- TCCR0 |= (1<<CS00) | (1<<CS01);
- TIMSK |= 1<<TOIE0;
- TCNT0 = 131;
- sei();
- DDRC = 0xff; //ustawienie portu C jako wyjść
- DDRD = 0; //ustawienie portu D jako wejść
- PORTC = 0x0; //ustawienie wartości na wszystkich pinach
- PORTD = 0xFF;
- while(1){
- if(!(PIND & 0X1)){
- trybBIALY++;
- trybBIALY%=4;
- _delay_ms(100);
- }
- else if(!(PIND & 0X2)){
- trybZOLTY++;
- trybZOLTY%=4;
- _delay_ms(100);
- }
- else if(!(PIND & 0X4)){
- trybRAZEM++;
- trybRAZEM%=4;
- _delay_ms(100);
- }
- else if(!(PIND & 0X8)){
- trybZMIANE++;
- trybZMIANE%=4;
- _delay_ms(100);
- }
- }
- }
- SIGNAL(SIG_OVERFLOW0){
- licznik++;
- /////////////////////////////////////////////////////////
- if(trybBIALY == 0){
- PORTC &= 0x0; //zgaszone
- }
- else if(trybBIALY == 1){
- PORTC |= 0x1; //stałe świecenie
- PORTC |= 0x2;
- }
- else if(trybBIALY == 2){
- if (licznik > predkosc){
- if (zmianaBialych == 0){
- PORTC &= 0xFC;
- PORTC |= 0x1;
- zmianaBialych = 1;
- }
- else {
- PORTC &= 0xFC;
- PORTC |= 0x2;
- zmianaBialych = 0;
- }
- }
- }
- else if(trybBIALY == 3){
- if(licznik > predkosc){ //białe razem zapalają się i gasną
- PORTC ^= 0x1;
- PORTC ^= 0x2;
- }
- }
- ////////////////////////////////////////////////////////
- if(trybZOLTY == 0){
- PORTC &= 0x0; //zgaszone
- }
- else if(trybZOLTY == 1){
- trybRAZEM = -1;
- trybZMIANE = -1;
- PORTC |= 0x4; //stałe świecenie
- PORTC |= 0x8;
- }
- else if(trybZOLTY == 2){
- trybRAZEM = -1;
- trybZMIANE = -1;
- if (licznik > predkosc){
- if (zmianaZoltych == 0){
- PORTC &= 0xF3;
- PORTC |= 0x4;
- zmianaZoltych = 1;
- }
- else {
- PORTC &= 0xF3;
- PORTC |= 0x8;
- zmianaZoltych = 0;
- }
- }
- }
- else if(trybZOLTY == 3){
- trybRAZEM = -1;
- trybZMIANE = -1;
- PORTC ^= 0x4; //żółte razem zapalają się i gasną
- PORTC ^= 0x8;
- }
- /////////////////////////////////////////////////////////
- if(trybRAZEM == 0){
- PORTC &= 0x0;
- }
- else if(trybRAZEM == 1){
- trybBIALY = -1;
- trybZOLTY = -1;
- PORTC |= 0x1; //wszystkie diody świecą
- PORTC |= 0x2;
- PORTC |= 0x4;
- PORTC |= 0x8;
- }
- else if(trybRAZEM == 2){
- trybBIALY = -1;
- trybZOLTY = -1;
- predkosc = 50;
- if(licznik > predkosc){ //wszystkie diody migają z jedną prędkością
- PORTC ^= 0x0f;
- }
- }
- else if(trybRAZEM == 3){
- trybBIALY = -1;
- trybZOLTY = -1;
- predkosc = 80;
- if(licznik > predkosc){ //wszystkie diody migają z jedną prędkością
- PORTC ^= 0x0f;
- }
- }
- ////////////////////////////////////////////////////////
- if(trybZMIANE == 0){
- PORTC &= 0x0;
- }
- else if(trybZMIANE == 1){
- trybBIALY = -1;
- trybZOLTY = -1;
- if (licznik > predkosc){ //na zmiane biale i zolte
- PORTC = zmiana || zmiana << 1;
- zmiana = zmiana << 1;
- if (zmiana >= 0x8) zmiana = 0x1;
- }
- }
- else if(trybZMIANE == 2){
- trybBIALY = -1;
- trybZOLTY = -1;
- if (licznik > predkosc){ //po kolei z jedna predkoscia
- PORTC = zmiana;
- zmiana = zmiana << 1;
- if (zmiana >= 0x8) zmiana = 0x1;
- }
- }
- else if(trybZMIANE == 3){
- trybBIALY = -1;
- trybZOLTY = -1;
- if (licznik > predkosc){ //po kolei z druga predkoscia
- PORTC = zmiana;
- zmiana = zmiana << 1;
- if (zmiana >= 0x8) zmiana = 0x1;
- }
- }
- if(licznik > predkosc){
- licznik = 0;
- }
- TCNT0 = 131;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement