================================== SOURCE CODE ==================================
#include "Wire.h"
#define LATCH 2
#define CLK 3
#define DATA 4
//byte dot1[11] = {0xFD, 0x51 , 0xBB, 0xDB, 0x57, 0xCF, 0xEF, 0x59, 0xFF, 0xDF};//baru
byte digit1[10] = {0xFC, 0x50 , 0xBA, 0xDA, 0x56, 0xCE, 0xEE, 0x58, 0xFE, 0xDE};//baru
int satuan,puluhan,ratusan,ribuan,puluhanribu,ratusanribu;
char hold0 = 0;
char hold1 = 0;
char hold2 = 0;
char data0, data1, data2, data3;
#define READY 0
#define START 1
#define STOP 2
#define RESET 3
#define TIPE_TIME 1 // speed of stop watch
char state = 0;
unsigned long get_time, get_time2;
unsigned long cur_time0;
unsigned long cur_time1;
unsigned long hold_time, hold_time2, run_time;
void setup() {
// put your setup code here, to run once:
pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
pinMode(A3, INPUT_PULLUP);
pinMode(LATCH, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(DATA, OUTPUT);
}
void loop() {
// put your main code here, to run
Serial.begin(9600);
key();
display7();
}
void key(){
data0 = digitalRead(A0);
data1 = digitalRead(A1);
data2 = digitalRead(A2);
data3 = digitalRead(A3);
if ( data0 == 0){
if(hold0 == 0){
hold0 = 1;
state = START;
}
}
else{
hold0 = 0;
}
if ( data1 == 0){
if(hold1 == 0){
hold1 = 1;
state = STOP;
}
}
else{
hold1 = 0;
}
if ( data2 == 0){
if(hold2 == 0){
hold2 = 1;
state = RESET;
}
}
else{
hold2 = 0;
}
}
void get_clock(){
switch(state){
case READY:
get_time = 0;
hold_time = 0;
break;
case START:
cur_time0 = millis()/TIPE_TIME;
run_time = (cur_time0 - cur_time1);
hold_time = run_time;
get_time = hold_time + hold_time2;
break;
case STOP:
cur_time1 = millis()/TIPE_TIME;
hold_time2 = get_time;
break;
case RESET:
cur_time1 = millis()/TIPE_TIME;
get_time = 0; hold_time = 0; hold_time2 = 0;
//state = READY;
break;
}
}
void display7(){
get_clock();
switch(state){
case START:
Tampil();
break;
case STOP:
Tampil();
break;
case RESET:
Tampil();
break;
case READY:
Tampil();
break;
}
}
void Tampil(){
satuan = get_time % 10/1;
puluhan = get_time % 100/10;
ratusan = get_time % 1000/100;
ribuan = get_time % 10000/1000;
puluhanribu = get_time % 100000/10000;
ratusanribu = get_time % 1000000/100000;
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLK, MSBFIRST, digit1[satuan]);
shiftOut(DATA, CLK, MSBFIRST, digit1[puluhan]);
shiftOut(DATA, CLK, MSBFIRST, digit1[ratusan]);
shiftOut(DATA, CLK, MSBFIRST, digit1[ribuan]);
shiftOut(DATA, CLK, MSBFIRST, digit1[puluhanribu]);
shiftOut(DATA, CLK, MSBFIRST, digit1[ratusanribu]);
digitalWrite(LATCH, HIGH);
}}
No comments
Post a Comment