📄 clock.c
字号:
stop_i2c();
return date;
}
//====================================================================
/******************************led***********************************/
//* 功能:延时函数
//*********************************************************************
void Delay(char x)
{
char i;
while(x--)
for(i=0;i<5;i++);
}
/***********************led初始化函数**************************/
void init_led()
{
wela=0;
dula=0; //一般位选和段选开始时要清零
}
/***********************显示函数*******************************/
void display(uchar wei_1,uchar wei_2,uchar wei_3,uchar wei_4,uchar wei_5,uchar wei_6)
{
dula=1;
P0=table[wei_1];
dula=0;
wela=1;
P0=0xdf;
wela=0;
Delay(40);//延时1m秒
P0=0xdf;
dula=1;
P0=table[wei_2];
dula=0;
wela=1;
P0=0xef;
wela=0;
Delay(40);
dula=1;
P0=table[wei_3];
dula=0;
wela=1;
P0=0xf7;
wela=0;
Delay(40);
dula=1;
P0=table[wei_4];
dula=0;
wela=1;
P0=0xfb;
wela=0;
Delay(40);
dula=1;
P0=table[wei_5];
dula=0;
wela=1;
P0=0xfd;
wela=0;
Delay(40);
dula=1;
P0=table[wei_6];
dula=0;
wela=1;
P0=0xfe;
wela=0;
Delay(40);
}
/**************************时间显示函数*********************************/
void dis_time()
{
donetime();
//Delay(40);
wei_1=time[5]-0x30;
wei_2=time[4]-0x30;
wei_3=time[3]-0x30;
wei_4=time[2]-0x30;
wei_5=time[1]-0x30;
wei_6=time[0]-0x30;
P_0=(time[0]<<7);
//display(wei_1,wei_2,wei_3,wei_4,wei_5,wei_6);
}
//====================================================================
/****************************独立键盘程序*****************************/
void key_scan()
{
if(k1==0)
{
Delay(100);
if(k1==0)
{
key1=1;
}
while(!k1);
Delay(200);
while(!k1);
}
if(k2==0)
{
Delay(100);
if(k2==0)
{
key2=1;
}
while(!k2);
Delay(200);
while(!k2);
}
if(k3==0)
{
Delay(100);
if(k3==0)
{
key3=1;
}
while(!k3);
Delay(200);
while(!k3);
}
}
//******************************按键处理*******************************
void key_chuli()
{
key_scan();
if(key1==1){k1_d++;if(k1_d>7)k1_d=0;key1=0;}
if(key2==1){add=1;key2=0;}
if(key3==1){rec=1;key3=0;
if(k1_d==0)
{if(ling_ff==0)ling_ff=1;else ling_ff=0;}}
if(k1_d==0) //k1_d=0时 正常显示时间
{dis_time();}
if(k1_d<=3&&k1_d>0) //******************0<k1_d<=3时间校正
{
SetTime();
if(k1_d==1)
{
if(add==1)
{
sec++;
if(sec>59|sec<0)sec=0;
add=0;
}
if(rec==1)
{
sec--;
if(sec<0|sec>59)sec=59;
rec=0;
}
}
if(k1_d==2)
{
if(add==1)
{
min++;
if(min>59|min<0)min=0;
add=0;
}
if(rec==1)
{
min--;
if(min<0|min>59)min=59;
rec=0;
}
}
if(k1_d==3)
{
if(add==1)
{
hou++;
if(hou>23|hou<0)hou=0;
add=0;
}
if(rec==1)
{
hou--;
if(hou<0|hou>23)hou=23;
rec=0;
}
}
wei_1=hou/10; //
wei_2=hou%10; //
wei_3=min/10; //
wei_4=min%10; //
wei_5=sec/10; //
wei_6=sec%10; //
// display(wei_1,wei_2,wei_3,wei_4,wei_5,wei_6);
}
if(k1_d>3) //闹铃设置
{
if(k1_d==4)
{
if(add==1)
{
if(ling_ff==1)ling_ff=0;
else ling_ff=1;
add=0;
}
if(rec==1)
{
if(ling_ff==1)ling_ff=0;
else ling_ff=1;
rec=0;
}
}
if(k1_d==5)
{
if(add==1)
{
min_d++;
if(min_d>59|min_d<0)min_d=0;
add=0;
}
if(rec==1)
{
min_d--;
if(min_d<0|min_d>59)min_d=59;
rec=0;
}
}
if(k1_d==6)
{
if(add==1)
{
hou_d++;
if(hou_d>23|hou_d<0)hou_d=0;
add=0;
}
if(rec==1)
{
hou_d--;
if(hou_d<0|hou_d>23)hou_d=23;
rec=0;
}
}
if(k1_d==7)
{
P1=0X00;
write_add_i2c(10,min_d);
Delay(100);
write_add_i2c(20,hou_d);
Delay(100);
write_add_i2c(30,ling_ff);
Delay(100);
k1_d=0;
}
wei_1=hou_d/10; //
wei_2=hou_d%10; //
wei_3=min_d/10; //
wei_4=min_d%10; //
if(ling_ff==0)
{
wei_5=10;
wei_6=10;
}
else
{
wei_5=15;
wei_6=15;
}
}
if(k1_d==1) P_1=0;else P_1=1;
if(k1_d==2) P_2=0;else P_2=1;
if(k1_d==3) P_3=0;else P_3=1;
if(k1_d==4) P_4=0;else P_4=1;
if(k1_d==5) P_5=0;else P_5=1;
if(k1_d==6) P_6=0;else P_6=1;
}
//================================================================
/***************************定时显示****************************/
void init_t() //定时器初始化
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1 //中断函数
{
uchar bb;
TH0=(65536-22000)/256;
TL0=(65536-22000)%256;
display(wei_1,wei_2,wei_3,wei_4,wei_5,wei_6);
if(ling_f==1&&ling_ff==0)
{
bb++;
if(bb>=5)
{
if(FMQ==1)FMQ=0;
else FMQ=1;
bb=0;
}
}
else FMQ=1;
}
//==================================================================
/************************主函数*************************************/
void main()
{
init_i2c();
P1=0X00;
min_d=read_add_i2c(10);
Delay(100);
hou_d=read_add_i2c(20);
Delay(100);
ling_ff=read_add_i2c(30);
Delay(100);
star=uc_R1302(0x81); //读秒
//Init1302(); //每次每次上电不能都初始化
init_t();
v_W1302(0x90,0xa5); //使能涓流充电
v_W1302(0x80,star); //秒
while(1)
{
key_chuli();
if(min==min_d&&hou==hou_d)
ling_f=1;
else ling_f=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -