\日\一\二\三\四\五\六\ }; Day = Key - Calendar_Date[0].Weekday + pCalendar->FirstWeekDay + 1; if(Day<1) // 检查3x号移动到第一行的情况 { Temp = 35 - Calendar_Date[0].Weekday + pCalendar->FirstWeekDay; // 最后一格的日期 if(Date_GetMonthDays(Calendar_Date[0].Year, Calendar_Date[0].Month)>Temp) Day = Key + Temp + 1; } if(Day<1 || Day>Date_GetMonthDays(Calendar_Date[0].Year, Calendar_Date[0].Month)) return; pDate = &Calendar_Date[Day-1]; TFT_CreateWindow(&wDay, 20, 60, 259, 219, RGB(0xE0, 0xE0, 0xE0)); TFT_SetColor(&wDay, RGB(0xF0, 0x30, 0x00)); TFT_Rectangle(&wDay, 0, 0, 239, 159, PAINT_HOLLOW); TFT_SetColor(&wDay, COLOR_MAGENTA); TFT_SetTextPos(&wDay, 10, 10); TFT_Print(&wDay, \年%d月%d日 星期%s\pDate->Year, pDate->Month, pDate->Day, T_WeekdayStr[(unsigned char)(pDate->Weekday)]); TFT_SetTextPos(&wDay, 10, 34); TFT_SetColor(&wDay, RGB(0x20, 0x20, 0x80)); TFT_Print(&wDay, \星座:%s座\ TFT_SetTextPos(&wDay, 10, 54); TFT_SetColor(&wDay, RGB(0x20, 0x20, 0x80)); TFT_Print(&wDay, \生肖:%s\ TFT_SetTextPos(&wDay, 10, 74); TFT_SetColor(&wDay, RGB(0x20, 0x20, 0x80)); TFT_Print(&wDay, \农历:%s月%s\ TFT_SetTextPos(&wDay, 10, 94); TFT_SetColor(&wDay, RGB(0x20, 0x20, 0x80)); TFT_Print(&wDay, \干支:%s年 %s月 %s日\pDate->GanZhiYearStr, pDate->GanZhiMonthStr, pDate->GanZhiDayStr); TFT_CreateWindow(&wFestival, 30, 180, 249, 209, RGB(0xE0, 0xE0, 0xE0)); TFT_SetTextPos(&wFestival, 0, 0); TFT_SetColor(&wFestival, COLOR_RED);
if(pDate->FestivalStr[0]!='\\0') TFT_Print(&wFestival, \ \ if(pDate->LunarFestivalStr[0]!='\\0') TFT_Print(&wFestival, \ \ if(pDate->SolarTerm != -1) TFT_Print(&wFestival, \ \ if(pDate->Fu != 0) TFT_Print(&wFestival, \ \ if(pDate->Jiu != 0) TFT_Print(&wFestival, \ \ for(i=0; i<1000000; i++); while(1) { Touch_Get(&x, &y); if(x!=-1) break; } }
//============================================================= //语法格式:void Calendar_Interface(CALENDAR *pCalendar) //实现功能:月历界面
//参数: pCalendar: 月历配置结构体 //返回值: 无
//============================================================= void Calendar_Interface(CALENDAR *pCalendar) { extern INT16 gFrameType; CLOCK Clock; INT16 Year, Month, x, y, Key; gFrameType = 1; Clock_Get(&Clock); Year = Clock.Year; Month = Clock.Mon; Calendar_Show(pCalendar, Year, Month); while(1) { Touch_Get(&x, &y); if(x!=-1) { Key = Calendar_GetKey(x, y); switch(Key)
}
{ case -1: break; case 100: // 上年 if(Year>1901) Year -= 1; break; case 101: // 下年 if(Year<2100) Year += 1; break; case 102: // 上月 Month -= 1; if(Month==0) { Month = 12; Year -= 1; if(Year < 1901) { Year = 1901; Month = 1; } } break; case 103: // 下月 Month += 1; if(Month==13) { Month = 1; Year += 1; if(Year > 2100) { Year = 2100; Month = 12; } } break; case 104: // 返回 return; default: Calendar_ShowDay(pCalendar, Key); break; }
if(Key!=-1) Calendar_Show(pCalendar, Year, Month);
} }
……………………………………………………………………………………………………………………….闹铃部分。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 //====================================================== // 文件名称: Clock.c // 功能描述: 计时模块,使用1Hz RTC中断 // 维护记录: 2006-08-30 v1.0
//====================================================== #include \#include \#include \
#include \
CLOCK Clock = {2007, 6, 1, 0, 0, 0}; // 时钟初始值2007年6月1日0点0分
const unsigned int Month_Day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每月包含的天数
//============================================================= // 语法格式: void Clock_Init(void); // 实现功能: 开始计时 // 参数: 无 // 返回值: 无
//============================================================= void Clock_Init() { *P_TIMER_CLK_SEL &= ~0x00FF; *P_TIMER_CLK_SEL |= 199; *P_TIMER_CLK_SEL &= ~C_TIMER0_CLK_27M; *P_TIMER0_CLK_CONF = 0x0000; *P_TIMER0_CLK_CONF = C_TIMER_CLK_EN|C_TIMER_RST_DIS; *P_TIMER0_MODE_CTRL = C_TIMER_CTRL_EN|C_TIMER_INT_EN|C_TIMER_INT_FLAG; *P_TIMER0_CCP_CTRL = 0x00000000; *P_TIMER0_PRELOAD_DATA = 65536 - (27000000/200)/4; // 定时0.25 *P_INT_MASK_CTRL1 &= ~C_INT_TIMER_DIS; // 使能Timer中断 }
//============================================================= // 语法格式: void Clock_ISR(void); // 实现功能: 计时模块的中断服务程序,应在RTC中断中调用 // 参数: 无 // 返回值: 无
//============================================================= void Clock_ISR() { static int Quarter = 0; if(*P_TIMER0_MODE_CTRL & C_TIMER_INT_FLAG) // 0.25秒中断 { *P_TIMER0_MODE_CTRL |= C_TIMER_INT_FLAG; Quarter += 1; if(Quarter<4) return; Quarter = 0; Clock.Sec += 1; if(Clock.Sec==60) { Clock.Sec = 0; Clock.Min += 1; if(Clock.Min==60) { Clock.Min = 0; Clock.Hour+=1; if(Clock.Hour==24) { Clock.Hour = 0; Clock.Day += 1; if(Clock.Day > Month_Day[Clock.Mon-1]) { if(Clock.Mon!=2 // 如果:不是2月 || Clock.Day>29 // 已处理闰年问题 || (Clock.Year&0x03)!=0 // 不是闰年 || (Clock.Year0==0 && Clock.Year@0!=0) ) { Clock.Day = 1; Clock.Mon += 1; if(Clock.Mon > 12) // 处理月进位 { Clock.Mon = 1; Clock.Year += 1;
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库电子万年历代码(2)在线全文阅读。
相关推荐: