51单片机内部定时器可以实现万年历显示在1602液晶上吗?如果可以,当“日”进位到“月”时怎样进位?

因为不同月份的天数不一样,且还分闰年的2月份天数更是不一样。

可以实现万年历的。月得分情况了!就像这样
if((yue==1)||(yue==3)||(yue==5)||(yue==7)||
(yue==8)||(yue==10)||(yue==12))
{
if(ri==32)
{
ri=0;
yue++;
if(yue==13)
{
yue=0;
nian++;
if(nian==10000)
{nian=1;}
write_n(1,nian);
}
write_yr(6,yue);
}
}
if((yue==4)||(yue==6)||(yue==9)||(yue==11))
{
if(ri==31)
{
ri=0;
yue++;
if(yue==13)
{
yue=0;
nian++;
if(nian==10000)
{nian=1;}
write_n(1,nian);
}
write_yr(6,yue);
}
}
if(yue==2)
{
if((nian%4==0&&nian%100!=0)
||(nian%400==0))
{
if(ri==30)
{
ri=0;
yue++;
if(yue==13)
{
yue=0;
nian++;
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-02
51单片机内部定时器可以实现万年历显示在1602液晶上吗?
完全可以。

当“日”进位到“月”时怎样进位?
根据当前月份,逢31/30/29/28进位到月即可,一共仅有四种,程序是很简单的。

ri++;

if((ri == 31)&&((yue == 4)||(yue == 6)||(yue == 9)||(yue == 11)) {ri = 1; yue++} //小月
else if((ri == 30)&&((yue == 2)) {ri = 1; yue++} //闰年
else if((ri == 29)&&((yue == 2)&&(nian % 4 != 0)) {ri = 1; yue++} //平年
else if((ri == 29)&&((yue == 2)&&(nian % 100 == 0)&&(nian % 400 != 0)) {ri = 1; yue++} //平年
else if (ri == 32) {ri = 1; yue++} //大月

if(yue == 13){yue = 1; nian++;}
第2个回答  2012-08-20
可以风须自定义寄存器,再写程序。但程序很复杂,用定时器也不精确,DS1302时钟专用芯片才几块块钱,建议用时钟芯片。
相似回答