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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

設計一個數字電子鐘:用數碼管顯示時、分、秒

[復制鏈接]
跳轉到指定樓層
樓主
ID:356804 發表于 2018-6-22 17:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit qingling=P1^0;     //清零
sbit tiaofen=P1^1;      //調分
sbit tiaoshi=P1^2;      //調時
sbit sounder=P1^7;      //naozhong
uint a,b;
uchar hour,minu,sec,    //時鐘
      hour0,minu0,sec0, //秒表
      hour1,minu1,sec1;
      h1,h2,m1,m2,s1,s2,//顯示位
      k,s;  //狀態轉換標志
        
uchar code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*****************函數聲明***********************/
void keyscan();
void init();
void delay(uchar z);
void display(uchar,uchar,uchar);
void sounde();
/*****************主函數*************************/      
void main()
{
    init();
    while(1)
    {              
    while(TR1)
    {
      
    keyscan();    //掃描函數
    while(s==1)   //s是狀態標志,當s=0時,鬧鐘取消。s=1時,設定鬧鐘時間
    {             //s=2時,鬧鐘工作,時間與設定時刻一致時,鬧鐘響
    keyscan();                    //s狀態切換(0-》1-》2-》0)通過外部中斷1實現。
    display(hour1,minu1,sec1); //鬧鐘時刻顯示
     }
    display(hour0,minu0,sec0);//時鐘表顯示            
            
     while(k)      /*k是秒表狀態(0-》1-》2-》0)通過外部中斷0實現。*/
     {
     display(hour,minu,sec);      //秒表顯示            
      }
         
    }
  }
}
/*****************初始化函數***********************/
void init()
{
      a=0;
      b=0;
      k=0;
      s=0;
      hour0=0;
      minu0=0;
      sec0=0;
      hour=0;
      minu=0;
      sec=0;
      hour1=0;
      minu1=0;
      sec1=0;
      TMOD=0x11;              //定時器0,1工作于方式1;賦初值
      TH0=(65536-5000)/256;
      TL0=(65536-5000)%256;
      TH1=(65536-50000)/256;
      TL1=(65536-50000)%256;
      
      EA=1;
      EX0=1;       //秒表中斷
      EX1=1;       //鬧鐘設定中斷
      ET0=1;
      ET1=1;
      IT0=1;        //邊沿觸發方式
      IT1=1;
      PX0=1;
      PX1=1;
      
      TR0=0;              //初始,秒表不工作
      TR1=1;        //時鐘一開始工作      
}
/*****************定時器0中斷*************/
void timer0_int() interrupt 1      //秒表
{
      TH0=(65536-5000)/256;
      TL0=(65536-5000)%256;
      a++;
      if(a==2)
      {
      a=0;
      sec++;
      if(sec==100)
            {
            sec=0;      //毫秒級
            minu++;
            if(minu==60)
            {
                  minu=0;            //秒
                  hour++;
                  if(hour==60)        //分
                  {
                  hour=0;
                  }
            }
            }
      }
      
}
/*************外部中斷0中斷函數************/
void ex0_int() interrupt 0
{      
      k++;
      if(k==3)
      k=0;
      if(k==1)
      {
      TR0=~TR0;
      if(TR0==1)
      {              
         hour=0;
         minu=0;
         sec=0;      
      }
      }
      if(k==2)
      {
      TR0=~TR0;
      }        
}
/*************外部中斷1中斷函數************/
void ex1_int() interrupt 2
{
      s++;
      if(s==3)
      s=0;
}
/*************定時器1中斷****************/
void timer1_int() interrupt 3       //控制時鐘工作
{
      TH1=(65536-50000)/256;
      TL1=(65536-50000)%256;
      if(s==2)
      {
      if(hour1==hour0 && minu0==minu1)
      sounde();
      }
      b++;
      if(b==20)
      {
      b=0;
      sec0++;
         if(sec0==60)
           {  
              sec0=0;
                minu0++;
              if(minu0==60)
               {
                   minu0=0;
                   hour0++;
                   if(hour0==24)
                         hour0=0;
                        
               }
           }
               
      }
            
}

/*************鍵盤掃描****************/
void keyscan()
{
      
      if(s==1)
      {
      if(qingling==0)
      {
            delay(10);
            if(qingling==0)
            {
            sec1=0;
            minu1=0;
            hour1=0;
            }
      }
      if(tiaofen==0)
      {
            delay(10);
            if(tiaofen==0)
            {
            minu1++;
            if(minu1==60)
            {
                  minu1=0;
            }
            while(!tiaofen);
            
            }
      }
      if(tiaoshi==0)
      {
            hour1++;
            if(hour1==24)
            {
            hour1=0;
            }
            while(!tiaoshi);
            
      }
      }
      else              //調整時鐘時間
      {
       if(qingling==0)
      {
            delay(10);
            if(qingling==0)
            {
            sec0=0;
            minu0=0;
            hour0=0;
            }
      }
      if(tiaofen==0)
      {
            delay(10);
            if(tiaofen==0)
            {
            minu0++;
            if(minu0==60)
            {
                  minu0=0;
            }
            while(!tiaofen);
            
            }
      }
      if(tiaoshi==0)
      {
            hour0++;
            if(hour0==24)
            {
            hour0=0;
            }
            while(!tiaoshi);
            
      }
      }      
}
/*************顯示函數****************/
void display(uchar hour,uchar minu,uchar sec)
{
      h1=hour/10;
      h2=hour%10;
      m1=minu/10;
      m2=minu%10;
      s1=sec/10;
      s2=sec%10;
      P0=0xff;
      P2=table[h1];
      P0=select[7];
      delay(5);
      P0=0xff;
      P2=table[h2];
      P0=select[6];
      delay(5);
      P0=0xff;
      P2=0x40;;
      P0=select[5];
      delay(5);
      P0=0xff;
      P2=table[m1];
      P0=select[4];
      delay(5);
      P0=0xff;
      P2=table[m2];
      P0=select[3];
      delay(5);
      P0=0xff;
      P2=0x40;
      P0=select[2];
      delay(5);
      P0=0xff;
      P2=table[s1];
      P0=select[1];
      delay(5);
      P0=0xff;
      P2=table[s2];
      P0=select[0];
      delay(5);
}
/*************鬧鐘函數****************/
void sounde()
{
      sounder=~sounder;      
}
/*************延時函數****************/
void delay(uchar z)
{
      int x,y;
      for(x=z;x>0;x--)
      for(y=110;y>0;y--);
}

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 青青草一区二区三区 | 亚洲第一免费播放区 | 91精品国产一区二区三区 | 永久网站 | 少妇精品久久久久久久久久 | 午夜影院在线观看免费 | 色888www视频在线观看 | 欧美亚洲视频在线观看 | 狠狠综合久久av一区二区老牛 | 91精品在线看 | 日韩午夜电影在线观看 | 中文一区 | 亚洲视频免费观看 | 国产一区二区在线免费观看 | 精品在线一区 | 国产日韩久久 | 欧美a级成人淫片免费看 | 成人午夜电影在线观看 | 在线资源视频 | 在线日韩福利 | 亚洲精品电影在线观看 | 国产精品免费小视频 | 欧美日高清视频 | 日本视频在线播放 | 国产精品久久久久久婷婷天堂 | 国产综合精品一区二区三区 | 日韩中文视频 | 精品中文字幕在线 | 91热在线| 欧美一级高潮片免费的 | 亚洲成人免费视频 | 91电影院 | 亚洲天堂av在线 | 亚洲乱码国产乱码精品精98午夜 | 亚洲一区在线播放 | 精品国产免费一区二区三区演员表 | 欧美视频一区 | 夜夜爽99久久国产综合精品女不卡 | 免费在线精品视频 | 在线中文字幕亚洲 | 精品久久久久久久 |