久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2030|回復: 2
打印 上一主題 下一主題
收起左側

51時鐘電路

[復制鏈接]
跳轉到指定樓層
樓主
ID:214821 發表于 2017-6-26 16:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg51.h>

unsigned char led[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};  //用一維數組定義0-9、橫杠、全滅

unsigned char num[10]={2,0,0,8,0,1,1,6,6,8} ;
unsigned char a[8];          
unsigned char second=0,minute=0,hour=0;
unsigned char minute1=0,hour1=0;
unsigned char b[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};        //掃描
unsigned char k=0;
unsigned int temp;          // 記錄1000毫秒為1秒的變量
unsigned char M,S_flag;        //M是模式,更新時間的4種模式加上正常模式        S_flag閃爍標志
sbit K1=P3^0;
sbit K2=P3^1;
sbit K3=P3^2;
sbit BEEP=P3^3;



void delay(unsigned n)              //0.2毫秒
{
  int x,y;
  for(x=0;x<n;x++)
  for(y=0;y<24;y++);
}



void init()
{
  M=0;
  S_flag=0;     //閃爍標志位
  TMOD=0x10;   //定時器1以方式1定時
   TH1=0xfc;
   TL1=0x18;
   EA=1;     //打開總中斷
   ET1=1;         //允許定時器1中斷
   TR1=1;         //開啟定時器1 (開始定時計數)

}


void display_led()
{
        int x;
        char l,a,m;
        for(a=0;a<26;a++)
        {
                x=a-8;
                for(l=0;l<50;l++)
                {
                        for(m=0;m<8;m++)
                        {
                                P2=b[m];
                                if(x>=0&&x<10) P1=led[num[x]];
                                else P1=led[11];
                               
                                delay(10);
                                x++;
                        }
                        x-=8;
                }
        }
}

void time1() interrupt 3                 //定時器1中斷函數
{
   TH1=0xfc;                          //定時1ms       
   TL1=0x18;
   temp++;

   if(temp==1000)                 //配合定時器定時1s
   {   temp=0;
                   second++;       
   }

        if(second==59)                               
     {    second=0;
             if(minute<59)
                      minute++;
                 else  {   minute=0;
                                   hour++;
                                   hour%=24;   
                       }
        }
   if(hour1==hour&&minute1==minute&&second<10)                  //鬧鐘時間到
   {
   BEEP=!BEEP;

   }  
   if(temp%250==0)            //每250ms
       S_flag=!S_flag;              //閃爍標志位取反

       
             
          
    if(k==8)  k=0;
        P1=a[k];               
        P2=b[k++];   
        delay(1);         
        P2=0xff;               

}           


void display()
{

        switch(M)
        {
        case 0:
                {
                        a[0]=led[hour/10];
                        a[1]=led[hour%10];
                        a[2]=led[10];
                        a[3]=led[minute/10];
                        a[4]=led[minute%10];
                        a[5]=led[10];
                        a[6]=led[second/10];
                        a[7]=led[second%10];
                }break;
        case 1:
                {
                        if(S_flag==1)
                        {
                                a[0]=led[hour/10];
                                a[1]=led[hour%10];
                        }
                        else
                        {
                                a[0]=led[11];
                                a[1]=led[11];
                        }
                        a[2]=led[10];
                        a[3]=led[minute/10];
                        a[4]=led[minute%10];
                        a[5]=led[10];
                        a[6]=led[second/10];
                        a[7]=led[second%10];
                }break;
        case 2:
                {
                        a[0]=led[hour/10];
                        a[1]=led[hour%10];
                        a[2]=led[10];
                        if(S_flag==1)
                        {
                                a[3]=led[minute/10];
                                a[4]=led[minute%10];
                        }
                        else
                        {
                                a[3]=led[11];
                                a[4]=led[11];
                        }
                        a[5]=led[10];
                        a[6]=led[second/10];
                        a[7]=led[second%10];
                }break;
        case 3:
                {
                        if(S_flag==1)
                        {
                                a[0]=led[hour1/10];
                                a[1]=led[hour1%10];
                        }
                        else
                        {
                                a[0]=led[11];
                                a[1]=led[11];
                        }
                        a[2]=led[10];
                        a[3]=led[minute1/10];
                        a[4]=led[minute1%10];
                        a[5]=led[10];
                        a[6]=led[11];
                        a[7]=led[11];
                }break;
        case 4:
                {
                        a[0]=led[hour1/10];
                        a[1]=led[hour1%10];
                        a[2]=led[10];
                        if(S_flag==1)
                        {
                                a[3]=led[minute1/10];
                                a[4]=led[minute1%10];
                        }
                        else
                        {
                                a[3]=led[11];
                                a[4]=led[11];
                        }
                        a[5]=led[10];
                        a[6]=led[11];
                        a[7]=led[11];
                }

        }
}          


void key_prc()
{

           if(K1==0)
                 {
                        delay(10);                //延時去抖                          
                        if(K1==0)           //按K1進行模式切換  
                        {   M++;
                                if(M==5)
                 M=0;
                        }
                        while(!K1);//等待按鍵釋放
                 }                                                          


       if(M!=0)
       {
         switch(M)
         {
              case 1:                   //模式1——調時
              {
                                if(K2==0)
                                {
                                        delay(10);                //延時去抖          
                                    if(K2==0)       //加鍵按下
                                        {           
                                                if(hour<23) hour++;
                                                else hour=0;
                                        }
                                        while(!K2);           //等待按鍵釋放
                                }
                                          
                                if(K3==0)
                                {
                                        delay(10);                                         
                                    if(K3==0)       
                                          {
                                                if(hour> 0) hour--;
                                                else hour=23;
                                    }
                                        while(!K3);         
                                }
                      } break;
                                             
                          case 2:                  //模式2——調分
                          {                                  
                                if(K2==0)
                                {
                                        delay(10);               
                                        if(K2==0)      
                                        {                               
                                                if(minute<59) minute++;
                                                else minute=0;
                                        }
                                        while(!K2);
                                }
                                           
                                if(K3==0)
                                {
                                        delay(10);                               
                                        if(K3==0)          
                                          {
                                                if(minute>0) minute--;
                                                else minute=59;
                                    }
                                        while(!K3);
                            }
                        } break;
                                    
                                 case 3:                  //模式3——鬧鐘調時
                                  {                                          
                                        if(K2==0)
                                                {
                                                        delay(10);                         
                                                if(K2==0)      
                                                                {           
                                                                   if(hour1<23)
                                                           hour1++;
                                                                   else hour1=0;
                                                                }
                                                        while(!K2);         
                                            }
                                          
                                         if(K3==0)
                                                {
                                                        delay(10);                       
                                                        if(K3==0)         
                                                      { if(hour1>0)
                                                     hour1--;
                                                                  else hour1=23;
                                                }
                                                        while(!K3);
                                                 }
                                  }         break;
                                         
                                  case 4:                  //模式4——鬧鐘調分  
                                   {          
                                         if(K2==0)
                                                {
                                                        delay(10);                                         
                                                if(K2==0)      
                                                            {           
                                                                  if(minute1<59)
                                                          minute1++;
                                                                  else minute1=0;
                                                                }
                                                while(!K2);
                                                }
                               
                                        if(K3==0)
                                                {
                                                        delay(10);                //延時去抖                        
                                                    if(K3==0)          //減鍵按下
                                                      { if(minute1>0)
                                                     minute1--;
                                                                  else minute1=59;
                                                }
                                                while(!K3);                 
                                        }
                                        }  break;
                }
        }                                
}        


void main()
{
        display_led();
          init();
    while(1)
    {
     key_prc();
         display();
        }       
}   

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

使用道具 舉報

沙發
ID:214821 發表于 2017-6-26 16:25 | 只看該作者
會頂頂
回復

使用道具 舉報

板凳
ID:214821 發表于 2017-6-26 16:26 | 只看該作者
不錯不錯 的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲人成人一区二区在线观看 | 九九亚洲精品 | 超黄毛片 | 日韩免费激情视频 | 亚洲一区二区三 | 国产又色又爽又黄又免费 | 91欧美激情一区二区三区成人 | 2022精品国偷自产免费观看 | 久久亚洲精品视频 | 亚洲色图综合网 | 日韩精品中文字幕一区二区三区 | h漫在线观看 | 精品亚洲第一 | 视频在线观看亚洲 | 亚洲三区在线观看 | 色天天综合 | 久久久久久国产精品免费免费 | 中文字幕精品一区二区三区精品 | 精品久久一区 | 日本久久综合 | 亚洲手机在线 | 中文在线一区二区 | 性做久久久久久免费观看欧美 | 国产精品成人一区二区 | 成年人黄色免费视频 | 在线国产一区 | 99re6在线视频 | 呦呦在线视频 | 国产区在线 | 免费精品 | 日本字幕在线观看 | 日韩精品在线播放 | 亚洲成人免费电影 | 久久久久久亚洲国产精品 | 久久天天躁狠狠躁夜夜躁2014 | 久久99精品久久久久久国产越南 | 亚洲午夜av久久乱码 | 久久久久国产一区二区三区四区 | 91精品国产欧美一区二区成人 | 亚洲国产精品一区二区三区 | 伊人激情网 |