找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3699|回复: 2
收起左侧

单片机数字钟系统设计报告 带仿真工程文件和源码

[复制链接]
ID:211150 发表于 2017-6-22 09:55 | 显示全部楼层 |阅读模式
proteus仿真工程图:
万年历.png 学习目标.png
  
任务描述
  
重难点
完成数字钟系统的软硬件设计与调试,系统主要功能要求如下:
  
     1. 在给定电路图基础上,完成数字钟系统设计;
  
     2. 可以显示时间、日期、定时时间,具有闹钟功能;
  
3. 设计按键校准并设置时间、日期、闹钟时间,切换显示内容(时间、公历日期、闹钟时间);
  
4. 闹钟时间到,数码管做相应显示,蜂鸣器响;
  
5. 万年历功能,重点是大月、小月的设置,平年、闰年2月份的设置;
51单片机程序图:
#include<reg51.h>
#define uchar unsigned char
unsigned char duanma[13]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xa3,0xa1};           // 段码
unsigned char weima[6]={0x01,0x02,0x04,0x08,0x10,0x20};                                         //位码
unsigned char saomiao,jishu1,jishu2,shi,fen,miao,banmiao,jishu3,jishu22,nlmiao,Y1,Y2,Y3,nzs,nzf,nzm,year,month,day,jishu4;
unsigned char xianshi[6]={0,0,0,0,0,0};
unsigned char flag;
bit naoling;
bit kaiting=0;
sbit D1=P3^0;
sbit D2=P3^1;
sbit k1=P3^4;         //停止   运行
sbit k2=P3^5;         //时+1
sbit k3=P3^6;         //分+1
sbit k4=P3^7;         //秒+1
sbit k5=P0^1;         //闹钟时+1
sbit k6=P0^2;         //闹钟分+1
sbit k7=P0^3;         //闹钟秒
sbit k8=P0^4;          // 年+1
sbit k9=P0^5;           // 月+1
sbit k10=P0^6;                // 日+1
sbit sm=P3^2;
sbit QH=P0^0;
void chushihua (void)
{
  TMOD=0x11;
   EA=1;
   ET0=1;TR0=1;ET1=1;
   TH0=(65536-5000)/256;
   TL0=(65536-5000)%256;
   TH1=(65536-1000)/256;
   TL1=(65536-1000)%256;
   Y1=shi;Y2=fen;Y3=miao;
}
void date(void)
  {
    day++;
        if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
          {
                  if(day==32)day=1;
          }
        if((month==4)||(month==6)||(month==9)||(month==11))
          {
                  if(day==31)day=1;
          }
        if(month==2)
          {
                  if(((((year+2000)%4)==0)&&(((year+2000)%100)!=0))||(((year+2000)%400)==0))
                  {
                    if(day==30)day=1;
                  }
                else if(day==29)day=1;
                 
          }
        if(day==1)
          {
            month++;
                if(month==13)
                  {
                    month=1;
                        year++;
                        if(year==100)year=0;
                  }
          }
  }

void yanshi (void)
  {
    unsigned char i,j,k;
    for(i=250;i>0;i--)
    for(j=100;j>0;j--);
    for(k=100;k>0;k--);
  }
  void naol (void)         interrupt  3
  {
   TH1=(65536-1000)/256;
   TL1=(65536-1000)%256;
           D1=~D1;
        
  }
  
void shuzizhongduan (void)         interrupt  1
{

        


        
     TH0=(65536-5000)/256;
     TL0=(65536-5000)%256;
         if(flag==0)
         {
         
          Y1=shi;Y2=fen;Y3=miao;
         }
         if(flag==1)
         {
         
          Y1=nzs;Y2=nzf;Y3=nzm;
         }
         if(flag==2)
         {
         
          Y1=year;Y2=month;Y3=day;
         }
    xianshi[0]=duanma[Y1/10];
    xianshi[1]=duanma[Y1%10];
        xianshi[2]=duanma[Y2/10];
        xianshi[3]=duanma[Y2%10];
        xianshi[4]=duanma[Y3/10];
        xianshi[5]=duanma[Y3%10];
        jishu1++;
        if(jishu1==6)
        {
        jishu1=0;
        }
        P2=  weima[jishu1];//位码
    P1=xianshi[jishu1];//段码  
        
        jishu2++;
        if(jishu2==100)
        {
        if(naoling)
        nlmiao++;
        }
        jishu2++;
        banmiao++;
        if(banmiao==100)
        {
        banmiao=0;
        D1=~D1;
        D2=~D2;
        
        }
        jishu3++;
        if(jishu3==200)
        {
        jishu3=0;
        if(kaiting==0)
{
        miao++;
        }
        if(naoling)
        {
        sm=~sm;
        }
        if(miao==60)
        {
        miao=0;
        fen++;
        if(fen==60)
        {
        fen=0;
        shi++;
        if(shi==24)
        {
        shi=0;
        date();

        }
        }
        }
        
        
        }

        
        
        }
        
        
        


void main (void)
{
year=17;month=6;day=15;
shi=23;fen=58;miao=46;
chushihua();
while(1)
{
if(QH==0)
{
flag++;
if(flag==3)  flag=0;
if(flag==0)
  {
   
    Y1=shi,Y2=fen,Y3=miao;
  }
  if(flag==1)
  {
    Y1=nzs;Y2=nzf;Y3=nzm;
  }
  if(flag==2)
  {
    Y1=year;Y2=month;Y3=day;
  }
    while(QH==0) ;
}
   P0 = 0xff;
saomiao=P0;
if(saomiao!=0xff)
{
   saomiao=P0;
    yanshi();
        if(saomiao!=0xff)
        {
if(flag==1)
{
  if(k5==0)
  {
  if(nzs==23)
  {
    nzs=0;

  }
  else
   nzs++;
  }
  if(k6==0)
  {
  if(nzf==60)
  {
   nzf=0;

  }
  else
  nzf++;
  }
   if(k7==0)
   {
  if(nzm==60)
  {
  nzm=0;
  }
  else
   nzm++;
   }
           }
        }
}
P0 = 0xff;
saomiao=P0;
if(saomiao!=0xff)
{
  
   saomiao=P0;
    yanshi();
        if(saomiao!=0xff)
        {
if(flag==2)
{
  if(k8==0)
  {
  if(year==99)
  {
   year=17;
  }
  else
  year++;
  }

  if(k9==0)
  {
  if(month==12)
  {
  month=1;
  }
  else
  month++;
  }
   if(k10==0)
        {
        day++;
        if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
          {
                  if(day==32)day=1;
          }
        if((month==4)||(month==6)||(month==9)||(month==11))
          {
                  if(day==31)day=1;
          }
        if(month==2)
          {
                  if(((((year+2000)%4)==0)&&(((year+2000)%100)!=0))||(((year+2000)%400)==0))
                  {
                    if(day==30)day=1;
                  }
                else if(day==29)day=1;
                 
          }
        
        
        }
          }   
        }
        }



if((shi==nzs)&&(fen==nzf)&&(miao==nzm))
{
TR1=1;
naoling=1;
}
if(nlmiao==5)
{
  nlmiao=0;
  TR1=0;
  naoling=0;
}
P3 = 0xff;
saomiao=P3;
if(saomiao!=0xff)
{
   
   saomiao=P3;
    yanshi();
        if(saomiao!=0xff)
        {
   if(k1==0)
   {
    kaiting=~kaiting;
            
   }
if((k2==0)&&(kaiting==1))
  {
   if(shi==23)
         {
          shi=0;
                     }
          else
          shi ++;

   }
   if((k3==0)&&(kaiting==1))
   {
           if(fen==59)
        {
         fen=0;
         }
          else
           fen ++;
                }
        
            if((k4==0)&&(kaiting==1))
            {
          if(miao==59)
           {
                   miao=0;
                 }
             else  
                 miao ++;
           
                   }
        
         while(P3!=0xff);
         
         
   
   


}

  }

}
   
}


                                 
1. 蜂鸣器的控制;
  
2. 万年历算法;
  
3. 各种信息的交替显示;
  
4.系统的统调。

0.png

全部资料下载地址:
7组.rar (39.85 KB, 下载次数: 45)
回复

使用道具 举报

ID:344229 发表于 2018-6-3 22:05 | 显示全部楼层
这个可以直接用吗·
回复

使用道具 举报

ID:350754 发表于 2018-6-13 00:43 | 显示全部楼层

RE: 单片机数字钟系统设计报告 带仿真工程文件和源码

我按照这个程序做了之后发现proteus的仿真结果显示不完整,我不知道什么错误(就是它们没有同步在一起),因为我不知道怎么发图片,也显示不出来,我该怎么办?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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