nabend euch allen,
heute war mal wieder bastelstunde, weil ich die letzten tage nicht so viel zeit hatte.
mit dem angepassten code funktionierte das ganze gut, allerdings nur einmal...
also das ganze dann irgendwie in eine schleife packen...
hier das ergebnis:
Code:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <stdint.h>
uint8_t y;
int main(){
// port B und D werden als ausgang definiert
DDRB = 0x1f;
DDRD = 0xff;
uint16_t AD();
if (y>=0){
uint8_t LED();
}
else
main();
}
uint16_t AD(void)
{
//variablen
uint16_t x;
ADMUX |= (1<<REFS0); //AVCC als Referenzspannung wählen
//Prescaler auf 128 einstellen und ADC aktivieren
ADCSRA = (1<<ADPS0) | (1<<ADPS2) | (1<<ADEN);
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC)){
;//Konvertierung abwarten
}
x=ADC; // eingangswert wird der variable x übergeben
y=x/4; // x wird durch 4 geteilt (von 10 auf 8 bit)
}
uint8_t LED(void){
int hunderter;
int zehner;
int einer;
// ----- ab hier wird die 8-bit zahl auseinander genommen
// die hunderter stelle
hunderter=y/100;
hunderter=hunderter%10;
switch (hunderter)
{
case 1:
PORTD |= (1<<PD3) | (0<<PD4) | (0<<PD5) | (0<<PD6);
break;
case 2:
PORTD |= (0<<PD3) | (1<<PD4) | (0<<PD5) | (0<<PD6);
break;
// abschaltung der hunderter stelle bei kleineren zahlen durch schalten auf high
default :
PORTD |= (1<<PD3) | (1<<PD4) | (1<<PD5) | (1<<PD6);
break;
}
zehner=y/10;
zehner=zehner%10;
// abschaltung der zehner stelle wenn hunnderter und zehner gleich 0 ist
if (hunderter==0 && zehner==0)
{
PORTB |= (1<<PB4);
PORTD |= (1<<PD0) | (1<<PD1) | (1<<PD2);
}
else
switch (zehner)
{
case 0:
PORTB |= (0<<PB4);
PORTD |= (0<<PD0) | (0<<PD1) | (0<<PD2);
break;
case 1:
PORTB |= (1<<PB4);
PORTD |= (0<<PD0) | (0<<PD1) | (0<<PD2);
break;
case 2:
PORTB |= (0<<PB4);
PORTD |= (1<<PD0) | (0<<PD1) | (0<<PD2);
break;
case 3:
PORTB |= (1<<PB4);
PORTD |= (1<<PD0) | (0<<PD1) | (0<<PD2);
break;
case 4:
PORTB |= (0<<PB4);
PORTD |= (1<<PD0) | (0<<PD1) | (0<<PD2);
break;
case 5:
PORTB |= (1<<PB4);
PORTD |= (0<<PD0) | (1<<PD1) | (0<<PD2);
break;
case 6:
PORTB |= (0<<PB4);
PORTD |= (1<<PD0) | (1<<PD1) | (0<<PD2);
break;
case 7:
PORTB |= (1<<PB4);
PORTD |= (1<<PD0) | (1<<PD1) | (0<<PD2);
break;
case 8:
PORTB |= (0<<PB4);
PORTD |= (0<<PD0) | (0<<PD1) | (1<<PD2);
break;
case 9:
PORTB |= (1<<PB4);
PORTD |= (0<<PD0) | (0<<PD1) | (1<<PD2);
break;
default:
PORTB |= (1<<PB4);
PORTD |= (1<<PD0) | (1<<PD1) | (1<<PD2);
break;
}
// anzeige der einer stelle
einer=y%10;
switch (einer)
{
case 0:
PORTB |= (0<<PA0) | (0<<PA1) | (0<<PA2) | (0<<PA3);
break;
case 1:
PORTB |= (1<<PA0) | (0<<PA1) | (0<<PA2) | (0<<PA3);
break;
case 2:
PORTB |= (0<<PA0) | (1<<PA1) | (0<<PA2) | (0<<PA3);
break;
case 3:
PORTB |= (1<<PA0) | (1<<PA1) | (0<<PA2) | (0<<PA3);
break;
case 4:
PORTB |= (0<<PA0) | (0<<PA1) | (1<<PA2) | (0<<PA3);
break;
case 5:
PORTB |= (1<<PA0) | (0<<PA1) | (1<<PA2) | (0<<PA3);
break;
case 6:
PORTB |= (0<<PA0) | (1<<PA1) | (1<<PA2) | (0<<PA3);
break;
case 7:
PORTB |= (1<<PA0) | (1<<PA1) | (1<<PA2) | (0<<PA3);
break;
case 8:
PORTB |= (0<<PA0) | (0<<PA1) | (0<<PA2) | (1<<PA3);
break;
case 9:
PORTB |= (1<<PA0) | (0<<PA1) | (0<<PA2) | (1<<PA3);
break;
default:
PORTB |= (1<<PA0) | (1<<PA1) | (1<<PA2) | (1<<PA3);
break;
}
main(); //ende und neustart
}
Kompiler sagt:
Code:
Build succeeded with 0 Warnings...
aber ich bekomm trotzdem nur 3 nullen angezeigt...
greetz horsty[/code]
Lesezeichen