新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于8051和Proteus的數字時鐘 程序的編寫和仿真

        基于8051和Proteus的數字時鐘 程序的編寫和仿真

        作者: 時間:2016-10-19 來源:網絡 收藏

          本程序功能及特點:通過芯片及數碼管實現數字時鐘,并可以通過如下圖中的兩個按鍵對時鐘進行調節,其中 “PAUSE”按鍵的作用是暫停/啟動時鐘并選擇要修改的時間參數“時”,“分”,“秒”,被選擇參數例如下圖中從左到右依次為“時,分,秒”,當小時被選中并被修改時會有最下面兩點的點亮以作為提示,“CHANGE”按鍵用來對被選中的參數進行修改,只能進行加法修改,超過參數的上限會自動歸零,

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

          注:本程序僅供本人日后學習參考使用,不足之處請見諒,

          

         

          #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) //顯示函數

          {

          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 選中被修改參數

          {

          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 對被選中參數進行修改

          {

          *choose+=1;

          if(sec==60) sec=0;

          if(mint==60) mint=0;

          if(hour==24) hour=0;

          }



        關鍵詞: 8051 Proteus

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 元朗区| 南郑县| 清水河县| 通州区| 兰溪市| 东丰县| 体育| 巴中市| 胶州市| 霍邱县| 临夏县| 安阳县| 沙田区| 乳山市| 张北县| 徐闻县| 沾益县| 鸡泽县| 南乐县| 上思县| 泸定县| 历史| 丰台区| 乌审旗| 东乌珠穆沁旗| 福贡县| 明星| 华宁县| 雷山县| 永寿县| 岳阳市| 濮阳市| 武义县| 油尖旺区| 浏阳市| 阜阳市| 阿瓦提县| 上饶县| 贡觉县| 邹城市| 潞城市|