找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 947|回复: 1
打印 上一主题 下一主题
收起左侧

基于单片机的时钟万年历的设计

[复制链接]
跳转到指定楼层
楼主
1、任务名称:时钟万年历。
2、功能要求:第一行显示年月日,第二行显示时间,并可以设定日期和时间。
3、硬件要求:单片机芯片采用AT89C51,液晶屏选用LM016L。
4、任务提交:在Keil uVision中完成程序设计并提交工程文件电子档;在Protues中完成电路设计并提交工程文件电子档。
部分单片机代码:
#include<1602.h>
unsigned charcount,hour=10,min=10,sec=0,month=11,day=10,flag;
unsigned intyear=2010;
unsigned char codedays_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
main()
{
unsigned charis_leapyear(unsigned char year);   
unsigned chardays_of_month(unsigned char month);
voiddisplay(unsigned char mode);
   EA=1;      // 开总中断
   ET1=1;
   EX0=1;      // 开总外断0
   IT0=1;      // 外 中断1 下降沿触发
   TMOD=0X11; // 定时器工作在方式1,定时方式
   TL1=0Xaf;    //设置定时器0初值,5ms
   TH1=0X3C;
   TR1=1;      // 启动定时器
   LCD_initial();
    while(1)
    {  
     display(flag);
    }
}
   void timer1() interrupt 3     //定时中断函数
{
   TL1=0Xaf;
   TH1=0X3C;
    count++;
    if(count==20)
    {count=0;
     sec++;
     if(sec==60)
       {min++;sec=0;   
        if(min==60)
        { hour++;min=0;
         if(hour==24)
           {hour=0;
            day++;
            if(day==days_of_month(month)+1)
            {day=1;
             month++;
             if(month==13)
             {
               month=1;
                year++;
                if(year==100)
                year=0;
             }
            }
            }
         }
        }
        }
}
void int0()  interrupt 0       //外中断0函数 ,时间和日期设定
{   
   if(T0==1 )
      { flag++;
       if(flag==7)
        flag=0;
     }
     else if(T1==1 )
      { switch(flag)
      {
        case1: year++;if(year==100) year=0;break;
        case 2: month++;if(month==13)month=1;break;
        case 3:day++;if(day==days_of_month(month)+1) day=1;break;
        case 4: hour++;if(hour==24)hour=0;break;
        case 5: min++;if(min==60) min=0;break;
        case 6: sec++;if(sec==60) sec=0;break;
        default:break;
      }
     }  
      else if( WR==1 )
   
   { switch(flag)
      {
        case1: year--;if(year==255) year=99;break;
        case 2: month--;if(month==0)month=12;;break;
        case 3: day--;if(day==0)day=days_of_month(month);break;
        case 4: hour--;if(hour==255)hour=23;break;
        case 5: min--;if(min==255) min=59;break;
        case 6: sec--;if(sec==255) sec=59;break;
        default:break;
     }
    }
     else
     {
       flag=0;
     }
}
void delay()
{
   unsigned char i,j;
    for(i=0;i<10;i++)
    for(j=0;j<60;j++);

}

时钟万年历的设计.png (38.29 KB, 下载次数: 36)

仿真图

仿真图

任务3 时钟万年历.rar

110.41 KB, 下载次数: 26, 下载积分: 黑币 -5

仿真文件

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:485350 发表于 2023-12-26 15:56 | 只看该作者
闰年闰月问题考虑了没有
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表