找回密码
 立即注册

QQ登录

只需一步,快速开始

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

在每一行后面注明意思(数字钟) 求帮助

[复制链接]
跳转到指定楼层
楼主
ID:356298 发表于 2018-6-21 21:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
希望尽快帮忙谢谢了
  1. #include <reg51.h>

  2. unsigned char led[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};  //用一维数组定义0-9、横杠、全灭

  3. unsigned char num[10]={2,0,0,8,0,1,1,6,6,8} ;
  4. unsigned char a[8];          
  5. unsigned char second=0,minute=0,hour=0;
  6. unsigned char minute1=0,hour1=0;
  7. unsigned char b[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};        //扫描
  8. unsigned char k=0;
  9. unsigned int temp;          // 记录1000毫秒为1秒的变量
  10. unsigned char M,S_flag;        //M是模式,更新时间的4种模式加上正常模式        S_flag闪烁标志
  11. sbit K1=P3^0;
  12. sbit K2=P3^1;
  13. sbit K3=P3^2;
  14. sbit BEEP=P3^3;



  15. void delay(unsigned n)              //0.2毫秒
  16. {
  17.   int x,y;
  18.   for(x=0;x<n;x++)
  19.   for(y=0;y<24;y++);
  20. }
  21.   


  22. void init()
  23. {
  24.   M=0;
  25.   S_flag=0;     //闪烁标志位
  26.   TMOD=0x10;   //定时器1以方式1定时
  27.    TH1=0xfc;
  28.    TL1=0x18;
  29.    EA=1;     //打开总中断
  30.    ET1=1;         //允许定时器1中断
  31.    TR1=1;         //开启定时器1 (开始定时计数)

  32. }


  33. void display_led()
  34. {
  35.         int x;
  36.         char l,a,m;
  37.         for(a=0;a<26;a++)
  38.         {
  39.                 x=a-8;
  40.                 for(l=0;l<50;l++)
  41.                 {
  42.                         for(m=0;m<8;m++)
  43.                         {
  44.                                 P2=b[m];
  45.                                 if(x>=0&&x<10) P1=led[num[x]];
  46.                                 else P1=led[11];
  47.                                
  48.                                 delay(10);
  49.                                 x++;
  50.                         }
  51.                         x-=8;
  52.                 }
  53.         }
  54. }

  55. void time1() interrupt 3                 //定时器1中断函数
  56. {
  57.    TH1=0xfc;                          //定时1ms       
  58.    TL1=0x18;
  59.    temp++;

  60.    if(temp==1000)                 //配合定时器定时1s
  61.    {   temp=0;
  62.                    second++;       
  63.    }

  64.         if(second==59)                               
  65.      {    second=0;
  66.              if(minute<59)
  67.                       minute++;
  68.                  else  {   minute=0;
  69.                                    hour++;
  70.                                    hour%=24;   
  71.                        }
  72.         }
  73.    if(hour1==hour&&minute1==minute&&second<10)                  //闹钟时间到
  74.    {
  75.    BEEP=!BEEP;
  76.    
  77.    }  
  78.    if(temp%250==0)            //每250ms
  79.        S_flag=!S_flag;              //闪烁标志位取反

  80.        
  81.              
  82.           
  83.     if(k==8)  k=0;
  84.         P1=a[k];               
  85.         P2=b[k++];   
  86.         delay(1);         
  87.         P2=0xff;               

  88. }           


  89. void display()
  90. {

  91.         switch(M)
  92.         {
  93.         case 0:
  94.                 {
  95.                         a[0]=led[hour/10];
  96.                         a[1]=led[hour%10];
  97.                         a[2]=led[10];
  98.                         a[3]=led[minute/10];
  99.                         a[4]=led[minute%10];
  100.                         a[5]=led[10];
  101.                         a[6]=led[second/10];
  102.                         a[7]=led[second%10];
  103.                 }break;
  104.         case 1:
  105.                 {
  106.                         if(S_flag==1)
  107.                         {
  108.                                 a[0]=led[hour/10];
  109.                                 a[1]=led[hour%10];
  110.                         }
  111.                         else
  112.                         {
  113.                                 a[0]=led[11];
  114.                                 a[1]=led[11];
  115.                         }
  116.                         a[2]=led[10];
  117.                         a[3]=led[minute/10];
  118.                         a[4]=led[minute%10];
  119.                         a[5]=led[10];
  120.                         a[6]=led[second/10];
  121.                         a[7]=led[second%10];
  122.                 }break;
  123.         case 2:
  124.                 {
  125.                         a[0]=led[hour/10];
  126.                         a[1]=led[hour%10];
  127.                         a[2]=led[10];
  128.                         if(S_flag==1)
  129.                         {
  130.                                 a[3]=led[minute/10];
  131.                                 a[4]=led[minute%10];
  132.                         }
  133.                         else
  134.                         {
  135.                                 a[3]=led[11];
  136.                                 a[4]=led[11];
  137.                         }
  138.                         a[5]=led[10];
  139.                         a[6]=led[second/10];
  140.                         a[7]=led[second%10];
  141.                 }break;
  142.         case 3:
  143.                 {
  144.                         if(S_flag==1)
  145.                         {
  146.                                 a[0]=led[hour1/10];
  147.                                 a[1]=led[hour1%10];
  148.                         }
  149.                         else
  150.                         {
  151.                                 a[0]=led[11];
  152.                                 a[1]=led[11];
  153.                         }
  154.                         a[2]=led[10];
  155.                         a[3]=led[minute1/10];
  156.                         a[4]=led[minute1%10];
  157.                         a[5]=led[10];
  158.                         a[6]=led[11];
  159.                         a[7]=led[11];
  160.                 }break;
  161.         case 4:
  162.                 {
  163.                         a[0]=led[hour1/10];
  164.                         a[1]=led[hour1%10];
  165.                         a[2]=led[10];
  166.                         if(S_flag==1)
  167.                         {
  168.                                 a[3]=led[minute1/10];
  169.                                 a[4]=led[minute1%10];
  170.                         }
  171.                         else
  172.                         {
  173.                                 a[3]=led[11];
  174.                                 a[4]=led[11];
  175.                         }
  176.                         a[5]=led[10];
  177.                         a[6]=led[11];
  178.                         a[7]=led[11];
  179.                 }

  180.         }
  181. }          


  182. void key_prc()
  183. {
  184.   
  185.            if(K1==0)
  186.                  {
  187.                         delay(10);                //延时去抖                          
  188.                         if(K1==0)           //按K1进行模式切换  
  189.                         {   M++;
  190.                                 if(M==5)
  191.                  M=0;
  192.                         }
  193.                         while(!K1);//等待按键释放
  194.                  }                                                          

  195.   
  196.        if(M!=0)
  197.        {
  198.          switch(M)
  199.          {
  200.               case 1:                   //模式1——调时
  201.               {
  202.                                 if(K2==0)
  203.                                 {
  204.                                         delay(10);                //延时去抖          
  205.                                     if(K2==0)       //加键按下
  206.                                         {           
  207.                                                 if(hour<23) hour++;
  208.                                                 else hour=0;
  209.                                         }
  210.                                         while(!K2);           //等待按键释放
  211.                                 }
  212.                                           
  213.                                 if(K3==0)
  214.                                 {
  215.                                         delay(10);                                         
  216.                                     if(K3==0)       
  217.                                           {
  218.                                                 if(hour> 0) hour--;
  219.                                                 else hour=23;
  220.                                     }
  221.                                         while(!K3);         
  222.                                 }
  223.                       } break;
  224.                                              
  225.                           case 2:                  //模式2——调分
  226.                           {                                  
  227.                                 if(K2==0)
  228.                                 {
  229.                                         delay(10);               
  230.                                         if(K2==0)      
  231.                                         {                               
  232.                                                 if(minute<59) minute++;
  233.                                                 else minute=0;
  234.                                         }
  235.                                         while(!K2);
  236.                                 }
  237.                                            
  238.                                 if(K3==0)
  239.                                 {
  240.                                         delay(10);                               
  241.                                         if(K3==0)          
  242.                                           {
  243.                                                 if(minute>0) minute--;
  244.                                                 else minute=59;
  245.                                     }
  246.                                         while(!K3);
  247.                             }
  248.                         } break;
  249.                                     
  250.                                  case 3:                  //模式3——闹钟调时
  251.                                   {                                          
  252.                                         if(K2==0)
  253.                                                 {
  254.                                                         delay(10);                         
  255.                                                 if(K2==0)      
  256.                                                                 {           
  257.                                                                    if(hour1<23)
  258.                                                            hour1++;
  259.                                                                    else hour1=0;
  260.                                                                 }
  261.                                                         while(!K2);         
  262.                                             }
  263.                                           
  264.                                          if(K3==0)
  265.                                                 {
  266.                                                         delay(10);                       
  267.                                                         if(K3==0)         
  268.                                                       { if(hour1>0)
  269.                                                      hour1--;
  270.                                                                   else hour1=23;
  271.                                                 }
  272.                                                         while(!K3);
  273.                                                  }
  274.                                   }         break;
  275.                                          
  276.                                   case 4:                  //模式4——闹钟调分  
  277.                                    {          
  278.                                          if(K2==0)
  279.                                                 {
  280.                                                         delay(10);                                         
  281.                                                 if(K2==0)      
  282.                                                             {           
  283.                                                                   if(minute1<59)
  284.                                                           minute1++;
  285.                                                                   else minute1=0;
  286.                                                                 }
  287.                                                 while(!K2);
  288.                                                 }
  289.                                
  290.                                         if(K3==0)
  291.                                                 {
  292.                                                         delay(10);                //延时去抖                        
  293.                                                     if(K3==0)          //减键按下
  294.                                                       { if(minute1>0)
  295.                                                      minute1--;
  296.                                                                   else minute1=59;
  297.                                                 }
  298.                                                 while(!K3);                 
  299.                                         }
  300.                                         }  break;
  301.                 }
  302.         }                                
  303. }        


  304. void main()
  305. {
  306.         display_led();
  307.           init();
  308.     while(1)
  309.     {
  310.      key_prc();
  311.          display();
  312.         }       
  313. }   
复制代码


新建 DOC 文档 (2).doc

42.5 KB, 下载次数: 3

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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