// Visual Micro is in vMicro>General>Tutorial Mode
//
/*
Name: Chapter 9.1.ino
Created: 30/04/2020 13:15:59
Author: JAOWENS-E6540\msn
*/
// HC595 ----> Arduino
// RCLK ----> 10
// SRCLK ----> 8
// SER ----> 9
// |OA ----> 11
// Defined pins
#define LATCH 6
#define DATA 7
#define CLOCK 8
#define ENABLE 9
void setup()
{
pinMode(LATCH, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(ENABLE, OUTPUT);
turnOff();
delay(1000);
turnOn();
animate(5);
blinkDot(5);
delay(500);
}
void loop()
{
for (int i = 0; i < 10; i++)
{
setDigit(i);
delay(1000);
}
delay(100);
flash(2);
delay(500);
animate(2);
turnOff();
delay(500);
turnOn();
}
void flash(int count)
{
for (int i = 0; i < count; i++)
{
sendData(B00000000);
delay(50);
sendData(B11111111);
delay(50);
}
}
void blinkDot(int count)
{
for (int i = 0; i < 5; i++)
{
setDot(true);
delay(50);
setDot(false);
delay(50);
}
}
void animate(int count)
{
for (int i = 0; i < count; i++)
{
sendData(B10000000);
delay(10);
sendData(B01000000);
delay(10);
sendData(B00100000);
delay(10);
sendData(B00010000);
delay(10);
sendData(B00001000);
delay(10);
sendData(B00000100);
delay(10);
}
}
void setDigit(unsigned int digit)
{
unsigned int data = 0;
if (digit >= 0 && digit <= 9)
{
switch (digit)
{
case 0:
data = B11111100;
break;
case 1:
data = B01100000;
break;
case 2:
data = B11011010;
break;
case 3:
data = B11110010;
break;
case 4:
data = B01100110;
break;
case 5:
data = B10110110;
break;
case 6:
data = B10111110;
break;
case 7:
data = B11100000;
break;
case 8:
data = B11111110;
break;
case 9:
data = B11110110;
break;
default:
data = B00000000;
}
}
sendData(data);
}
void setDot(boolean status)
{
if (status == true) sendData(B00000001);
else sendData(B00000000);
}
void turnOn(void)
{
digitalWrite(ENABLE, LOW);
}
void turnOff(void)
{
//sendData(B00000000);
digitalWrite(ENABLE, HIGH);
}
// Send 8 bit sequence to shift register
void sendData(unsigned int data)
{
data = ~data;
boolean bit = false;
for (int i = 0; i < 8; i++)
{
bit = data & B00000001;
digitalWrite(DATA, bit);
delay(1);
digitalWrite(CLOCK, HIGH);
delay(1);
digitalWrite(CLOCK, LOW);
delay(1);
data = data >> 1;
__asm("nop");
}
digitalWrite(LATCH, HIGH);
delay(1);
digitalWrite(LATCH, LOW);
}