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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16850|回復: 3
收起左側(cè)

51單片機C語言萬年歷程序(在數(shù)碼管上顯示年月日,時分秒,星期,鬧鐘,用獨立按鍵可調(diào)...

[復制鏈接]
ID:491833 發(fā)表于 2019-3-17 10:21 | 顯示全部樓層 |閱讀模式
可以實現(xiàn)萬年歷的基本功能,基于八位數(shù)碼管的程序,可切屏,內(nèi)含功能鍵。C語言小白,多有不成熟之處,望諒解。
以下是電路圖:

1

1

3

3


以下是所需元器件:

QQ圖片20190323203100.png QQ圖片20190323203108.png


單片機源程序:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint);

sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit s4=P3^3;
sbit beep=P3^7;
uint nian;
uchar count=0;
uchar zhou,yue,ri,shi,fen,miao,anao,bnao,cnao;
uchar s1num=0;
uchar s2num=1;
uchar nian1,nian2,nian3,nian4,yue1,yue2,ri1,ri2;
uchar nao1,nao2,nao3,nao4,nao5,nao6;
uchar shi1,shi2,fen1,fen2,miao1,miao2;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
  void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}

void di()
{
beep=0;
delay(1);
beep=1;
}


  void rili()           //顯示日歷
  {
  
  nian1=nian/1000;
  nian2=nian%1000/100;
  nian3=nian%100/10;
  nian4=nian%10;
  yue1=yue/10;
  yue2=yue%10;
  ri1=ri/10;
  ri2=ri%10;
  P2=0x1c;
  P0=table[nian1];
  delay(1);
  P2=0x18;
  P0=table[nian2];
  delay(1);
  P2=0x14;
  P0=table[nian3];
  delay(1);
  P2=0x10;
  P0=table[nian4];
  delay(1);
  P2=0x0c;
  P0=table[yue1];
  delay(1);
  P2=0x08;
  P0=table[yue2];
  delay(1);
  P2=0x04;
  P0=table[ri1];
  delay(1);
  P2=0x00;
  P0=table[ri2];
  delay(1);
  }
  
  void shijian()         //顯示時間
  {

  shi1=shi/10;
  shi2=shi%10;
  fen1=fen/10;
  fen2=fen%10;
  miao1=miao/10;
  miao2=miao%10;
  P2=0x1c;
  P0=table[shi1];
  delay(1);
  P2=0x18;
  P0=table[shi2];
  delay(1);
  P2=0x14;
  P0=0x80;
  delay(1);
  P2=0x10;
  P0=table[fen1];
  delay(1);
  P2=0x0c;
  P0=table[fen2];
  delay(1);
  P2=0x08;
  P0=0x80;
  delay(1);
  P2=0x04;
  P0=table[miao1];
  delay(1);
  P2=0x00;
  P0=table[miao2];
  delay(1);
   
  }
void nao()            //顯示鬧鐘
{
  nao1=anao/10;
    nao2=anao%10;
   nao3=bnao/10;
   nao4=bnao%10;
   nao5=cnao/10;
   nao6=cnao%10;
  P2=0x1c;
   P0=table[nao1];
   delay(1);
  P2=0x18;
   P0=table[nao2];
   delay(1);
   P2=0x14;
   P0=0x80;
    delay(1);
  P2=0x10;
    P0=table[nao3];
     delay(1);
     P2=0x0c;
     P0=table[nao4];
   delay(1);
   P2=0x08;
   P0=0x80;
  delay(1);
     P2=0x04;
     P0=table[nao5];
    delay(1);
    P2=0x00;
    P0=table[nao6];
    delay(1);
}
   


         
   void xingqi()               //顯示星期
   {
     
  P2=0x1c;
  P0=table[zhou];
  }
  
   
  void run()
{
  if(nian%400==0||nian%100!=0&&nian%4==0)  
   {
    if(yue==2)
   {
    ri++;
    {
     if(ri==30)
     {
      ri=1;
      yue++;
     }
    }
   }
  }
}

void zhoubian()
{
  uint yue1,nian1;         /星期數(shù)隨著年月日的變化自行改變
  yue1=yue;
  nian1=nian;

  if(yue==1||yue==2)
  {
   yue1=yue+12;
   nian1=nian-1;
  }

  zhou=(ri+2*yue1+3*(yue1+1)/5+nian1+nian1/4-nian1/100+nian1/400)%7+1;
  }

void timer0()interrupt 1       //中斷
   {  

     TH0=(65534-50000)/256;
     TL0=(65534-50000)%256;
     count++;
  
      if(count==20)
        {
            count=0;
            miao++;
      if(miao==60)
      {
             miao=0;
       fen++;
       if(fen==60)
       {
              fen=0;
        shi++;
        if(shi==24)
        {
                  shi=0;        
         zhou++;
         {
          if(zhou==8)
          {
           zhou=1;
          }
         }   
         if(yue==4||yue==6||yue==9||yue==11)    //在小月的前提
         {
          ri++;
          if(ri==31)
          {
                    ri=1;
           yue++;
         
              }
           }
         if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)    //在大月的前提
         {
          ri++;
          if(ri==32)
          {
                    ri=1;
           yue++;
         
          }
         }
           run();
           if(nian%4!=0||nian%400==0)
           {
         if(yue==2)
         {
          ri++;
          if(ri==29)
          {
           ri=1;
           yue++;
          }
         }
         
           if(yue==13)
           {
                     yue=1;
            nian++;
           }           
          }
         }
        }
          if(zhou==7)
      {
       zhou=0;
      }   
     }
    }
    if(shi==anao&&fen==bnao&&miao>=cnao)
    {
        
        
         
         di();
       }
   
   }   
   
         
void init()
{
    TMOD=0x01;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)/256;
    EA=1;
    ET0=1;
    TR0=1;    //開啟定時器
  nian=2019;
     yue=11;
     ri=27;
     shi=0;
     fen=0;
     miao=0;
  anao=0;
  bnao=0;
  cnao=0;
   }                  
void tiaobnao()
{
if(s3==0)
{
  delay(5);
  if(s3==0)
  {
   bnao++;
   while(!s3);
   if(bnao==60)
   {
    bnao=0;
   }
  }
}
if(s4==0)
{
  delay(5);
  if(s4==0)
  {
   bnao--;
   while(!s4);
   if(bnao==-1)
   {
    bnao=59;
   }
  }
}
}
void tiaoanao()
{
if(s3==0)
{
  delay(5);
  if(s3==0)
  {
   anao++;
   while(!s3);
   if(anao==24)
   {
    anao=0;
   }
  }
}
if(s4==0)
{
  delay(5);
  if(s4==0)
  {
   anao--;
   while(!s4);
   if(anao==-1)
   {
    anao=23;
   }
  }
}
}
void tiaofen()
{
if(s3==0)
{
  delay(5);
  if(s3==0)
  {
   fen++;
   while(!s3);
   if(fen==60)
   {
    fen=0;
   }
  }
}
if(s4==0)
{
  delay(5);
  if(s4==0)
  {
   fen--;
   while(!s4);
   if(fen==-1)
   {
    fen=59;
   }
  }
}
}
void tiaoshi()
{
if(s3==0)
{
  delay(5);
  if(s3==0)
  {
   shi++;
   while(!s3);
   if(shi==24)
   {
    shi=0;
   }
  }
}
if(s4==0)
{
  delay(5);
  if(s4==0)
  {
   shi--;
   while(!s4);
   if(shi==-1)
   {
    shi=23;
   }
  }
}
}
void dzhx()             //大月轉(zhuǎn)小月
{
if(ri==31)
{
  if(yue==4||yue==6||yue==9||yue==11)
  {
   ri=30;
  }
}
}
void dxtpr()             //大小月調(diào)平潤 月
{
if(ri==30||ri==31)
{
  if(yue==2)
  {
   if(nian%4!=0||nian%400==0)
   {
    ri=28;
   }
   if(nian%400==0||nian%100!=0&&nian%4==0)
   {
    ri=29;
   }
  }
}
}
void rzhp()            //特殊年份調(diào)整
{
if(ri==29)
{
  if(yue==2)
  {
   if(nian%4!=0||nian%400==0)   //當是平年時
   {
    ri=28;
   }
  }
}
}  
void tiaori()
{
if(s3==0)
{
  delay(5);
  if(s3==0)
  {
   if(yue==4||yue==6||yue==9||yue==11)
   {
    ri++;
    while(!s3);
   
    if(ri==31)
    {
    ri=1;
    }
   }
   if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
   {
    ri++;
    while(!s3);
   
    if(ri==32)
    {
     ri=1;
    }
         }
   if(nian%400==0||nian%100!=0&&nian%4==0)     //當是閏年時二月運行
    {
     if(yue==2)
    {
     ri++;
     {
         while(!s3);
   
      if(ri==30)
      {
       ri=1;
     
      }
     }
    }
   }
   if(nian%4!=0||nian%400==0)
   {         
     if(yue==2)        //當是平年時二月運行
    {
     ri++;
     while(!s3);
   
     if(ri==29)
     {
      ri=1;
     }
    }   
   }
  }
}
if(s4==0)
{
  delay(5);
  if(s4==0)
  {
   if(yue==4||yue==6||yue==9||yue==11)
   {
    ri--;
    while(!s4);
   
    if(ri==-1)
    {
    ri=30;
    }
   }
   if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
   {
    ri--;
    while(!s4);
   
    if(ri==-1)
    {
     ri=31;
    }
         }
   if(nian%400==0||nian%100!=0&&nian%4==0)     //當是閏年時二月運行
    {
     if(yue==2)
    {
     ri--;
     {
         while(!s4);
   
      if(ri==-1)
      {
       ri=29;
     
      }
     }
    }
   }
   if(nian%4!=0||nian%400==0)
   {         
     if(yue==2)        //當是平年時二月運行
    {
     ri--;
     while(!s4);
   
     if(ri==-1)
     {
      ri=28;
     }
    }   
   }
  }
}

}
void tiaozhou()
{
zhoubian();
if(s3==0)
   {
  delay(5);
  if(s3==0)
  {
   zhou++;
   if(zhou==8)
   {
    zhou=1;
   }
   while(!s3);
  
  }
}
   if(s4==0)
   {
  delay(5);
  if(s4==0)
  {
   zhou--;
   if(zhou==0)
   {
    zhou=7;
   }
   while(!s4);
  
  }
}
}
void tiaoyue()
{

if(s3==0)
   {
  delay(5);
  if(s3==0)
  {
   yue++;
   if(yue==13)
   {
    yue=1;
   }
   while(!s3);
  
  }
}
   if(s4==0)
   {
  delay(5);
  if(s4==0)
  {
   yue--;
   if(yue==0)
   {
    yue=12;
   }
   while(!s4);
  
  }
}
  dxtpr();
  dzhx();
}
   void tiaonian()
{

if(s3==0)
   {
  delay(5);
  if(s3==0)
  {
   nian++;
  
   while(!s3);
  
  }
}
   if(s4==0)
   {
  delay(5);
  if(s4==0)
  {
   nian--;
  
   while(!s4);
  
  }
}
     rzhp();
}
void keyscan()    //按鍵      
{
  if(s1==0)
   {
    delay(5);
   if(s1==0)
   {
    s1num++;
    while(!s1);
  
   }
   }
  switch(s1num)
  {
   case 0:
  shijian();
   break;
  case 1:
  rili();
  break;
  case 2:
  xingqi();
  break;
  case 3:
  nao();
  break;
  case 4:
  s1num=0;
  break;
  }
  }
  void qie()
   {
  if(s2==0)
  {
   delay(5);
   if(s2==0)
   {
    s2num++;
    while(!s2);
    }}
if(s1num==0)
  {
   switch(s2num)
   {
    case 1:
     tiaofen();
      break;
    case 2:
     tiaoshi();
      break;
    case 3:
     s2num=0;
     break;
   }}

   if(s1num==1)
   {
    switch(s2num)
    {
    case 1:
     tiaori();
     break;
    case 2:
     tiaoyue();
     break;
    case 3:
     tiaonian();
     break;
    case 4:
    s2num=0;
    break;
     }}
   if(s1num==2)
   {
    tiaozhou();
    }

    if(s1num==3)
   {
   switch(s2num)
   {
    case 1:
     tiaoanao();
     break;
    case 2:
     tiaobnao();
     break;
    case 3:
    s2num=0;
    break;
   }
    }
     }
     void main()                //新作
     {
       init();  
       while(1)
       {
      keyscan();
     qie();
   
     }
     }

評分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:675216 發(fā)表于 2019-12-27 10:25 | 顯示全部樓層
怎么用
回復

使用道具 舉報

ID:491833 發(fā)表于 2019-3-19 19:31 來自手機 | 顯示全部樓層
admin 發(fā)表于 2019-3-17 16:17
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)

好噠,我知道了
回復

使用道具 舉報

ID:1 發(fā)表于 2019-3-17 16:17 | 顯示全部樓層
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩一区精品 | 日韩精品一区二区三区在线播放 | 日韩欧美亚洲 | 丁香五月网久久综合 | 大乳boobs巨大吃奶挤奶 | 亚洲一区二区三区免费 | 亚洲国产成人久久综合一区,久久久国产99 | 成人精品视频在线观看 | 五月激情婷婷网 | 亚洲一区不卡 | 欧美a在线观看 | 久久av一区二区三区 | 秋霞性生活 | av一级久久 | 欧美黄色性生活视频 | 国产精品日韩在线观看一区二区 | 久久9视频 | 亚洲欧洲精品一区 | 国产成人精品a视频一区www | h小视频 | 久久香蕉网| 日韩欧美在线视频 | 伦理午夜电影免费观看 | 久久国产精品久久久久久 | 羞羞的视频免费观看 | 国产欧美一区二区三区久久 | 午夜精品久久久久久久久久久久久 | 国产高清一区二区 | 中文字幕精品一区二区三区精品 | 日韩一区二区在线播放 | 亚洲欧美aⅴ| 超碰网址| 久久久久久国产一区二区三区 | 日韩欧美中文在线 | 欧美a在线看 | 色视频一区二区 | 亚洲欧美日本国产 | 黄a在线观看 | 国产一区二区三区四区hd | 国产精品久久精品 | 精品综合视频 |