// PSD 세서 아날로그값 출력 예제
#define pin_Data 7
#define pin_Clock 9
#define pin_Latch 8
#define SegDriver1 10
#define SegDriver2 11
#define SegDriver3 12
#define SegDriver4 13
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
int SegData[10] = {0x40, 0xf9,0x24,0x30,0x19,0x12, 0x02, 0x58, 0, 0x10};
char SegPower;
int adValue, tmp;
unsigned long CurTime, OldTime;
void setup()
{
pinMode(pin_Data, OUTPUT);
pinMode(pin_Clock, OUTPUT);
pinMode(pin_Latch, OUTPUT);
pinMode(SegDriver1, OUTPUT);
pinMode(SegDriver2, OUTPUT);
pinMode(SegDriver3, OUTPUT);
pinMode(SegDriver4, OUTPUT);
SegPower = 1;
}
void loop()
{
adValue = analogRead(A0);
CurTime = millis();
if(CurTime - OldTime > 500)
{
OldTime = CurTime;
tmp = adValue;
}
SegDisplay(tmp, 1);
}
void SegDisplay(int SegDigit, char attr)
{
char SegDrv1, SegDrv2, SegDrv3, SegDrv4;
char tmp, colon = 0;
int tmp1000, tmp100, tmp10;
SegDrv1 = SegDigit / 1000;
tmp1000 = SegDigit % 1000;
SegDrv2 = tmp1000 / 100;
tmp100 = tmp1000 % 100;
SegDrv3 = tmp100 / 10;
SegDrv4 = tmp100 % 10;
if(attr == 0x01) colon = 0x80; // colon
else if(attr == 0)
{
digitalWrite(SegDriver1, HIGH);
digitalWrite(SegDriver2, HIGH);
digitalWrite(SegDriver3, HIGH);
digitalWrite(SegDriver4, HIGH);
return;
}
switch(SegPower)
{
case 1:
digitalWrite(pin_Latch, LOW);
tmp = SegData[SegDrv1] | colon;
shiftOut(pin_Data, pin_Clock, MSBFIRST, tmp);
digitalWrite(pin_Latch, HIGH);
digitalWrite(SegDriver1, LOW);
digitalWrite(SegDriver2, HIGH);
digitalWrite(SegDriver3, HIGH);
digitalWrite(SegDriver4, HIGH);
delay(2);
digitalWrite(SegDriver1, HIGH);
SegPower = 2;
break;
case 2:
digitalWrite(pin_Latch, LOW);
tmp = SegData[SegDrv2] | colon;
shiftOut(pin_Data, pin_Clock, MSBFIRST, tmp);
digitalWrite(pin_Latch, HIGH);
digitalWrite(SegDriver1, HIGH);
digitalWrite(SegDriver2, LOW);
digitalWrite(SegDriver3, HIGH);
digitalWrite(SegDriver4, HIGH);
delay(2);
digitalWrite(SegDriver2, HIGH);
SegPower = 3;
break;
case 3:
digitalWrite(pin_Latch, LOW);
tmp = SegData[SegDrv3] | colon;
shiftOut(pin_Data, pin_Clock, MSBFIRST, tmp);
digitalWrite(pin_Latch, HIGH);
digitalWrite(SegDriver1, HIGH);
digitalWrite(SegDriver2, HIGH);
digitalWrite(SegDriver3, LOW);
digitalWrite(SegDriver4, HIGH);
delay(2);
digitalWrite(SegDriver3, HIGH);
SegPower = 4;
break;
case 4:
digitalWrite(pin_Latch, LOW);
tmp = SegData[SegDrv4] | colon;
shiftOut(pin_Data, pin_Clock, MSBFIRST, tmp);
digitalWrite(pin_Latch, HIGH);
digitalWrite(SegDriver1, HIGH);
digitalWrite(SegDriver2, HIGH);
digitalWrite(SegDriver3, HIGH);
digitalWrite(SegDriver4, LOW);
delay(2);
digitalWrite(SegDriver4, HIGH);
SegPower = 1;
break;
}
}