找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的数字时钟

  [复制链接]
跳转到指定楼层
楼主
以前做的一个基于51单片机的数字时钟,有四个按键,可以设置时间、设置闹钟,增加时间,减少时间。


单片机源程序:
  1. main.c
  2. #include "bsp.h"

  3. void main()
  4. {
  5.         bsp_init();
  6.         while(1)
  7.         {
  8.          key_scan();         //三个按键各自的实现
  9.          set_showvalue();         //按下一个按键,将时间变成可以在数码管上显示的数
  10.                  bsp_scan();         //将时间送到数码管上显示
  11.                  delay(1);
  12.   }
  13. }


  14. bsp_key.c
  15. #include"bsp.h"
  16. sbit P1_0=P1^0;    //时钟暂停键
  17. sbit P1_1=P1^1;
  18. sbit P1_2=P1^2;    //增加一秒
  19. sbit P1_3=P1^3;    //减少一秒



  20. void key_scan(void)
  21. {
  22.   
  23.   if(P1_0==0)        //此键实现暂停  
  24.   {
  25.     delay(5);
  26.         if(P1_0==0)
  27.         {
  28.           TR0=0;//定时器启动位关闭
  29.         }
  30.   }
  31.   
  32.   
  33.   if(P1_1==0)       //此键设置闹钟
  34.   {
  35.     delay(5);
  36.         if(P1_1==0)
  37.         {
  38.           TR0=1; //定时器启动位开启
  39.         }
  40.   }
  41.   
  42.   
  43.   if(P1_2==0)     //此键实现时间的一秒的增加
  44.   {
  45.     delay(5);
  46.         if(P1_2==0)
  47.         {  
  48.           delay(5);
  49.           while(!P1_2);    //消除按键抖动
  50.           delay(5);
  51.           while(!P1_2);
  52.           sec++;
  53.           if(sec==60)
  54.       {
  55.             sec=0;
  56.                 min++;
  57.                 if(min==60)
  58.                 {
  59.                   min=0;
  60.                   hour++;
  61.                   if(hour==24)
  62.                   {
  63.                     hour=0;
  64.                   }
  65.                 }
  66.       }
  67.         }
  68. }
  69.   
  70.   
  71.   
  72.   
  73.   if(P1_3==0)      //此键实现时间一秒的减少
  74.   {
  75.     delay(5);
  76.         if(P1_3==0)
  77.         {
  78.           delay(5);                       
  79.           while(!P1_3);
  80.           delay(5);
  81.           while(!P1_3);
  82.           sec--;
  83.           if(sec==0)
  84.           {
  85.            sec=59;
  86.                 if(min==0)
  87.                 {
  88.                   min=59;
  89.                   if(hour==0)
  90.                   {
  91.                     hour=23;
  92.                         min=59;
  93.                         sec=59;
  94.                   }
  95.                   else
  96.                   {
  97.                     hour--;
  98.                   }
  99.                 }
  100.                    else
  101.                 {
  102.                         min--;
  103.                 }
  104.           }
  105.         }
  106.   }
  107. }

  108. bsp_seg.c
  109. #include "bsp.h"
  110. code char WEI[6]={0XDF,0XEF,0XF7,0XFB,0XFD,0XFE};       //位选码
  111. code char DUAN[11]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0XFF};
  112. unsigned char show[6]={0x00};


  113. void bsp_scan(void)
  114. {
  115.         static unsigned char index =0;
  116.         P2=WEI[index];     //1101 1111
  117.         P0=show[index];   //P0 = DUAN[[index];   显示固定的0-5
  118.         index++;
  119.         if(index==6)
  120.         index=0;
  121.        
  122. /*        P2 = WEI[0];         //显示自己的生日
  123.         P0 = DUAN[9];
  124.         delay(1);
  125.         P2 = WEI[1];
  126.         P0 = DUAN[6];
  127.         delay(1);
  128.         P2 = WEI[2];
  129.         P0 = DUAN[1];
  130.         delay(1);
  131.         P2 = WEI[3];
  132.         P0 = DUAN[0];
  133.         delay(1);
  134.         P2 = WEI[4];
  135.         P0 = DUAN[3];
  136.         delay(1);
  137.         P2 = WEI[5];
  138.         P0 = DUAN[0];
  139.         delay(1); */
  140.        
  141. }



  142. void set_showvalue(void)
  143. {
  144.         show[0]=DUAN[hour/10];//小时的十位
  145.         show[1]=DUAN[hour%10];//小时的个位
  146.        
  147.         show[2]=DUAN[min/10];
  148.         show[3]=DUAN[min%10];
  149.        
  150.         show[4]=DUAN[sec/10];
  151.         show[5]=DUAN[sec%10];
  152. }

  153. bsp_timer.c
  154. #include "bsp.h"


  155. unsigned char tick0=0;
  156. unsigned char  sec=0,min=0,hour=0;


  157. void Time0_Init(void)   //定时器0初始化
  158. {
  159.         TMOD |= 0X01;            //方式一,软件清零
  160.         TH0=(65536-50000)/256;      //50ms
  161.         TL0=(65536-50000)%256;
  162.            EA=1;
  163.     ET0=1;
  164.     TR0=1;
  165. }



  166. void INT_TIME0() interrupt 1
  167. {
  168.         TH0=(65536-50000)/256;
  169.         TL0=(65536-50000)%256;
  170.         tick0++;
  171.         if(tick0==20)
  172.         {
  173.                 tick0=0;
  174.             sec++;
  175.             if(sec==60)
  176.                 {
  177.            sec=0;
  178.                    min++;
  179.                 if(min==60)
  180.                         {
  181.                         min=0;
  182.                         hour++;
  183.                     {
  184.                  if(hour=24)
  185.                                  hour=0;
  186.             }
  187.                                         }
  188.                         }
  189.     }
  190. }

  191. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码



仿真和源码下载:
数字时钟源程序.zip (56.6 KB, 下载次数: 133)
数字时钟protues仿真.zip (81.03 KB, 下载次数: 106)




评分

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

查看全部评分

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

使用道具 举报

沙发
ID:420451 发表于 2018-11-4 13:27 | 只看该作者
谢谢,学到了
回复

使用道具 举报

板凳
ID:375860 发表于 2018-12-27 11:16 | 只看该作者
学到了
回复

使用道具 举报

地板
ID:456130 发表于 2018-12-29 08:59 | 只看该作者
写的太好了,感谢楼主分享
回复

使用道具 举报

5#
ID:930641 发表于 2021-6-1 14:19 | 只看该作者
受益颇多,多谢楼主的分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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