// A
// _______
// | |
// F | G | B
// |_______|
// | |
// E | | C
// |_______| o H
//
// D
// 8 DIGIT LED DISPLAY
#define DIGITS 8
// SINK PINS FOR 8 DIGITS
int gPin[DIGITS] = {15,16,17,18,19,10,11,12}; //A1,A2,A3,A4,A5,D10,D11,D12
int digi[DIGITS];
int LM35_PIN = A0;
int DTime = 4;
long sNum;
void d_PREP() {
PORTD = PORTD & B00000011; // 2 - 7 0'lanıyor, 0,1(TX/RX) değişmiyor
PORTB = PORTB & B11111100; // 8 - 9 0'lanıyor, diğerleri değişmiyor
}
void setup(){
DDRD = DDRD | B11111100; // 2 - 7 output, 0,1(TX/RX) değişmiyor
DDRB = DDRB | B00000011; // 8 - 9 output, diğerleri değişmiyor
d_PREP(); // 2 - 7 0'lanıyor, 8 - 9 0'lanıyor, 0,1(TX/RX) ve diğer pinler değişmiyot
for (int i=0;i<DIGITS;i++){
pinMode(gPin[i], OUTPUT);
}
Serial.begin(9600);
}
void loop(){
sNum = (analogRead(LM35_PIN) * 0.48828125);
digiCalc(sNum);
for (int i=0;i<DIGITS;i++){
int j = (DIGITS - 1) - i;
digitalWrite(gPin[i], LOW);
pickNumber(digi[j]);
digitalWrite(gPin[i], HIGH);
delay(DTime);
digitalWrite(gPin[i], LOW);
}
}
void digiCalc(long num){
// Serial.println(num);
for (int i=0;i<DIGITS;i++){
int j = (DIGITS - 1) - i;
long k = 0.5 + pow(10,j);
digi[j] = num / k;
num = num - (digi[j] * k);
}
}
void d_dot() {
// DIGIT --------FEDCBA00
PORTD = PORTD | B00000000;
// DIGIT --------000000HG
PORTB = PORTB | B00000010;
}
void d_zero(boolean bDot){
// DIGIT --------FEDCBA00
PORTD = PORTD | B11111100;
// DIGIT --------000000HG
PORTB = PORTB | B00000000;
if(bDot) d_dot();
}
void d_one(boolean bDot){
// DIGIT --------FEDCBA00
PORTD = PORTD | B00011000;
// DIGIT --------000000HG
PORTB = PORTB | B00000000;
if(bDot) d_dot();
}
void d_two(boolean bDot){
// DIGIT --------FEDCBA00
PORTD = PORTD | B01101100;
// DIGIT --------000000HG
PORTB = PORTB | B00000001;
if(bDot) d_dot();
}
void d_three(boolean bDot){
// DIGIT --------FEDCBA00
PORTD = PORTD | B00111100;
// DIGIT --------000000HG
PORTB = PORTB | B00000001;
if(bDot) d_dot();
}
void d_four(boolean bDot){
// DIGIT --------FEDCBA00
PORTD = PORTD | B10011000;
// DIGIT --------000000HG
PORTB = PORTB | B00000001;
if(bDot) d_dot();
}
void d_five(boolean bDot){
// DIGIT --------FEDCBA00
PORTD = PORTD | B10110100;
// DIGIT --------000000HG
PORTB = PORTB | B00000001;
if(bDot) d_dot();
}
void d_six(boolean bDot){
// DIGIT --------FEDCBA00
PORTD = PORTD | B01111100;
// DIGIT --------000000HG
PORTB = PORTB | B00000001;
if(bDot) d_dot();
}
void d_seven(boolean bDot){
// DIGIT --------FEDCBA00
PORTD = PORTD | B00011100;
// DIGIT --------000000HG
PORTB = PORTB | B00000000;
if(bDot) d_dot();
}
void d_eight(boolean bDot){
// DIGIT --------FEDCBA00
PORTD = PORTD | B11111100;
// DIGIT --------000000HG
PORTB = PORTB | B00000001;
if(bDot) d_dot();
}
void d_nine(boolean bDot){
// DIGIT --------FEDCBA00
PORTD = PORTD | B10111100;
// DIGIT --------000000HG
PORTB = PORTB | B00000001;
if(bDot) d_dot();
}
void pickNumber(char x){
d_PREP();
switch(x){
case 0: d_zero(0); break;
case 1: d_one(0); break;
case 2: d_two(0); break;
case 3: d_three(0); break;
case 4: d_four(0); break;
case 5: d_five(0); break;
case 6: d_six(0); break;
case 7: d_seven(0); break;
case 8: d_eight(0); break;
case 9: d_nine(0); break;
default: d_dot(); break;
}
}