Zadejte hledaný výraz...

Atmega32 – odpočet na displeji – chyba v kóde

Ahojte,
potrebujem na displeji urobiť odpočet minút a to od 30 po 0 (teda 30,29,28,27,26,...)
Použil som k tomu:
Atmegu:
https://www.gme.sk/v/1484007/microchipatmel-atmega32-16pu
Displej:
https://www.gme.sk/v/1491638/avago-lb20561iwh3b-7-segmentovy-led-displej
Kód od AI mám tento:
#define F_CPU 16000000UL // Definícia frekvencie procesora 16MHz
#include
#include
// Definícia pinov pre displej
#define DISPLAY_PORT PORTC
#define ANODE_RIGHT PD4
#define ANODE_LEFT PD5
// Prototypy funkcií
void init_pins(void);
void display_number(uint8_t number);
// Funkcia pre inicializáciu pinov
void init_pins(void) {
// Nastavenie pinov pre displej ako výstupy
DDRD |= (1 << ANODE_RIGHT) | (1 << ANODE_LEFT);
DDRC = 0xFF; // Všetky piny PORTC ako výstupné pre 7-segmentový displej
}
// Funkcia pre zobrazenie čísla na 7-segmentovom displeji
void display_number(uint8_t number) {
// Tabuľka pre 7-segmentový displej
const uint8_t segment_map[] = {
//ABCDEFG
0b00010010, // 0
0b10111110, // 1
0b00100011, // 2
0b00100110, // 3
0b10001110, // 4
0b01000110, // 5
0b01000010, // 6
0b00111110, // 7
0b00000010, // 8
0b00000110  // 9
};
// Zobraz číslo na displeji
DISPLAY_PORT = segment_map; // Pravý znak
PORTD |= (1 << ANODE_RIGHT);
PORTD &= ~(1 << ANODE_LEFT);
_delay_ms(5); // Malé oneskorenie
DISPLAY_PORT = segment_map; // Ľavý znak
PORTD |= (1 << ANODE_LEFT);
PORTD &= ~(1 < 0; i--) {
display_number(i);
_delay_ms(1000); // Oneskolenie na zobrazenie jednotlivych cisel
}
// Zobraz 0
display_number(0);
while (1) {
// Neukončená slučka programu
}
return 0;
}
- problémom je, že keď mi odrátava minuty, tak jednotky (teda iba pravá strana) sa mi zobrazí iba na stotinu sekundy a hneď zhasne. Nezotrvá zobrazené číslo, iba len tak preblikne. Neviete mi prosím poradiť?
ďakujem za pomoc
28. 4. 2024 15:59:56
https://webtrh.cz/diskuse/atmega32-odpocet-na-displeji-chyba-v-kode/#reply1527798
Pro odpověď se přihlašte.
Přihlásit