Witam drogich forumowiczów.
Mam takie pytanie: napisałem program do obsługi wyświetlacza dwucyfrowego w trybie multipleksowania. Chciałem teraz za pomocą dwóch switchów zwiększać (zmniejszać) wyświetlaną wartość. No i to mi właśnie nie działa (samo wyświetlanie działa).
Oto kod:
Wg mnie w procedura obsługi przerwania nie widzi zmian w zmiennej liczba (które to zmiany odbywają się w głównym programie). I właśnie nie wiem, jak to zrobić, żeby widziała. Pewnie oprze się coś o wskaźniki, które nie są moją mocną stroną. Macie na to jakąś radę, albo zgoła inny sposób na mój problem. Z góry dziękuję za wszelkie podpowiedzi.
Mam takie pytanie: napisałem program do obsługi wyświetlacza dwucyfrowego w trybie multipleksowania. Chciałem teraz za pomocą dwóch switchów zwiększać (zmniejszać) wyświetlaną wartość. No i to mi właśnie nie działa (samo wyświetlanie działa).
Oto kod:
#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
unsigned int znak[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int liczba=0;
void wyswietl(int cyfra)
{
PORTB=1;
PORTD=znak[cyfra/10];
_delay_ms(5);
PORTB=2;
PORTD=znak[cyfra%10];
_delay_ms(5);
}
SIGNAL (SIG_OVERFLOW0)
{
PORTC=1<<PC0;
wyswietl(liczba);
}
int main(void)
{
DDRD = 0xFF;
DDRB=0xFF;
DDRC=0x01;
PORTC=0x30;
TCCR0=0X05;
TIMSK = 0X01;
sei();
while(1) {
if (!(PINC & 0x20) && (liczba<99))
{
liczba++;
while(!(PINC & 0x20)) {}
}
if (!(PINC & 0x10) && (liczba>0))
{
liczba--;
while(!(PINC & 0x20)) {}
}
}
return(0);
}
Wg mnie w procedura obsługi przerwania nie widzi zmian w zmiennej liczba (które to zmiany odbywają się w głównym programie). I właśnie nie wiem, jak to zrobić, żeby widziała. Pewnie oprze się coś o wskaźniki, które nie są moją mocną stroną. Macie na to jakąś radę, albo zgoła inny sposób na mój problem. Z góry dziękuję za wszelkie podpowiedzi.