找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4171|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

求助如何改時鐘的兩個--閃爍0.5秒程序如下

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:79244 發(fā)表于 2015-5-19 23:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
  #define uchar unsigned char
  #define uint unsigned int
  #define play P0
  sbit LSA=P1^0;
  sbit LSB=P1^1;
  sbit LSC=P1^2;  
  sbit led=P2^2; //鬧鐘檢測
  sbit k1=P2^7;// 功能切換  
  sbit k2=P2^6;//設(shè)置加
  sbit k3=P2^5;//  設(shè)置減   
  sbit k4=P2^4; //設(shè)置位選
  sbit beet=P1^5; //蜂鳴器輸出口
  uchar y;//按鍵松開
  uchar kai;//鬧鐘開啟標(biāo)志
  uchar she;//設(shè)置標(biāo)志
  uchar t;//時間計數(shù)
  uchar num;//功能切換
  uchar fen;
  uchar shi;
  uchar miao;
  uchar yue;
  uchar nian;
  uchar ri;
  uchar shijian[8];
  uchar  shi1; //鬧鈴時
  uchar fen1;  //鬧鈴分  
  unsigned char code shuma[12]={  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};   
  uchar brunyue[12]={31,28,31,30,31,30,31,31,30,31,30,31};
   uchar runyue[12]={31,29,31,30,31,30,31,31,30,31,30,31};
   void zhongshe(); void qishe();
   void naoshe(); void shezhi();
   void delay10ms(void)   //誤差 0us
   {      
   unsigned char a,b,c;     
   for(c=1;c>0;c--)         
   for(b=38;b>0;b--)            
   for(a=130;a>0;a--);
   }
   void naozhong()
   {   
   uint a,m;   
   if((shi1==shi)&&(fen1==fen)&&(kai%2))   
   {   
   for(m=20;m>0;m--)         
   for(a=10;a>0;a--)      
   if((k1==0)||(k2==0)||(k3==0)||(k4==0))     
   { kai=0;break;  
   }      

   }  
   }  
   void plays()      //輸出顯示  
   {  
   unsigned char i;  
   unsigned int j;  
   for(i=0;i<8;i++)  
   {   
   switch(i)  //位選,選擇點亮的數(shù)碼管,   
   {   
   case(0):      LSA=0;LSB=0;LSC=0; break;//顯示第0位      
   case(1):      LSA=1;LSB=0;LSC=0; break;//顯示第1位     
   case(2):      LSA=0;LSB=1;LSC=0; break;//顯示第2位     
   case(3):      LSA=1;LSB=1;LSC=0; break;//顯示第3位     
   case(4):      LSA=0;LSB=0;LSC=1; break;//顯示第4位     
   case(5):      LSA=1;LSB=0;LSC=1; break;//顯示第5位     
   case(6):      LSA=0;LSB=1;LSC=1; break;//顯示第6位     
   case(7):      LSA=1;LSB=1;LSC=1; break;//顯示第7位     
   }     
   play=shuma[shijian[i]];   
   if(t>50)
    {   
        switch(she)   
        {      
        case(3):   
        if((i==0)||(i==1))     
        play=0x00;
        break;      
         case(2):
    if((i==3)||(i==4))     
        play=0x00; break;     
        case(1):      
        if((i==6)||(i==7))     
        play=0x00; break;     
        }      
         }   
          j=10;            //掃描間隔時間設(shè)定   
          while(j--);     
           play=0x00;//消隱   
           }   
           }                  
           void nao()       //鬧鐘賦值  
           {  
           shijian[7]=kai;   
           shijian[6]=11;   
           shijian[5]=10;   
           shijian[4]=fen1%10;   
           shijian[3]=fen1/10;   
           shijian[2]=10;   
           shijian[1]=shi1%10;   
           shijian[0]=shi1/10;
           }
           void rili()         //日期賦值  
           {  
           shijian[7]=ri%10;   
           shijian[6]=ri/10;   
           shijian[5]=10;   
           shijian[4]=yue%10;   
           shijian[3]=yue/10;   
           shijian[2]=10;
           shijian[1]=nian%10;   
           shijian[0]=nian/10;
           }  
           void zhong()        //電子鐘賦值  
           {
           shijian[7]=miao%10;   
           shijian[6]=miao/10;   
           shijian[5]=10;
           shijian[4]=fen%10;   
           shijian[3]=fen/10;   
           shijian[2]=10;
           shijian[1]=shi%10;   
           shijian[0]=shi/10;  
          
           }  
           void InitTimer0(void)
           {      
           TMOD = 0x01;     
           TH0 = 0x0D8;     
           TL0 = 0x0F0;     
           EA = 1;     
           ET0 = 1;     
           TR0 = 1;
            }  
                void shezhi()        //功能設(shè)置函數(shù)  
                {  
                if((she!=0)&&((k2==0)||(k3==0)))      
                {  
                delay10ms();     
                if((she!=0)&&((k2==0)||(k3==0)))   
                {      
                switch(num)   
                {
                case(0):            
                 zhongshe(); break;      
                 case(1):              
                 qishe(); break;      
                 case(2):         
                 naoshe();break;     
                 }     
                 }
                 }   
                 }  
                 void main()
                 {        
                  
                     
                   miao=0;fen=0; shi=0;      
                   ri=19;  yue=5; nian=15;      
                   InitTimer0();  
                   while(1)  
                   {   
                   if(k1==0)      
                   {
                   delay10ms();        
                   if(k1==0)     
                   {num=(num+4)%3;      
                  
                   }      
                  
                    }   
                        if(k4==0)      
                        {
                        delay10ms();      
                         if(k4==0)      
                         she=(she+5)%4;
                         while(!k4);      
                          }      
                          shezhi();   
                             
                          plays();      
                           }  
                           }  
                           void Timer0Interrupt(void) interrupt 1
                           {      
                           TH0 = 0x0D8;     
                           TL0 = 0x0F0;   
                            t++;   
                                if(t==100)   
                                {
                                t=0;     
                                miao++;      
                                if(miao>59)     
                                {
                                miao=0;      
                                fen++;      
                                if(fen>59)      
                                {           
                                fen=0;
                                shi++;            
                                if(shi>23)        
                                {         
                                shi=0;     
                                 ri++;      
                                 if(nian%4==0)      
                                 {
                                 if(ri>runyue[yue-1])              
                                 {   
                                 ri=1;                             
                                  yue++;  
                                  }        
                                  if(yue>12)         
                                  {  
                                  yue=1;         
                                  nian++;
                                   }           
                                   }        
                                   else         
                                   {
                                   if(ri>brunyue[yue-1])            
                                   {               
                                   ri=0;              
                                   yue++;         
                                    }           
                                        if(yue>12)           
                                        {                    
                                        yue=0;
                                       
                   nian++ ;
                                                      
                                                                          }
                                                                                      
                                                                                                  }
                                                                                                               }
                                                                                                                                   }
                                                                                                                                              }}
                                                                                                                                                    
                                switch(num)  
                                {      
                                 case(0):     zhong();break;     
                                 case(1):     rili();break;     
                             
                                 default: zhong();  
                                 }  
                                 }  
                                 void zhongshe()
                                 {   
                                 switch(she)   
                                 {  
                                 case(1):       miao=0;InitTimer0();break;   
                                 case(2):      if(k2==0)       fen=(fen+61)%60;   
                                 else               fen=(fen+59)%60;   break;  
                                 case(3):  if(k2==0)       shi=(shi+25)%24;   
                                 else        shi=(shi+23)%24;        
                                  break;   
                                 }   
                                  while((!k2)||(!k3));      
                                   }  
                                   void naoshe()
                                    {   
                                         switch(she)   
                                         {   
                                         case(1):      if(kai==1) kai=0;   
                                          else kai=1; break;     
                                          case(2):      if(k2==0)       fen1=(fen1+61)%60;   
                                          else               fen1=(fen1+59)%60;   break;  
                                          case(3):  if(k2==0)       shi1=(shi1+25)%24;   
                                          else        shi1=(shi1+23)%24;        break;   
                                           }   
                                           while((!k2)||(!k3));  
                                           }  
                                           void qishe()
                                           {   
                                           switch(she)   
                                           {  
                                           case(1):     
                                            if(k2==0)
                                                {if(nian%4==0)      
                                                 ri=(ri+runyue[yue-1]+2)%(runyue[yue-1]+1) ;   
                                                 else      
                                                  ri=(ri+brunyue[yue-1]+2)%(brunyue[yue-1]+1);      
                                                 }               
                                                 else   
                                                  {  
                                                  if(nian%4==0) ri=(ri+runyue[yue-1])%(runyue[yue-1]+1) ;         
                                                  else   
                                                   ri=(ri+brunyue[yue-1])%(brunyue[yue-1]+1);
                                                   }            
                                                    break;  
                                                        case(2):  if(k2==0)      yue=(yue+14)%13;  
                                                        else      yue=(yue+12)%13;      
                                                        break;  
                                                        case(3):  if(k2==0)     nian++;
                                                        else     nian--;   
                                                        }     
                                                        while((!k2)||(!k3));
                                                        }

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2015-5-22 14:38 | 只看該作者
這個程序現(xiàn)在實現(xiàn)的功能是什么?
回復(fù)

使用道具 舉報

板凳
ID:80108 發(fā)表于 2015-5-23 15:44 | 只看該作者
表達(dá)清楚你想要的效果或要求
回復(fù)

使用道具 舉報

地板
ID:79244 發(fā)表于 2015-5-23 22:10 | 只看該作者
admin 發(fā)表于 2015-5-22 14:38
這個程序現(xiàn)在實現(xiàn)的功能是什么?

我是想要讓時鐘00-00-00中的兩個-每隔0.5s亮0.5s滅并一直循環(huán),謝謝幫忙
回復(fù)

使用道具 舉報

5#
ID:79244 發(fā)表于 2015-5-23 22:16 | 只看該作者
surongzhan 發(fā)表于 2015-5-23 15:44
表達(dá)清楚你想要的效果或要求

時鐘00-00-00中的兩個-每隔0.5s亮0.5s滅并一直循環(huán),謝謝
回復(fù)

使用道具 舉報

6#
ID:74441 發(fā)表于 2015-5-23 22:23 | 只看該作者
能不能說清楚,這么多,看的我頭暈
回復(fù)

使用道具 舉報

7#
ID:79244 發(fā)表于 2015-5-24 16:49 | 只看該作者
要求:在8個共陰級數(shù)碼管上顯示可調(diào)時鐘00-00-00,有鬧鐘并可以轉(zhuǎn)換成可調(diào)的日歷15-05-24,時鐘00-00-00中的兩個橫線每隔0.5s亮0.5s滅并一直循環(huán)
               

評分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

8#
ID:80998 發(fā)表于 2015-5-24 18:50 | 只看該作者
學(xué)習(xí)了,找個機(jī)會試一下

評分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表