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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 用定時器中斷設計時鐘,用1602液晶顯示

          用定時器中斷設計時鐘,用1602液晶顯示

          作者: 時間:2016-11-28 來源:網絡 收藏
          時鐘有些功能還未完全實現,僅實現一部分功能,年月日星期功能還未實現 還可以加上整點報時和斷電記憶的功能

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

          #include

          #defineucharunsignedchar

          sbit rd=P2^6;

          sbit wr=P2^5;

          sbit lcde=P2^7;

          sbit k1=P1^0;

          sbit k2=P1^1;

          sbit k4=P1^3;

          sbit k8=P1^7;

          uchar code table1[]=" 2011-10-01SAT";

          uchar code table2[]="00:00:00";

          uchar t,s1num;

          charshi,fen,miao;

          voiddelay(uchar z)//延遲zms函數

          {

          uchar x,y;

          for(x=z;x>0;x--)

          for(y=110;y>0;y--);

          }

          voidwrite_com(uchar com)//液晶寫指令操作

          {

          rd=0;

          wr=0;

          delay(5);

          lcde=1;

          P0=com;

          lcde=0;

          }

          voidwrite_date(uchar date)//液晶寫數據操作

          {

          rd=1;

          wr=0;

          delay(5);

          lcde=1;

          P0=date;

          lcde=0;

          }

          voidwrite_sfm(uchar add,uchar date)//更新時分秒

          {

          uchar shi,ge;

          shi=date/10;

          ge=date;

          write_com(0x80+0x40+add);

          write_date(0x30+shi);

          write_date(0x30+ge);

          }

          voidinit()//初始化函數

          {

          uchar i;

          write_com(0x38);

          write_com(0x0c);

          write_com(0x06);

          write_com(0x01);

          write_com(0x80+0x00);

          for(i=0;i<15;i++)

          write_date(table1[i]);

          write_com(0x80+0x46);

          for(i=0;i<8;i++)

          write_date(table2[i]);

          TMOD=0x01;//定時器工作方式

          TH0=(65536-50000)/256;//設定定時器初值

          TL0=(65536-50000)%6;//12M晶振時ms數為

          EA=1;

          ET0=1;

          TR0=1;

          }

          voidkeyscan()//鍵盤掃描函數

          {

          if(k1==0)//按下k1鍵確定調時分秒

          {

          delay(5);

          if(k1==0)

          {

          s1num++;

          while(!k1)

          ;

          delay(5);

          while(!k1);

          if(s1num==1)

          {

          TR0=0;//暫停計時器

          write_com(0x80+0x4d);//光標在秒的位置閃爍

          write_com(0x0f);

          }

          if(s1num==2)//光標在分的位置

          {

          TR0=0;

          write_com(0x80+0x4a);

          write_com(0x0f);

          }

          if(s1num==3)

          {

          TR0=0;

          write_com(0x80+0x47);

          write_com(0x0f);

          }

          if(s1num==4)//按下第四下時接著走時

          {

          s1num=0;

          write_com(0x0c);

          TR0=1;

          }

          }

          }

          if(s1num!=0)

          {

          if(s1num==1)

          {

          if(k2==0)//按k2鍵秒加

          {

          delay(5);

          if(k2==0)

          {

          while(!k2);

          delay(5);

          while(!k2);

          miao++;

          if(miao==60)

          miao=0;

          write_sfm(0x0c,miao);

          write_com(0x80+0x4d);

          }

          }

          }

          if(s1num==2)

          {

          if(k2==0)//分加

          {

          delay(5);

          if(k2==0)

          {

          while(!k2);

          delay(5);

          while(!k2);

          fen++;

          if(fen==60)

          fen=0;

          write_sfm(0x09,fen);

          write_com(0x80+0x4a);

          }

          }

          }

          if(s1num==3)

          {

          if(k2==0)//時加

          {

          delay(5);

          if(k2==0)

          {

          while(!k2);

          delay(5);

          while(!k2);

          shi++;

          if(shi==24)

          shi=0;

          write_sfm(0x06,shi);

          write_com(0x80+0x47);

          }

          }

          }

          if(k4==0)//判斷k3是否被按下

          {

          delay(5);

          if(k4==0)

          {

          while(!k4);

          delay(5);

          while(!k4);

          if(s1num==1)

          {

          miao--;//秒減

          if(miao==-1)

          miao=59;

          write_sfm(0x0c,miao);

          write_com(0x80+0x4d);

          }

          if(s1num==2)

          {

          fen--;//分減

          if(fen==-1)

          fen=59;

          write_sfm(0x09,fen);

          write_com(0x80+0x4a);

          }

          if(s1num==3)

          {

          shi--;//時減

          if(shi==-1)

          shi=23;

          write_sfm(0x06,shi);

          write_com(0x80+0x47);

          }

          }

          }

          }

          if(k8==0)//按下k8退出調時

          {

          delay(5);

          if(k8==0)

          {

          while(!k8);

          delay(5);

          while(!k8);

          s1num=0;

          write_com(0x0c);

          TR0=1;

          }

          }

          }

          voidmain()

          {

          init();

          while(1)

          {

          keyscan();

          }

          }

          voidtimer0() interrupt 1//中斷服務程序

          {

          TH0=(65536-50000)/256;

          TL0=(65536-50000)%6;//重新設定定時器初值

          t++;

          if(t==20)//定時器中斷次為秒

          {

          t=0;

          miao++;

          if(miao==60)

          {

          miao=0;

          fen++;

          if(fen==60)

          {

          fen=0;

          shi++;

          if(shi==24)

          {

          shi=0;

          }

          write_sfm(0x06,shi);//顯示時

          }

          write_sfm(0x09,fen);//顯示分

          }

          write_sfm(0x0c,miao);//顯示秒

          }

          }



          評論


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