# include "TM1637.h"
# include "TimerOne.h"
int CLK=11;
int key=2;
int DIO=12;
int sel=6;
int mode=5;
int add=4;
int dec=3;
int hour=23;
int minute=59;
int second=50;
int time[6];
int screen=0;
int done = 0;
int modify = 0;
boolean up_flag = 0, down_flag = 0;
TM1637 Display = TM1637(CLK, DIO);
void setup() {
for(int i=2;i<=12;i++){
pinMode(i,INPUT);
}
Display.init();
Display.set(BRIGHT_TYPICAL);
Display.point(1);
Timer1.initialize(1000000);
Timer1.attachInterrupt(timerIsr);
}
void loop() {
while(done==1)keydown();
while(done==1){
showtime(hour,minute,second);
Selkey();
}
}
// 一、电子钟时间显示
// 时间数据处理函数
void timedeal(int h,int m,int s){
time[0] = h % 100 / 10;
time[1] = h % 10;
time[2] = m % 100 / 10;
time[3] = m % 10;
time[4] = s % 100 / 10;
time[5] = s % 10;
}
// 切屏函数
void Selscr(){
if(digitalRead(key)==LOW){
delay(20);
if(disitalRead(key)==LOW){
screen=(screen+1)%2;
while(digitalRead(key)==LOW)showtime(hour,minute,secode);
}
}
}
// 显示函数
void showtime(int h,int m,int s){
timedeal(h, m, s);
Selscr();
if(screen==0){
for(int i = 0;i<4;i++){
Display.display(i,time[i]);
}
}
if(screen==1){
for(int i = 0;i<4;i++){
if(i<4)
Display.display(i,0x7f);
else
Display.display(i,time[i+2])
}
}
}
// 二、时间走秒控制
// 定时器中断函数
void timerIsr(){
second++;
if(second > 59)
{
second = 0;
minute++;
if(second > 59){
minute = 0;
minute++;
if(hour>23)
hour = 0;
}
}
}
// 三按键调整控制
void SelKey(){
if(digitalRead(sel)==LOW){
delay(20);
if(digitalRead(sel)==LOW){
done=(done+1)%2;
while(digitalRead(sel)==LOW)showtime(hour, minute, second);
}
}
}
// 调整部分选择函数,确定选择部分
void keydone(){
Selkey();
switch(down){
case 1;
Timer1.stop();
do{
UpKey();
DownKey();
if(up_flag==1||down_flag==1){
up_flag = 0;
down_flag = 0;
}
showttime(hour,minute,second);
}while(down==1);
break;
case 0;
do{
timer1.restart();
showtime(hour,minute,second);
}while(donw==1);
break;
default:break;
}
}