找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15159|回复: 3
收起左侧

单片机可调时间数字时钟程序

[复制链接]
ID:75926 发表于 2015-4-2 21:46 | 显示全部楼层 |阅读模式
本帖最后由 xiaos 于 2015-4-2 21:47 编辑

在此给大家分享用单片机实现的数字时钟。在此分享较为关键的部分——程序:如下:


//本数字钟以24时制显示。其中独立按钮S19(P3^2)为调时开始按钮;S1(P1^0)为调秒;S5(P1^1)为调分;
// S9(P1^2)为调时;S12(P1^3)为确定;
//采用晶振为11.0592 //
  1. #include <reg51.h>
  2. sbit sb1=P1^0;
  3. sbit sb2=P1^1;
  4. sbit sb3=P1^2;
  5. sbit sb4=P1^3;
  6. sbit dd=P1^4;
  7. code w[8]={0,1,2,3,4,5,6,7};
  8. code LED[11] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
  9. unsigned int z,k,t,n,b,v,c;
  10.   void m(float i)
  11. {
  12. unsigned int x,j;
  13. for(j=0;j<i;j++)
  14. for(x=0;x<=100;x++);
  15. }
  16. void main()
  17. {
  18. TMOD=0X01;
  19. TH0=(65336-45872)/256;
  20. TL0=(65336-45872)/256;
  21. EA=1;
  22. ET0=1;
  23. TR0=1;//定时器中断//
  24. IT0=1;
  25. EX0=1; //按键中断//
  26. dd=0;
  27. while(1)
  28. {
  29.    EX0=1;
  30.    P0=LED[z];
  31.    P2=w[7];
  32.    m(1);
  33.    P0=LED[t];
  34.    P2=w[6];
  35.    m(1);  //秒

  36.    P2=w[5];
  37.    P0=LED[10];
  38.    m(1);  //间隔线

  39.    P0=LED[n];
  40.    P2=w[4];
  41.    m(1);
  42.    P0=LED[b];
  43.    P2=w[3];
  44.    m(1); //分

  45.    P2=w[2];
  46.    P0=LED[10];
  47.    m(1); //间隔线

  48.    P0=LED[v];
  49.    P2=w[1];
  50.    m(1);
  51.    P0=LED[c];
  52.    P2=w[0];
  53.    m(1); //时

  54.    if(z==10)
  55.    {
  56.    z=0;
  57.    t++;
  58.    }
  59.    if(t==6)
  60.    {
  61.    t=0;
  62.    n++;
  63.    }  //秒判断

  64.    if(n==10)
  65.    {
  66.    n=0;
  67.    b++;
  68.    }

  69.    if(b==6)
  70.    {
  71.    b=0;
  72.    v++;
  73.    } //分判断

  74.    if(v==10)
  75.    {
  76.    v=0;
  77.    c++;
  78.    }

  79.   if(c==2)
  80.   if(v==4)
  81.   {
  82.    c=0;
  83.    v=0;
  84.    n=0;
  85.    b=0;
  86.    n=0;
  87.    t=0;
  88.    z=0;
  89.   }  //时判断
  90. }

  91. }
  92. void tt() interrupt 1 //定时器中断服务函数
  93. {
  94. TH0=(65336-45872)/256;
  95. TL0=(65336-45872)/256;
  96. k++;
  97. if(k==20)
  98. {
  99. k=0;
  100. z++;
  101. }
  102. }
  103. void KEY() interrupt 0 //按键中断服务函数
  104. {
  105. while(1)
  106. {
  107. if(sb1==0)   //调秒按键
  108. {
  109.   sb1=1;
  110.   z++;
  111.   m(200);
  112.   if(z==10)
  113.   {
  114.   z=0;
  115.   t++;
  116.   if(t==6) t=0;
  117.   }
  118. }
  119. if(sb2==0) //调分按键
  120. {
  121.   sb2=1;
  122.   n++;
  123.   m(200);
  124.   if(n==10)
  125.   {
  126.   n=0;
  127.   b++;
  128.   if(b==6) b=0;
  129.   }
  130. }
  131. if(sb3==0)  //调时按键
  132. {
  133.   sb3=1;
  134.   v++;
  135.   m(200);
  136.   if(v==10)
  137.   {
  138.   v=0;
  139.   c++;
  140.   
  141.   }
  142.         if(c==2)
  143.   if(v==4)
  144.   {
  145.   c=0;
  146.   v=0;
  147.   }
  148. }
  149.   P0=LED[z];  //数码管显示
  150.   P2=w[7];
  151.   m(1);
  152.   P0=LED[t];
  153.   P2=w[6];
  154.   m(1);
  155.   P2=w[5];
  156.   P0=LED[10];
  157.   m(1);
  158.   P0=LED[n];
  159.   P2=w[4];
  160.   m(1);
  161.   P0=LED[b];
  162.   P2=w[3];
  163.   m(1);
  164.   P2=w[2];
  165.   P0=LED[10];
  166.   m(1);
  167.   P0=LED[v];
  168.   P2=w[1];
  169.   m(1);
  170.   P0=LED[c];
  171.   P2=w[0];
  172.   m(1);
  173. if(sb4==0) break; //确定按钮
  174. }
  175. EX0=0;
  176. }
复制代码



回复

使用道具 举报

ID:226587 发表于 2017-8-10 14:58 | 显示全部楼层
接线图有不?
回复

使用道具 举报

ID:112242 发表于 2017-8-10 20:52 | 显示全部楼层
谢谢 先收藏了
回复

使用道具 举报

ID:454570 发表于 2018-12-25 17:10 | 显示全部楼层
你的是错的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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