Created
May 16, 2019 12:39
-
-
Save avr-programmierung/1178334ffe7ccab3b22e0b465a0b836f to your computer and use it in GitHub Desktop.
ATmega88 @ 8MHz display_value wird am PORTB im Multiplexbetrieb ausgegeben
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* display_value wird am PORTB im Multiplexbetrieb ausgegeben | |
* Controller: ATmega88 @ 8MHz */ | |
#include <avr/io.h> | |
#include <util/delay.h> | |
uint16_t display_value; | |
uint8_t einer, rest, zehner, hunderter; | |
#define T1 0xFE // Transistor 1 = ON (T1 = 11111110) | |
#define T2 0xFD // Transistor 2 = ON (T2 = 11111101) | |
#define T3 0xFC // Transistor 3 = ON (T3 = 11111011) | |
void wert_zerlegen (uint16_t display_value) | |
{ | |
einer = display_value % 10; // Einer mit Modulo (%) berechnen | |
rest = display_value / 10; // Rest berechnen | |
zehner = rest % 10; // Zehner mit Modulo (%) berechnen | |
hunderter = rest / 10; // Hunderter berechnen | |
} | |
void main (void) | |
{ | |
DDRD = 0xFF; // Richtungsregister Port D auf Ausgang | |
DDRC = 0xFF; // Richtungsregister Port C auf Ausgang | |
PORTD = 0xFF; // Port D = High (7-Segm. Anzeige OFF) | |
PORTC = 0xFF; // Port C = High (Transistoren sperren) | |
/* Wertetabelle der 7-Segmentcodierung (11 Array Felder) */ | |
const uint8_t segmenttable[11] = | |
{ | |
0x03, 0xF3, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x19, 0xFE | |
/* 0 1 2 3 4 5 6 7 8 9 dp */ | |
}; | |
display_value = 279; // dieser Wert wird am Display angezeigt | |
while (1) | |
{ | |
wert_zerlegen(display_value); // display_value an Funktion übergeben | |
PORTC = T1; // Anzeige 1 aktivieren | |
PORTD = segmenttable [einer]; // Ausgabe der EINER auf 1. Anzeige | |
_delay_ms(5); | |
PORTC = T2; // Anzeige 2 aktivieren | |
PORTD = segmenttable [zehner]; // Ausgabe der ZEHNER auf 2. Anzeige | |
_delay_ms(5); | |
PORTC = T3; // Anzeige 3 aktivieren | |
PORTD = segmenttable [hunderter]; // Ausgabe der HUNDERTER auf 3. Anzeige | |
_delay_ms(5); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment