找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2583|回复: 1
收起左侧

简易数字时钟

[复制链接]
ID:155769 发表于 2016-12-18 23:28 | 显示全部楼层 |阅读模式
简易数字时钟
1、功能描述
用四个7段数码管来显示时间,并可通过按键来调整时间。
2、元器件清单
  
名称
  
参数
数量
备注
AT89C52
1
74HC574
4
锁存器
7段数码管
4
共阴极
电阻
R1=1K
1
电容
C1C2=33pF
2
极性电容
C3=10uF
1
晶振
X1=12MHz
1
发光二极管
2
按键
2
3、部分器件功能
74HC574锁存器
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
程序流程图
  
        
N
   
   
   
  
        
N
   
   
   
  
        
N
   
   
   
  
        
Y
   
   
   
  
        
Y
   
   
   
  
        
Y
   
   
   
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image005.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image007.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image009.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image011.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image009.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image009.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image009.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image007.gif
  
        
min=0 hou++
   
   
   
  
        
sec=0 min++
   
   
   
  
        
num=0 sec++
   
   
   
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image013.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image014.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image015.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image016.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image017.gif

file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image018.gif


  
        
Y
   
   
   


  
        
N
   
   
   


5、电路原理图及仿真效果图
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image020.jpg
附:程序
#include<reg52.h>
sbit hou_shi=P3^6;
sbit hou_ge=P3^7;
sbit min_shi=P3^5;
sbit min_ge=P3^4;
sbit sec_dian=P3^0;
int num=0,hou=23,min=59,sec=0;
/***************时钟子程序*******************/
void clock()
{
       if(num==20)
       {
              num=0;
              sec++;
       }
       if(sec==60)
       {
              sec=0;
              min++;
       }
       if(min==60)
       {
              min=0;
              hou++;
       }
       if(hou==24)
       {
              hou=0;
       }
}
/****************延时子程序******************/
void delay(void)  
{
   unsigned char a,b;
   for(a=40;a>0;a--)
        for(b=100;b>0;b--);
}
/****************分钟显示子程序******************/
void display_min(num_min)
{
       inta,b;
       a=num_min/10;
       b=num_min%10;
       min_shi=1;        //开锁存器
       switch(a)
       {
              case0:P2=0x3F;delay();break;
              case1:P2=0x06;delay();break;
              case2:P2=0x5B;delay();break;
              case3:P2=0x4F;delay();break;
              case4:P2=0x66;delay();break;
              case5:P2=0x6D;delay();break;
              case6:P2=0x7D;delay();break;
              case7:P2=0x07;delay();break;
              case8:P2=0x7F;delay();break;
              case9:P2=0x6F;delay();break;
              default:break;
       }
       min_shi=0;       //关锁存器
       //delay();   //延时
       min_ge=1;
       switch(b)
       {
              case0:P2=0x3F;delay();break;
              case1:P2=0x06;delay();break;
              case2:P2=0x5B;delay();break;
              case3:P2=0x4F;delay();break;
              case4:P2=0x66;delay();break;
              case5:P2=0x6D;delay();break;
              case6:P2=0x7D;delay();break;
              case7:P2=0x07;delay();break;
              case8:P2=0x7F;delay();break;
              case9:P2=0x6F;delay();break;
              default:break;
       }
       min_ge=0;
}
/***************小时显示程序*******************/
void display_hou(num_hou)
{
       inta,b;
       a=num_hou/10;
       b=num_hou%10;
       hou_shi=1;
       //delay();
       switch(a)
       {
              case0:P1=0x3F;delay();break;
              case1:P1=0x06;delay();break;
              case2:P1=0x5B;delay();break;
              case3:P1=0x4F;delay();break;
              case4:P1=0x66;delay();break;
              case5:P1=0x6D;delay();break;
              case6:P1=0x7D;delay();break;
              case7:P1=0x07;delay();break;
              case8:P1=0x7F;delay();break;
              case9:P1=0x6F;delay();break;
              default:break;
       }
       hou_shi=0;
       //delay();
       hou_ge=1;
       switch(b)
       {
              case0:P1=0x3F;delay();break;
              case1:P1=0x06;delay();break;
              case2:P1=0x5B;delay();break;
              case3:P1=0x4F;delay();break;
              case4:P1=0x66;delay();break;
              case5:P1=0x6D;delay();break;
              case6:P1=0x7D;delay();break;
              case7:P1=0x07;delay();break;
              case8:P1=0x7F;delay();break;
              case9:P1=0x6F;delay();break;
              default:break;
       }
       hou_ge=0;
}
/***************闪烁灯*******************/
void display_sec(num_sec)
{
       if(num_sec%2==0)
              sec_dian=0;
       if(num_sec%2==1)
              sec_dian=1;
}
/****************主程序******************/
void main()
{
       IE=0x8d;  //开总中断(EA=1),开定时器1(ET1=1),
                             //开外部中断1EX1=1,开外部中断0EX0=1.
       TMOD=0x10;            //选择定时器1的工作方式为方式1
       TH1=(65536-40000)/256;     //装初值
       TL1=(65536-40000)%256;
       TCON=0x45;                     //启动定时器1(TR1=1),设置INT0INT1负边沿触发。
       while(1)
       {
              clock();
              display_sec(sec);
              display_min(min);
              display_hou(hou);
       }
}
void time1() interrupt 3   //定义定时器1
{
       TH1=(65536-40000)/256;
       TL1=(65536-40000)%256;
       num++;
}
void interrupt1() interrupt 2   //定义外部中断1
{
       hou++;
       sec=0;
}
void interrupt0() interrupt 0    //定义外部中断0
{
       min++;
       sec=0;
}

回复

使用道具 举报

ID:1143878 发表于 2025-2-20 10:19 | 显示全部楼层
你这个是图片上传失败了吗?怎么全是路径文件
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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