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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)帶閏年補(bǔ)償?shù)囊粋€時鐘程序

          51單片機(jī)帶閏年補(bǔ)償?shù)囊粋€時鐘程序

          作者: 時間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
          這是我教的學(xué)生寫的帶閏年補(bǔ)償的一個時鐘,比我自己寫成的還有成就感


          #include
          #include
          #define uchar unsigned char
          #define uint unsigned int
          uchar S1num;
          sbit RS=P1^0;
          sbit RW=P1^1;
          sbit EN=P1^2;
          sbit GND=P2^4;
          sbit K2=P2^3;
          sbit K4=P2^2;
          sbit K6=P2^1;
          uchar x,num,shi,fen,miao,day,mon,year,week,count;
          void display();
          void write_com(uchar com)
          {
          RS=0;
          EN=0;
          P0=com;
          delay(5);
          //RW=0;
          EN=1;
          delay(5);
          EN=0;

          }
          void write_dat(uchar dat)
          {
          RS=1;
          EN=0;
          P0=dat;
          delay(5);
          //RW=0;
          EN=1;
          delay(5);
          EN=0;

          }
          void timer0()interrupt 1
          {
          TH0=(65536-45872)/256;//45872這個值是11.0592MHz產(chǎn)生一次中斷,最接近50Ms,如果是12MHz請用50000
          TL0=(65536-45872)%256;
          count++;
          }
          write_sfm(uchar add,uchar date)
          {
          uchar shi,ge;
          write_com(0x80+0x40+add);
          shi=date/10;
          ge=date%10;
          write_dat(0x30+shi);
          write_dat(0x30+ge);
          }
          write_ymd(uchar add,uchar date)
          {
          uchar shi,ge;
          write_com(0x80+add);
          shi=date/10;
          ge=date%10;
          write_dat(0x30+shi);
          write_dat(0x30+ge);
          }
          write_week(week)
          {
          switch(week)
          {
          case 1:write_dat(M);
          write_dat(O);
          write_dat(N);
          break;
          case 2:write_dat(T);
          write_dat(U);
          write_dat(E);
          break;
          case 3:write_dat(W);
          write_dat(E);
          write_dat(N);
          break;
          case 4:write_dat(T);
          write_dat(H);
          write_dat(U);
          break;
          case 5:write_dat(F);
          write_dat(R);
          write_dat(I);
          break;
          case 6:write_dat(S);
          write_dat(A);
          write_dat(T);
          break;
          case 7:write_dat(S);
          write_dat(U);
          write_dat(N);
          break;
          }
          }
          void init()
          {
          EN=0;
          RW=0;
          write_com(0x38);//顯示模式
          delay(5);
          write_com(0x0c);//開顯示
          write_com(0x06);//光標(biāo)自加
          write_com(0x80);//指針左一
          write_com(0x01);//清屏

          TMOD=0x01;//定時器0的工作方式1
          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;

          EA=1;//開中斷
          ET0=1;
          TR0=1;//開定時器
          display();
          }
          void display()
          {
          write_sfm(10,0);
          write_com(0x80+0x40+11);
          write_com(0x80+0x40+9);
          write_dat(:);
          write_sfm(7,0);
          write_com(0x80+0x40+8);
          write_com(0x80+0x40+6);
          write_dat(:);
          write_sfm(4,0);
          write_com(0x80+0x40+5);
          write_ymd(10,29);
          write_com(0x80+11);
          write_com(0x80+9);
          write_dat(-);
          write_ymd(7,3);
          write_com(0x80+8);
          write_com(0x80+6);
          write_dat(-);
          write_com(0x80+2);
          write_dat(2);
          write_dat(0);
          write_ymd(4,12);
          write_com(0x80+5);
          write_com(0x80+13);
          write_week(4);

          }
          void keyscan()
          {
          if(K2==0)
          {
          delay(5);
          if(K2==0);//防止誤動作
          {
          S1num++;
          while(!K2);
          switch(S1num)
          {
          case 1:
          TR0=0;
          write_com(0x80+0x40+11);
          write_com(0x0f);
          break;
          case 2:
          write_com(0x80+0x40+8);
          break;
          case 3:
          write_com(0x80+0x40+5);
          break;
          case 4:
          write_com(0x80+11);
          break;
          case 5:
          write_com(0x80+8);
          break;
          case 6:
          write_com(0x80+5);
          break;
          case 7:
          write_com(0x80+13);
          break;
          case 8:
          S1num=0;
          TR0=1;
          write_com(0x0c);
          break;
          }
          }
          }
          if(S1num!=0)
          {
          if(K4==0)
          {
          delay(5);
          while(!K4);
          switch(S1num)
          {
          case 1:
          miao++;
          if(miao==60)miao=0;
          write_sfm(10,miao);
          write_com(0x80+0x40+11);
          break;
          case 2:
          fen++;
          if(fen==60)fen=0;
          write_sfm(7,fen);
          write_com(0x80+0x40+8);
          break;
          case 3:
          shi++;
          if(shi==24)shi=0;
          write_sfm(4,shi);
          write_com(0x80+0x40+5);
          break;
          case 4:
          day++;
          switch(mon)
          {
          case 1:if(day==32)day=1;break;
          case 3:if(day==32)day=1;break;
          case 5:if(day==32)day=1;break;
          case 7:if(day==32)day=1;break;
          case 8:if(day==32)day=1;break;
          case 10:if(day==32)day=1;break;
          case 12:if(day==32)day=1;break;
          case 4:if(day==31)day=1;break;
          case 6:if(day==31)day=1;break;
          case 9:if(day==31)day=1;break;
          case 11:if(day==31)day=1;break;
          case 2:x=20*100+year;
          if((x%4==0 && x%100!=0) || x%400==0)
          {
          if(day==30)
          {
          day=1;break;
          }

          }
          else if(day==29)
          {
          day=1;break;
          }
          }
          write_ymd(10,day);
          write_com(0x80+11);
          break;
          case 5:
          mon++;
          if(mon==13)mon=1;
          write_ymd(7,mon);
          write_com(0x80+8);
          break;
          case 6:
          year++;
          write_ymd(4,year);
          write_com(0x80+5);
          break;
          case 7:
          week++;
          if(week==8)week=1;
          write_week(week);
          write_com(0x80+13);
          break;
          }
          }
          if(K6==0)
          {
          delay(5);
          while(!K6);
          switch(S1num)
          {
          case 1:
          miao--;
          if(miao==-1)miao=59;
          write_sfm(10,miao);
          write_com(0x80+0x40+11);
          break;
          case 2:
          fen--;
          if(fen==-1)fen=59;
          write_sfm(7,fen);
          write_com(0x80+0x40+8);
          break;
          case 3:
          shi--;
          if(shi==-1)shi=23;
          write_sfm(4,shi);
          write_com(0x80+0x40+5);
          break;
          case 4:
          day--;
          switch(mon)
          {
          case 1:if(day==0)day=31;break;
          case 3:if(day==0)day=31;break;
          case 5:if(day==0)day=31;break;
          case 7:if(day==0)day=31;break;
          case 8:if(day==0)day=31;break;
          case 10:if(day==0)day=31;break;
          case 12:if(day==0)day=31;break;
          case 4:if(day==0)day=30;break;
          case 6:if(day==0)day=30;break;
          case 9:if(day==0)day=30;break;
          case 11:if(day==0)day=30;break;
          case 2:x=20*100+year;
          if((x%4==0 && x%100!=0) || x%400==0)
          {
          if(day==0)
          {
          day=29;break;
          }

          }
          else if(day==0)
          {
          day=28;break;
          }
          }
          write_ymd(10,day);
          write_com(0x80+11);
          break;
          case 5:
          mon--;
          if(mon==0)mon=12;
          write_ymd(7,mon);
          write_com(0x80+8);
          break;
          case 6:
          year--;
          write_ymd(4,year);
          write_com(0x80+5);
          break;
          case 7:
          week--;
          if(week==-1)week=7;
          write_week(week);
          write_com(0x80+13);
          break;
          }
          }
          }
          }
          void main()
          {
          init();
          GND=0;

          while(1)
          {
          keyscan();
          if(count==20)
          {
          count=0;
          miao++;
          if(miao==60)
          {
          miao=0;
          fen++;
          if(fen==60)
          {
          fen=0;
          shi++;
          if(shi==24)
          {
          shi=0;
          day++;
          week++;
          switch(mon)
          {
          case 1:if(day==32)day=1;mon++;break;
          case 3:if(day==32)day=1;mon++;break;
          case 5:if(day==32)day=1;mon++;break;
          case 7:if(day==32)day=1;mon++;break;
          case 8:if(day==32)day=1;mon++;break;
          case 10:if(day==32)day=1;mon++;break;
          case 12:if(day==32)day=1;mon++;break;
          case 4:if(day==31)day=1;mon++;break;
          case 6:if(day==31)day=1;mon++;break;
          case 9:if(day==31)day=1;mon++;break;
          case 11:if(day==31)day=1;mon++;break;
          case 2:x=20*100+year;
          if((x%4==0 && x%100!=0) || x%400==0)
          {
          if(day==30)
          {
          day=1;mon++;break;
          }

          }
          else if(day==29)
          {
          day=1;mon++;break;
          }
          }
          if(mon==13)
          {
          mon=1;
          year++;
          write_ymd(4,year);
          }
          write_ymd(10,day);
          write_com(0x80+13);
          write_week(week);
          write_ymd(7,mon);
          }
          write_sfm(4,shi);
          }
          write_sfm(7,fen);
          }
          write_sfm(10,miao);
          }
          }

          }

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


          評論


          技術(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); })();