}
//---填充显示缓冲区函数---// void DisplayBuf_DS18B20(uint n) { SegBuf_DS18B20[3] =n; SegBuf_DS18B20[2] =n/10; SegBuf_DS18B20[1] =n/100; }
if(SegBuf_DS18B20[1]==0)SegBuf_DS18B20[1]=10;//消除前面的0 if(tflag==0)SegBuf_DS18B20[0] =11; //正温度,不显示符号 if(tflag==1)SegBuf_DS18B20[0] =12; //负温度,显示“-”号
void DisplaySecond(uchar x) //写入12864秒 { uchar i,j; i=x/10; j=x; Displayen(1,4,0*8,i); Displayen(1,4,1*8,j); }
void DisplayMinute(uchar x) //写入12864分 { uchar i,j; i=x/10; j=x; Displayen(2,4,4*8,i); Displayen(2,4,5*8,j); }
void DisplayHour(uchar x) //写入12864小时 { uchar i,j; i=x/10; j=x; Displayen(2,4,0*8,i); Displayen(2,4,1*8,j);
}
void DisplayDay(uchar x) //写入12864天 { uchar i,j; i=x/10; j=x; Displayen(1,0,2*8,i); Displayen(1,0,3*8,j); }
void DisplayMonth(uchar x) //写入11864月 { uchar i,j; i=x/10; j=x; Displayen(2,0,6*8,i); Displayen(2,0,7*8,j); }
void DisplayYear(uchar x) //写入12864年 { uchar i,j; i=x/10; j=x; Displayen(2,0,2*8,i);//0 Displayen(2,0,3*8,j);//0 }
void DisplayWeek(uchar x) //写入12864星期 { Display(2,2,2*16,(x+8)); }
void DisplayCentury(uchar x) //写入12864世纪 { uchar i,j; i=x/10; j=x; Displayen(2,0,0*8,i); Displayen(2,0,1*8,j);
}
void displayPCF8563(void) { DisplaySecond(g8563_Store[0]); DisplayMinute(g8563_Store[1]); DisplayHour(g8563_Store[2]); DisplayDay(g8563_Store[3]); DisplayMonth(g8563_Store[5]); DisplayYear(g8563_Store[6]); DisplayWeek(g8563_Store[4]); DisplayCentury(g8563_Store[7]); }
void displayDS18B20(void) { Displayen(1,6,0*8,SegBuf_DS18B20[0]);//+-
Displayen(1,6,1*8,SegBuf_DS18B20[1]);//温度十位 Displayen(1,6,2*8,SegBuf_DS18B20[2]);//温度个位 Displayen(1,6,3*8,13);//小数点 Displayen(1,6,4*8,SegBuf_DS18B20[3]);//小数点1位 Display(1,6,3*16,26);//度 }
void turn_val(uchar newval,uchar flag,uchar newaddr,uchar s1num)
//newval是时间日期值,flag是时间日期增减标识,newaddr是读取数据的地址,s1num是年月日时分秒星期的数字标识 {
uchar ucData1,ucData2,SETCentury; newval=P8563_ReadData(newaddr); switch(newaddr) { case 0x02:newval=(newval&0x7f); /*秒*/ break; case 0x03:newval=(newval&0x7f); /*秒*/ break; case 0x04:newval=(newval&0x3f);/*小时*/ break; case 0x05:newval=(newval&0x3f); /*日*/ break; case 0x06:newval=(newval&0x07); /*星期*/ break;
case 0x07:newval=(newval&0x1f);/*月*/ break;
case 0x08:newval=(newval&0xff);/*年*/ }
ucData1=newval/16; //BCD码转十六进制 ucData2=newval;
newval=ucData1*10+ucData2;
if(flag) //判断是加一还是减一 { newval++; switch(s1num) { case 1: if(newval>99) { SETCentury=P8563_ReadData(0x07); g8563_Store[7]=SETCentury&0x80; /*取世纪,00为2000,80为1900*/ if(g8563_Store[7]==0x00)g8563_Store[7]=19;//2099年变为1900年 if(g8563_Store[7]==0x80)g8563_Store[7]=20;//1999年变为2000年 if(g8563_Store[7]==20)g8563_Store[5]=(g8563_Store[5]&0x3F); if(g8563_Store[7]==19)g8563_Store[5]=(g8563_Store[5]|0x80);
P8563_writeData(7,g8563_Store[5]);//重新写月,从而把世纪状态写回
P8563。
newval=0;
}
DisplayCentury(g8563_Store[7]); DisplayYear(newval); break;
case 2: if(newval>12) newval=1; DisplayMonth(newval); break;
case 3: if(newval>31) newval=1; DisplayDay(newval); break;
case 4: if(newval>6) newval=0; DisplayWeek(newval); break;
case 5: if(newval>23) newval=0; DisplayHour(newval); break;
case 6: if(newval>59) newval=0; DisplayMinute(newval); break; case 7: if(newval>59) newval=0; DisplaySecond(newval); break; default:break; } } else { newval--; switch(s1num) { case 1: if(newval==0xff) {
SETCentury=P8563_ReadData(0x07);//读取月,月的高位1为世纪19**年,0表示20**年 g8563_Store[7]=SETCentury&0x80; /*取世纪,00为2000,80为1900*/ if(g8563_Store[7]==0x00)g8563_Store[7]=19;//2000年变为1999年 if(g8563_Store[7]==0x80)g8563_Store[7]=20;//1999年变为2000年 if(g8563_Store[7]==20)g8563_Store[5]=(g8563_Store[5]&0x3F); if(g8563_Store[7]==19)g8563_Store[5]=(g8563_Store[5]|0x80); P8563_writeData(7,g8563_Store[5]);//重新写月,从而把世纪状态写回P8563。 newval=99; } DisplayCentury(g8563_Store[7]); DisplayYear(newval); break; case 2: if(newval==0) newval=12; DisplayMonth(newval); break; case 3: if(newval==0) newval=31; DisplayDay(newval); break; case 4: if(newval==0xff) newval=6; DisplayWeek(newval); break; case 5: if(newval==0xff) newval=23; DisplayHour(newval); break; case 6: if(newval==0xff) newval=59; DisplayMinute(newval);