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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于LCD1602顯示可調(diào)時(shí)鐘的程序

          關(guān)于LCD1602顯示可調(diào)時(shí)鐘的程序

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

          //奉上,希望對(duì)初學(xué)者有幫助//

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

          #include
          #define uchar unsigned char
          #define uint unsigned int
          sbit lcden=P2^7;
          sbit lcdrs=P2^6;
          sbit W=P2^5;
          sbit k1=P3^0;
          sbit k2=P3^1;
          sbit k3=P3^2;
          uchar num,count,k1num;
          char miao,fen,shi;
          uchar code table[]=" 2015-01-5 SAT" ;
          uchar code table1[]=" 00:00:00";

          void delay(uint z)
          {
          uint x,y;
          for(x=z;x>0;x--)
          for(y=110;y>0;y--);
          }

          void write_com(uchar com) // 寫(xiě)命令
          {
          W=0;
          lcdrs=0; //RS選擇寫(xiě)命令還是寫(xiě)數(shù)據(jù),寫(xiě)命令
          P0=com; //將寫(xiě)入的命令送到數(shù)據(jù)總線
          delay(5); //稍作延時(shí)以待數(shù)據(jù)穩(wěn)定
          lcden=1; //使能端給一個(gè)高脈沖,因?yàn)槌跏蓟瘮?shù)已將lcden置為0
          delay(5); //稍作延時(shí)
          lcden=0; //將使能端置0以完成高脈沖
          }

          void write_data(uchar date)
          {
          lcdrs=1;
          P0=date;
          delay(5);
          lcden=1;
          delay(5);
          lcden=0;
          }

          void write_sfm(uchar add,uchar date) //將數(shù)據(jù)寫(xiě)到某個(gè)地址上
          {
          uchar shi,ge;
          shi=date/10;
          ge=date;
          write_com(0x80+0x40+add); //地址指針指在第二行的第add+1個(gè)
          write_data(0x30+shi); //送數(shù)據(jù),將數(shù)據(jù)data的十位數(shù)送過(guò)去
          write_data(0x30+ge); //送數(shù)據(jù),將數(shù)據(jù)data的個(gè)位數(shù)送過(guò)去
          }

          void keyscan()
          {
          if(k1==0)
          {
          delay(5);
          if(k1==0)//去抖
          {
          k1num++; //計(jì)數(shù),計(jì)算k1按了幾次
          while(!k1); //松手檢測(cè)
          if(k1num==1) //當(dāng)按了一次
          {
          TR0=0; //計(jì)時(shí)器停止,時(shí)間停止
          write_com(0x0f); //開(kāi)顯示,顯示光標(biāo),光標(biāo)閃爍
          write_com(0x80+0x49); //數(shù)據(jù)指針指在第二行秒的個(gè)位
          }

          if(k1num==2) //當(dāng)k1按了兩次
          {

          // write_com(0x0f);
          write_com(0x80+0x46); //數(shù)據(jù)指針指在第二行分的個(gè)位

          }
          if(k1num==3) //當(dāng)k1按了三次
          {
          // write_com(0x0f);
          write_com(0x80+0x43); //數(shù)據(jù)指針指在第二行時(shí)的個(gè)位
          }

          if(k1num==4) //如果被按了四次
          {
          TR0=1; //啟動(dòng)計(jì)時(shí)器
          k1num=0; //清零
          write_com(0x0c); //關(guān)閉光標(biāo)
          }
          // if(k1num==5)
          // {
          // write_com(0x80+0x14)
          // }
          }
          }
          if(k1num!=0) //如果k1已經(jīng)按下過(guò)
          {
          if(k2==0) //如果k2按下
          {
          delay(5);
          if(k2==0)
          {
          while(!k2); //松手檢測(cè)
          if(k1num==1) //當(dāng)k1按了一次,調(diào)秒
          {
          miao++; //每按一次k2秒加一
          if(miao==60)
          {
          miao=0;
          }
          write_sfm(8,miao); //數(shù)據(jù)顯示在第二行第9位和第10位
          write_com(0x80+0x40+9); //k1中已設(shè)置光標(biāo),數(shù)據(jù)指針指在0x48

          }
          if(k1num==2) //如果k1被按過(guò)兩次
          {
          fen++;
          if(fen==60)
          fen=0;
          write_sfm(5,fen); //數(shù)據(jù)送到數(shù)據(jù)指針指在第六位++
          write_com(0x80+0x40+6); //數(shù)據(jù)指針指在第七位
          }
          if(k1num==3) //如果k1被按過(guò)3次
          {
          shi++;
          if(shi==24)
          shi=0;
          write_sfm(2,shi); // 數(shù)據(jù)送到第3++
          write_com(0x80+0x40+3); //地址指針指在第四位
          }

          }
          }
          if(k3==0) //k1按過(guò)后,如果k3按下
          {
          delay(5);
          if(k3==0)
          {
          while(!k3);
          if(k1num==1) //如果k1按下一次
          {
          miao--;
          if(miao==-1)
          {
          miao=59;
          }
          write_sfm(8,miao); //數(shù)據(jù)送到第二行第九位++
          write_com(0x80+0x40+9); //指針指在第十位

          }
          if(k1num==2)
          {
          fen--;
          if(fen==-1)
          fen=59;
          write_sfm(5,fen);
          write_com(0x80+0x40+6);
          }
          if(k1num==3)
          {
          shi--;
          if(shi==-1)
          shi=23;
          write_sfm(2,shi);
          write_com(0x80+0x40+3);
          }
          }
          }
          }
          }


          void init() //初始化函數(shù)
          {
          // dula=0;
          // wela=0;
          lcden=0;
          write_com(0x38); //設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
          write_com(0x0c ); //開(kāi)顯示,不顯示光標(biāo)
          write_com(0x06); //當(dāng)寫(xiě)一個(gè)數(shù)據(jù)后地址指針加1,且光標(biāo)加1,當(dāng)顯示一個(gè)數(shù)據(jù)時(shí),整屏顯示不移動(dòng)
          write_com(0x01); //數(shù)據(jù)指針清0,顯示清0
          write_com(0x80); //顯示在屏內(nèi)
          TMOD=0x01;
          TH0=(655536-50000)/256;
          TL0=(655536-50000)%6;
          EA=1;
          ET0=1;
          TR0=1;
          }


          void main()
          {
          init(); //初始化
          for(num=0;num<15;num++)
          {
          write_data(table[num]);
          delay(10);
          }

          write_com(0x80+0x40); //開(kāi)始時(shí)第二行顯s
          for(num=0;num<10;num++)
          {
          write_data(table1[num]);
          delay(5);
          }
          while(1)
          {
          keyscan();

          }
          }

          void timer0() interrupt 1
          {
          TH0=(655536-50000)/256;
          TL0=(655536-50000)%6;
          count++;
          if(count==18) //一秒時(shí)間到
          {
          count=0;
          miao++;
          if(miao==60)
          { miao=0;
          fen++;
          if(fen==60)
          {
          fen=0;
          shi++;
          if(shi==24)
          {
          shi=0;
          }
          write_sfm(2,shi);
          }
          write_sfm(5,fen);
          }
          write_sfm(8,miao);
          }
          }



          評(píng)論


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