Initial commit.
Diff
README.md | 0
led_tube.ino | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 108 insertions(+)
@@ -0,0 +1,108 @@
const int dataPin = 2;
const int clockPin = 4;
const int latchPin = 3;
unsigned char Digits[] =
{// 0 1 2 3 4 5 6 7 8 9 A b C d E F -
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};
unsigned char DigitCells[4];
unsigned long previousMillis = 0;
const long interval = 1000;
void setup() {
// put your setup code here, to run once:
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
int max_minutes = 10;
int current_num = 0;
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
int seconds = current_num % 60;
int minutes = current_num / 60;
if (minutes > max_minutes)
{
current_num = 0;
seconds = current_num % 60;
}
DigitCells[0] = seconds % 10;
DigitCells[1] = seconds / 10 % 10;
DigitCells[2] = minutes % 10;
DigitCells[3] = minutes / 10 % 10;
current_num++;
}
Display_Digits();
}
//http://edi.wang/post/2016/4/29/windows-10-iot-74hc595-led-digital-tube
void Display_Digits()
{
unsigned char *led_table;
unsigned char i;
led_table = Digits + DigitCells[0];
i = *led_table;
Digit_Write(i);
Digit_Write(0x01);
digitalWrite(latchPin,LOW);
digitalWrite(latchPin,HIGH);
led_table = Digits + DigitCells[1];
i = *led_table;
Digit_Write(i);
Digit_Write(0x02);
digitalWrite(latchPin,LOW);
digitalWrite(latchPin,HIGH);
led_table = Digits + DigitCells[2];
i = *led_table;
Digit_Write(i);
Digit_Write(0x04);
digitalWrite(latchPin,LOW);
digitalWrite(latchPin,HIGH);
led_table = Digits + DigitCells[3];
i = *led_table;
Digit_Write(i);
Digit_Write(0x08);
digitalWrite(latchPin,LOW);
digitalWrite(latchPin,HIGH);
}
void Digit_Write(unsigned char X)
{
unsigned char i;
for(i=8;i>=1;i--)
{
if (X&0x80)
{
digitalWrite(dataPin,HIGH);
}
else
{
digitalWrite(dataPin,LOW);
}
X<<=1;
digitalWrite(clockPin,LOW);
digitalWrite(clockPin,HIGH);
}
}