📄 calendar.c
字号:
testvalue = 0x01;
}
else if (pressedkey != NOKEY)
{
/* Clear the LCD */
LCD_ClearLine(Line8);
/* Display the menu */
DisplayMenu();
/* Enable the JoyStick interrupts */
IntExtOnOffConfig(ENABLE);
return;
}
}
/* Display time separators ":" on Line8 */
LCD_DisplayChar(Line8, 212, ':');
LCD_DisplayChar(Line8, 166, ':');
/* Wait a press on any JoyStick pushbuttons */
while(ReadKey() == NOKEY)
{
/* Display current time */
Time_Display(RTC_GetCounter());
}
}
else
{
while(ReadKey() != NOKEY)
{
}
/* Display time separators ":" on Line8 */
LCD_DisplayChar(Line8, 212, ':');
LCD_DisplayChar(Line8, 166, ':');
/* Wait a press on any JoyStick pushbuttons */
while(ReadKey() == NOKEY)
{
/* Display current time */
Time_Display(RTC_GetCounter());
}
}
/* Clear the LCD */
LCD_ClearLine(Line8);
/* Display the menu */
DisplayMenu();
/* Enable the JoyStick interrupts */
IntExtOnOffConfig(ENABLE);
}
/*******************************************************************************
* Function Name : Date_Regulate
* Description : Sets the date entered by user, using menu navigation keys.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void Date_Regulate(void)
{
LCD_DisplayStringLine(Line9, " UP/DOWN: Set Year ");
/* Regulate year */
RegulateYear();
LCD_DisplayStringLine(Line9, " UP/DOWN: Set Month ");
/* Regulate the month */
RegulateMonth();
LCD_DisplayStringLine(Line9, "Set Day- SEL To exit");
/* Regulate day */
RegulateDay();
}
/*******************************************************************************
* Function Name : Date_PreAdjust
* Description : Pre-Adjusts the current date (MM/DD/YYYY).
* Input : None
* Output : None
* Return : None
*******************************************************************************/
static void Date_PreAdjust(void)
{
u32 tmp = 0, pressedkey = 0;
/* Clear the LCD */
LCD_Clear(White);
LCD_SetBackColor(Blue);
LCD_SetTextColor(White);
if(BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)
{
LCD_DisplayStringLine(Line7, "Time and Date Config");
LCD_DisplayStringLine(Line8, "Select: Press SEL ");
LCD_DisplayStringLine(Line9, "Abort: Press Any Key");
while(1)
{
pressedkey = ReadKey();
if(pressedkey == SEL)
{
/* Adjust Time */
Time_PreAdjust();
/* Clear the LCD */
LCD_Clear(White);
return;
}
else if (pressedkey != NOKEY)
{
return;
}
}
}
else
{
/* Display the current date */
Date_Display(date_s.year, date_s.month, date_s.day);
/* Change the current date */
Date_Regulate();
BKP_WriteBackupRegister(BKP_DR2, date_s.year);
tmp = date_s.month << 8;
tmp |= date_s.day;
BKP_WriteBackupRegister(BKP_DR3, tmp);
BKP_WriteBackupRegister(BKP_DR4, daycolumn);
BKP_WriteBackupRegister(BKP_DR5, dayline);
}
}
/*******************************************************************************
* Function Name : Date_Adjust
* Description : Adjusts the current date (MM/DD/YYYY).
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void Date_Adjust(void)
{
/* Disable the JoyStick interrupts */
IntExtOnOffConfig(DISABLE);
/* Preadjust the date */
Date_PreAdjust();
/* Clear the LCD */
LCD_Clear(White);
/* Display the menu */
DisplayMenu();
/* Enable the JoyStick interrupts */
IntExtOnOffConfig(ENABLE);
}
/*******************************************************************************
* Function Name : Date_Display
* Description : Displays the date in a graphic mode.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void Date_Display(u16 nYear, u8 nMonth, u8 nDay)
{
u32 mline = 0, mcolumn = 319, month = 0;
u32 monthlength = 0;
if(nMonth == 2)
{
if(IsLeapYear(nYear))
{
monthlength = 30;
}
else
{
monthlength = MonLen[nMonth - 1];
}
}
else
{
monthlength = MonLen[nMonth - 1];
}
/* Set the Back Color */
LCD_SetBackColor(Blue2);
/* Set the Text Color */
LCD_SetTextColor(Yellow);
LCD_DisplayStringLine(Line0, MonthNames[nMonth - 1]);
LCD_DisplayChar(Line0, 95, ((nYear/1000)+ 0x30));
LCD_DisplayChar(Line0, 79, (((nYear%1000)/100)+ 0x30));
LCD_DisplayChar(Line0, 63, ((((nYear%1000)%100)/10)+ 0x30));
LCD_DisplayChar(Line0, 47, ((((nYear%1000)%100)%10)+ 0x30));
WeekDayNum(nYear, nMonth, nDay);
LCD_SetTextColor(White);
LCD_DisplayStringLine(Line1, " WEEK DAY N: ");
if(wn/10)
{
LCD_DisplayChar(Line1, 223, ((wn/10)+ 0x30));
LCD_DisplayChar(Line1, 207, ((wn%10)+ 0x30));
}
else
{
LCD_DisplayChar(Line1, 223, ((wn%10)+ 0x30));
}
if(dc/100)
{
LCD_DisplayChar(Line1, 47, ((dc/100)+ 0x30));
LCD_DisplayChar(Line1, 31, (((dc%100)/10)+ 0x30));
LCD_DisplayChar(Line1, 15, (((dc%100)%10)+ 0x30));
}
else if(dc/10)
{
LCD_DisplayChar(Line1, 47, ((dc/10)+ 0x30));
LCD_DisplayChar(Line1, 31, ((dc%10)+ 0x30));
}
else
{
LCD_DisplayChar(Line1, 47, ((dc%10)+ 0x30));
}
/* Set the Back Color */
LCD_SetBackColor(Red);
LCD_SetTextColor(White);
LCD_DisplayStringLine(Line2, "Mo Tu We Th Fr Sa Su");
LCD_SetBackColor(White);
LCD_SetTextColor(Blue2);
/* Determines the week number, day of the week of the selected date */
WeekDayNum(nYear, nMonth, 1);
mline = Line3;
mcolumn = 0x13F - (0x30 * dn);
for(month = 1; month < monthlength; month++)
{
if(month == nDay)
{
daycolumn = mcolumn;
dayline = mline;
}
if(month/10)
{
LCD_DisplayChar(mline, mcolumn, ((month/10)+ 0x30));
}
else
{
LCD_DisplayChar(mline, mcolumn, ' ');
}
mcolumn -= 16;
LCD_DisplayChar(mline, mcolumn, ((month%10)+ 0x30));
if(mcolumn < 31)
{
mcolumn = 319;
mline += 24;
}
else
{
mcolumn -= 16;
LCD_DisplayChar(mline, mcolumn, ' ');
mcolumn -= 16;
}
}
LCD_SetTextColor(Red);
LCD_DrawRect(dayline, daycolumn, 24, 32);
}
/*******************************************************************************
* Function Name : Date_Show
* Description : Shows date in a graphic mode on LCD.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void Date_Show(void)
{
u32 tmpValue = 0;
u32 MyKey = 0, ValueMax = 0;
u32 firstdaycolumn = 0, lastdaycolumn = 0, lastdayline = 0;
u32 testvalue = 0, pressedkey = 0;
/* Disable the JoyStick interrupts */
IntExtOnOffConfig(DISABLE);
LCD_Clear(White);
while(ReadKey()!= NOKEY)
{
}
LCD_SetBackColor(Blue);
LCD_SetTextColor(White);
if(BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)
{
LCD_DisplayStringLine(Line7, "Time and Date Config");
LCD_DisplayStringLine(Line8, "Select: Press SEL ");
LCD_DisplayStringLine(Line9, "Abort: Press Any Key");
while(testvalue == 0)
{
pressedkey = ReadKey();
if(pressedkey == SEL)
{
/* Adjust Time */
Time_PreAdjust();
/* Clear the LCD */
LCD_Clear(White);
testvalue = 0x01;
}
else if (pressedkey != NOKEY)
{
/* Clear the LCD */
LCD_Clear(White);
/* Display the menu */
DisplayMenu();
/* Enable the JoyStick interrupts */
IntExtOnOffConfig(ENABLE);
return;
}
}
}
/* Clear the LCD */
LCD_Clear(White);
LCD_DisplayStringLine(Line9, " To Exit Press SEL ");
/* Display the current date */
Date_Display(date_s.year, date_s.month, date_s.day);
if(date_s.month == 2)
{
if(IsLeapYear(date_s.year))
{
ValueMax = 29;
}
else
{
ValueMax = (MonLen[date_s.month - 1] - 1);
}
}
else
{
ValueMax = (MonLen[date_s.month - 1] - 1);
}
firstdaycolumn = 0x13F - (0x30 * dn);
lastdaycolumn = ValueMax - (7 - dn);
lastdayline = lastdaycolumn / 7;
lastdaycolumn %= 7;
if(lastdaycolumn == 0)
{
lastdayline = Line3 + (lastdayline * 24);
lastdaycolumn = 31;
}
else
{
lastdayline = Line4 + (lastdayline * 24);
lastdaycolumn = 0x13F -(0x30 * (lastdaycolumn - 1));
}
/* Initialize tmpValue */
tmpValue = date_s.day;
/* Endless loop */
while(1)
{
/* Check which key is pressed */
MyKey = ReadKey();
/* If "RIGHT" pushbutton is pressed */
if(MyKey == RIGHT)
{
LCD_SetTextColor(White);
LCD_DrawRect(dayline, daycolumn, 24, 32);
/* Increase the value of the digit */
if(tmpValue == ValueMax)
{
tmpValue = 0;
dayline = Line3;
daycolumn = firstdaycolumn + 48;
}
if(daycolumn == 31)
{
daycolumn = 367;
dayline += 24;
}
daycolumn -= 48;
LCD_SetTextColor(Red);
LCD_DrawRect(dayline, daycolumn, 24, 32);
tmpValue++;
WeekDayNum(date_s.year, date_s.month, tmpValue);
LCD_SetBackColor(Blue2);
LCD_SetTextColor(White);
LCD_DisplayStringLine(Line1, " WEEK DAY N: ");
if(wn/10)
{
LCD_DisplayChar(Line1, 223, ((wn/10)+ 0x30));
LCD_DisplayChar(Line1, 207, ((wn%10)+ 0x30));
}
else
{
LCD_DisplayChar(Line1, 223, ((wn%10)+ 0x30));
}
if(dc/100)
{
LCD_DisplayChar(Line1, 47, ((dc/100)+ 0x30));
LCD_DisplayChar(Line1, 31, (((dc%100)/10)+ 0x30));
LCD_DisplayChar(Line1, 15, (((dc%100)%10)+ 0x30));
}
else if(dc/10)
{
LCD_DisplayChar(Line1, 47, ((dc/10)+ 0x30));
LCD_DisplayChar(Line1, 31, ((dc%10)+ 0x30));
}
else
{
LCD_DisplayChar(Line1, 47, ((dc%10)+ 0x30));
}
LCD_SetBackColor(White);
}
/* If "LEFT" pushbutton is pressed */
if(MyKey == LEFT)
{
LCD_SetTextColor(White);
LCD_DrawRect(dayline, daycolumn, 24, 32);
/* Decrease the value of the digit */
if(tmpValue == 1)
{
tmpValue = ValueMax + 1;
dayline = lastdayline;
daycolumn = lastdaycolumn - 48;
}
if(daycolumn == 319)
{
daycolumn = 0xFFEF;
dayline -= 24;
}
daycolumn += 48;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -