基于PCF8563的单片机数字时钟(4)

2019-03-15 12:15

}

//---填充显示缓冲区函数---// 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);


基于PCF8563的单片机数字时钟(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国古代34位美女 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: