main.c

来自「NXP LPC系列AMR7的开发程序源码(LCD」· C语言 代码 · 共 572 行 · 第 1/2 页

C
572
字号
        {
          HD44780SetBackLight(FALSE);
        }
        else
        {
          HD44780SetBackLight(TRUE);
        }
      }
      // Setting Time out
      if(CorrectToDly)
      {
        if(--CorrectToDly == 0)
        {
          ClockState = CLOCK_IDLE;
        }
      }
    }
    switch (ClockState)
    {
    case CLOCK_IDLE:  // Idle state
      if(ClockUpdate)
      {
        ClockUpdate = FALSE;
        CursorOn  = FALSE;
        // Get current time and date
        RtcGetTimeDate(&Rtc_DateTime);
        // Time and Data update
        LcdUpdate = TRUE;
      }
      if(KeySetPress)
      {
        // Enter in watch set mode
        KeySetPress = FALSE;
        // Set state (HOUR setting)
        ClockState  = SET_HOUR;
        // Update LDC text
        LcdUpdate   = TRUE;
        // Cursor on
        CursorOn    = TRUE;
        // Position of cursor
        CursorX     = CURSOR_X_HOUR;
        CursorY     = CURSOR_Y_HOUR;
        // Back light on
        LightOnDly  = LIGHT_DLY;
        // Set time out of setting mode
        CorrectToDly= CORRECT_TO_DLY;
      }
      else if(KeyUpPress || KeyDownPress)
      {
        // Clear key flags
        KeyUpPress = KeyDownPress = FALSE;
        // Backlight on
        LightOnDly = LIGHT_DLY;
      }
      break;
    case SET_HOUR:  // Set Hour
      if(KeySetPress)
      {
        KeyUpPress = KeyDownPress = KeySetPress = FALSE;
        ++ClockState;
        CursorX     = CURSOR_X_MINUTE;
        CursorY     = CURSOR_Y_MINUTE;
        LcdUpdate   = TRUE;
        CorrectToDly= CORRECT_TO_DLY;
        LightOnDly  = LIGHT_DLY;
      }
      else if(KeyUpPress)
      {
        KeyUpPress = KeyDownPress = FALSE;
        if(++Rtc_DateTime.hour > RTC_HOURMAX)
        {
          Rtc_DateTime.hour = RTC_HOURMIN;
        }
        LcdUpdate    = TRUE;
        CorrectToDly = CORRECT_TO_DLY;
        LightOnDly   = LIGHT_DLY;
      }
      else if (KeyDownPress)
      {
        if(--Rtc_DateTime.hour > RTC_HOURMAX)
        {
          Rtc_DateTime.hour = RTC_HOURMAX;
        }
        KeyDownPress = FALSE;
        LcdUpdate    = TRUE;
        CorrectToDly = CORRECT_TO_DLY;
        LightOnDly   = LIGHT_DLY;
      }
      break;
    case SET_MINUTE:  // Set Minute
      if(KeySetPress)
      {
        KeyUpPress = KeyDownPress = KeySetPress = FALSE;
        ++ClockState;
        CursorX     = CURSOR_X_YEAR;
        CursorY     = CURSOR_Y_YEAR;
        LcdUpdate   = TRUE;
        CorrectToDly= CORRECT_TO_DLY;
        LightOnDly  = LIGHT_DLY;
      }
      else if(KeyUpPress)
      {
        KeyUpPress = KeyDownPress = FALSE;
        if(++Rtc_DateTime.minute > RTC_MINUTEMAX)
        {
          Rtc_DateTime.minute = RTC_MINUTEMIN;
        }
        LcdUpdate    = TRUE;
        CorrectToDly = CORRECT_TO_DLY;
        LightOnDly   = LIGHT_DLY;
      }
      else if (KeyDownPress)
      {
        if(--Rtc_DateTime.minute > RTC_MINUTEMAX)
        {
          Rtc_DateTime.minute = RTC_MINUTEMAX;
        }
        KeyDownPress = FALSE;
        LcdUpdate    = TRUE;
        CorrectToDly = CORRECT_TO_DLY;
        LightOnDly   = LIGHT_DLY;
      }
      break;
    case SET_YEAR:  // Set Year
      if(KeySetPress)
      {
        KeyUpPress = KeyDownPress = KeySetPress = FALSE;
        ++ClockState;
        CursorX     = CURSOR_X_MONTH;
        CursorY     = CURSOR_Y_MONTH;
        LcdUpdate   = TRUE;
        CorrectToDly= CORRECT_TO_DLY;
        LightOnDly  = LIGHT_DLY;
      }
      else if(KeyUpPress)
      {
        KeyUpPress = KeyDownPress = FALSE;
        if(++Rtc_DateTime.year > RTC_YEARMAX)
        {
          Rtc_DateTime.year = RTC_YEARMIN;
        }
        LcdUpdate   = TRUE;
        CorrectToDly= CORRECT_TO_DLY;
        LightOnDly  = LIGHT_DLY;
      }
      else if (KeyDownPress)
      {
        KeyDownPress = FALSE;
        if(--Rtc_DateTime.year > RTC_YEARMAX)
        {
          Rtc_DateTime.year = RTC_YEARMAX;
        }
        LcdUpdate    = TRUE;
        CorrectToDly = CORRECT_TO_DLY;
        LightOnDly   = LIGHT_DLY;
      }
      break;
    case SET_MONTH: // Set Month
      if(KeySetPress)
      {
        KeyUpPress = KeyDownPress = KeySetPress = FALSE;
        ++ClockState;
        CursorX     = CURSOR_X_DAY;
        CursorY     = CURSOR_Y_DAY;
        LcdUpdate   = TRUE;
        CorrectToDly= CORRECT_TO_DLY;
        LightOnDly  = LIGHT_DLY;
      }
      else if(KeyUpPress)
      {
        KeyUpPress = KeyDownPress = FALSE;
        if(++Rtc_DateTime.month > RTC_MONTHMAX)
        {
          Rtc_DateTime.month = RTC_MONTHMIN;
        }
        LcdUpdate   = TRUE;
        CorrectToDly= CORRECT_TO_DLY;
        LightOnDly  = LIGHT_DLY;
      }
      else if (KeyDownPress)
      {
        KeyDownPress = FALSE;
        if(--Rtc_DateTime.month < RTC_MONTHMIN)
        {
          Rtc_DateTime.month = RTC_MONTHMIN;
        }
        LcdUpdate    = TRUE;
        CorrectToDly = CORRECT_TO_DLY;
        LightOnDly   = LIGHT_DLY;
      }
      break;
    case SET_DAY: // Set Day of month
      if((Rtc_DateTime.month == 2) && IsLeapYear(Rtc_DateTime.year))
      {
        DayOfMonthMax = 29;
      }
      else
      {
        DayOfMonthMax = RTC_MonthVal[Rtc_DateTime.month];
      }
      if(KeySetPress)
      {
        KeyUpPress  = KeyDownPress = KeySetPress = FALSE;
        RtcSetTimeDate(&Rtc_DateTime);
        ClockState  = CLOCK_IDLE;
        CursorOn    = TRUE;
        CorrectToDly= CORRECT_TO_DLY;
        LightOnDly  = LIGHT_DLY;
      }
      else if(KeyUpPress)
      {
        KeyUpPress = KeyDownPress = FALSE;
        if(++Rtc_DateTime.day > DayOfMonthMax)
        {
          Rtc_DateTime.day = 1;
        }
        Rtc_DateTime.DOW = GetDOW(Rtc_DateTime.year,Rtc_DateTime.month ,Rtc_DateTime.day);
        LcdUpdate   = TRUE;
        CorrectToDly= CORRECT_TO_DLY;
        LightOnDly  = LIGHT_DLY;
      }
      else if (KeyDownPress)
      {
        KeyDownPress = FALSE;
        if(--Rtc_DateTime.day < 1)
        {
          Rtc_DateTime.day = DayOfMonthMax;
        }
        Rtc_DateTime.DOW = GetDOW(Rtc_DateTime.year,Rtc_DateTime.month ,Rtc_DateTime.day);
        LcdUpdate    = TRUE;
        CorrectToDly = CORRECT_TO_DLY;
        LightOnDly   = LIGHT_DLY;
      }
      break;
    default:
      ClockState = CLOCK_IDLE;
    } // switch (ClockState)
    // Show Time and date
    if(LcdUpdate)
    {
      LcdUpdate = FALSE;
      // Cursor off
      HD44780_CursorPosSet(FALSE,FALSE,1,1);
      // Prepare fist line of text
      sprintf((char*)Line1,"    %2d:%.2d:%.2d    ",
              Rtc_DateTime.hour,Rtc_DateTime.minute,Rtc_DateTime.second);
      // Prepare second line of text
      sprintf((char*)Line2,"%s %4d %s %2d ",
              RTC_DOWTbl[Rtc_DateTime.DOW],Rtc_DateTime.year,
              RTC_MonthTbl[Rtc_DateTime.month],Rtc_DateTime.day);
      // Show text
      HD44780_StrShow(1,1,Line1);
      HD44780_StrShow(1,2,Line2);
      if(CursorOn)
      {
        // Display cursor
        HD44780_CursorPosSet(TRUE,TRUE,CursorX,CursorY);
      } // if(CursorOn)
    } // if(LcdUpdate)
  } // while(1)
} // main(void)


/* These handlers trap instruction fiq, prefetch abort, undefined instruction abort
   and data fetch abort exceptions
*/
__fiq __arm void fiq_handler(void)
{
  while(1){}
}

__arm void undef_handler(void)
{
  while(1);
}

__arm void prefetch_handler(void)
{
  while(1);
}

__arm void data_handler(void)
{
  while(1);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?