Skip to content

Instantly share code, notes, and snippets.

@avr-programmierung
Created May 16, 2019 12:39
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Embed
What would you like to do?
ATmega88 @ 8MHz display_value wird am PORTB im Multiplexbetrieb ausgegeben
/* 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