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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)C編程(六、定時(shí)器時(shí)鐘顯示時(shí)分秒)

          51單片機(jī)C編程(六、定時(shí)器時(shí)鐘顯示時(shí)分秒)

          作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
          六位數(shù)碼管顯示時(shí)分秒,通過(guò)四個(gè)按鍵進(jìn)行時(shí)間的控制。按下"調(diào)時(shí)"按鍵,時(shí)間顯示停止;按下"選擇時(shí)分秒"按鍵,數(shù)碼管上方的發(fā)光二極管會(huì)點(diǎn)亮,對(duì)應(yīng)著選中的要修改的時(shí)間是小時(shí)、分鐘還是秒;按下"按下增加"按鍵,選中的時(shí)間將會(huì)增加;按下"完成"按鍵,時(shí)間繼續(xù)顯示。

          已通過(guò)proteus仿真,電路圖如下所示,希望大家多多指點(diǎn),積極留言:

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

          //編程:jumpmysoul

          #include
          #define ulong unsigned long
          char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽(yáng)數(shù)碼管數(shù)字碼
          char tab_dp[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x70,0x10};//共陽(yáng)數(shù)碼管數(shù)字碼(帶小數(shù)點(diǎn))

          #define LED P0//P0為數(shù)碼管的段選
          #define LIGHT P1//P1為時(shí)分秒位的指示燈
          #define WS P2//P2為數(shù)碼管的位選

          sbit time_change=P3^0;//P3^0為“調(diào)時(shí)”按鍵
          sbit time_choose=P3^1;//P3^1為“選擇時(shí)分秒”按鍵
          sbit time_inc=P3^2;//P3^2為“增加”按鍵
          sbit time_ok=P3^3;//P3^3為“完成”按鍵

          ulong t;
          ulong sec,min,hour,sec_ge,sec_shi,min_ge,min_shi,hour_ge,hour_shi;//定義秒,分,時(shí),秒的個(gè)位,十位,分的個(gè)位,十位,時(shí)的個(gè)位,十位
          int choose_n;//按下“選擇時(shí)分秒”按鍵的次數(shù)
          int flag;//定義“調(diào)時(shí)”按鍵的標(biāo)志位
          //---------------------------------------------------------------------
          void init();
          void display();
          void delay(int);
          void time_modify();
          //---------------------------------------------------------------------
          void main()
          {
          init();
          while(1)
          {
          TR0=1;
          display();
          time_modify();
          }
          }
          //---------------------------------------------------------------------
          void init()
          {
          WS=t=LIGHT=choose_n=0;
          sec_ge=sec_shi,min_ge,min_shi,hour_ge,hour_shi=sec=min=hour=flag=0;
          TMOD=0x01;//定義定時(shí)器0工作與方式1
          TH0=(65536-5536)/256;//定時(shí)器賦初值
          TL0=(65536-5536)%256;
          EA=1;//開總中斷和T0中斷
          ET0=1;
          }
          //--------------------------------延時(shí)子函數(shù)------------------------------------
          void delay(int x)
          {
          int i,j;
          for(i=x;i>0l;i--)
          for(j=255;j>0;j--);
          }
          //-------------------------------顯示子函數(shù)---------------------------------------
          void display()
          {
          int i=0;

          if(TF0==1)//如果定時(shí)器溢出
          {
          TF0=0;//清中斷標(biāo)志位
          t++;
          if(t==10)
          {
          t=0;
          sec++;//秒加1
          if(sec==60)//如果秒為60,則清零,分加1
          {
          sec=0;
          min++;
          }
          if(min==60)//如果分為60,則清零,時(shí)加1
          {
          min=0;
          hour++;
          }
          if(hour==24)//如果時(shí)為24,則清零
          {
          hour=0;
          }
          }
          }
          sec_ge=sec%10;//秒的個(gè)位和十位
          sec_shi=sec/10;
          min_ge=min%10;//分的個(gè)位和十位
          min_shi=min/10;
          hour_ge=hour%10;//時(shí)的個(gè)位和十位
          hour_shi=hour/10;

          WS=0x20;//循環(huán)掃描
          LED=tab[sec_ge];
          delay(1);

          WS=0x10;
          LED=tab[sec_shi];
          delay(1);

          WS=0x08;
          LED=tab_dp[min_ge];
          delay(1);

          WS=0x04;
          LED=tab[min_shi];
          delay(1);

          WS=0x02;
          LED=tab_dp[hour_ge];
          delay(1);

          WS=0x01;
          LED=tab[hour_shi];
          delay(1);
          }
          //----------------------------調(diào)時(shí)子程序-------------------------------
          void time_modify()
          {
          if(time_change==0)//如果“調(diào)時(shí)”按鍵按下
          {
          delay(5);//延時(shí)去抖
          if(time_change==0)
          {
          flag=1;//標(biāo)志位置1
          while(flag)//當(dāng)標(biāo)志位為1時(shí)才能進(jìn)行時(shí)間調(diào)整
          {
          TR0=0;//定時(shí)器停止
          display();//顯示停止時(shí)的時(shí)間
          if(time_ok==0)//如果“完成”按鍵按下
          {
          delay(15);//延時(shí)去抖
          if(time_ok==0)
          {
          flag=0;//標(biāo)志位清零
          }
          }
          if(time_choose==0)//如果“時(shí)分秒選擇”按鍵按下
          {
          delay(30);//延時(shí)去抖
          if(time_choose==0)
          {
          ++choose_n;//按下的次數(shù)增加
          if(choose_n==4)//如果次數(shù)達(dá)到4次
          {
          choose_n=1;//次數(shù)清零
          }
          if(choose_n==1)//如果次數(shù)為1,秒指示燈亮
          {
          LIGHT=0x03;
          }
          else if(choose_n==2)//如果次數(shù)為2,分指示燈亮
          {
          LIGHT=0x0c;
          }
          else if(choose_n==3)//如果次數(shù)為3,時(shí)指示燈亮
          {
          LIGHT=0x30;
          }
          }
          }
          if(time_inc==0)//如果“增加”按鍵按下
          {
          delay(30);//延時(shí)去抖
          if(time_inc==0)
          {
          switch(choose_n)//分支結(jié)構(gòu),根據(jù)choose_n的值來(lái)判斷哪一位加1
          {
          case 1://如果choose_n為1,秒加1,到60清零
          {
          sec++;
          if(sec==60)
          sec=0;
          break;
          }
          case 2://如果choose_n為2,分加1,到60清零
          {
          min++;
          if(min==60)
          min=0;
          break;
          }
          case 3://如果choose_n為3,時(shí)加1,到24清零
          {
          hour++;
          if(hour==24)
          hour=0;
          break;
          }
          default:break;
          }
          }
          }
          }
          }
          }
          }



          評(píng)論


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