}
Enter_Flag=0;//按键状态恢复
temp2[0]=0x00;//秒,默认从00开始计时
temp2[1]=(temp1[11]《《4)|temp1[12];//分
temp2[2]=(temp1[9]《《4)|temp1[10];//时
temp2[3]=temp1[8];//周
temp2[4]=(temp1[6]《《4)|temp1[7];//日
temp2[5]=(temp1[4]《《4)|temp1[5];//月
temp2[6]=(temp1[2]《《4)|temp1[3];//年
Write_Nbyte(SD2303,0x00,temp2,7);//初始化设定时间
}
if(Key==0xfd)//“闹铃设置”键按下
{temp1[9]|=0x80;
Flag=temp1+9;//定时小时高位设置提示
while(!Enter_Flag)//直到按下确定键方停止
{for(i=0;i《50;i++)
Display(temp1);
Key=~PINB;
switch(Key)
{case0x04://“+”按键处理
(*Flag)++;
if(((*Flag)&0x7f)==10)*Flag=0|0x80;
break;
case0x08://“-”按键处理
if(((*Flag)&0x7f)==0)*Flag=10|0x80;
(*Flag)--;
break;
case0x10://“下一位”按键处理
Flag++;
(*(Flag-1))&=0x7f;//上一位去掉小数点显示
(*Flag)|=0x80;//当前位加上小数点显示
if(Flag==temp1+13)
{(*Flag)&=0x7f;
Flag=temp1+9;
(*Flag)|=0x80;}
break;
case0x20://“上一位”按键处理
if(Flag==temp1+9)
{(*Flag)&=0x7f;
Flag=temp1+13;
(*Flag)|=0x80;}
elseFlag--;
(*Flag)|=0x80;//当前位加上小数点显示
(*(Flag+1))&=0x7f;//下一位去掉小数点显示
break;
case0x40:Enter_Flag=1;break;//“确定”键处理
//case0x80:Enter_Flag=1;break;//测试用
default:break;}
}
Enter_Flag=0;
temp3[0]=((temp1[11]《《4)|temp1[12])&0x7f;//分数据处理,去掉小数点
temp3[1]=((temp1[9]《《4)|temp1[10])&0x7f;//时数据处理,去掉小数点
if((temp3[0]《0x60)&&(temp3[1]《0x24))//判断是否为合法时间
{Write_1byte(SD2303,0x0e,0b10110000);//开启闹铃使能
Write_1byte(SD2303,0x0f,0b00101000);//开始中断使能
Write_Nbyte(SD2303,0x08,temp3,3);}//初始化闹铃设置
else
Write_1byte(SD2303,0x0e,0b00110000);//取消闹铃功能
}
}
}
//***************************DS1722函数开始************************//
voidConvert(ucharp1,uchar*p2)
{uchartemp;
if(p1&0x80)
{p2[13]=10;//零下温度用10表示
p1=0xff-p1;}//温度绝对值
else
p2[13]=11;//零上温度用11表示
p2[14]=p1/10;//温度十位
p2[15]=p1-p2[14]*10;//温度个位
}
//***************************通过SPI接口写数据函数*****************//