#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include "TimerOne.h"
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {2,3,4,5};
byte colPins[COLS] = {6,7,8,9};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
int hourButton = 12;
int minuteButton = 11;
int hourCursor = 4;
int minuteCursor = 7;
char hour[3];
char minute[3];
int hours;
int minutes;
int seconds=50;
void setup(){
pinMode(hourButton, INPUT_PULLUP);
pinMode(minuteButton, INPUT_PULLUP);
Serial.begin(9600);
Timer1.initialize(1000000);//初始化定时器为1s
Timer1.attachInterrupt( timerIsr );//设置中断回调函数
lcd.init();
lcd.backlight();
lcd.setCursor(6,0);
lcd.print(":");
lcd.setCursor(9,0);
lcd.print(":");
}
void inputNum(char time,int cursor)
{
if(time)
{
lcd.setCursor(cursor,0);
lcd.blink();
lcd.print(time);
cursor++;
}
}
void timerIsr()//定时器中断处理函数
{
minutes= atoi(minute);
hours = atoi(hour);
seconds++;
if (seconds >59)
{
seconds = 0;
minute[1]++;
if(minute[1]==':')
{
minute[0]++;
minute[1] = minute[1]-10;
if (minute[0] == '6'){
minutes = 0;
minute[0] = '0';
hour[1]++;
if(hour[1]==':')
{
hour[0]++;
hour[1] = hour[1]-10;
}
}
}
//minutes++;
}
//hours++;
//lcd.clear();
}
void timeSet(int button,int cursor)
{
if(digitalRead(button)==0)
{
int a =0;
int timeCursor = cursor;
Serial.println("PLZ INPUT");
lcd.setCursor(timeCursor,0);
lcd.blink();
while(a<2)
{
char key = customKeypad.getKey();
if(key != NO_KEY)
{
inputNum(key,cursor);
if(button==hourButton)
{
hour[a] = key;
}
else
{
minute[a] = key;
}
cursor++;
a++;
}
}
a = 0;
lcd.noBlink();
hour[3] = '\0';
minute[3] = '\0';
}
}
void loop()
{
//minutes = atoi(minute);
if(seconds<10)
{
lcd.setCursor(10,0);
lcd.print("0");
lcd.setCursor(11,0);
lcd.print(seconds);
}
else
{
lcd.setCursor(9,0);
lcd.print(":");
lcd.setCursor(10,0);
lcd.print(seconds);
}
if(minutes<10)
{
lcd.setCursor(7,0);
lcd.print("0");
lcd.setCursor(8,0);
lcd.print(minutes);
}
else{
lcd.setCursor(7,0);
lcd.print(minutes);
}
lcd.setCursor(4,0);
lcd.print(atoi(hour));
Serial.print(atoi(hour));
Serial.print(" ");
Serial.println(minutes);
//Serial.println(minutes);
timeSet(hourButton,hourCursor);
timeSet(minuteButton,minuteCursor);
//Serial.println(atoi(minute));
delay(100);
//lcd.clear();
//hours = atoi(hour);
// minutes= atoi(minute);
}