找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机课设源码 时钟+闹钟 数码管显示

[复制链接]
ID:187750 发表于 2017-5-7 09:19 | 显示全部楼层 |阅读模式
时钟(带闹钟功能)单片机课设
0.png

单片机源程序:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. sbit key1=P3^0;  //   时钟/闹钟/关闹钟
  5. sbit key2=P3^1;  //   分钟加
  6. sbit key3=P3^2;         //   时钟加
  7. sbit key4=P3^3;         //  
  8. sbit beep=P1^6; //  闹铃
  9. sbit led1=P1^7;//秒用灯的闪烁表示
  10. sbit smg_q=P3^7;
  11. sbit smg_b=P3^6;
  12. sbit smg_s=P3^5;
  13. sbit smg_g=P3^4;

  14. uchar tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};    // 0-9
  15. uchar tab_dp[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; // 0.-9.(带小数点)


  16. uint t,flag,flag1;
  17. uint bbh,bbm,bbs;
  18. uint sec,min,hour; // 定义 秒,分,时

  19. void delay( unsigned int t);
  20. void inter_init();
  21. void time24();
  22. void clock();
  23. void alarm_clock();
  24. void display();
  25. void display_bb();


  26. //---------------------主函数--------------------------------
  27. void main()
  28. {
  29.   inter_init();
  30. bbh=1;
  31. bbm=2;     
  32.    hour=23;         
  33.    min=59;
  34.    sec=50;
  35.    
  36. while(1)
  37.   {
  38.       time24();  
  39.            if(key1==0)
  40.       {
  41.              flag1=~flag1;
  42.          flag=~flag;
  43.              while(!key1);
  44.       }
  45.       if(flag==0)
  46.       {
  47.           clock();
  48.           display();    /*调用显示函数来显示*/  
  49.       }
  50.       else
  51.       {
  52.           alarm_clock();
  53.               display_bb();
  54.       }
  55.    
  56.            if(hour==bbh && min==bbm && flag1==0)
  57.          {  
  58.              beep=~beep;
  59.                  delay(1);
  60.      }           
  61.    
  62.   }
  63.    
  64.   
  65. }

  66. /*---------------------延时----------------------- */
  67. void delay( unsigned int t)         //  延时函数
  68. {
  69.     unsigned int i;
  70.     while(t--)
  71.                 for(i=0;i<125;i++);
  72. }

  73. /*---------------------中断初始化-------------------------*/
  74. void inter_init()   
  75.   { sec=min=hour=0; // 将0赋给时分秒

  76.          TMOD=0x01; //  方式1
  77.          TH0=0x3c;  //  65536-50000=15536=0x3cb0(50ms)  
  78.          TL0=0xb0;
  79.          EA=1;      //  开总中断
  80.          TR0=1;            //  定时/计数器0开启
  81.          ET0=1;            //  定时器/计数器0溢出中断启动  
  82.   }
  83. /*---------------------24小时制--------------------------*/
  84. void time24()      
  85.   {
  86.               if(TF0==1)   // 定时器/计数器溢出
  87.                  {
  88.                           TF0=0;  // 清中断标志位
  89.                           t++;
  90.                           if(t==20)        // (50ms*20=1s)
  91.                             {
  92.                                    t=0;
  93.                                    led1=~led1;
  94.                                    sec++;      //  秒加1
  95.                                    if(sec==60) //  秒为60,则清零,分加1
  96.                                {
  97.                                        sec=0;
  98.                                        min++;
  99.                                    }
  100.                                if(min==60) // 分为60,则清零,时加1
  101.                                {
  102.                                        min=0;
  103.                                        hour++;
  104.                                    }
  105.                                if(hour==24)// 时为24,则清零
  106.                                    {
  107.                                        hour=0;
  108.                                    }
  109.                       }
  110.          }

  111.   }

  112. /*-----------按键调整子函数(时钟和闹钟)-------------------------------------*/
  113. void clock()   //时钟调整
  114. {
  115.   
  116.       if(key2==0)
  117.         {
  118.            delay(10);
  119.            if(key2==0)
  120.             {
  121.                min++;
  122.                while(!key2);
  123.                if(min==60)
  124.                  {
  125.                    min=0;
  126.                   }
  127.              }
  128.          }
  129.        if(key3==0)
  130.        {
  131.           delay(10);
  132.           if(key3==0)
  133.           {
  134.               hour++;
  135.            while(!key3);
  136.            if(hour==24)
  137.             {
  138.                hour=0;
  139.             }
  140.           }
  141.        }

  142. }

  143. void alarm_clock() /*闹钟调整*/
  144. {
  145.   if(key2==0)
  146.         {
  147.            delay(10);
  148.            if(key2==0)
  149.             {
  150.                bbm++;
  151.                while(!key2);
  152.                if(bbm==60)
  153.                  {
  154.                    bbm=0;
  155.                   }
  156.              }
  157.          }
  158.        if(key3==0)
  159.        {
  160.           delay(10);
  161.           if(key3==0)
  162.           {
  163.               bbh++;
  164.            while(!key3);
  165.            if(bbh==24)
  166.             {
  167.                bbh=0;
  168.             }
  169.            }
  170.        }

  171. }  

  172.    
  173. /*---------------------数码管显示子函数(时钟和闹钟)-------------------------------------*/
  174. void display()              //  显示时间函数
  175. {
  176.         smg_s=0;                           //时低位
  177.    P2=tab_dp[hour%10];
  178.    P2=0xff;
  179.    smg_s=1;   

  180.    smg_g=0;                                   //时高位
  181.    P2=tab[hour/10];
  182.    P2=0xff;
  183.    smg_g=1;
  184.    
  185.    smg_q=0;                                //分低位
  186.    P2=tab[min%10];   
  187.    P2=0xff;
  188.    smg_q=1;

  189.    smg_b=0;                                //分高位
  190.    P2=tab[min/10];  
  191.    P2=0xff;
  192.    smg_b=1;
  193.                
  194. }
  195. void display_bb()                //显示闹钟函数
  196. {
  197.    smg_s=0;                           //时低位
  198.    P2=tab_dp[bbh%10];
  199.    P2=0xff;
  200.    smg_s=1;   

  201.    smg_g=0;                                   //时高位
  202.    P2=tab[bbh/10];
  203.    P2=0xff;
  204.    smg_g=1;
  205.    
  206.    smg_q=0;                                //分低位
  207.    P2=tab[bbm%10];   
  208.    P2=0xff;
  209.    smg_q=1;

  210.    smg_b=0;                                //分高位
  211.    P2=tab[bbm/10];  
  212.    P2=0xff;
  213.    smg_b=1;
  214.    }
  215.   
复制代码


全部代码下载:
时钟 闹钟.zip (24.47 KB, 下载次数: 33)
回复

使用道具 举报

ID:273982 发表于 2019-12-23 16:54 | 显示全部楼层
图呢?   我的哥???
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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