Hi,
I posted full code. this project based on home automation device control.
Hardware list:
1. ds1307
2. 6x8 keypad matrix.
3. 20 x 4 lcd display.
while((data = key()) == 0) - for getting keypad value.
[code]
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <EEPROM.h>
int latchPin = 9;
int clockPin = 10;
int dataPin = 8;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int lat_Pin = A2;
int clk_Pin = A3;
int dat_Pin = A1;
byte switchVar1 = 0;
int teamA = 100,teamB = 200;
int count = 0,count1 = 0,count2 = 60;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const char keymap[] = {
'C', '7', '1', 'I', 'O', 'U',
'D', '8', '2', 'J', 'P', 'V',
'E', '9', '3', 'K', 'Q', 'W',
'F', '0', '4', 'L', 'R', 'X',
'G', 'A', '5', 'M', 'S', 'Y',
'H', 'B', '6', 'N', 'T', 'Z',
'z', 'x', 'w', 'a', 's', 'r',
' ', 'y', ' ', 'b', 'u', 'd'
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
char lcd_data[4][20];
int row_c = 0;
int clo_c = 0;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <Wire.h>
#define DS1307_I2C_ADDRESS 0x68
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 13, 11, 5, 4, 3, 7);
#include "TimerOne.h"
int command = 0;
byte second = 45, minute = 12, hour = 9, dayOfWeek = 6, dayOfMonth = 20, month = 5, year = 11;
byte start = 0,dec = 0;
char data ;
byte clk = 0;
byte clk_old = 0;
long previousMillis = 0;
long interval = 1000;
byte secA,secB,minA,minB;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup()
{
Wire.begin();
Serial.begin(9600);
Timer1.initialize(500000);
Timer1.attachInterrupt(clock,500000);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(lat_Pin, OUTPUT);
pinMode(clk_Pin, OUTPUT);
pinMode(dat_Pin, INPUT);
lcd.begin(20, 4);
for(int i = 0;i < 4;i++)
{
for(int j=0;j< 20;j++)
{
lcd_data[i][j] = ' ';
}
}
lcd.clear();
lcd.setCursor(0,0);
long mcsec = micros();
getDateDs1307();
Serial.println(micros() - mcsec, DEC);
lcd_data[0][10] = (second >> 4) + 48;
lcd_data[0][11] = (second & 0x0f) + 48;
lcd_data[0][7] = (minute >> 4) + 48;
lcd_data[0][8] = (minute & 0x0f) + 48;
lcd_data[2][2] = ((teamA % 1000) / 100) + 48;
lcd_data[2][3] = ((teamA % 100) / 10) + 48;
lcd_data[2][4] = (teamA % 10 ) + 48;
lcd_data[2][15] = ((teamB % 1000) / 100) + 48;
lcd_data[2][16] = ((teamB % 100) / 10) + 48;
lcd_data[2][17] = (teamB % 10 ) + 48;
load_to_lcd_data();
}
void clock()
{
Timer1.stop();
getDateDs1307();
if(second != clk)
{
clk = second;
count1 += 1;
if(count1 == 60)
count1 = 0;
count2 -= 1;
if(count2 < 0)
count2 = 59;
int count_tmp = decToBcd(count1);
lcd_data[1][3] = (count_tmp >> 4) + 48;
lcd_data[1][4] = (count_tmp & 0x0f) + 48;
count_tmp = decToBcd(count2);
lcd_data[1][15] = (count_tmp >> 4) + 48;
lcd_data[1][16] = (count_tmp & 0x0f) + 48;
load_to_lcd_data();
}
Timer1.start();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
main:
data = key();
if(data != 0)
{
if(data == 'x')
{
for(int j=0;j< 20;j++)
{
lcd_data[3][j] = ' ';
}
lcd_data[3][1] = 'T';
lcd_data[3][2] = 'E';
lcd_data[3][3] = 'A';
lcd_data[3][4] = 'M';
lcd_data[3][5] = ' ';
lcd_data[3][6] = 'A';
lcd_data[3][7] = ':';
while((data = key()) == 0);
if(data == 'b')
goto main;
if(data == 'w')
teamA++;
if(data == 'z')
teamA--;
lcd_data[2][2] = ((teamA % 1000) / 100) + 48;
lcd_data[2][3] = ((teamA % 100) / 10) + 48;
lcd_data[2][4] = (teamA % 10 ) + 48;
}
if(data == 'y')
{
for(int j=0;j< 20;j++)
{
lcd_data[3][j] = ' ';
}
lcd_data[3][1] = 'T';
lcd_data[3][2] = 'E';
lcd_data[3][3] = 'A';
lcd_data[3][4] = 'M';
lcd_data[3][5] = ' ';
lcd_data[3][6] = 'B';
lcd_data[3][7] = ':';
while((data = key()) == 0);
if(data == 'b')
goto main;
if(data == 'w')
teamB++;
if(data == 'z')
teamB--;
lcd_data[2][15] = ((teamB % 1000) / 100) + 48;
lcd_data[2][16] = ((teamB % 100) / 10) + 48;
lcd_data[2][17] = (teamB % 10 ) + 48;
}
// Serial.print(data);
if(data == 's')
{
for(int j=0;j< 20;j++)
{
lcd_data[3][j] = ' ';
}
lcd_data[3][0] = 'P';
lcd_data[3][1] = 'R';
lcd_data[3][2] = 'E';
lcd_data[3][3] = 'S';
lcd_data[3][4] = 'S';
lcd_data[3][5] = ' ';
lcd_data[3][6] = 'N';
lcd_data[3][7] = '/';
lcd_data[3][8] = 'T';
lcd_data[3][9] = ' ';
lcd_data[3][10] = 'N';
lcd_data[3][11] = 'A';
lcd_data[3][12] = 'M';
lcd_data[3][13] = '/';
lcd_data[3][14] = 'T';
lcd_data[3][15] = 'I';
lcd_data[3][16] = 'M';
lcd_data[3][17] = 'E';
while((data = key()) == 0);
if(data == 'b')
goto main;
if(data == 'N')
{
while((data = key()) == 0);
if(data == 'b')
goto main;
if(data == 'A')
{
while((data = key()) == 0);
if(data == 'b')
goto main;
lcd_data[0][2] = data;
while((data = key()) == 0);
if(data == 'b')
goto main;
lcd_data[0][3] = data;
while((data = key()) == 0);
if(data == 'b')
goto main;
lcd_data[0][4] = data;
}
if(data == 'B')
{
while((data = key()) == 0);
if(data == 'b')
goto main;
lcd_data[0][15] = data;
while((data = key()) == 0);
if(data == 'b')
goto main;
lcd_data[0][16] = data;
while((data = key()) == 0);
if(data == 'b')
goto main;
lcd_data[0][17] = data;
}
}
if(data == 'T')
{
for(int j=0;j< 20;j++)
{
lcd_data[3][j] = ' ';
}
lcd_data[3][0] = 'S';
lcd_data[3][1] = 'E';
lcd_data[3][2] = 'T';
lcd_data[3][3] = ' ';
lcd_data[3][4] = 'T';
lcd_data[3][5] = 'I';
lcd_data[3][6] = 'M';
lcd_data[3][7] = 'E';
lcd_data[3][8] = '=';
lcd_data[3][11] = ':';
lcd_data[3][14] = ':';
while((data = key()) == 0);
if(data == 'b')
goto main;
lcd_data[3][9] = data;
while((data = key()) == 0);
if(data == 'b')
goto main;
lcd_data[3][10] = data;
while((data = key()) == 0);
if(data == 'b')
goto main;
lcd_data[3][12] = data;
while((data = key()) == 0);
if(data == 'b')
goto main;
lcd_data[3][13] = data;
while((data = key()) == 0);
if(data == 'b')
goto main;
lcd_data[3][15] = data;
while((data = key()) == 0);
if(data == 'b')
goto main;
lcd_data[3][16] = data;
setDateDs1307();
getDateDs1307();
lcd_data[0][10] = (second >> 4) + 48;
lcd_data[0][11] = (second & 0x0f) + 48;
lcd_data[0][7] = (minute >> 4) + 48;
lcd_data[0][8] = (minute & 0x0f) + 48;
}
}
}
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
{
getDateDs1307();
lcd_data[0][10] = (second >> 4) + 48;
lcd_data[0][11] = (second & 0x0f) + 48;
lcd_data[0][7] = (minute >> 4) + 48;
lcd_data[0][8] = (minute & 0x0f) + 48;
previousMillis = currentMillis;
}
}
remaining code nest..
[/code]