📄 good.txt
字号:
if(key1_down==0)
break;
P2 = select[j];
P0 = table[*p];
Tdelay(25); //低电平600us
if(T0 == 0)
DelayMs(10);
if(T0 == 0)
key1();
p++;
P0 = 0x00;
}
P2 = 0xff;
for(j = 0; j<8; j++)
{
if(key1_down==0)
break;
P1 = select[j];
P0=table[*p];
Tdelay(25);
p++;
P0=0x00;
}
}
}//报时处理结束
}//state==1
}//调整状态处理结束
}
/*************************按键及中断操作************************/
void key1(void)
{
WR=0;
if(key1_down==0)//在正常情况下按下key1键,进入change/alarm状态
{
key1_down=1;
key3_down=0;
state=0;
//关闭所有的数码管子;
for(m=0;m<16;m++)dis_buf[m]=11;
//数码管子开始13,14输出对应的change/alarm代码;
if(change_alarm==0)//
{dis_buf[13]=0;dis_buf[14]=0;}//显示00;
else
{dis_buf[13]=8;dis_buf[14]=8;}//显示88
}
else//回到正常情况下去.
{
key1_down=0;
key3_down=0;
state=0;
if(change_alarm==0)
{
SetPCF8563(0x09,save2[1]&0x7f);
SetPCF8563(0x0a,save2[2]&0x7f);
SetPCF8563(0x0b,save2[3]&0x7f);
SetPCF8563(0x0c,save2[4]&0x7f);
}
else
{
SetPCF8563(0x02,save[0]);
SetPCF8563(0x03,save[1]);
SetPCF8563(0x04,save[2]);
SetPCF8563(0x05,save[3]);
SetPCF8563(0x06,save[4]);
SetPCF8563(0x07,save[5]);
SetPCF8563(0x08,save[6]);
GetPCF8563(0x02,7,save);
save[0] = save[0]&0x7f;
save[1] = save[1]&0x7f;
save[2] = save[2]&0x3f;
save[3] = save[3]&0x3f;
save[4] = save[4]&0x07;
save[5] = save[5]&0x1f;
for(k = 0; k<7; k++)
ReadTime(k);
}
}
while(T0==0); //防止重复计算按键按下的次数
}
void key3(void)interrupt 0
{
delay();
if(INT0 != 0)
return;
enc=1;
while(INT0==0);
}
void keyc(void)
{
enc=0;
if(key1_down==1)
{
if(key3_down==0)//确定change/alarm的状态.
{
key3_down=1;
state=1;//状态确定.
if(change_alarm==1)
{
for(k = 0; k<7; k++)
ReadTime(k);
dis_buf[15]=8;//显示8
}
else
{
dis_buf[15]=8;
}
}
else//进入数码管数值变化
{
if(change_alarm==0)
{
switch(key2_time)
{
case 0:
break;
case 1:
save2[1]++;
if((save2[1]&0x0f) == 0x0a)
save2[1] = (save2[1]&0xf0) + 0x10;
if(save2[1] == 0x60)
save2[1] = 0;
ReadTime2(key2_time);
break;
case 2:
save2[2]++;
if((save2[2]&0x0f) == 0x0a)
save2[2] = (save2[2]&0xf0) + 0x10;
if(save2[2] == 0x24)
save2[2] = 0;
ReadTime2(key2_time);
break;
case 3:
save2[3]++;
if((save2[3]&0x0f) == 0x0a)
save2[3] = (save2[3]&0xf0) + 0x10;
if(save2[3] == 0x32)
save2[3] = 1;
ReadTime2(key2_time);
break;
case 4:
save2[4]++;
if((save2[4]&0x0f) == 0x0a)
save2[4] = (save2[4]&0xf0) + 0x10;
if(save2[4] == 0x07)
save2[4] = 0;
ReadTime2(key2_time);
break;
case 5:
break;
case 6:
break;
}
}//for if
else//时钟调节
{
switch(key2_time)
{
case 0:
save[0]++;
if((save[0]&0x0f) == 0x0a)
save[0] = (save[0]&0xf0) + 0x10;
if(save[0] == 0x60)
save[0] = 0;
ReadTime(key2_time);
break;
case 1:
save[1]++;
if((save[1]&0x0f) == 0x0a)
save[1] = (save[1]&0xf0) + 0x10;
if(save[1] == 0x60)
save[1] = 0;
ReadTime(key2_time);
break;
case 2:
save[2]++;
if((save[2]&0x0f) == 0x0a)
save[2] = (save[2]&0xf0) + 0x10;
if(save[2] == 0x24)
save[2] = 0;
ReadTime(key2_time);
break;
case 3:
save[3]++;
if((save[3]&0x0f) == 0x0a)
save[3] = (save[3]&0xf0) + 0x10;
if(save[5]==0x01||save[5]==0x03||save[5]==0x05||save[5]==0x07||save[5]==0x08||save[5]==0x10||save[5]==0x12)
{
if(save[3] == 0x32)
save[3] = 1;
}
if(save[5]==0x04||save[5]==0x06||save[5]==0x09||save[5]==0x11)
{
if(save[3] == 0x31)
save[3] = 1;
}
if(save[5]==0x02)
{
if(((save[6]&0x0f)+(save[6]>>4)*10)%4==0)//优先级
{
if(save[3] == 0x30)
save[3] = 1;
}
else
{
if(save[3] == 0x29)
save[3] = 1;
}
}
ReadTime(key2_time);
break;
case 4:
save[4]++;
if((save[4]&0x0f) == 0x0a)
save[4] = (save[4]&0xf0) + 0x10;
if(save[4] == 0x07)
save[4] = 0;
ReadTime(key2_time);
break;
case 5:
save[5]++;
if((save[5]&0x0f) == 0x0a)
save[5] = (save[5]&0xf0) + 0x10;
if(save[5] == 0x13)
save[5]=1;
if(save[5]==2&&save[3]>=0x29)
{
if(((save[6]&0x0f)+(save[6]>>4)*10)%4!=0)//fei闰年
{
save[3]=1;
ReadTime(3);
}
if(((save[6]&0x0f)+(save[6]>>4)*10)%4==0&&save[3]>=0x30)
{
save[3]=1;
ReadTime(3);
}
}
ReadTime(key2_time);
break;
case 6:
save[6]++;
if((save[6]&0x0f) == 0x0a)
save[6] = (save[6]&0xf0)+0x10;
if(save[6] == 0xa0)
save[6] = 1;
ReadTime(key2_time);
break;
}//时钟调整。
}//调节状态结束
}
}//key1_down
}
void key2(void)interrupt 2
{
delay();
if(INT1==1)
return;
enb=1;
while(INT1==0);
}
void keyb(void)
{
enb=0;
if(key1_down==1)
{
if(state==0)
{
change_alarm=~change_alarm;
if(change_alarm==1)
{
dis_buf[13]=8;
dis_buf[14]=8;//显示88,表示时钟状态。
dis_buf[15]=11;//灭
}
else
{
dis_buf[13]=0;
dis_buf[14]=0;//显示00,表示报警状态。
dis_buf[15]=11;//灭
}
}
else //数码管的选择
{
key2_time++;
if(key2_time == 7)
key2_time = 0;
/* state=1;
if(change_alarm==1)
{
switch(key2_time)
{
case 0: dis_buf[10]=temp[0];dis_buf[11]=temp[1];break;
case 1: dis_buf[8]=temp[0];dis_buf[9]=temp[1];break;
case 2:dis_buf[6]=temp[0];dis_buf[7]=temp[1] ;break;
case 3: dis_buf[4]=temp[0];dis_buf[5]=temp[1];break;
case 4: dis_buf[12]=temp[0];break;
case 5: dis_buf[2]=temp[0];dis_buf[3]=temp[1];break;
case 6: dis_buf[0]=temp[0];dis_buf[1]=temp[1];break;
}
key2_time++;
if(key2_time == 7)
key2_time = 0;
switch(key2_time)
{
case 0: temp[0]=dis_buf[10];temp[1]=dis_buf[11];dis_buf[10]=11;dis_buf[11]=11;break;
case 1: temp[0]=dis_buf[8];temp[1]=dis_buf[9];dis_buf[8]=11;dis_buf[9]=11;break;
case 2:temp[0]=dis_buf[6];temp[1]=dis_buf[7];dis_buf[6]=11;dis_buf[7]=11 ;break;
case 3: temp[0]=dis_buf[4];temp[1]=dis_buf[5];dis_buf[4]=11;dis_buf[5]=11;break;
case 4: temp[0]=dis_buf[12];dis_buf[12]=11;break;
case 5: temp[0]=dis_buf[2];temp[1]=dis_buf[3];dis_buf[2]=11;dis_buf[3]=11;break;
case 6: temp[0]=dis_buf[0];temp[1]=dis_buf[1];dis_buf[0]=11;dis_buf[1]=11;break;
}
}
else
{
switch(key2_time)
{
case 0: break;
case 1: dis_buf2[8]=temp2[0];dis_buf2[9]=temp2[1];break;
case 2: dis_buf2[6]=temp2[0];dis_buf2[7]=temp2[1] ;break;
case 3: dis_buf2[4]=temp2[0];dis_buf2[5]=temp2[1];break;
case 4: dis_buf2[12]=temp2[0];break;
case 5: break;
case 6: break;
}
key2_time++;
if(key2_time == 7)
key2_time = 0;
switch(key2_time)
{
case 0: break;
case 1: temp2[0]=dis_buf2[8];temp2[1]=dis_buf2[9];dis_buf2[8]=11;dis_buf2[9]=11;break;
case 2: temp2[0]=dis_buf2[6];temp2[1]=dis_buf2[7];dis_buf2[6]=11;dis_buf2[7]=11 ;break;
case 3: temp2[0]=dis_buf2[4];temp2[1]=dis_buf2[5];dis_buf2[4]=11;dis_buf2[5]=11;break;
case 4: temp2[0]=dis_buf2[12];dis_buf2[12]=11;break;
case 5: break;
case 6: break;
}
}
}//位移结束*/
}
}//key1_down;
}
/************************IC PROCESING***************************/
void ic_start(void)
{ //SDA位于高电平时,将SCL拉低,时钟芯片和单片机开始传输通信
SDA=1;
SCL=1;
nop;
nop;
SDA=0;
nop;
nop;
SCL=0;
nop;
nop;
nop;
nop;
nop;
}
void ic_end(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -