电子万年历代码.docx
《电子万年历代码.docx》由会员分享,可在线阅读,更多相关《电子万年历代码.docx(14页珍藏版)》请在冰点文库上搜索。
![电子万年历代码.docx](https://file1.bingdoc.com/fileroot1/2023-7/16/ba7bcb73-dc6f-4db2-9810-50b1c9def354/ba7bcb73-dc6f-4db2-9810-50b1c9def3541.gif)
电子万年历代码
电子万年历代码
//==================================================================================== //文件名:
Calendar_//功能描述:
月历界面 //维护记录:
2007年6月17日 //==================================================================================== #include\#include\ DATECalendar_Date[31];CALENDAR*pCalendar; //=============================================================//语法格式:
INT8Calendar_Month(INT16Year,INT16Month)//实现功能:
对指定月中的每天进行计算,填充Calendar_Date数组//参数:
Year:
年//Month:
月//返回值:
无 //=============================================================INT8Calendar_Month(INT16Year,INT16Month){INT8Ret;INT16i; Ret=Date_GetMonthDays(Year,Month);for(i=1;i //============================================================= //语法格式:
voidCalendar_Show(CALENDAR*pCalendarWindow,INT16Year,INT16Month)//实现功能:
显示月历 //参数:
pCalendarWindow:
月历配置结构体//Year:
年//Month:
月//返回值:
无 //=============================================================voidCalendar_Show(CALENDAR*pCalendarWindow,INT16Year,INT16Month) {INT16Tempx,Tempy,TempColor,i;INT8Days;INT8TempStr[20];STR_WINDOWwCalendar;STR_FONTFontCn12={12,12,RES_HZK12};STR_FONTFontAsc24={12,24,RES_ASC24};CLOCKNow;INT8*T_WeekdayStr={\日\一\二\三\四\五\六\}; pCalendar=pCalendarWindow;Days=Calendar_Month(Year,Month); TFT_CreateWindow(&wCalendar,0,0,319,239,0);TFT_LoadAsciiFont(&wCalendar,&FontAsc24);TFT_LoadChineseFont(&wCalendar,&FontCn12);TFT_PutBitMap(&wCalendar,0,0,pCalendar->BGImage);//背景图片TFT_SetChineseFont(&wCalendar,0); //题头TFT_SetAsciiFont(&wCalendar,0);TFT_SetColor(&wCalendar,pCalendar->HeadColor);TFT_SetBGColor(&wCalendar,0);TFT_SetTextPos(&wCalendar,20,0);TFT_Print(&wCalendar,\年%d月\TFT_SetTextPos(&wCalendar,120,0);TFT_Print(&wCalendar,\农历%s年\Calendar_Date[0].GanZhiYearStr,Calendar_Date[0].AnimalStr); TFT_SetColor(&wCalendar,pCalendar->TableHeadColor);//星期for(i=0;iFirstWeekDay+i)%7)*40+12;TFT_SetTextPos(&wCalendar,Tempx,24);TFT_Print(&wCalendar,\} Tempy=41;TFT_SetAsciiFont(&wCalendar,1);TFT_SetChineseFont(&wCalendar,1);for(i=0;i Clock_Get(&Now);if(Year==&&Month==&&i==)//今日{ Tempx=((7-pCalendar->FirstWeekDay+Calendar_Date[i].Weekday)%7)*40+1; TFT_SetColor(&wCalendar,pCalendar->TodayColor); TFT_Rectangle(&wCalendar,Tempx,Tempy,Tempx+38,Tempy+38,PAINT_SOLID);}TempColor=pCalendar->CommonColor;if(Calendar_Date[i].Weekday==0||Calendar_Date[i].Weekday==6) TempColor=pCalendar->WeekendColor;if((Month==1&&i==0) //元旦、五一、十一、春节 ||(Month==5&&i==0) ||(Month==10&&i==0) ||(Calendar_Date[i].LunarMonth==1&&Calendar_Date[i].LunarDay==1)){ TempColor=pCalendar->WeekendColor;} if(iFirstWeekDay+Calendar_Date[i].Weekday)%7)*40+14;else //两位数 Tempx=((7-pCalendar->FirstWeekDay+Calendar_Date[i].Weekday)%7)*40+8;TFT_SetTextPos(&wCalendar,Tempx,Tempy); TFT_SetColor(&wCalendar,TempColor);TFT_Print(&wCalendar,\ TempColor=pCalendar->LunarColor;if((Calendar_Date[i].Fu&0x00FF)==1) //伏{ strcpy(TempStr,Calendar_Date[i].FuStr); TempStr[4]=‘\\0’; TempColor=pCalendar->SpecialColor;}if((Calendar_Date[i].Jiu&0x00FF)==1) //九{ strcpy(TempStr,Calendar_Date[i].JiuStr); TempStr[4]=‘\\0’; TempColor=pCalendar->SpecialColor;}if(Calendar_Date[i].SolarTerm!
=-1) //节气{ TempColor=pCalendar->SpecialColor; strcpy(TempStr,Calendar_Date[i].SolarTermStr);}if(Calendar_Date[i].LunarFestivalStr[0]!
=‘\\0’)//农历节日{ TempColor=pCalendar->SpecialColor; strcpy(TempStr,Calendar_Date[i].LunarFestivalStr);}if(Calendar_Date[i].FestivalStr[0]!
=‘\\0’)//公历节日{ TempColor=pCalendar->SpecialColor; strcpy(TempStr,Calendar_Date[i].FestivalStr);} if(TempColor==pCalendar->LunarColor) //普通农历{ if(Calendar_Date[i].LunarDay==1) //初一显示月号 { strcpy(TempStr,Calendar_Date[i].LunarMonthStr); if(strlen(TempStr)FirstWeekDay+Calendar_Date[i].Weekday)%7*40+8;else //三个字 Tempx=(7-pCalendar->FirstWeekDay+Calendar_Date[i].Weekday)%7*40+2; TFT_SetColor(&wCalendar,TempColor);TFT_SetTextPos(&wCalendar,Tempx,Tempy+24);TFT_Print(&wCalendar,TempStr); if(Calendar_Date[i].Weekday==(pCalendar->FirstWeekDay+6)%7)//换行{ Tempy+=40; if(Tempy>=240)Tempy=41;}}} //=============================================================//语法格式:
INT16Calendar_GetKey(INT16x,INT16y) //实现功能:
判断坐标是否落在功能按钮上//参数:
x:
x坐标//y:
y坐标//返回值:
键值 //=============================================================INT16Calendar_GetKey(INT16x,INT16y){INT16Tempx,Tempy;INT16Ret=-1; Tempx=x;Tempy=y;if(Tempx>=0&&Tempx=40&&Tempy=283&&Tempx=4&&Tempy=283&&Tempx=44&&Tempy=283&&Tempx=91&&Tempy=283&&Tempx=131&&Tempy=283&&Tempx=196&&Tempy //=============================================================//语法格式:
INT16Calendar_GetKey(INT16x,INT16y)//实现功能:
判断坐标是否落在功能按钮上//参数:
x:
x坐标//y:
y坐标//返回值:
键值 //=============================================================voidCalendar_ShowDay(CALENDAR*pCalendar,INT16Key){STR_WINDOWwDay,wFestival;INT16x,y,Day,Temp;INT32i;DATE*pDate;INT8*T_WeekdayStr={
\日\一\二\三\四\五\六\}; Day=Key-Calendar_Date[0].Weekday+pCalendar->FirstWeekDay+1;if(DayFirstWeekDay;//最后一格的日期if(Date_GetMonthDays(Calendar_Date[0].Year,Calendar_Date[0].Month)>Temp) Day=Key+Temp+1;}if(DayDate_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[(unsignedchar)(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 //=============================================================//语法格式:
voidCalendar_Interface(CALENDAR*pCalendar)//实现功能:
月历界面 //参数:
pCalendar:
月历配置结构体//返回值:
无 //=============================================================voidCalendar_Interface(CALENDAR*pCalendar){externINT16gFrameType;CLOCKClock;INT16Year,Month,x,y,Key; gFrameType=1;Clock_Get(&Clock);Year=;Month=;Calendar_Show(pCalendar,Year,Month);while
(1){ Touch_Get(&x,&y); if(x!
=-1) { Key=Calendar_GetKey(x,y); switch(Key) } {case-1:
break;case100:
//上年if(Year>1901)Year-=1;break;case101:
//下年if(Year2100) { Year=2100; Month=12; }}break;case104:
//返回return;default:
Calendar_ShowDay(pCalendar,Key);break;} if(Key!
=-1)Calendar_Show(pCalendar,Year,Month); }} ……………………………………………………………………………………………………………………….闹铃部分。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
//======================================================//文件名称:
//功能描述:
计时模块,使用1HzRTC中断//维护记录:
2006-08-30 //======================================================#include\#include\#include\ #include\ CLOCKClock={2007,6,1,0,0,0}; //时钟初始值2007年6月1日0点0分 constunsignedintMonth_Day[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //每月包含的天数 //=============================================================//语法格式:
voidClock_Init(void);//实现功能:
开始计时//参数:
无//返回值:
无 //=============================================================voidClock_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;//定时*P_INT_MASK_CTRL1&=~C_INT_TIMER_DIS; //使能Timer中断} //=============================================================//语法格式:
voidClock_ISR(void);//实现功能:
计时模块的中断服务程序,应在RTC中断中调用//参数:
无//返回值:
无 //=============================================================voidClock_ISR(){staticintQuarter=0;if(*P_TIMER0_MODE_CTRL&C_TIMER_INT_FLAG)//秒中断{*P_TIMER0_MODE_CTRL|=C_TIMER_INT_FLAG;Quarter+=1;if(QuarterMonth_Day) { if(!
=2 //如果:
不是2月 ||>29 //已处理闰年问题 ||(&0x03)!
=0//不是闰年 ||(0==0&&@0!
=0) ) { =1; +=1; if(>12) //处理月进位 { =1; +=1;
} } } } }}Clock_OnSecond();}} //=============================================================//语法格式:
voidClock_Get(CLOCK*pClock);//实现功能:
查询当前日期时间//参数:
存储时间的结构体地址//返回值:
无 //=============================================================voidClock_Get(CLOCK*pClock){pClock->Sec=;pClock->Min=;pClock->Hour=;pClock->Day=;pClock->Mon=;pClock->Year=;} //=============================================================//语法格式:
voidClock_Set(CLOCK*pClock);//实现功能:
设置当前日期时间//参数:
存储时间的结构体地址//返回值:
无 //=============================================================voidClock_Set(CLOCK*pClock){*P_RTC_MODE_CTRL=0x0000; //停止RTC*P_RTC_TIME_SEC==pClock->Sec;*P_RTC_TIME_MIN==pClock->Min;*P_RTC_TIME_HOUR==pClock->Hour;=pClock->D