• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于8051和Proteus的數(shù)字時(shí)鐘 程序的編寫(xiě)和仿真

    基于8051和Proteus的數(shù)字時(shí)鐘 程序的編寫(xiě)和仿真

    作者: 時(shí)間:2016-10-19 來(lái)源:網(wǎng)絡(luò) 收藏

      本程序功能及特點(diǎn):通過(guò)芯片及數(shù)碼管實(shí)現(xiàn)數(shù)字時(shí)鐘,并可以通過(guò)如下圖中的兩個(gè)按鍵對(duì)時(shí)鐘進(jìn)行調(diào)節(jié),其中 “PAUSE”按鍵的作用是暫停/啟動(dòng)時(shí)鐘并選擇要修改的時(shí)間參數(shù)“時(shí)”,“分”,“秒”,被選擇參數(shù)例如下圖中從左到右依次為“時(shí),分,秒”,當(dāng)小時(shí)被選中并被修改時(shí)會(huì)有最下面兩點(diǎn)的點(diǎn)亮以作為提示,“CHANGE”按鍵用來(lái)對(duì)被選中的參數(shù)進(jìn)行修改,只能進(jìn)行加法修改,超過(guò)參數(shù)的上限會(huì)自動(dòng)歸零,

    本文引用地址:http://www.czjhyjcfj.com/article/201610/311531.htm

      注:本程序僅供本人日后學(xué)習(xí)參考使用,不足之處請(qǐng)見(jiàn)諒,

      

     

      #include

      sbit dualock=P2^0;

      sbit weilock=P2^1;

      unsigned char code duacode[]={0x3f,0x06,0x5b,0x4f,

      0x66,0x6d,0x7d,0x07,

      0x7f,0x6f,0x77,0x7c,

      0x39,0x5e,0x79,0x71};

      unsigned char aa=0,hour=0,mint=0,sec=0,bb=0,*choose;

      void display(unsigned char,unsigned char,unsigned char);

      void delay();

      void init();

      void main()

      {

      init();

      while(1)

      {

      display(hour,mint,sec);

      }

      }

      void init() //初始化

      {

      EA=1; ET0=1;

      EX0=1;IT0=1;

      EX1=1;IT1=1;

      TMOD=0x01;

      TH0=(65535-50000)/256;

      TL0=(65535-50000)%256;

      TR0=1;

      }

      void display(unsigned char hour,unsigned char mint,unsigned char sec) //顯示函數(shù)

      {

      weilock=1;

      P0=~(1<<0);

      weilock=0;

      dualock=1;

      P0=(bb==1)?duacode[sec%10]|0x80:duacode[sec%10];

      dualock=0;

      delay();

      weilock=1;

      P0=~(1<<1);

      weilock=0;

      dualock=1;

      P0=(bb==1)?duacode[sec/10]|0x80:duacode[sec/10];

      dualock=0;

      delay();

      weilock=1;

      P0=~(1<<2);

      weilock=0;

      dualock=1;

      P0=(bb==2)?duacode[mint%10]|0x80:duacode[mint%10];

      dualock=0;

      delay();

      weilock=1;

      P0=~(1<<3);

      weilock=0;

      dualock=1;

      P0=(bb==2)?duacode[mint/10]|0x80:duacode[mint/10];

      dualock=0;

      delay();

      weilock=1;

      P0=~(1<<4);

      weilock=0;

      dualock=1;

      P0=(bb==3)?duacode[hour%10]|0x80:duacode[hour%10];

      dualock=0;

      delay();

      weilock=1;

      P0=~(1<<5);

      weilock=0;

      dualock=1;

      P0=(bb==3)?duacode[hour/10]|0x80:duacode[hour/10];

      dualock=0;

      delay();

      }

      void delay()

      {

      unsigned char i=30;

      while(i--);

      }

      void ext0() interrupt 0 //外部中斷0 選中被修改參數(shù)

      {

      TR0=0; bb++;

      switch(bb)

      {

      case 1: choose=&sec; break;

      case 2: choose=&mint;break;

      case 3: choose=&hour;break;

      case 4: TR0=1;bb=0; break;

      }

      }

      void timer0() interrupt 1

      {

      TH0=(65535-50000)/256;

      TL0=(65535-50000)%256;

      if(++aa==20) {aa=0;sec++;}

      if(sec==60) {sec=0;mint++;}

      if(mint==60) {mint=0;hour++;}

      }

      void ext1() interrupt 2 // 外部中斷2 對(duì)被選中參數(shù)進(jìn)行修改

      {

      *choose+=1;

      if(sec==60) sec=0;

      if(mint==60) mint=0;

      if(hour==24) hour=0;

      }



    關(guān)鍵詞: 8051 Proteus

    評(píng)論


    相關(guān)推薦

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

    關(guān)閉
    主站蜘蛛池模板: 九江市| 太白县| 台湾省| 惠来县| 临朐县| 忻城县| 剑阁县| 霍山县| 奇台县| 抚松县| 南城县| 韶山市| 招远市| 抚顺县| 乌兰察布市| 长乐市| 兴国县| 康马县| 新沂市| 马关县| 双城市| 丁青县| 绥江县| 彭水| 铁力市| 师宗县| 芦溪县| 金门县| 延川县| 平武县| 崇义县| 莲花县| 射阳县| 尼玛县| 连城县| 临澧县| 宁南县| 南京市| 佳木斯市| 前郭尔| 定州市|