Berikut ini adalah source code yang digunakan
//Jam Digital yang dapat menampilkan menit dan detik
//dan dapat diatur dengan menggunakan Push Button
//deklarasi PIN untuk 7-segment
#define segA 8
#define segB 9
#define segC 10
#define segD 11
#define segE 12
#define segF 13
#define segG 1
//deklarasi PIN untuk setiap digit 7-segment
#define digit1 7
#define digit2 6
#define digit3 5
#define digit4 4
//deklarasi PIN untuk Push Button
#define PB1 A1 //Push Button 1 : masuk ke mode atur; ganti digit yang diatur ; oke
#define PB2 A2 //Push Button 2 : mengatur digit untuk naik
#define PB3 A3 //Push Button 3 : mengatur digit untuk turun
//definisi nilai setiap digit
int menit1 = 0;
int menit2 = 0;
int detik1 = 0;
int detik2 = 0;
//variabel yang digunakan pada saat memasuki mode atur
int aturmenit1;
int aturmenit2;
int aturdetik1;
int aturdetik2;
void setup() {
// Pengesetan pin output untuk 7-segmen
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
// Pengesetan pin output setiap digit 7-segmen
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
// Pengesetan pin input Push Button
pinMode(PB1, INPUT);
pinMode(PB2, INPUT);
pinMode(PB3, INPUT);
//Pengesetan nilai Push Button
digitalWrite(PB1,HIGH);
digitalWrite(PB2,HIGH);
digitalWrite(PB3,HIGH);
// Stop interrupts
cli();
// Inisialisasi Timer/Counter Register
TCCR1A = 0; // set entire TCCR1A register to 0
TCCR1B = 0; // same for TCCR1B
TCNT1 = 0; //initialize counter value to 0
// Turn on CTC mode
TCCR1B |= (1 << WGM12);
// Set CS12 and CS10 bits for 1024 prescaler
TCCR1B |= (1 << CS12) | (1 << CS10);
// a value of 15624 in a second. By having OCR1A = 15624 then the interrupt function
OCR1A = 15624;
// Enable timer compare interrupt
TIMSK1 |= (1 << OCIE1A);
// Allow interrupts
sei();
}
// Program Utama
void loop() {
//menampilkan jam digitl
tampilkan(menit1, menit2, detik1, detik2);
if(digitalRead(PB1)==0) //Push Button 1 ditekan
{
delay(200);
atur(); //masuk ke mode atur
}
}
//menjalankan menit dan detik dengan interrupt
ISR(TIMER1_COMPA_vect){
detik2++;
if(detik2 > 9)
{
detik2 = 0;
detik1++;
if(detik1 > 5 ) // Detik sudah mencapai 59
{
detik1 = 0;
menit2++;
if(menit2 > 9){
menit2 = 0;
menit1++;
if(menit1 > 5) // Menit sudah mencapai 59
{
menit1 = 0;
}
}
}
}
}
// Pengaturan jam digital menggunakan push button
void atur(){
//memasukkan nilai atur dengan nilai yang sudah berjalan
int aturmenit1 = menit1;
int aturmenit2 = menit2;
int aturdetik1 = detik2;
int aturdetik2 = detik1;
unsigned char x=4; //variabel untuk menunjukan digit yang sedang diatur
while(x==4) //pengaturan dilakukan pada digit4
{
if(digitalRead(PB1)==0) {
delay(200);
x=3;
}
if (digitalRead(PB2)==0) {
delay(200);
aturdetik2++;
if(aturdetik2 > 9)
aturdetik2 = 0;
}
if(digitalRead(PB3)==0) {
delay(200);
aturdetik2--;
if(aturdetik2 < 0)
aturdetik2 = 9;
}
digitalWrite(digit1,LOW);
digitalWrite(digit2,LOW);
digitalWrite(digit3,LOW);
digitalWrite(digit4,HIGH);
tampilDigit(aturdetik2);
}
while(x==3) //pengaturan dilakukan pada digit3
{
if(digitalRead(PB1)==0) {
delay(200);
x=2;
}
if (digitalRead(PB2)==0) {
delay(200);
aturdetik1++;
if(aturdetik1 > 5)
aturdetik1 = 0;
}
if(digitalRead(PB3)==0) {
delay(200);
aturdetik1--;
if(aturdetik1 < 0)
aturdetik1 = 5;
}
digitalWrite(digit1,LOW);
digitalWrite(digit2,LOW);
digitalWrite(digit3,HIGH);
digitalWrite(digit4,LOW);
tampilDigit(aturdetik1);
}
while(x==2) //pengaturan dilakukan pada digit2
{
if(digitalRead(PB1)==0){
delay(200);
x=1;
}
if (digitalRead(PB2)==0){
delay(200);
aturmenit2++;
if(aturmenit2 > 9)
aturmenit2 = 0;
}
if(digitalRead(PB3)==0){
delay(200);
aturmenit2--;
if(aturmenit2 < 0)
aturmenit2 = 9;
}
digitalWrite(digit1,LOW);
digitalWrite(digit2,HIGH);
digitalWrite(digit3,LOW);
digitalWrite(digit4,LOW);
tampilDigit(aturmenit2);
}
while(x==1) //pengaturan dilakukan pada digit1
{
if(digitalRead(PB1)==0) {
delay(200);
x = 0;
}
if (digitalRead(PB2)==0) {
delay(200);
aturmenit1++;
if(aturmenit1 > 5)
aturmenit1 = 0;
}
if(digitalRead(PB3)==0){
delay(200);
aturmenit1--;
if(aturmenit1 < 0)
aturmenit1 = 5;
}
digitalWrite(digit1,HIGH);
digitalWrite(digit2,LOW);
digitalWrite(digit3,LOW);
digitalWrite(digit4,LOW);
tampilDigit(aturmenit1);
}
//pengenbaalikan nilai yang telah diatur
menit1 = aturmenit1;
menit2 = aturmenit2;
detik1 = aturdetik1;
detik2 = aturdetik2;
}
//menampilkan jam pada 7-segment
void tampilkan(int dig1, int dig2, int dig3, int dig4)
{
digitalWrite(digit1,HIGH);
digitalWrite(digit2,LOW);
digitalWrite(digit3,LOW);
digitalWrite(digit4,LOW);
tampilDigit(dig1);
delay(5);
digitalWrite(digit1,LOW);
digitalWrite(digit2,HIGH);
digitalWrite(digit3,LOW);
digitalWrite(digit4,LOW);
tampilDigit(dig2);
delay(5);
digitalWrite(digit1,LOW);
digitalWrite(digit2,LOW);
digitalWrite(digit3,HIGH);
digitalWrite(digit4,LOW);
tampilDigit(dig3);
delay(5);
digitalWrite(digit1,LOW);
digitalWrite(digit2,LOW);
digitalWrite(digit3,LOW);
digitalWrite(digit4,HIGH);
tampilDigit(dig4);
delay(5);
}
//menampilkan nilai 7-segment
void tampilDigit(int nilai){
if(nilai==0){
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
}
if(nilai==1){
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
}
if(nilai==2){
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
}
if(nilai==3){
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
}
if(nilai==4){
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
}
if(nilai==5){
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
}
if(nilai==6){
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
}
if(nilai==7){
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
}
if(nilai==8){
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
}
if(nilai==9){
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
}
}
![]() |
| skema rangkaian |

Tidak ada komentar:
Posting Komentar