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 + -
显示快捷键?