<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用51單片機(jī)做的電子時(shí)鐘

          用51單片機(jī)做的電子時(shí)鐘

          作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏

          程序如下:
          #include
          unsigned char code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x76};//字碼表0-9,最后一個(gè)是一橫"-"
          unsigned int i,a,b,c,d,flag,flag1;
          unsigned int sec,min,h,nm,nh,nz;
          unsigned int w,day,mon,year;
          int miao1,miao2,miao3;
          sbit keyled=P1^0;
          sbit key2=P1^1;
          sbit keyinc=P1^2;
          sbit keymood=P1^3;
          sbit BEEP=P1^4;
          void second();
          void minute();
          void hour();
          void time();
          void riqi();
          void xianshi();
          void delay10ms();
          void delay20ms();
          void tiaoshi();
          void miaobiao();
          void miaotime();
          void week();
          void naozhong();
          void shengyin();
          //前幾天剛用了下定時(shí)器,想起來(lái)之前用匯編寫的時(shí)鐘程序基本沒(méi)有什么功能,所以這幾天就用C再寫了下
          //這個(gè)時(shí)鐘的功能是模仿我自己的手表寫的,功能完全一樣,有秒表,鬧鐘,可以顯示年月日及星期
          /
          {
          if(min==nm&&h==nh)//時(shí)間到了,鬧鐘響
          {
          shengyin(); //鬧鐘的聲音程序
          }
          }
          if(c==0||c==2)
          {
          if(keymood==0)
          {
          miao1=0;
          miao2=0;
          miao3=0;
          }
          }
          while(b==1)//保證按鍵只按一次,沒(méi)有重復(fù)按鍵
          {tiaoshi();
          goto B1; //如果b還等于1,剛重復(fù)掃描秒表界面
          }
          }
          /
          { i=0;//將i清零,保證每次進(jìn)入都是一樣的
          B2:if(nz==0)
          { if(min==nm&&h==nh)
          {
          shengyin();
          }
          }
          naozhong();
          while(b==2)
          { tiaoshi();
          goto B2;
          }
          }
          /
          { i=1;
          B3:if(nz==0)
          { if(min==nm&&h==nh)
          {
          shengyin();
          }
          }
          xianshi(); //顯示程序,用i的大小來(lái)分配,相當(dāng)于調(diào)時(shí)、分、秒就顯示時(shí)間,調(diào)年月日就顯示日期
          while(b==3)
          {tiaoshi();
          goto B3;
          }
          }
          /
          {i=0;
          if(nz==0)
          { if(min==nm&&h==nh)
          {
          shengyin();
          }
          }
          second();
          minute();
          hour();
          }
          if(keyinc==0)
          { delay10ms();
          if(keyinc==0)
          {
          B: riqi();
          while(keyinc==0)
          {
          goto B;
          }
          }
          }
          if(keymood==0)
          {
          delay10ms();
          if(keymood==0)
          {
          N: naozhong();
          }
          while(keymood==0)
          {
          goto N;
          }
          }
          tiaoshi();
          /
          {
          if(flag>10) //在flag>10的時(shí)候關(guān)閉所有的數(shù)碼管,其他時(shí)間開啟相應(yīng)位,這樣就可以達(dá)到閃爍的目的了
          {
          P3=0xff;
          }
          else
          {
          P3=0x7f;
          }
          }
          else //如果i不等于1,剛正常顯示,不會(huì)閃爍
          {
          P3=0x7f;
          }
          P2=table1[secge];
          for(a=0;a<100;a++);
          if(i==1)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xbf;
          }
          }
          else//如果i不等于1,剛正常顯示,不會(huì)閃爍
          {
          P3=0xbf;
          }
          P2=table1[secshi];
          for(a=0;a<100;a++);
          P3=0xdf;
          P2=table1[10];
          for(a=0;a<100;a++);
          }
          //*******************************分顯示程序***************************
          void minute()
          {
          int minge,minshi;
          minge=min%10;
          minshi=min/10;


          if(i==2)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xef;
          }
          }
          else
          {
          P3=0xef;
          }
          P2=table1[minge];
          for(a=0;a<100;a++);

          if(i==2)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xf7;
          }
          }
          else
          {
          P3=0xf7;
          }
          P2=table1[minshi];
          for(a=0;a<100;a++);
          P3=0xfb;
          P2=table1[10];
          for(a=0;a<100;a++);
          }
          //*********************************時(shí)顯示程序*************************
          void hour()
          {
          int hourge,hourshi;
          hourge=h%10;
          hourshi=h/10;

          if(i==3)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xfd;
          }
          }
          else
          {
          P3=0xfd;
          }
          P2=table1[hourge];
          for(a=0;a<100;a++);
          if(i==3)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xfe;
          }
          }
          else
          {
          P3=0xfe;
          }
          P2=table1[hourshi];
          for(a=0;a<100;a++);
          }
          //*****************************年、月、日顯示程序************************
          void riqi()
          {
          int dayge,dayshi;
          int monge,monshi;
          int yearge,yearshi;
          dayge=day%10;
          dayshi=day/10;
          if(i==4)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0x7f;
          }
          }
          else
          {
          P3=0x7f;
          }
          P2=table1[dayge];
          for(a=0;a<100;a++);
          if(i==4)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xbf;
          }
          }
          else
          {
          P3=0xbf;
          }
          P2=table1[dayshi];
          for(a=0;a<100;a++);
          P3=0xdf;
          P2=table1[10];
          for(a=0;a<100;a++);
          monge=mon%10;
          monshi=mon/10;
          if(i==5)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xef;
          }
          }
          else
          {
          P3=0xef;
          }
          P2=table1[monge];
          for(a=0;a<100;a++);
          if(i==5)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xf7;
          }
          }
          else
          {
          P3=0xf7;
          }
          P2=table1[monshi];
          for(a=0;a<100;a++);
          P3=0xfb;
          P2=table1[10];
          for(a=0;a<100;a++);
          yearge=year%10;
          yearshi=year/10;
          if(i==6)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xfd;
          }
          }
          else
          {
          P3=0xfd;
          }
          P2=table1[yearge];
          for(a=0;a<100;a++);
          if(i==6)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xfe;
          }
          }
          else
          {
          P3=0xfe;
          }
          P2=table1[yearshi];
          for(a=0;a<100;a++);
          }
          //*****************************星期顯示程序****************************
          void week()
          {
          if(i==7)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xef;
          }
          }
          else
          {
          P3=0xef;
          }
          P2=table1[w];
          for(a=0;a<100;a++);
          }
          //*****************************秒表顯示程序************************
          void miaobiao()
          {
          int miao1ge,miao1shi;
          int miao2ge,miao2shi;
          int miao3ge,miao3shi;
          miao1ge=miao1%10;
          miao1shi=miao1/10;
          P3=0x7f;
          P2=table1[miao1ge];
          for(a=0;a<100;a++);
          P3=0xbf;
          P2=table1[miao1shi];
          for(a=0;a<100;a++);
          P3=0xdf;
          P2=table1[10];
          for(a=0;a<100;a++);
          miao2ge=miao2%10;
          miao2shi=miao2/10;
          P3=0xef;
          P2=table1[miao2ge];
          for(a=0;a<100;a++);
          P3=0xf7;
          P2=table1[miao2shi];
          for(a=0;a<100;a++);
          P3=0xfb;
          P2=table1[10];
          for(a=0;a<100;a++);
          miao3ge=miao3%10;
          miao3shi=miao3/10;
          P3=0xfd;
          P2=table1[miao3ge];
          for(a=0;a<100;a++);
          P3=0xfe;
          P2=table1[miao3shi];
          for(a=0;a<100;a++);
          }
          //****************************鬧鐘顯示程序************************
          void naozhong()
          {
          int nmge,nmshi;
          int nhge,nhshi;
          nmge=nm%10;
          nmshi=nm/10;
          if(i==1||i==3||i==5||i==7)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xef;
          }
          }
          else
          {
          P3=0xef;
          }
          P2=table1[nmge];
          for(a=0;a<100;a++);
          if(i==1||i==3||i==5||i==7)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xf7;
          }
          }
          else
          {
          P3=0xf7;
          }
          P2=table1[nmshi];
          for(a=0;a<100;a++);
          P3=0xfb;//顯示一橫
          P2=table1[10];
          for(a=0;a<100;a++);
          nhge=nh%10;
          nhshi=nh/10;
          if(i==2||i==4||i==6)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xfd;
          }
          }
          else
          {
          P3=0xfd;
          }
          P2=table1[nhge];
          for(a=0;a<100;a++);
          if(i==2||i==4||i==6)
          {
          if(flag>10)
          {
          P3=0xff;
          }
          else
          {
          P3=0xfe;
          }
          }
          else
          {
          P3=0xfe;
          }
          P2=table1[nhshi];
          for(a=0;a<100;a++);
          P3=0xdf; //顯示H
          P2=table1[11];
          for(a=0;a<100;a++);
          }
          //*******************************調(diào)時(shí)顯示***********************
          void xianshi()
          {
          if(i>3&&i<7)
          {
          riqi();
          }
          else if(i==7)
          {
          week();
          }
          else
          {
          second();
          minute();
          hour();
          }
          }
          //***********************************鬧鐘聲音程序****************
          void shengyin()
          {
          BEEP=~BEEP;
          for(a=0;a<10;a++);
          }
          //***************************時(shí)鐘加1程序*******************************
          void time()
          {
          if(flag==90)
          {
          flag=0;
          sec++;
          if(sec==60)
          {
          sec=0;
          min++;
          if(min==60)
          {
          min=0;
          h++;
          if(h==24)
          {
          h=0;
          day++;
          if(day==31)
          {
          day=0;
          mon++;
          if(mon==12);
          {
          mon=0;
          year++;
          }
          }
          }
          }
          }
          }
          }
          //****************************秒表加1程序****************
          // flag1標(biāo)志位主要是為秒表而設(shè)的
          void miaotime()//秒表加時(shí)程序
          {

          if(flag1==1)
          {
          flag1=0;
          miao1++;
          if(miao1==100)
          {
          miao1=0;
          miao2++;
          if(miao2==60)
          {
          miao2=0;
          miao3++;
          if(miao3==60)
          {
          miao3=0;
          }
          }
          }
          }
          }
          //************************調(diào)時(shí)程序*******************************
          void tiaoshi()//
          {
          if(keyinc==0&&keymood==0)
          {
          delay10ms();
          if(keyinc==0&&keymood==0)
          {
          nz++;
          if(nz==2)
          {
          nz=0;
          }
          }
          while(keyinc==0&&keymood==0);
          }
          //********************
          if(keymood==0)
          {
          delay10ms();
          if(keymood==0)
          {
          i++;
          if(i==8)
          {
          i=1;
          }
          }
          while(keymood==0);
          }
          //******************************
          if(key2==0)
          {
          for(a=0;a<2000;a++);
          if(key2==0)
          {
          b++;
          if(c>0||i>0)//只要調(diào)了秒表,再按一次key2鍵就可以退回到正常時(shí)間顯示界面
          {
          if(key2==0)
          {
          b=0;
          c=0;
          }
          }
          //***
          if(b==4)
          {
          b=0;
          }
          }

          while(key2==0);
          }
          //****************************************
          //**********
          if(b==2&&(i==1||i==3||i==5||i==7)) //調(diào)鬧鐘的分
          {
          if(keyinc==0)
          {
          nm++;
          if(nm==60)
          nm=0;
          }
          while(keyinc==0);
          }
          //
          if(b==2&&(i==2||i==4||i==6))//調(diào)鬧鐘的時(shí)
          {
          if(keyinc==0)
          {
          nh++;
          if(nh==24)
          {
          nh=0;
          }
          }
          while(keyinc==0);
          }
          //**********************
          if(b==1)
          {
          if(keyinc==0)
          {
          delay10ms();
          if(keyinc==0)
          {
          c++;
          if(c==3)
          {
          c=1;
          }
          }
          while(keyinc==0);
          }
          }

          //*******************************************************
          if(i==1)
          {

          if(keyinc==0)
          {
          delay10ms();
          if(keyinc==0)
          {
          sec=0;
          }
          while(keyinc==0);
          }
          }
          if(i==2&&keyinc==0)
          {
          for(a=0;a<5000;a++);
          if(keyinc==0)
          {
          min++;
          }
          if(min==60)
          {
          min=0;
          }
          delay10ms();
          }
          //***************
          if(i==3&&keyinc==0)
          {
          for(a=0;a<5000;a++);
          if(keyinc==0)
          {
          h++;
          }
          if(h==24)
          {
          h=0;
          }
          while(keyinc==0);
          }
          //******************
          if(i==4&&keyinc==0)
          {
          for(a=0;a<5000;a++);
          if(keyinc==0)
          {
          day++;
          if(day==31)
          {
          day=0;
          }
          }
          while(keyinc==0);
          }
          //
          if(i==5&&keyinc==0)
          {
          for(a=0;a<5000;a++);
          if(keyinc==0)
          {
          mon++;
          if(mon==13)
          {
          mon=0;
          }
          }
          while(keyinc==0);
          }
          //
          if(i==6&&keyinc==0)
          {
          for(a=0;a<5000;a++);
          if(keyinc==0)
          {
          year++;
          }
          while(keyinc==0);
          }
          //
          if(i==7&&keyinc==0)
          {
          delay10ms();
          if(keyinc==0)
          {
          w++;
          }
          while(keyinc==0);
          }
          }
          //*****************************延時(shí)程序******************************
          void delay10ms() //延時(shí)10MS子程序,在消除鍵盤的抖動(dòng)
          {
          for(a=0;a<5000;a++);
          }
          //******************************************************
          void delay20ms()//延時(shí)20MS,在調(diào)時(shí)間的時(shí)候,按下超過(guò)20MS就可以被認(rèn)為重復(fù)按鍵
          {
          for(a=0;a<10000;a++);
          }
          //*******************************中斷服務(wù)程序************************
          void timer1() interrupt 3
          {
          TH1=(65535-10000)/256;//計(jì)算初值
          TL1=(65535-10000)%256;
          flag++;
          time();
          if((c==1&&i==0)||(c==1&&(i==2||i==4||i==6)))
          {
          flag1++;
          }
          miaotime();
          }
          程序主要功能有時(shí)間顯示,秒表,鬧鐘,年月日及星期顯示,基本與一般的電子手表相同。還應(yīng)該有個(gè)燈,按鍵已經(jīng)畫出來(lái)了,程序部分沒(méi)有寫,不過(guò)比較簡(jiǎn)單,就沒(méi)有寫了。當(dāng)然還有一些地方要再改下,像鬧鐘應(yīng)該還有個(gè)懶人模式,關(guān)鬧鐘也沒(méi)有達(dá)到預(yù)想的效果,當(dāng)然鬧鐘的聲音就更不用說(shuō)了,怎么都調(diào)不到手表上的那種清脆的聲音。先這樣,以后再努力!

          本文引用地址:http://www.ex-cimer.com/article/201611/320128.htm


          關(guān)鍵詞: 51單片機(jī)電子時(shí)

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();