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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

電子時鐘

  [復制鏈接]
跳轉到指定樓層
樓主
ID:78027 發表于 2015-5-22 15:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
# 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);
        }
}




評分

參與人數 2黑幣 +58 收起 理由
1103863857 + 8 共享資料的黑幣獎勵!很給力,不知有沒有教.
admin + 50 共享資料的積分獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2015-5-22 16:07 | 只看該作者
功能比較強大 電路圖能共享一下嗎
回復

使用道具 舉報

板凳
ID:80203 發表于 2015-5-23 23:12 | 只看該作者
可惜沒有電路圖。
回復

使用道具 舉報

無效樓層,該帖已經被刪除
5#
ID:78027 發表于 2015-5-29 17:08 | 只看該作者
新建 WinRAR ZIP 壓縮文件.zip (18.36 KB, 下載次數: 89)   仿真圖

評分

參與人數 1威望 +50 黑幣 +50 收起 理由
admin + 50 + 50 共享資料的積分獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:112756 發表于 2016-4-18 18:17 | 只看該作者
不錯,值得學習。
回復

使用道具 舉報

7#
ID:115147 發表于 2016-4-19 10:51 | 只看該作者
非常好,感謝分享!!!!
回復

使用道具 舉報

8#
無效樓層,該帖已經被刪除
9#
ID:70246 發表于 2016-5-4 16:20 | 只看該作者
沒有黑筆怎么下載啊  
回復

使用道具 舉報

10#
ID:225510 發表于 2017-12-21 22:42 | 只看該作者
感謝分享
回復

使用道具 舉報

11#
ID:265128 發表于 2017-12-22 08:23 來自觸屏版 | 只看該作者
qq6570 發表于 2016-5-4 16:20
沒有黑筆怎么下載啊

不知道
回復

使用道具 舉報

12#
ID:262827 發表于 2017-12-23 16:34 | 只看該作者
謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩在线综合 | 男女羞羞视频免费看 | 成人午夜毛片 | 日韩免费一区 | 永久免费视频 | 国产真实精品久久二三区 | 毛片久久久 | 天天干天天谢 | 欧美日一区二区 | 亚洲精品久久久久久国产精华液 | av网站免费在线观看 | 天天做日日做 | av黄色免费在线观看 | www.亚洲.com| 亚洲一区二区三区免费在线 | 久久精品国产精品青草 | a级片在线观看 | 无码日韩精品一区二区免费 | 久久精品色欧美aⅴ一区二区 | 日韩精品视频在线播放 | 免费黄色成人 | 暴草美女| 国产免费xxx | 欧洲一级毛片 | 狠狠草视频 | 日韩日b视频 | 成人在线不卡 | 欧美一区二区免费电影 | 99自拍视频 | 亚洲日韩第一页 | 久久久www成人免费无遮挡大片 | 在线免费91 | 欧美日韩不卡合集视频 | 91国产精品 | 综合久久一区 | 一级毛片免费完整视频 | 老妇激情毛片免费 | 午夜久久久久久久久久一区二区 | 色天天综合 | 欧美精品一级 | 永久av|