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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機普通定時器時鐘參考程序

          51單片機普通定時器時鐘參考程序

          作者: 時間:2016-11-18 來源:網(wǎng)絡 收藏
          /*

          1、按鍵可以調(diào)整當時時間
          2、按鍵可以調(diào)節(jié)定時時間

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

          *8位數(shù)碼管顯示 時間格式格式 12-08-00 標示12點08分00秒

          S1 用于小時 加1操作
          S2 用于小時減1操作
          S3 用于分鐘 加1操作
          S4 用于分鐘減1操作
          */


          #include //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義


          sbit KEY1=P3^0; //定義端口參數(shù)
          sbit KEY2=P3^1;
          sbit KEY3=P3^2;
          sbit KEY4=P3^3;
          code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
          //共陰數(shù)碼管 0-9
          unsigned char StrTab[8]; //定義緩沖區(qū)
          unsigned char minute=30,hour=12,second; //定義并且初始化值 12:30:00
          /******************************************************************/
          /* 延時函數(shù) */
          /******************************************************************/
          void delay(unsigned int cnt)
          {
          while(--cnt);
          }

          /******************************************************************/
          /* 顯示處理函數(shù) */
          /******************************************************************/
          void Displaypro(void)
          {

          StrTab[0]=tab[hour/10]; //顯示小時
          StrTab[1]=tab[hour%10];
          StrTab[2]=0x40; //顯示"-"
          StrTab[3]=tab[minute/10]; //顯示分鐘
          StrTab[4]=tab[minute%10];
          StrTab[5]=0x40; //顯示"-"
          StrTab[6]=tab[second/10]; //顯示秒
          StrTab[7]=tab[second%10];

          }
          /******************************************************************/
          /* 主函數(shù) */
          /******************************************************************/
          main()//主函數(shù)
          {
          TMOD |=0x01;//定時器0 10ms in 12M crystal 用于計時
          TH0=0xc5; //初值
          TL0=0x68;
          ET0=1;
          TR0=1;

          TMOD |=0x10; //定時器1用于動態(tài)掃描
          TH1=0xF8; //初值
          TL1=0xf0;
          ET1=1;
          TR1=1;
          EA =1;

          //Displaypro(); //調(diào)用顯示處理

          while(1)//主循環(huán)
          {

          if(!KEY1) //按鍵1去抖以及動作
          {
          delay(10000);
          if(!KEY1)
          {
          hour++;if(hour==24)hour=0; //正常時間 小時 加1
          Displaypro();
          }
          }

          if(!KEY2) //按鍵2去抖以及動作
          {
          delay(10000);
          if(!KEY2)
          {
          hour--;if(hour==255)hour=23; //正常時間 小時減1

          Displaypro();
          }
          }
          if(!KEY3) //按鍵去抖以及動作
          {
          delay(10000);
          if(!KEY3)
          {
          minute++;if(minute==60)minute=0;//分加1
          Displaypro();
          }
          }
          if(!KEY4) //按鍵去抖以及動作
          {
          delay(10000);
          if(!KEY4)
          {
          minute--;if(minute==255)minute=59; //分減1
          Displaypro();
          }
          }
          }
          }
          /******************************************************************/
          /* 定時器1中斷 */
          /******************************************************************/
          void time1_isr(void) interrupt 3 using 0//定時器1用來動態(tài)掃描
          {
          static unsigned char num;
          TH1=0xF8;//重入初值
          TL1=0xf0;

          switch (num){
          case 0:P2=0;P0=StrTab[num];break; //分別調(diào)用緩沖區(qū)的值進行掃描
          case 1:P2=1;P0=StrTab[num];break;
          case 2:P2=2;P0=StrTab[num];break;
          case 3:P2=3;P0=StrTab[num];break;
          case 4:P2=4;P0=StrTab[num];break;
          case 5:P2=5;P0=StrTab[num];break;
          case 6:P2=6;P0=StrTab[num];break;
          case 7:P2=7;P0=StrTab[num];break;
          default:break;
          }
          num++; //掃描8次,使用8個數(shù)碼管
          if(num==8)
          num=0;
          }
          /******************************************************************/
          /* 定時器0中斷 */
          /******************************************************************/
          void tim(void) interrupt 1 using 1
          {
          static unsigned char count;//定義內(nèi)部靜態(tài)變量

          TH0=0xc5; //重新賦值
          TL0=0x68;
          count++;
          switch (count)
          {
          case 0:
          case 20:
          case 40:
          case 60:
          case 80:Displaypro(); //隔一定時間調(diào)用顯示處理
          break;
          case 50:P1=~P1; //半秒 LED閃爍
          break;
          default:break;
          }

          if (count==100)
          {
          count=0;
          second++; //秒加1
          if(second==60)
          {
          second=0;
          minute++; //分加1
          if(minute==60)
          {
          minute=0;
          hour++; //時加1
          if(hour==24)
          hour=0;
          }

          }

          }

          }



          評論


          技術(shù)專區(qū)

          關閉
          看屁屁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); })();