Например: пишу на вывод число 123, а выводится сначала 1, затем 2 и потом 3 на трех разрядах(111 >> 222 >> 333), все это зациклено. Хотя по задумке должно быть 1 в первом разряде, 2 во втором и 3 в третьем с числом на выходе 123. Что я делаю не так?
Добавлено спустя 3 часа 16 минут 17 секунд:
Вот код без скачивания...
Code: Select all
#define F_CPU 8000000L
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned int i;
unsigned int R1=0, R2=0, R3=0;
void segchar (unsigned int seg)
{
switch(seg)
{
case 1: PORTC = 0b11011111; //PC1
PORTB = 0b11110111;
break;
case 2: PORTC = 0b11011101;
PORTB = 0b11011100;
break; //PC2 //PC5
case 3: PORTC = 0b11011101;
PORTB = 0b11010101;
break;
case 4: PORTC = 0b11011011;
PORTB = 0b11010111;
break; //PB5
case 5: PORTC = 0b11111001;
PORTB = 0b11010101;
break;
case 6: PORTC = 0b11111001;
PORTB = 0b11010100;
break; //PB0 //PB3
case 7: PORTC = 0b11011101;
PORTB = 0b11110111;
break;
case 8: PORTC = 0b11011001;
PORTB = 0b11010100;
break; //PB1
case 9: PORTC = 0b11011001;
PORTB = 0b11010101;
break;
case 0: PORTC = 0b11011001;
PORTB = 0b11110101;
break;
}
}
void timer_ini(void)
{
TCCR1B |= (1<<WGM12);
TIMSK1 |= (1<<OCIE1A);
OCR1AH = 0b00001111;
OCR1AL = 0b00001010;
TCCR1B |= (1<<CS12);
}
unsigned int n_count=0;
ISR (TIMER1_COMPA_vect)
{
if(n_count==0) {PORTC|=(1<<PORTC0);PORTC&=~(1<<PORTC3);PORTC&=~(1<<PORTC4);segchar(R1);}
if(n_count==1) {PORTC|=(1<<PORTC3);PORTC&=~(1<<PORTC4);PORTC&=~(1<<PORTC0);segchar(R2);}
if(n_count==2) {PORTC|=(1<<PORTC4);PORTC&=~(1<<PORTC0);PORTC&=~(1<<PORTC3);segchar(R3);}
n_count++;
if (n_count>2) n_count=0;
}
void ledprint(unsigned int number)
{
R1=number/100;
R2=(number%100)/10;
R3=(number%100)%10;
}
int main(void)
{
unsigned int butcount=0, butstate=0;
timer_ini();
DDRD = 0b00010000;
DDRB = 0b11111111;
DDRC = 0b11111111;
PORTD = 0b00100000;
PORTC = 0b11100110;
PORTB = 0b11111111;
i=0;
sei();
ledprint(123);
while(1)
{
}
}