Die digits gehen an, wenn der port low ist.
Code:
void ausgabe(void)
{
static uint8_t digit=0;
uint16_t temp, dez[5]={1,10,100,1000,10000};
temp = wert / dez[digit+1] * dez[digit+1]; // führende Stellen ausblenden
temp = (wert-temp)/dez[digit]; // Ziffer ermitteln
temp = segmente[temp]; // Segmentmuster ermitteln
if(dezimalpunkt == digit) temp &= ~(1<<7); // Dezimalpunkt an diesem Digit anzeigen?
digit0_PORT |= (1<<digit0_PIN); // alle Digits ausschalten
digit1_PORT |= (1<<digit1_PIN);
digit2_PORT |= (1<<digit2_PIN);
digit3_PORT |= (1<<digit3_PIN);
if(temp & (1<<0)) segA_PORT |= (1<<segA_PIN); else segA_PORT &= ~(1<<segA_PIN);
if(temp & (1<<1)) segB_PORT |= (1<<segB_PIN); else segB_PORT &= ~(1<<segB_PIN);
if(temp & (1<<2)) segC_PORT |= (1<<segC_PIN); else segC_PORT &= ~(1<<segC_PIN);
if(temp & (1<<3)) segD_PORT |= (1<<segD_PIN); else segD_PORT &= ~(1<<segD_PIN);
if(temp & (1<<4)) segE_PORT |= (1<<segE_PIN); else segE_PORT &= ~(1<<segE_PIN);
if(temp & (1<<5)) segF_PORT |= (1<<segF_PIN); else segF_PORT &= ~(1<<segF_PIN);
if(temp & (1<<6)) segG_PORT |= (1<<segG_PIN); else segG_PORT &= ~(1<<segG_PIN);
if(temp & (1<<7)) segP_PORT |= (1<<segP_PIN); else segP_PORT &= ~(1<<segP_PIN);
switch(digit)
{
case 0: digit0_PORT &= ~(1<<digit0_PIN); // Anzeigedigit auswählen
case 1: digit1_PORT &= ~(1<<digit1_PIN);
case 2: digit2_PORT &= ~(1<<digit2_PIN);
case 3: digit3_PORT &= ~(1<<digit3_PIN);
}
digit = (digit+1) & 3; // nächstes Segment auswählen (0-3)
}
:)
Lesezeichen