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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī) 定時器 流水燈 數(shù)碼管計(jì)時

          51單片機(jī) 定時器 流水燈 數(shù)碼管計(jì)時

          作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          這個就是前面的歷程的一個綜合定時器T0控制流水燈,T1控制時間,通過數(shù)碼管顯示出來。

          代碼如下:

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

          //Led流水燈,五位數(shù)碼管100000秒計(jì)時
          #include //頭文件
          #include //循環(huán)左旋函數(shù)所在頭文件
          #define uint unsigned int //宏定義無符號整形
          #define uchar unsigned char //宏定義無符號字符型
          sbit weixuan=P2^7; //聲明P2.7為位選端口
          sbit duanxuan=P2^6; //聲明P2.6為段選端口
          uint number1,number2,aa,number; //number1:T0計(jì)滿次數(shù);number2:T1計(jì)滿次數(shù);number:顯示的秒數(shù);aa:P0端口顯示賦值
          uint no1,no2,no3,no4,no5; //分別代表五個數(shù)碼管顯示的數(shù)字(字符斷碼數(shù)字序號)
          void delay(uint); //聲明延時函數(shù)
          void display(uint,uint,uint,uint,uint); //聲明數(shù)碼管顯示函數(shù)
          uchar code table[]={ //字符斷碼
          0x3f,0x06,0x5b,0x4f,
          0x66,0x6d,0x7d,0x07,
          0x7f,0x6f,0x77,0x7c,
          0x39,0x5e,0x79,0x71}; //C語言編碼定義

          void main() //主函數(shù)入口
          {
          aa=0xfe; //aa初始化,點(diǎn)亮第一的LED
          //定時器初始化
          TMOD=0x11; //TMOD賦值,確定T0/T1工作方式
          TH0=(65536-46080)/256;//TH0/TL0;TH1/TL1計(jì)算初值
          TL0=(65536-46080)%6;
          TH1=(65536-46080)/256;
          TL1=(65536-46080)%6;
          EA=1; //總中斷打開
          ET0=1; //開T0/T1中斷
          ET1=1;
          TR0=1; //TR0/TR1置位,啟動定時器
          TR1=1;
          while(1) //不可少的大循環(huán)
          {
          display(no1,no2,no3,no4,no5); //數(shù)碼管顯示
          }
          }
          //延時函數(shù)主體
          void delay(uint s)
          {
          uint i,j;
          for(i=s;i>0;i--)
          {
          for(j=110;j>0;j--)
          {
          }
          }
          }
          //顯示數(shù)碼管顯示函數(shù)主體
          void display(uint no1,uint no2,uint no3,uint no4,uint no5) //數(shù)碼管顯示函數(shù)主體
          {
          //數(shù)碼管1顯示 ①送斷碼;②選擇要顯示數(shù)碼管
          duanxuan=1; //打開段選鎖存器
          P0=table[no5]; //送斷碼
          duanxuan=0; //關(guān)閉(鎖住)鎖存器
          P0=0xff; //必不可少的清屏
          weixuan=1; //打開位選鎖存器
          P0=0xfe; //選擇數(shù)碼管
          weixuan=0; //關(guān)閉鎖存器
          delay(2); //延時
          //數(shù)碼管2顯示
          duanxuan=1;
          P0=table[no4];
          duanxuan=0;
          P0=0xff;
          weixuan=1;
          P0=0xfd;
          weixuan=0;
          delay(2);
          //數(shù)碼管3顯示
          duanxuan=1;
          P0=table[no3];
          duanxuan=0;
          P0=0xff;
          weixuan=1;
          P0=0xfb;
          weixuan=0;
          delay(2);
          //數(shù)碼管4顯示
          duanxuan=1;
          P0=table[no2];
          duanxuan=0;
          P0=0xff;
          weixuan=1;
          P0=0xf7;
          weixuan=0;
          delay(2);
          //數(shù)碼管5顯示
          duanxuan=1;
          P0=table[no1];
          duanxuan=0;
          P0=0xff;
          weixuan=1;
          P0=0xef;
          weixuan=0;
          delay(2);
          }
          //定時器T0方式一中斷服務(wù)程序
          void T0_time_no1() interrupt 1
          {
          TH0=(65536-46080)/256; //預(yù)裝初始值
          TL0=(65536-46080)%6;
          number1++; //number1判斷計(jì)滿次數(shù),4次為200ms
          if(number1==4)
          {
          number1=0;
          aa=_crol_(aa,1); //循環(huán)左旋函數(shù),把a(bǔ)a左旋之后賦值給aa
          P1=aa; //P1顯示流水燈
          }
          }
          //定時器T1方式一中斷服務(wù)程序
          void T1_time_no1() interrupt 3
          {
          TH1=(65536-46080)/256; //預(yù)裝初始值
          TL1=(65536-46080)%6;
          number2++; //用于判斷T1計(jì)滿次數(shù)
          if(number2==4) //number2=20,就是1s時間
          {
          number2=0;
          number++; //用于裝總數(shù)字
          no5=number/10000; //把一個5位數(shù)分離出來給五個數(shù)碼管顯示
          no4=number000/1000;
          no3=number00/100;
          no2=number0/10;
          no1=number;
          if(number==1000000) //達(dá)到最大值100000,重新開始計(jì)時
          {
          number=0;
          }
          }
          }

          以上,結(jié)束。



          評論


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