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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 1602LCD液晶數(shù)字電子鐘 時鐘表 C語言

          1602LCD液晶數(shù)字電子鐘 時鐘表 C語言

          作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          1602LCD液晶數(shù)字電子鐘 基本設(shè)計思路:
          1. 1602LCD顯示:
          第一行: 年, 月, 日 2012-01-22
          第二行: 時, 分, 秒 23:59:00
          2. 獨立按鍵功能:
          Key1 恢復(fù)單片機調(diào)時之前的實際時間, 由于在調(diào)整時間期間,定時器T0暫停, 則啟動定時器T1, 保證單片機的時間正確.(即 取消調(diào)時)
          Key2 進入調(diào)整時間狀態(tài): 停止定時器T0,啟動定時器T1.
          Key3 退出調(diào)整時間狀態(tài): 啟動定時器T0,停止定時器T1.
          Key4 選擇調(diào)整時間: 秒, 分, 時, 日, 月, 年
          Key5 調(diào)時: 遞增 同時啟動蜂鳴器
          Key6 調(diào)時: 遞減 同時啟動蜂鳴器
          花了2天半的時間,終于按照自己的設(shè)計思路來實現(xiàn)了 時鐘表, 在這兩天多的時間, 感覺最難的就是,當(dāng)發(fā)生錯誤的時候,不知道如何進行調(diào)試,差錯,因為有些錯誤無法進行調(diào)試,因此往往都要換一個方向思考問題,所以面對困惑就必須要檢測了, 自己的錯誤,只能自己解決,因為別人對你的錯誤往往都不容易理解。 哎,像我這樣獨自一個奮斗,真是寂寞啊, 遇到困惑,要么放棄,要么堅持,可是卻不知道要堅持多久, 心里總是害怕 這樣 浪費時間。
          目前,還有一個問題沒有解決: 如果調(diào)整時間,不合理,則必須恢復(fù) 原來的時間,并且有錯誤提示。
          比如時間: 2012-2-34 , 若更改為這個日期,那么必須要有錯誤提示,并且要取消 這個時間。
          #include
          #include"MyFuntion.h" //自定義頭文件
          //掃描這些按鍵是否被按下
          void Keycan()
          {
          if(Key1==0) //進入調(diào)整時間狀態(tài)
          {
          Delay();
          if(Key1==0) //停止定時器T0 啟動定時器T1
          {
          ButtonBeep();
          SaveCurrentTime(); //進入調(diào)整時間狀態(tài) 必須保存當(dāng)前時間 若取消調(diào)時 則可以恢復(fù)時間
          TR0=0;//停止定時器T0
          TR1=1;//啟動定時器T1
          tempSecond=0;
          }
          while(!Key1);
          }
          if(Key2==0)
          {
          Delay();
          if(Key2==0) // 取消調(diào)時 恢復(fù)單片機調(diào)時之前的實際時間
          {
          if(TR0==0) //在調(diào)整時間狀態(tài)下 恢復(fù)時間
          {
          ButtonBeep();
          CurrentTime();
          }
          }
          while(!Key2);
          }
          if(Key3==0) //退出調(diào)整時間狀態(tài):
          {
          Delay();
          if(Key3==0)
          {
          ButtonBeep(); //停止定時器T1 啟動定時器T0
          TR0=1;//啟動定時器T0
          TR1=0;//停止定時器T1
          Write_Command(0x0c); //設(shè)置開顯示 不顯示光標(biāo)
          }
          while(!Key3);
          }
          //當(dāng)定時器T0 停止時 才能 進行下面的各個按鍵的操作
          if(TR0==0) //定時器T0 停止
          {
          if(Key4==0) // Key4 控制光標(biāo)往右移動
          {
          Delay();
          if(Key4==0)
          {
          AdjustCursorRight(); //控制光標(biāo)往右移動
          ButtonBeep();
          }
          while(!Key4);
          }
          if(Key5==0) // Key5 控制光標(biāo)往左移動
          {
          Delay();
          if(Key5==0)
          {
          AdjustCursorLeft(); //控制光標(biāo)往左移動
          ButtonBeep();
          }
          while(!Key5);
          }
          if(Key6==0) // 遞增
          {
          Delay();
          if(Key6==0)
          {
          UpDown=1;
          ButtonSetTime();
          ButtonBeep();
          }
          while(!Key6);
          }
          if(Key7==0) // 遞減
          {
          Delay();
          if(Key7==0)
          {
          UpDown=0;
          ButtonSetTime();
          ButtonBeep();
          }
          while(!Key7);
          }
          }
          }
          void main()
          {
          TMOD=0X01;
          EA=1;
          ET0=1;
          ET1=1;
          TR0=1; //啟動定時器T0
          // TR1=0; //停止定時器T1 即暫時不啟動定時器T1
          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
          TH1=(65536-50000)/256;
          TL1=(65536-50000)%256;
          InitLCD(); //初始化LCD
          Init_Table_YMD(table1); // LCD 時間表 年月日
          Init_Table_HMS(table2); // LCD 時間表 時分秒
          DisplayLCD_YMD(table1, 10); //LCD顯示時間 年月日
          DisplayLCD_HMS(table2, 8); //LCD顯示時間 時分秒
          while(1)
          {
          Keycan();
          if(t0==20)
          {
          t0=0;
          IncreaseHMS(); // 時分秒 遞增
          }
          }
          }
          //定時器T0 實現(xiàn)自動 計時
          void LCD_Timer0() interrupt 1 using 0
          {
          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
          t0++;
          }
          //定時器T1 實現(xiàn)自動 計時 從而減少調(diào)整時間產(chǎn)生的誤差
          void LCD_Timer1() interrupt 3 using 1
          {
          TH1=(65536-50000)/256;
          TL1=(65536-50000)%256;
          t1++;
          if(t1==20)
          {
          t1=0;
          tempSecond++;
          }
          }



          評論


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