}

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接口写数据函数*****************//