找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

多功能电子时钟仿真及代码

查看数: 4027 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-2-19 15:53

正文摘要:

多功能电子时钟仿真原理图:

回复

ID:170753 发表于 2017-4-19 19:59
感谢楼主分享
ID:165792 发表于 2017-2-21 22:29
不错功能比较多
ID:140489 发表于 2017-2-20 11:17
显示函数修改一下,调整时相应的数码管闪烁

void display(char miao,char fen, char shi)           //显示子程序,分别显示时,分,秒
{

if(slnum==0)
{
snum=30;
fnum=30;
mnum=30;
}

if(slnum==1)
{
snum=30;
fnum=30;
mnum++;
}

if(slnum==2)
{
snum=30;
fnum++;
mnum=30;
}

if(slnum==3)
{
snum++;
fnum=30;
mnum=30;
}


if(mnum>=30)   //调整时,秒闪烁
{
  P0=table[miao%10];
  wei7=0;
  delay(1);
  wei7=1;
  P0=0xff;

  P0=table[miao/10];
  wei6=0;
  delay(1);
  wei6=1;
  P0=0xff;

  if(mnum==60)
          mnum=0;
}
  
  P0=table[16];
  wei5=0;
  delay(1);                                                                                                                                                                                                                       
  wei5=1;
  P0=0xff;

if(fnum>=30)   //调整时,分钟闪烁
{
  P0=table[fen%10];
  wei4=0;
  delay(1);
  wei4=1;
  P0=0xff;

  P0=table[fen/10];
  wei3=0;
  delay(1);
  wei3=1;
  P0=0xff;
        if(fnum==60)
                fnum=0;

}
  
  P0=table[16];
  wei2=0;
  delay(1);
  wei2=1;
  P0=0xff;

if(snum>=30)          //调整时,小时闪烁
{
  P0=table[shi%10];
  wei1=0;
  delay(1);
  wei1=1;
  P0=0xff;

  P0=table[shi/10];
  wei0=0;
  delay(1);
  wei0=1;
  P0=0xff;
        if(snum==60)
                snum=0;

  }
}
ID:140489 发表于 2017-2-20 11:10
原来的程序,设置调整的时候数码管不闪烁,我在原来的程序上修改了一下,现在调整的时候对应的数码管闪烁,这样比较直观的知道调整的是时、分、秒。仿真通过  

/**************************/
/**************************/
/****   电子时钟       ****/
/**************************/
/**************************/

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
char miao,fen,shi;
bit flag, flag_time;
char set_miao=0,set_fen=0;set_shi=12; //闹钟初始化
uchar slnum,snum,fnum,mnum;

sbit s1=P3^0;                                         //功能键
sbit s2=P3^1;                                         //加键
sbit s3=P3^2;                                         //减键
sbit s4=P3^3;                                         //闹钟设置


sbit led1=P1^0;                                         //调整秒钟的指示灯
sbit led2=P1^1;                                         //调整分钟的指示灯
sbit led3=P1^2;                                         //调整时钟的指示灯
sbit led4=P1^3;                                         //闹钟设置指示灯
sbit BUZZ =P1^4;                                 //报警

sbit wei0=P2^0;                                         //定义8个数码管段选
sbit wei1=P2^1;
sbit wei2=P2^2;
sbit wei3=P2^3;
sbit wei4=P2^4;
sbit wei5=P2^5;
sbit wei6=P2^6;
sbit wei7=P2^7;

uchar code table[]={
                  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
                                  0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};                //共阴数码管编码

void delay(uint z)                                  //延时函数
{
uint x,y;
for(x=z;x>0;x--)
    for(y=125;y>0;y--);

}

void start()                                         //定时器初始化
{
TMOD=0x11;
TH0=(65536-50000)/256;                           //时间累加
TH0=(65536-50000)%256;
TH1=(65536-50000)/256;                           //闹钟设置
TH1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=0;                                                           //关闭定时器
}

void display(char miao,char fen, char shi)           //显示子程序,分别显示时,分,秒
{

if(slnum==0)
{
snum=30;
fnum=30;
mnum=30;
}

if(slnum==1)
{
snum=30;
fnum=30;
mnum++;
}

if(slnum==2)
{
snum=30;
fnum++;
mnum=30;
}

if(slnum==3)
{
snum++;
fnum=30;
mnum=30;
}


if(mnum>=30)   //调整时,秒闪烁
{
  P0=table[miao%10];
  wei7=0;
  delay(1);
  wei7=1;
  P0=0xff;

  P0=table[miao/10];
  wei6=0;
  delay(1);
  wei6=1;
  P0=0xff;

  if(mnum==60)
          mnum=0;
}
  
  P0=table[16];
  wei5=0;
  delay(1);                                                                                                                                                                                                                       
  wei5=1;
  P0=0xff;

if(fnum>=30)   //调整时,分钟闪烁
{
  P0=table[fen%10];
  wei4=0;
  delay(1);
  wei4=1;
  P0=0xff;

  P0=table[fen/10];
  wei3=0;
  delay(1);
  wei3=1;
  P0=0xff;
        if(fnum==60)
                fnum=0;

}
  
  P0=table[16];
  wei2=0;
  delay(1);
  wei2=1;
  P0=0xff;

if(snum>=30)          //调整时,小时闪烁
{
  P0=table[shi%10];
  wei1=0;
  delay(1);
  wei1=1;
  P0=0xff;

  P0=table[shi/10];
  wei0=0;
  delay(1);
  wei0=1;
  P0=0xff;
        if(snum==60)
                snum=0;

  }
}

void keyscan()                   //功能键
{
if(s1==0)
{
  delay(5);
  if(s1==0)                            //确认功能按下
  {
   while(!s1);                  
   slnum++;                           //功能键按下次数记录
   if(slnum==1)                   //功能键第一次按下调整“秒钟”
   {
           if(flag)
            TR0=1;                        //开定时器
        else
            TR0=0;                        //关闭定时器
                led1=0;
   }


   if(slnum==2)
   {
                led2=0;
                led1=1;
   }

   if(slnum==3)
   {
        led3=0;
                led2=1;
                led1=1;
   }

        if(slnum==4)
   {
                led3=1;
                led2=1;
                led1=1;
                slnum=0;
                TR0=1;
   }
  }
}
}

void time()
{
   if(slnum!=0)
   {
      if(s2==0)
           {
           delay(5);
           if(s2==0)
           {
           while(!s2);
           switch(slnum)
           {
              case 1:
                  miao++;
                  if(miao==60)
                  miao=0;
                  break;
                   case 2:
                  fen++;
                  if(fen==60)
                 fen=0;
                  break;
                   case 3:
                  shi++;
                  if(shi==24)
                  shi=0;
                  break;
                      }
                    }
                  }

          if(s3==0)
           {
           delay(5);
           if(s3==0)
           {
           while(!s3);
           switch(slnum)
           {
              case 1:
                  miao--;
                  if(miao<0)
                  miao=59;
                  break;
                   case 2:
                  fen--;
                  if(fen<0)
                 fen=59;
                  break;
                   case 3:
                  shi--;
                  if(shi<0)
                  shi=23;
                  break;
                      }
                    }
                  }
                  }
                  }
         void set_time()
         {
            if(slnum==0)
                 {
                   if(s4==0)
                   {
                      delay(5);
                          if(s4==0)
                          {
                          while(!s4);
                          led4=~led4;
                          flag=~flag;
                          }
                          }
                          }
                          if(flag)
                          {
                          if(slnum!=0)
                          {
                          if(s2==0)
                          {
                          delay(5);
                          if(s2==0)
                          {
                          while(!s2);
                          switch(slnum)
                          {
                          case 1:
                  set_miao++;
                  if(set_miao==60)
                  set_miao=0;
                  break;
                   case 2:
                  set_fen++;
                  if(set_fen==60)
                 set_fen=0;
                  break;
                   case 3:
                  set_shi++;
                  if(set_shi==24)
                  set_shi=0;
                  break;
                  }
                  }
                  }
                  if(s3==0)
                  {
                   delay(5);
                          if(s3==0)
                          {
                          while(!s3);
                          switch(slnum)
                          {
                          case 1:
                  set_miao--;
                  if(set_miao<0)
                  set_miao=59;
                  break;
                   case 2:
                  set_fen++;
                  if(set_fen<0)
                 set_fen=59;
                  break;
                   case 3:
                  set_shi--;
                  if(set_shi<0)
                  set_shi=23;
                  break;
                  }
                  }
                  }
                  }
                  }
                  }
         void main()
         {
         start();
         while(1)
         {
         keyscan();
         time();
         if(!flag)
         {
         display(miao,fen,shi);
         }
         else
         {
         display(set_miao,set_fen,set_shi);
         }
         if(miao==set_miao&&fen==set_fen&&shi==set_shi)
           {
             TR1=1;
                 }
                 if(flag_time)
                 {
                   TR1=0;
                   BUZZ=1;
                   flag_time=0;
                   }
                   set_time();
                   }
                   }
         void time_0()interrupt 1
         {
            uchar aa;
                TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
                aa++;
                if(aa==20)
                {
                aa=0;
                miao++;
                if(miao>=60)
                {
                miao=0;
                fen++;
                if(fen>=60)
                {
                  fen=0;
                  shi++;
                  if(shi>=24)
                  {
                  shi=0;
                  }
                  }
                  }
                  }
                  }
   void time_1()interrupt 3
   {
      uchar bz_time;
           TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
           bz_time++;
           if(bz_time==200)
                {
                bz_time=0;
                flag_time=1;
                }
                BUZZ=~BUZZ;
                }  
                          


ID:74868 发表于 2017-2-19 16:18
不错功能比较多

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

Powered by 单片机教程网

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