Minggu, 22 April 2018

Jam digital 4 digit 7 segmen, IC 74HC595 dengan arduino

hai gays....
selamat berjumpa kembali di tutorial microcontroler dan robotika.
Pada kesempatan kali ini kita akan memberikan tutorial untuk jam digital 7 segmen menggunakan ic 74HC595 dengan program arduino...
Sebenarnya bisa juga sih tidak mempergunakan ic 74HC595 untuk 7 segmennya, tapi berhubung di google sangat jarang sekali postingan mempergunakan ic 74HC595 untuk shifregiter 7 segmen an demi menghemat pin arduino makanya saya share ne cara bikin jam digital menggunakan 7 segmen engan ic shifregiter 74HC595.

Ok cuy dari pada basa-basinya terlalu panjang mari kita lanjutkan tutorialnya

1. siapkan bahan yang akan digunakan seperti di bawah ini :

  • Arduino
  • 7 segment
  • IC 74HC595
  • RTC ds1307
  • dan resistor
Setelah di persiapkan rangkaiannya seperti yang dibawah ini ya :




Ok lanjutkan listing programnya,
Sebelumnya persiapkan dulu library untuk ds1307  nya ya, kalau ngk punya coment aja dibawah ntr saya kirim librarynya.

ne programnya cuy:

#include <Wire.h>              
#include "RTClib.h"                
                               
const int  Data = 10;      
const int  Latch = 11; 
const int  Clock = 12;     
const int  ledPin = 13;         
RTC_DS1307 RTC;                 

byte g_digits [10];            

int g_numberToDisplay = 0;     

const int g_registers = 4;     

byte g_registerArray [g_registers];

// Begin setup() functions //

void setup()
{
   Wire.begin();
   RTC.begin();
  pinMode (Latch, OUTPUT);      
  pinMode (Clock, OUTPUT);          
  pinMode (Data, OUTPUT);           
  pinMode (ledPin, OUTPUT);             
 
  Serial.begin (9600);                   
  g_digits [0] = 0b01000000;//0
  g_digits [1] = 0b01111001;//1
  g_digits [2] = 0b00100100;//2
  g_digits [3] = 0b00110000;//3
  g_digits [4] = 0b00011001;//4
  g_digits [5] = 0b00010010;//5
  g_digits [6] = 0b00000010;//6
  g_digits [7] = 0b01111000;//7
  g_digits [8] = 0b00000000;//8
  g_digits [9] = 0b00010000;//9
 
  for (int i=0;i<5;i++) {
 
    g_registerArray [0] = g_digits [8];
    g_registerArray [1] = g_digits [8];
    g_registerArray [2] = g_digits [8];
    g_registerArray [3] = g_digits [8];
  
    sendSerialData (g_registers, g_registerArray);
    delay(300);
    
  }
}
void sendSerialData (byte registerCount, byte *pValueArray) {
  digitalWrite (Latch, LOW);
  for (byte reg = registerCount; reg > 0; reg--)
  {
    byte value = pValueArray [reg - 1];
    for (byte bitMask = 128; bitMask > 0; bitMask >>= 1)
    {
      digitalWrite (Clock, LOW);
      digitalWrite (Data, value & bitMask ? HIGH : LOW);
      digitalWrite (Clock, HIGH);
    }
  }
  digitalWrite (Latch, HIGH);
}
void loop()
{
  int hour,minute,sec,disp = 0;
   DateTime now = RTC.now(); 
   hour = now.hour();        
   minute = now.minute();    
   sec = now.second();       

   Serial.print(hour);
   Serial.print(':');
   Serial.print(minute);
   Serial.print(':');   
   Serial.print(sec);
   Serial.println();
  disp = (hour * 100) + minute;
  g_numberToDisplay = disp;
  if (g_numberToDisplay < 10)
  {
    g_registerArray [0] = g_digits [0];
    g_registerArray [1] = g_digits [0];
    g_registerArray [2] = g_digits [0];
    g_registerArray [3] = g_digits [g_numberToDisplay];
  }
  else if (g_numberToDisplay < 100)
  {
    g_registerArray [0] = g_digits [0];
    g_registerArray [1] = g_digits [0];
    g_registerArray [2] = g_digits [g_numberToDisplay / 10];
    g_registerArray [3] = g_digits [g_numberToDisplay % 10];
  }
  else if (g_numberToDisplay < 1000)
  {
    g_registerArray [0] = g_digits [0];
    g_registerArray [1] = g_digits [g_numberToDisplay / 100];
    g_registerArray [2] = g_digits [(g_numberToDisplay % 100) / 10];
    g_registerArray [3] = g_digits [g_numberToDisplay % 10];
  }
  else
  {
    g_registerArray [0] = g_digits [g_numberToDisplay / 1000];
    g_registerArray [1] = g_digits [(g_numberToDisplay % 1000) / 100];
    g_registerArray [2] = g_digits [(g_numberToDisplay % 100) / 10];
    g_registerArray [3] = g_digits [g_numberToDisplay % 10];
  }
  sendSerialData (g_registers, g_registerArray);
  digitalWrite(ledPin,HIGH);
  delay(500);
  digitalWrite(ledPin,LOW);
  delay(500);
}


 kalau rangkaian dan programnya dibikn seperti yang diatas udah pasti jalan jam cuy, atau kalau ada yang bermasalah kalau agan mempraktekannya silahkan coment aja nanti biar saya bantu OK.
Share:

BTemplates.com


zulpandru hendra. Diberdayakan oleh Blogger.