?? arithmetic.c
字號:
/***
***********************************************
*說明:
*本程序為"生命沙漏"
*STM32是否為閏年和相應月份的天數部分算法
*文件名稱:arithmetic.c
*************************************************
*包含功能:
*1、判斷某一年是否為閏年
*2、計算某一年某一月的天數
*3、計算某一時間段的閏年數
*4、計算一個人活了多少天
*5、計算一個人的星座
*************************************************
*當前版本: ve1.0
*作者: 吾ARM1
*修改時間:2012年4月17日
*完成時間: 2012年4月9日
*************************************************/
#include "arithmetic.h"
/*--------------------
函數名: Year_Arith
返回值: 1/0
輸入參數:year
功能描述:輸入年份,可以判斷出這一年是否為閏年
----------------------*/
u8 Year_Arith(u16 year)
{
u16 Year_Mark;
Year_Mark = year;
if((Year_Mark%4==0||Year_Mark%400==0)&&(Year_Mark%100!=0))
return 1;
else
return 0;
}
/*--------------------
函數名: Arith
返回值: 29/28/30/31
輸入參數:Some_Year,month
功能描述:輸入某一年的某一月得出該月的天數
----------------------*/
u8 Day_Arith(u16 Some_Year,u8 month)
{
u8 i;
i = Year_Arith(Some_Year);
if(month==2&&i==1)
return 29;
if(month==2&&i==0)
return 28;
switch(month)
{
case 1: return 31;break;
case 3: return 31;break;
case 4: return 30;break;
case 5: return 31;break;
case 6: return 30;break;
case 7: return 31;break;
case 8: return 31;break;
case 9: return 30;break;
case 10: return 31;break;
case 11: return 30;break;
case 12: return 31;break;
}
}
/*--------------------
函數名: Have_Leap_Year_Arith
返回值: count,從出生到當前年份的閏年數
輸入參數:Birth_Year,Present_Year兩者分別為:出生年份,當前年份
功能描述:分別輸入出生年份和當前年份,最后得出并返回潤年數。
----------------------*/
u8 Have_Leap_Year_Arith(u16 Birth_Year,u16 Present_Year)
{
u8 count=0;
u8 flag = 0;
for(Birth_Year=Birth_Year+1;Birth_Year<Present_Year;Birth_Year++)
{
flag = Year_Arith(Birth_Year);
if(flag==1)
{
++count;
flag = 0;
}
else
count = count;
}
return count;
}
/*--------------------
函數名: From_Present_Start
返回值: RFPresent_Start_Day,返回從出生年元月到當前元月的天數,最大值為:65535
輸入參數:FSome_Year,FSome_Month兩者分別為:出生年份,當前年份
功能描述:分別輸入某一年和某一月,最后得出從改年起初到改年該月的天數。
----------------------*/
u16 From_Present_Start(u16 FSome_Year,u8 FSome_Month)
{
u8 i = 0;
u8 FPresent_Start_Day = 0;
u16 RFPresent_Start_Day=0;
i = Year_Arith(FSome_Year);//判斷輸入年份是否為閏年
for(;FSome_Month>1;FSome_Month--)
{
FPresent_Start_Day = Day_Arith(FSome_Year,FSome_Month);//得出當月天數
RFPresent_Start_Day = RFPresent_Start_Day+FPresent_Start_Day;//將得出的天數進行壘加
}
if(i==1) RFPresent_Start_Day = 366 - RFPresent_Start_Day;
if(i==0) RFPresent_Start_Day = 365 - RFPresent_Start_Day;
return RFPresent_Start_Day;
}
/*---------------------------------------------------------------
函數名: Have_Day_Arith
返回值: Day_Num,返回從出生年元月到當前元月的天數,最大值為:65535
輸入參數:Birth_Year1,Present_Year1,Birth_Month,Present_Month,Birth_Day,Present_Day兩者分別為:出生年份,當前年份,出生月份,當前月份,出生日,當日
功能描述:分別輸入出生年月日和當前年月日,最后得出天數并返回。
-----------------------------------------------------------------*/
u16 Have_Day_Arith(u16 Birth_Year1,u16 Present_Year1,u8 Birth_Month,u8 Present_Month,u8 Birth_Day,u8 Present_Day)
{
u8 Leap_Year_Num1 = 0,Year_Num = 0,i=0,j=0;
u16 Day_Num,Birth_Day_Num = 0,Present_Day_Num = 0;
u16 Byear,Fyear;
Byear = Birth_Year1;
Fyear = Present_Year1;
i = Year_Arith(Birth_Year1);
j = Year_Arith(Present_Year1);
Birth_Day_Num = From_Present_Start(Birth_Year1,Birth_Month);//得出出生當年當月之前的天數
if(j==1)
{
Present_Day_Num =366 - From_Present_Start(Present_Year1,Present_Month);//得出當前年、月之前的天數
}
else
Present_Day_Num =365 - From_Present_Start(Present_Year1,Present_Month);//得出當前年、月之前的天數
Leap_Year_Num1 = Have_Leap_Year_Arith(Byear,Fyear);//得出閏年數
Year_Num = Fyear-Byear;//得出年數差
Day_Num = (0*366+((u16)Year_Num-(u16)Leap_Year_Num1-1)*365)+Birth_Day_Num-Birth_Day+Present_Day_Num+Present_Day;//得出總的天數
return Day_Num;//返回結果最大為:65535天
}
/*---------------------------------------------------------------
函數名: Constellation_Arith
返回值: 無
輸入參數:u8 Birth_Month,u8 Birth_Day。出生月,出生日
功能描述: 根據輸入的出生月 和出生日(公歷),得出所屬星座
-----------------------------------------------------------------*/
void Constellation_Arith(u8 Birth_Month,u8 Birth_Day)
{
if(((Birth_Month==1)&&(Birth_Day>=20))||((Birth_Month==2)&&(Birth_Day<=18)))
{
star = 39;//水
star1 = 40; //瓶
//為水瓶座
}
if(((Birth_Month==2)&&(Birth_Day>=19))||((Birth_Month==3)&&(Birth_Day<=20)))
{
star = 41;//雙
star1 = 42; //魚
//為雙魚座
}
if(((Birth_Month==3)&&(Birth_Day>=21))||((Birth_Month==4)&&(Birth_Day<=19)))
{
star = 43;//白
star1 = 44; //羊
//白羊座
}
if(((Birth_Month==4)&&(Birth_Day>=20))||((Birth_Month==5)&&(Birth_Day<=20)))
{
star = 37;//金
star1 = 38; //牛
//金牛座
}
if(((Birth_Month==5)&&(Birth_Day>=21))||((Birth_Month==6)&&(Birth_Day<=21)))
{
star = 45;//雙
star1 = 46; //子
//雙子座
}
if(((Birth_Month==6)&&(Birth_Day>=22))||((Birth_Month==7)&&(Birth_Day<=22)))
{
star = 47;//巨
star1 = 48; //蟹
//巨蟹座
}
if(((Birth_Month==7)&&(Birth_Day>=23))||((Birth_Month==8)&&(Birth_Day<=22)))
{
star = 49;//獅
star1 = 46; //子
//獅子座
}
if(((Birth_Month==8)&&(Birth_Day>=23))||((Birth_Month==9)&&(Birth_Day<=22)))
{
star = 50;//處
star1 = 51; //女
//處女座
}
if(((Birth_Month==9)&&(Birth_Day>=21))||((Birth_Month==10)&&(Birth_Day<=23)))
{
star = 30;//天
star1 = 52; //秤
//天秤座
}
if(((Birth_Month==10)&&(Birth_Day>=24))||((Birth_Month==11)&&(Birth_Day<=21)))
{
star = 30;//天
star1 = 53; //蝎
//天蝎座
}
if(((Birth_Month==11)&&(Birth_Day>=22))||((Birth_Month==12)&&(Birth_Day<=21)))
{
star = 54;//射
star1 = 55; //手
//射手座
}
if(((Birth_Month==12)&&(Birth_Day>=22))||((Birth_Month==1)&&(Birth_Day<=19)))
{
star = 56;//射
star1 = 57; //手
//摩羯座
}
}
/******************* (C) COPYRIGHT 2012 吾ARM1 *****END OF FILE****/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -