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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1725|回復: 0
收起左側

時鐘日歷

[復制鏈接]
ID:139341 發表于 2016-9-18 21:01 | 顯示全部樓層 |閱讀模式
# include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit  rs=P2^0;
sbit  rw=P2^1;
sbit  en=P2^2;
sbit key1=P2^3;         //調時
sbit key2=P2^4;         //加
sbit key3=P2^5;    //減
uchar miao,fen,shi,ri,zhou,yue,year;        //        秒,分,時,周,月,年
uchar code table[16]="20  -  -   wk:  ";
uchar code table1[16]="time 23:59:57   ";
void delay(uchar a)
{
uchar x,y;
for(x=a;x>0;x--)
  for(y=110;y>0;y--);
}

void write_com(uchar com)
{ rw=0;
   rs=0;
   en=0;
   P0=com;
   en=1;
   delay(5);
   en=0;
   delay(5);
}
void write_date(uchar date)
{ rw=0;
   rs=1;
   en=0;
   P0=date;
   en=1;
   delay(5);
   en=0;
   delay(5);
}
void write_nyr(uchar lie,uchar date)        //第一行年月日周函數
{uchar a,b;
     a=date/10;
         b=date%10;
  write_com(0x80+lie);
            write_date(0x30+a);
         write_date(0x30+b);
}
void write_sfm(uchar lie,uchar date)        //第二行寫入時分秒函數
{         uchar a,b;
     a=date/10;
         b=date%10;
         write_com(0x80+0x40+lie);
            write_date(0x30+a);
         write_date(0x30+b);
}
void init()
{ uchar i ;                        
   en=0;
   shi=23;
   fen=59;
   miao=57;
   year=15;
   yue=5;
   ri=12;
   zhou=6;
  write_com(0x38);          //顯示
  write_com(0x0c);   //開光標
  write_com(0x06);         //指針加一
  write_com(0x01);   //清屏
  write_com(0x80);   //第一行
  for(i=0;i<15; i++)
          {
           write_date(table[i]);
                   delay(5);
          }

  write_nyr(2,year);
  write_nyr(5,yue);
  write_nyr(8,ri);
  write_nyr(14,zhou);
  write_com(0x80+0x40);   //第二行
  for(i=0;i<15; i++)
          {
           write_date(table1[i]);
                delay(5);
      }
          TMOD=0X01;
          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
            EA=1;
                ET0=1;
                TR0=1;
}
uchar i,k,temp,n,m;   //i記錄調時鍵按下次數,K,m,n為標志位,temp為年份
void key_scan(void)
{  
   temp=2000+year;
   if(((temp%4==0)&&(temp%100!=0))||(temp%400==0))
       n=1;                         //閏年
   else  
       n=0;                   //非閏年
  if(key1==0)        //調時鍵按下
    delay(10);
         if(key1==0)
         { while(!key1);  //按鍵釋放
                 i++;
                if(i==1)
                        {TR0=0;           //停止定時
                         write_com(0x80+0x40+12);
                         write_com(0x0f);

                                    k=1;         //K=1為秒標志位
                        }
                 if(i==2)
                  { TR0=0;
                 write_com(0x80+0x40+9);
                 write_com(0x0f);
                       k=2;           //k=2為分標志位
             }
                if(i==3)
                  { TR0=0;
                 write_com(0x80+0x40+6);
                 write_com(0x0f);
                           k=3;           //k=3為時標志位
             }
                if(i==4)
                  { TR0=0;
                 write_com(0x80+3);
                 write_com(0x0f);
                           k=4;           //k=4為年標志位
             }
                if(i==5)
                  { TR0=0;
                 write_com(0x80+6);
                 write_com(0x0f);
                           k=5;           //k=5為月標志位
             }
                if(i==6)
                  { TR0=0;
                 write_com(0x80+9);
                 write_com(0x0f);
                           k=6;           //k=3為日標志位
             }
                if(i==7)
                  { TR0=0;
                 write_com(0x80+15);
                 write_com(0x0f);
                           k=7;           //k=3為周標志位
             }
                if(i==8)
                 {i=0;
                 TR0=1;                        //啟動定時
                 write_com(0x0c);         //消除光標
                 }
}
if((key2==0)&&(k==1))        //秒加鍵按下
                   delay(10);
                        if((key2==0)&&(k==1))
                                { while(!key2);
                                    miao++;
                                 if(miao==60)
                                          miao=0;
                                  write_sfm(11,miao);          //寫入時分秒函數
                                  write_com(0x80+0x40+12);        //光標位置
                                  }
   if((key3==0)&&(k==1))        //秒減鍵按下
                   delay(10);
                        if((key3==0)&&(k==1))
                                { while(!key3);
                                  miao--;
                                  if(miao==-1)
                                          miao=59;
                                  write_sfm(11,miao);         //寫入時分秒函數
                                  write_com(0x80+0x40+12); //光標位置
                                  }
if((key2==0)&&(k==2))        //分加鍵按下
                   delay(10);
                        if((key2==0)&&(k==2))
                                { while(!key2);
                                  fen++;
                                  if(fen==60)
                                          fen=0;
                                  write_sfm(8,fen);                 //寫入時分秒函數
                                  write_com(0x80+0x40+9);         //光標位置
                                  }
if((key3==0)&&(k==2))        //分減鍵按下
                   delay(10);
                        if((key3==0)&&(k==2))
                                { while(!key3);
                                   fen--;
                                  if(fen==-1)
                                          fen=59;
                                  write_sfm(8,fen);                //寫入時分秒函數
                                  write_com(0x80+0x40+9);  //光標位置
                                  }
  if((key2==0)&&(k==3))        //時加鍵按下
                   delay(10);
                        if((key2==0)&&(k==3))
                                { while(!key2);
                                  shi++;
                                  if(shi==24)
                                  shi=0;
                                  write_sfm(5,shi);                 //寫入時分秒函數
                                  write_com(0x80+0x40+6);        //光標位置
                                  }
  if((key3==0)&&(k==3))        //時減鍵按下
                   delay(10);
                        if((key3==0)&&(k==3))
                                { while(!key3);
                                 shi--;
                                  if(shi==-1)
                                  shi=23;
                                  write_sfm(5,shi);                 //寫入時分秒函數
                                  write_com(0x80+0x40+6);        //光標位置
                                  }
if((key2==0)&&(k==4))        //年加鍵按下
                   delay(10);
                        if((key2==0)&&(k==4))
                                { while(!key2);
                                  year++;
                                  write_nyr(2,year);                 //寫入年月日函數
                                  write_com(0x80+3);        //光標位置
                                  }
if((key3==0)&&(k==4))        //年減鍵按下
                   delay(10);
                        if((key3==0)&&(k==4))
                                { while(!key3);
                                  year--;
                                  write_nyr(2,year);                 //寫入年月日函數
                                  write_com(0x80+3);        //光標位置
                                  }
  if((key2==0)&&(k==5))        //月加鍵按下
                   delay(10);
                        if((key2==0)&&(k==5))
                                { while(!key2);
                                  yue++;
                                  if(yue==13)
                                     yue=1;
                                  write_nyr(5,yue);                 //寫入年月日函數
                                  write_com(0x80+6);        //光標位置
                                  }
if((key3==0)&&(k==5))        //月減鍵按下
                   delay(10);
                        if((key3==0)&&(k==5))
                                { while(!key3);
                                  yue--;
                                  if(yue==0)
                                     yue=12;
                                  write_nyr(5,yue);                 //寫入年月日函數
                                  write_com(0x80+6);        //光標位置
                                  }
if((key2==0)&&(k==6))        //日加鍵按下
                   delay(10);
        if((key2==0)&&(k==6))
        { while(!key2);
                                  ri++;
                   switch(yue)
                 { case 1:  case 3: case 5: case 7: case 8: case 10: case 12:
                               m=1;break;        //大月
                  case 4:  case 6: case 9: case 11:
                                  m=2;break;          //小月
                  case 2:  m=3; break;         //二月
            }
                if(ri==32)
                        {ri=1;}                  
                if((ri==32)&&(m==1))
                        { ri=1; }
                if((ri==31)&&(m==2))
                                { ri=1; }
                if((ri==30)&&(m==3)&&(n==1))
                        { ri=1; }                        //閏年二月
                if((ri==29)&&(m==3)&&(n==0))        
                                { ri=1; }         //非閏年二月
                                  write_nyr(8,ri);                 //寫入年月日函數
                                  write_com(0x80+9);        //光標位置
         }
if((key3==0)&&(k==6))        //日減鍵按下
                   delay(10);
         if((key3==0)&&(k==6))
            { while(!key3);
                                  ri--;
                 switch(yue)
                 { case 1:  case 3: case 5: case 7: case 8: case 10: case 12:
                                m=4; break;                           //大月
                   case 4:  case 6: case 9: case 11:
                                   m=5; break;                //小月
                   case 2:  m=6;  break;         //二月         
            }
                if((m==4)&&(ri==0))  
                         { ri=31;}
                if((m==5)&&(ri==0))
                     { ri=30;}
                if((n==1)&&(m==6)&&(ri==0))                   //閏年2月
                     { ri=29;}
                if((n==0)&&(m==6)&&(ri==0))                //非閏年2月
                         { ri=28;}
                 write_nyr(8,ri);                 //寫入年月日函數
                write_com(0x80+9);        //光標位置
        }
if((key2==0)&&(k==7))        //周加鍵按下
                   delay(10);
                        if((key2==0)&&(k==7))
                                { while(!key2);
                                  zhou++;
                                  if(zhou==8)
                                    zhou=1;
                                  write_nyr(14,zhou);                 //寫入年月日函數
                                  write_com(0x80+15);        //光標位置
                                  }
if((key3==0)&&(k==7))        //周減鍵按下
                   delay(10);
                        if((key3==0)&&(k==7))
                                { while(!key3);
                                  zhou--;
                                  if(zhou==0)
                                     zhou=7;
                                  write_nyr(14,zhou);                 //寫入年月日函數
                                  write_com(0x80+15);        //光標位置
                                  }
}
void compare_r( uchar b)                  //判斷日滿函數
{  
     if((b==32)&&((m==1)||(m==4)))
                        { b=1;
                        yue++;
                          if(yue==13)
                        {  year++;
                         write_nyr(2,year);
                                 }
                    write_nyr(5,yue);
                         }
     if((b==31)&&((m==2)||(m==5)))
                         { b=1;
                         yue++;
                          if(yue==13)
                        {  year++;
                          write_nyr(2,year);}
                         write_nyr(5,yue);
                          }               
         if((b==30)&&((m==3)||(m==6))&&(n==1))
                         { b=1;
                          yue++;
                          if(yue==13)
                        {  year++;
                          write_nyr(2,year);}
                           write_nyr(5,yue);
                          }
         if((b==29)&&((m==3)||(m==6))&&(n==0))
                        {b=1 ;
                        yue++;
                          if(yue==13)
                        {  year++; }
                          write_nyr(2,year);
                            write_nyr(5,yue);                        
                     }
          write_nyr(8,b);
                }
void compare_y( uchar a)          //判月滿
{         
           if(a==13)
           { a=1;
           write_nyr(2,year);
           }
           
           write_nyr(5,a);
         
}

void main(void)
{
  init();
  while(1)
  { key_scan();
  }

  }
void  time0() interrupt 1
{        uint t;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
         t++;
   if(t==20)
        {
            t=0;
     miao++;
          if(miao==60)
          {
            miao=0;
            fen++;
             if(fen==60)
                 {
                   fen=0;
                   shi++;
                   if(shi==24)
                   { shi=0;
                     zhou++;
                      ri++;
                          compare_r(ri);        //判日滿
                          compare_y(yue);        //判月滿
                        if(zhou==8)
                     { zhou=1;}
                    write_nyr(14,zhou);
                   }
                  write_sfm(5,shi);
                 }
                 write_sfm(8,fen);
          }
      write_sfm(11,miao);
        }
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线视频国产一区 | 色姑娘综合网 | 成人精品一区二区 | 99中文字幕 | 欧美三级免费观看 | 国产一区二区视频免费在线观看 | 男女啪啪高潮无遮挡免费动态 | 久久精品免费一区二区三 | 91五月天 | 日韩91在线 | 久久乐国产精品 | 雨宫琴音一区二区在线 | 欧美日韩福利 | 欧美在线天堂 | 国产精品美女久久久久久久网站 | 日p视频免费看 | 精品视频在线观看 | 99久久久久久99国产精品免 | 午夜色播 | 99久久久无码国产精品 | 91精品国产91久久久久久密臀 | 欧美一级片在线观看 | 精品国产高清一区二区三区 | 欧美久久精品一级黑人c片 91免费在线视频 | 日本不卡一区二区三区在线观看 | 成人日b视频 | 亚洲国产成人av好男人在线观看 | 国产精品一区一区三区 | 国产良家自拍 | 免费在线看黄 | 国产精品久久久久久吹潮日韩动画 | 日日操夜夜操天天操 | 黄久久久 | 免费的日批视频 | 亚洲一区二区中文字幕在线观看 | 久草精品视频 | 欧美国产日韩成人 | 中文字幕人成乱码在线观看 | 久久亚洲国产精品日日av夜夜 | 色综合久久天天综合网 | 久久久91精品国产一区二区精品 |