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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 8位數(shù)碼管顯示電子時鐘c51單片機程序

          8位數(shù)碼管顯示電子時鐘c51單片機程序

          作者: 時間:2012-09-10 來源:網(wǎng)絡(luò) 收藏

          /*
          8位 時間格式 05—50—00 標示05點50分00秒
          S1 用于小時加1操作
          S2 用于小時減1操作
          S3 用于分鐘加1操作
          S4 用于分鐘減1操作
          */

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

          #includereg52.h>
          sbit KEY1=P3^0; //定義端口參數(shù)
          sbit KEY2=P3^1;
          sbit KEY3=P3^2;
          sbit KEY4=P3^3;
          sbit LED=P1^2; //定義指示燈參數(shù)


          code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰極管0—9
          unsigned char StrTab[8]; //定義緩沖區(qū)
          unsigned char minute=19,hour=23,second; //定義并初始化為 12:30:00


          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];
          }

          main()
          {
          TMOD |=0x01; //定時器0 10ms inM crystal 用于計時
          TH0=0xd8; //初值
          TL0=0xf0;
          ET0=1;
          TR0=1;

          TMOD |=0x10; //定時器1用于動態(tài)掃描
          TH1=0xF8; //初值
          TL1=0xf0;
          ET1=1;
          TR1=1;
          EA =1;
          Displaypro(); //調(diào)用顯示處理函數(shù)

          while(1)
          {
          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個
          if(num==8)
          num=0;
          }


          /******************************************************************/
          /* 定時器0中斷 */
          /******************************************************************/
          void tim(void) interrupt 1 using 1
          {
          static unsigned char count; //定義內(nèi)部局部變量

          TH0=0xd8; //重新賦值
          TL0=0xf0;
          count++;
          switch (count)
          {
          case 0:
          case 20:
          case 40:
          case 60:
          case 80:Displaypro();break; //隔一定時間調(diào)用顯示處理
          case 50:P1=~P1;break; //半秒 LED 閃爍
          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;
          }
          }
          }
          }

          51單片機相關(guān)文章:51單片機教程


          單片機相關(guān)文章:單片機教程


          單片機相關(guān)文章:單片機視頻教程


          單片機相關(guān)文章:單片機工作原理


          燃氣報警器相關(guān)文章:燃氣報警器原理


          評論


          相關(guān)推薦

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