Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 5165|回復: 5
打印 上一主題 下一主題

請教,這是哪錯了?

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-2-12 13:16:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我是新手,看不懂

提示:`byte`dose not name a type



// DS1302_LCD (C)2010 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
//
//
// DS1302和LCD1602 引腳對應I/O板pin:
// DS1302:  CE pin    -> Arduino Digital 8
//          I/O pin   -> Arduino Digital 7
//          SCLK pin  -> Arduino Digital 6
// LCD:     DB7       -> Arduino Digital 2
//          DB6       -> Arduino Digital 3
//          DB5       -> Arduino Digital 4
//          DB4       -> Arduino Digital 5
//          E         -> Arduino Digital 9
//          RS        -> Arduino Digital 11
#include <LiquidCrystal.h>
#include <DS1302.h>

DS1302 rtc(8, 7, 6);// Init the DS1302
LiquidCrystal lcd(11, 9, 5, 4, 3, 2);// Init the LCD
int led_pin = 13;    //LED引腳pin13
int ledState = LOW;  
int S2_key = 10;     //S2 引腳pin10
int S1_key = 12;     //S1 引腳pin12
int key_state=0;     //按鍵狀態:0未按
int mode=0;          //時鐘狀態mode :0 查鍵顯示 1:調校
int S2_key_counter=0;//S2按鍵計數,大於7回到查鍵顯示狀態
byte tmp=0 ;
Time setval;         //時間日期設定值,Time類型
void setup()         //設置
{
  pinMode(S2_key,INPUT);//S2 S1對應引腳為輸入
  pinMode(S1_key,INPUT);
  pinMode(led_pin,OUTPUT);//LED引腳13為輸出
  
  lcd.begin(16, 2);       //  LCD 為16字2行

  rtc.halt(false);        //啟動DS1392
  rtc.writeProtect(true); //DS1302防止寫
  rtc.setTCR(TCR_D1R2K);  //DS1302後備電池充電設置
  lcd.setCursor(0, 0);    //狀態顯示
  lcd.print("NOW");
}
void loop()                //主循環
{
  
  if(!mode)                //mode為0是查鍵顯示循環
  {
    delay(100);            //每0.1秒查S2鍵
    if(LOW==digitalRead(S2_key)) //如S2鍵按下
    {
      delay(50);                  //延時50毫秒再查
      if(LOW==digitalRead(S2_key)) //確認S2按下
      {
        mode=1;                   //下次循環進入調校模式
        rtc.writeProtect(false);  //解除1392寫保護
        lcd.setCursor(0,0);       //LCD顯示進入調校狀態
        lcd.print("Set" );
        lcd.setCursor(0,1);
        lcd.print("D  ");                       
      }
    }
    tmp++;                       //循環計數遞增
    if(tmp>=10)                  //S2無鍵循環計數10次:每秒刷新時間日期顯示
    {
      lcd.setCursor(4, 0);       //LCD上行顯示時間字串
      lcd.print(rtc.getTimeStr());
      lcd.setCursor(12, 0);
      lcd.print("    ");
      lcd.setCursor(0, 1);
      lcd.print(rtc.getDOWStr(FORMAT_SHORT));//LCD下行顯示週日簡寫
      lcd.setCursor(4, 1);
      lcd.print(rtc.getDateStr(FORMAT_LONG,FORMAT_MIDDLEENDIAN,'/'));//顯示日期字串,格式
      lcd.noCursor();                                                //取消光標(調校時加入的)
//setval=rtc.getTime();                                       //當前值賦予設置值,注意M8空間小不可用,M168可用
      ledState=!ledState;                                             //LED閃
      digitalWrite(led_pin, ledState);           
      tmp=0;         //計數回0
    }
  }
  else
  {                   //調校狀態
  
switch(key_state)   //按鍵處理
{
case 0:
       if((LOW==digitalRead(S2_key))||(LOW==digitalRead(S1_key)))
         key_state=1;     
break;
case 1:
       if((LOW==digitalRead(S2_key))||(LOW==digitalRead(S1_key)))
  {
         if(LOW==digitalRead(S2_key))  //S2鍵低
   {
   S2_key_counter++;      //按鍵計數遞增
   switch (S2_key_counter)//以下由按鍵次數確定光標位置
   {case 0:
   break;
   case 1:
   lcd.setCursor(1,1);
   lcd.cursor();
   break;
   case 2:
   lcd.setCursor(4,1);
   lcd.cursor();
   break;
   case 3:
   lcd.setCursor(7,1);
   lcd.cursor();
   break;
   case 4:
   lcd.setCursor(12,1);
   lcd.cursor();
   break;
   case 5:
   lcd.setCursor(4,0);
   lcd.cursor();
   break;
   case 6:
   lcd.setCursor(7,0);
   lcd.cursor();
   break;
   case 7:
   lcd.setCursor(10,0);
   lcd.cursor();
   break;
   default:
                     break;
    }
   }
  if(LOW==digitalRead(S1_key))  //S1鍵低
   {
   switch(S2_key_counter) //按照S2鍵計數來確定S1鍵的取值:設置值
   {case 0:
   break;                 //
   case 1:                //週日設定值:1-7
   setval.dow++;
   if(setval.dow>7)
   setval.dow=1;
   lcd.setCursor(1,1);
   lcd.print("  ");
   lcd.setCursor(1,1);    //LCD顯示設置值
   lcd.print(setval.dow,DEC);
   break;
   case 2:                //月份設置
          setval.mon++;
                 if (setval.mon>12)
                   setval.mon=1;
                 lcd.setCursor(4,1);
                 lcd.print("  ");
                 lcd.setCursor(4,1);
                 lcd.print(setval.mon,DEC);
   break;
   case 3:                  //日期設置
         setval.date++;
                 if(setval.date>31)
                   setval.date=1;
                 lcd.setCursor(7,1);
                 lcd.print("  ");
                 lcd.setCursor(7,1);
                 lcd.print(setval.date,DEC);
   break;
   case 4:                   //年份設置
                 setval.year++;
                 if(setval.year>2021)
                   setval.year=2011;
                 lcd.setCursor(10,1);
                 lcd.print(setval.year,DEC);
   break;
   case 5:                    //時
               setval.hour++;
                 if (setval.hour>23)
                   setval.hour=0;
                 lcd.setCursor(4,0);
                 lcd.print("  ");
                 lcd.setCursor(4,0);
                 lcd.print(setval.hour,DEC);
   break;
   case 6:                     //分
                setval.min++;
                 if(setval.min>59)
                   setval.min=0;
                 lcd.setCursor(7,0);
                 lcd.print("  ");
                 lcd.setCursor(7,0);
                 lcd.print(setval.min,DEC);
   break;
   case 7:                      //秒
                    setval.sec++;
                if(setval.sec>59)
                   setval.sec=0;
                 lcd.setCursor(10,0);
                 lcd.print("  ");
                 lcd.setCursor(10,0);
                 lcd.print(setval.sec,DEC);
   break;
   default:
                     break;
    }
                        }
               key_state=2;                     //按鍵狀態轉移
  }
else
  key_state=0;                      //未確認退回
break;
case 2:
       if( (HIGH==digitalRead(S2_key))&&(HIGH==digitalRead(S2_key)))//按鍵釋放
  {
  if(S2_key_counter>7)                                  //S2鍵按7次以上,調校完成
   {
            rtc.setDate(setval.date,setval.mon,setval.year); //各設置值加入1302:日期
            rtc.setTime(setval.hour,setval.min,setval.sec);  //時間
            rtc.setDOW(setval.dow);                          //週日
            mode=0;                                          //清除調校標誌,準備回到查鍵顯示循環
                rtc.writeProtect(true);                          //1302防寫
                     S2_key_counter=0;                                //S2鍵計數回0
     lcd.setCursor(0, 0);                             //取消光標
     lcd.print("NOW");                                
   }
         key_state=0;               //按鍵狀態恢復初始值
  }
break;
}
delay(100);                              //0.1秒調校循環
  }
}
2#
發表於 2012-2-12 19:14:05 | 只看該作者
你有安裝 DS1302 library 嗎?
3#
 樓主| 發表於 2012-2-15 19:43:32 | 只看該作者
DS1302 library是什麼?
是軟件嗎?
4#
發表於 2012-2-15 19:47:02 | 只看該作者
你用的應該是這個 library:

http://www.henningkarlsen.com/electronics/library.php?id=5

把它裝到 arduino00xx/libraries 底下就可以了
5#
 樓主| 發表於 2012-2-16 13:18:38 | 只看該作者
哦,我試試,謝謝
6#
 樓主| 發表於 2012-2-16 13:28:03 | 只看該作者
可以用了,謝謝!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-5-18 03:38 , Processed in 0.192111 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表