文档库 最新最全的文档下载
当前位置:文档库 › 万年历

万年历

万年历
万年历

编写一个万年历程序,能显示日历,查询任意日期。

日历初始化和显示。能根据系统日期进行初始化,并显示当前月份的月历,并突出显示当前日期。

日期查询,可以输入一个日期,然后查询并正确显示日期所在月份的月历,并突出显示查询日期,如果输入日期不正确给出提示。

#include

#include

#include

#include"万年历.h"

int main()

{

int y,m,d,h,min,sec;//系统时间参数

int cho;//用户选项

int yt,mt,dt;//拥护输入的时间参数

while(1)

{

cout<<"≡≡≡≡≡≡万年历菜单选项≡≡≡≡≡";

cout<<"请按编号选择功能";

cout<<" ⑴查询当前时间";

cout<<" ⑵显示本月月历";

cout<<" ⑶查找给定日期对应的月历";

cout<<" ⑷退出万年历";

cin>>cho;

Initdate(y,m,d,h,min,sec);

switch(cho){

case 1: cout<<"当前时间为<

week(y,m,d);

break;

case 2: printmonth(y,m,d);break;

case 3: cout<<"请输入所要查找的日期,格式如2000 7 5";

cin>>yt<

search(yt,mt,dt);

break;

case 4: exit(1);break;

default :cout<<"输入错误,请重新输入";

}

}

return;

}

void week(y,m,d)//日期对于的星期

{

int c,w;

c=y/100+1;

if(m<=2) {m=m+12;y=y-1;}

w=(y+y/4+c/4-2*c+26*(m+1)/10+d-1)%7;

if(w=0) cout("Sun");

else if (w==1)cout<<"Mon";

else if (w==2)cout<<"Tue";

else if (w==3)cout<<"wed";

else if (w==4)cout<<"Thu";

else if (w=5)cout<<"Fri";

else cout<<"Sta"; }

void Initdate(&y,&m,&d,&h,&min,&sec)//根据系统时间初始化万年历{

time_t t;

time(&t);

struct tm * local_time = localtime(&t);

sec=local_time->tm_sec;

min=local_time->tm_min ;

h=local_time->tm_hour ;

d=local_time->tm_mday ;

m=local_time->tm_mon+1;

y=local_time->tm_year+1900;

}

void printmonth(y,m,d)//打印出给定时间对于月历

{

int ym[2][13]={

{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31}

};

int leap,i;

leap=(y%4==0&&y%100!=0||y%400==0)

for(i=1;i

cout<

cout<<"★" ;

for(i=d;i<=ym[leap][m];i++)

cout<

}

int judge(y,m,d)//判断给定时间是否存在

{

int ym[2][13]={

{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31}

};

int leap,i;

if(y<=0||m<1||m>12)return 0;

leap=(y%4==0&&y%100!=0||y%400==0);

if(d<1||d>ym[leap][m])return 0;

else return 1;

}

int search(y,m,d)//查找打印给定时间对应阅历

{

if(judge(y,m,d)==0)cout<<"error date";

else printmonth(y,m,d);

}

2011-8-9 16:29

最佳答案

// abc4.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include

#include

#include

using namespace std;

void week(int y, int m, int d)//日期对于的星期

{

int c,w;

char *weekstr[] = {

"Sun","Mon","Tue","Wed","Thu","Fri","Sta"

};

c = y / 100 + 1;

if( m <= 2)

{

m = m + 12 ;

y = y - 1;

}

w = ( y + y / 4 + c / 4 - 2 * c + 26 * ( m + 1 ) / 10 + d - 1 ) % 7;

cout << weekstr[w];

//if(w == 0)

// cout << "Sun";

//else if (w == 1)

// cout<<"Mon";

//else if (w == 2)

// cout<<"Tue";

//else if (w == 3)

// cout<<"wed";

//else if (w == 4)

// cout<<"Thu";

//else if ( w == 5)

// cout<<"Fri";

//else

// cout << "Sta";

}

void Initdate(int &y, int &m, int &d, int &h, int &min, int &sec)//根据系统时间初始化万年历

{

time_t t;

time( &t );

struct tm * local_time = localtime( &t );

sec = local_time->tm_sec;

min = local_time->tm_min ;

h = local_time->tm_hour ;

d = local_time->tm_mday ;

m = local_time->tm_mon+1;

y = local_time->tm_year + 1900;

}

void printmonth(int y, int m, int d)//打印出给定时间对于月历

{

int ym[2][13]={

{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31}

};

int leap,i;

leap = ( y % 4 == 0 && y % 100 != 0 || y % 400 == 0);

for( i = 1 ; i < d ; i++ )

{

cout << i << " ";

week( y, m, i);

cout << endl;

}

cout << "★" ;

for(i = d; i <= ym[leap][m]; i++ )

{

cout << i << " ";

week( y, m, i);

cout << endl;

}

}

int judge(int y, int m, int d)//判断给定时间是否存在

{

int ym[2][13]={

{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31} };

int leap, i;

if( y <= 0 || m < 1 || m > 12 )

return 0;

leap = ( y % 4 == 0 && y % 100 != 0 || y % 400 == 0 );

if( d < 1 || d > ym[leap][m] )

return 0;

else

return 1;

}

int search(int y, int m, int d)//查找打印给定时间对应阅历

{

if ( judge( y, m, d ) == 0 )

cout << "error date" ;

else

printmonth( y, m, d );

return 0;

}

int main()

{

int y, m, d, h, min, sec;//系统时间参数

int cho;//用户选项

int yt, mt, dt;//拥护输入的时间参数

while(1)

{

cout<<"≡≡≡≡≡≡万年历菜单选项≡≡≡≡≡"<

cout<<"请按编号选择功能"<

cout<<" ⑴查询当前时间"<

cout<<" ⑵显示本月月历"<

cout<<" ⑶查找给定日期对应的月历"<

cout<<" ⑷退出万年历"<

cin>>cho;

Initdate(y,m,d,h,min,sec);

switch(cho){

case 1: cout << "当前时间为" << y << "." << m << "." << d << "." << " " << h << ":" << min << ":" << sec << " ";

week(y,m,d);

break;

case 2: printmonth(y,m,d);break;

case 3: cout<<"请输入所要查找的日期,格式如2000 7 5";

cin>>yt;

cin>>mt;

cin>>dt;

search(yt,mt,dt);

break;

case 4: exit(1);break;

default :cout<<"输入错误,请重新输入";

}

}

return 0;

}

追问

Cannot open include file: 'stdafx.h': No such file or directory

Error executing cl.exe.

一直提示这个啊大哥不行啊

回答

老大,你创建一个控制台工程。之后vc自动生成预编译头文件。

把生成的文件出去

#include "stdafx.h"

这句以外的使用我的代码替换

计算万年历的Matlab程序

(2008-12-21 13:59:19)

转载

分类:Matlab实例

标签:

matlab

万年历

杂谈

function test_calendar(year,month)

% 输入年份,月份,打印这个月的月历

run = 0;

ping = 0;

fprintf('\n%s %s %s %s %s %s %s\n',...

'日','一','二','三','四','五','六');

% 计算从第一年到前一年的闰年和平年的个数

for i =1:year-1

if (mod(i,4)==0 & mod(i,100)~=0) | mod(i,400)==0 run = run+1;

else

ping = ping+1;

end

end

% 计算从第一年到当年前一个月的天数

sum = 366*run+365*ping;

for i = 1:month-1

sum = sum+monthday(year,i);

end

% 获得这个月的天数

n = monthday(year,month);

temp = zeros(n,1);

sum = sum+1;

% 计算这个月第一天是星期几

wkd = mod(sum,7);

for i = 1:n

temp(wkd+i) = i;

end

l = 1;

m = 1;

% 打印日历

for i = 1:length(temp)

if temp(i) ==0

temp2(l,m) = ' ';

fprintf(' ');

m = m+1;

else

temp2(l,m) = temp(i);

if temp(i) >= 10

fprintf('%d ',temp(i));

else

fprintf('%d ',temp(i));

end

m = m+1;

end

if mod(i,7)==0

fprintf('\n');

m = 1;

l = l+1;

end

end

fprintf('\n');

% 闰年和平年每月的天数

function out = monthday(year,i)

if mod(year,4)==0 & mod(year,100)~=0 | mod(year,400)==0 data = [31 29 31 30 31 30 31 31 30 31 30 31];

else

data = [31 28 31 30 31 30 31 31 30 31 30 31];

end

out = data(i);

举例:

输入:

>> test_calendar(2008,12)

返回:

日一二三四五六

1 2 3 4 5 6

7 8 9 10 11 12 13

14 15 16 17 18 19 20

21 22 23 24 25 26 27

28 29 30 31

用Matlab设计万年历的具体实例如下:

function test_calendar(year,month)

% 输入年份,月份,打印这个月的月历

run = 0;

ping = 0;

fprintf('\n%s %s %s %s %s %s %s\n',...

'日','一','二','三','四','五','六');

% 计算从第一年到前一年的闰年和平年的个数

for i =1:year-1

if (mod(i,4)==0 & mod(i,100)~=0) | mod(i,400)==0 run = run+1;

else

ping = ping+1;

end

end

% 计算从第一年到当年前一个月的天数

sum = 366*run+365*ping;

for i = 1:month-1

sum = sum+monthday(year,i);

end

% 获得这个月的天数

n = monthday(year,month); temp = zeros(n,1);

sum = sum+1;

% 计算这个月第一天是星期几wkd = mod(sum,7);

for i = 1:n

temp(wkd+i) = i;

end

l = 1;

m = 1;

% 打印日历

for i = 1:length(temp)

if temp(i) ==0

temp2(l,m) = ' ';

fprintf(' ');

m = m+1;

else

temp2(l,m) = temp(i);

if temp(i) >= 10

fprintf('%d ',temp(i));

else

fprintf('%d ',temp(i));

end

m = m+1;

end

if mod(i,7)==0

fprintf('\n');

m = 1;

l = l+1;

end

end

fprintf('\n');

% 闰年和平年每月的天数

function out = monthday(year,i)

if mod(year,4)==0 & mod(year,100)~=0 | mod(year,400)==0 data = [31 29 31 30 31 30 31 31 30 31 30 31];

else

data = [31 28 31 30 31 30 31 31 30 31 30 31];

end

out = data(i);

举例:

输入:

>> test_calendar(2008,12)

返回:

日一二三四五六

1 2 3 4 5 6

7 8 9 10 11 12 13

14 15 16 17 18 19 20

21 22 23 24 25 26 27

28 29 30 31

[] [返回上一页] [打印]

基于MATLAB的万年历计算

黄小川(200431610102)

测绘工程专业2004级9班

摘要:运用MATLAB编程实现1936—2032年农历与公历间的相互转换,并求当日是星期几。

关键词:万年历公历转化为农历农历转化为公历求当天是星期几

正文:

1.概述:知道公历年月日求农历日期,知道农历年月日求公历日期,并求当日是星期几。2.相关知识及原理:

公历:公历是现在国际通用的历法,又称格列历,通称阳历。公历将一年分为十二个月,其中一、三、五、七、八、十、十二月有31天,俗称“大月”;四、六、九、十一月有30天;平年二月有28天,闰年二月有29天,这样公历闰年一年有366天,平年有365天。

公历闰年:若一年年数不能被4整除,或能被100整除但不能被400整除,则称这一年为平年,否则为闰年。

农历:农历是基于对地球公转和月相变化的观测的。我国现采用的农历结合了阳历与阴历(伊斯兰历)的记年方法:一年有十二个月,其中6个大月(30天),6个小月(29天),一个农历年有354天。

农历闰月:为了平衡公里年与农历年的天数差别,农历采用在适当时候设立闰月的方法,一般三年左右设一闰月,闰月可以是大月,也可以是小月。具体设置原则由节气而定,方法较为复杂。

公历与农历间的转换:公历是纯数学的记年法,而农历是基于观测结果之上的。两者见的转换比较复杂,无法用简单的数学公式表示。因此,这里采用的方法是首先查得1936年至2032年相关的资料,包括:该年农历大年初一到公历元旦的天数、该年农历各月的天数、该年农历有无闰月以及在何处闰月。这样在公历化为农历时,只需算得改日距该年农历大年初一的天数,对应该年农历各月的天数,即可得到农历的月份,及该日在该农历月是第几天;在农历化为公历时,同样,需算得该日距该年元旦的天数,通过类似转化,即可求得公历日期。

求星期数:已知公历求星期数时,计算出改日距一特定日期的天数,则该日星期数=特定日期星期数+距离天数除以7的余数;已知农历时,只需将农历转换为公历,再由公历日期求星期数即可。

3.实例计算:

3.1数据说明:

runyear %1936到该年的闰年数

gongli_year %公历年数

gongli_mongth %公历月数

gongli_day %公历日期

gongli_sumofdays %公历各月累积天数

gongli_daysofyear %该日是该公历年的第几天

nongli_year %农历年数

nongli_month %农历月数

nongli_day %农历日期

nongli_sumofdays %农历各月累积天数

nongli_daysofyear %该日是该农历年的第几天

3.2MATLAB源程序:

%getdayofweek.m

%由公历日期求星期数

runyear=floor((gongli_year-1933)/4); %到1936年的闰年数

weekday=rem((gongli_year-1936-runyear)*365+runyear*366

+gongli_sumofdays(gongli_month)+gongli_day,7)+1; %求星期数

weekdayoutput=['二','三','四','五','六','日','一'];

fprintf('这一天是星期%s,',weekdayoutput(weekday))

%gongli_input

%输入公历日期

gongli_year=input('请输入一公历个年份:');

while (gongli_year-1936)*(gongli_year-2032)>0; %输入年份不符合要求

gongli_year=input('猪头!年份应在1936至2032之间,请再输一次:');

end

gongli_month=input('请输入一个公历月份:');

while (gongli_month-1)*(gongli_month-12)>0 %输入月份不符合要求

gongli_month=input('猪头!月份应在1至12之间,请再输一次:');

end

sign=0; %判断是否是闰年

if rem(gongli_year,4)==0

sign=sign+1;

end

if sign==1

gongli_sumofdays=[0,31,60,91,121,152,182,213,244,274,305,335,366];

else

gongli_sumofdays=[0,31,59,90,120,151,181,212,243,273,304,334,365];

end

gongli_day=input('请输入一个公历日期:');

while (gongli_day-1)*(gongli_day-(gongli_sumofdays(gongli_month+1)

-gongli_sumofdays(gongli_month)))>0

gongli_day=input('猪头!这个月没有这个日期,请再输一次:');

end

%gongli2gongli.m

%将公历日期转化为农历日期

gongli_daysofyear=gongli_sumofdays(gongli_month)+gongli_day;

%求该日是当公历年的第几天

if gongli_daysofyear

%该日农历年数比公历年数少一

nongli_year=gongli_year-1;

if rem(gongli_year-1,4)==0

nongli_daysofyear=366+gongli_daysofyear-wannianli_matrix(nongli_ye ar-1935,1);

else

nongli_daysofyear=365+gongli_daysofyear-wannianli_matrix(nongli_year-19 35,1);

end

else nongli_year=gongli_year;

%该日农历年数与公历年数相同

nongli_daysofyear=gongli_daysofyear-wannianli_matrix(nongli_year-1935, 1);

end

nongli_sumofdays=0;nongli_month=3;

while nongli_daysofyear-1>nongli_sumofdays

nongli_sumofdays=nongli_sumofdays+wannianli_matrix(nongli_year-1935 ,nongli_month);

nongli_month=nongli_month+1;

end

nongli_day=nongli_daysofyear-(nongli_sumofdays-wannianli_matrix(nongli_y ear-1935,nongli_month-1));

nongli_month=nongli_month-3;

nongli_tiangan=['庚','辛','壬','癸','甲','乙','丙','丁','戊','已'];

nongli_dizhi=['申','酉','戌','亥','子','丑','寅','卯','辰','巳','午','未'];

if

wannianli_matrix(nongli_year-1935,2)~=0&nongli_month>wannianli_matrix( nongli_year-1935,2)

nongli_month=nongli_month-1;

if nongli_month==wannianli_matrix(nongli_year-1935,2)

fprintf('农历%s%s年闰%1.0f月%1.0f日。

\n',nongli_tiangan(rem(nongli_year,5)+1),nongli_dizhi(rem(nongli_year,12)+ 1),nongli_month,nongli_day)

else fprintf('农历%s%s年%1.0f月%1.0f日。

\n',nongli_tiangan(rem(nongli_year,5)+1),nongli_dizhi(rem(nongli_year,12)+ 1),nongli_month,nongli_day)

end

else fprintf('农历%s%s年%1.0f月%1.0f日。

\n',nongli_tiangan(rem(nongli_year,5)+1),nongli_dizhi(rem(nongli_year,12)+ 1),nongli_month,nongli_day)

end

%nongli_input

%输入农历日期

nongli_year=input('请输入一个农历年份:');

while (nongli_year-1936)*(nongli_year-2031)>0; %输入年份不符合要求

nongli_year=input('猪头!年份应在1936至2031之间,请再输一次:');

end

nongli_month=input('请输入一个农历月份:');

while (nongli_month-1)*(nongli_month-12)>0%输入月份不符合要求

nongli_month=input('猪头!月份应在1至12之间,请再输一次:');

end

if wannianli_matrix(nongli_year-1935,2)==nongli_month %输入月份和当年闰月相同

answer=input('是闰月吗?(y/n):','s'); %判断是否为闰月

while answer~='y'&answer~='n'

answer=input('到底是不是啊?(y/n):','s');

end

if answer=='y'

nongli_month=nongli_month+1;

end

elseif

wannianli_matrix(nongli_year-1935,2)~=0&wannianli_matrix(nongli_year-19 35,2)~=nongli_month

if nongli_month>wannianli_matrix(nongli_year-1935,2)

nongli_month=nongli_month+1;

end

end

nongli_day=input('请输入一个农历日期:');

while

(nongli_day-1)*(nongli_day-wannianli_matrix(nongli_year-1935,nongli_mont h+2))>0

nongli_day=input('猪头!这个月没有这个日期,请再输一次:');

end

sign=0;

if rem(nongli_year,4)==0

sign=sign+1;

end

if sign==1

gongli_sumofdays=[0,31,60,91,121,152,182,213,244,274,305,335,366];

else

gongli_sumofdays=[0,31,59,90,120,151,181,212,243,273,304,334,365];

end

gongli_year=nongli_year;

%nongli2gongli

%将农历日期转化为公历日期

nongli_daysofyear=nongli_day; %求该日是当农历年的第几天

if nongli_month~=1

for k=1:nongli_month-1

nongli_daysofyear=nongli_daysofyear+wannianli_matrix(nongli_year-1935, k+2);

end

end

gongli_daysofyear=nongli_daysofyear+wannianli_matrix(nongli_year-1935,1) ;

if gongli_daysofyear>gongli_sumofdays(13) %该日公历年数比农历年数多一

gongli_daysofyear=gongli_daysofyear-gongli_sumofdays(13);

gongli_year=nongli_year+1;

end

gongli_month=1;

while gongli_daysofyear-1>gongli_sumofdays(gongli_month)

gongli_month=gongli_month+1;

end

gongli_month=gongli_month-1;

gongli_day=gongli_daysofyear-gongli_sumofdays(gongli_month); getdayofweek

fprintf('%1.0f年%1.0f月%1.0f日',gongli_year,gongli_month,gongli_day)

%wannianli.m

%主程序

wannianli_matrix=[23, 3, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 30, 29, 384

41, 0, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 29, 0, 354

30, 7, 30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 384

38, 0, 30, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 0, 354 26, 6, 30, 30, 29, 30, 30, 29, 30, 29, 29, 30, 29, 30, 29, 384 45, 0, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 0, 355 35, 0, 29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 0, 354 24, 4, 30, 29, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 385 43, 0, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 29, 30, 0, 354 32, 0, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 0, 354 21, 2, 30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 384 40, 0, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 0, 354 28, 7, 30, 29, 30, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 384 47, 0, 29, 30, 30, 29, 30, 30, 29, 29, 30, 29, 30, 29, 0, 354 36, 0, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 0, 355 26, 5, 29, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 384 44, 0, 29, 30, 29, 29, 30, 30, 29, 30, 30, 29, 30, 29, 0, 354 33, 0, 30, 29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 0, 355 23, 3, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 384 42, 0, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 0, 354 30, 8, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 29, 383 48, 0, 30, 30, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 0, 355 38, 0, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 0, 354 27, 6, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 384 45, 0, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 0, 355 35, 0, 29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29, 0, 354 24, 4, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 29, 384 43, 0, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 0, 355 32, 0, 29, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 0, 353 20, 3, 30, 30, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 384 39, 0, 30, 30, 29, 30, 30, 29, 29, 30, 29, 30, 29, 30, 0, 355 29, 7, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 384

36, 0, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30, 0, 355 26, 5, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 29, 30, 384 45, 0, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 29, 30, 0, 354 33, 0, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 0, 354 22, 4, 30, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 384 41, 0, 30, 30, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 0, 354 30, 8, 30, 30, 29, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 384 48, 0, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 29, 0, 354 37, 0, 30, 29, 30, 30, 29, 30, 30, 29, 30, 29, 30, 29, 0, 355 27, 6, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30, 29, 384 46, 0, 30, 29, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 0, 355 35, 0, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 0, 354 24, 4, 30, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 384 43, 0, 30, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 0, 354 32, 10, 30, 29, 30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 384 50, 0, 29, 30, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 0, 354 39, 0, 29, 30, 30, 29, 30, 30, 29, 30, 29, 30, 29, 29, 0, 354 28, 6, 30, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30, 29, 29, 384 47, 0, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 29, 0, 355 36, 0, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 30, 0, 355 26, 5, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 30, 384 45, 0, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 0, 354 34, 0, 29, 30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 0, 354 22, 3, 29, 30, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 383 40, 0, 30, 30, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 0, 355 30, 8, 29, 30, 30, 29, 30, 29, 30, 30, 29, 29, 30, 29, 30, 384 49, 0, 29, 30, 29, 30, 30, 29, 30, 29, 30, 30, 29, 29, 0, 354 37, 0, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 29, 0, 355 27, 5, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 29, 30, 384

C++万年历实验报告

《高级语言程序设计》课程设计报告万年历程序设计

(1)课程设计名称:C++万年历设计 (2)使用工具软件:Microsoft visual C++ (3)课程设计内容简介 1、以开关语句进行执行功能的选择,这些功能分别是: A、判断闰年; B、判断某天是星期几; C、判断某年的隶属生肖; D、输出某年的日历; E、输出某月的日期; F、退出系统; 2、建立类wnl,定义类的成员函数; void isleapyear(); //判断闰年,用于输出判断结果,以流的形式bool isleap(int year); //判断闰年,返回判断结果,用于计算天数int getdays(int year,int month,int day); //获取据第一天天数 void weekdays(int year,int month,int day);//获取星期几 void printyear(int year); //输出年的日历 void printyearmonth(int year,int month); //输出某年某月的日历 void animal(int year); //判断某年的生肖 int getyear(){return Year;} //返回私有成员的值 int getmonth(){return Month;} int getday(){return Day;} 3、定义私有成员:i nt Year,Month,Day; 4、定义类的对象:_wnl; 5、为类的成员函数填写代码,满足功能实现; 6、运行环境:控制台应用程序的源程序; (4)得意之处: 1、可以满足多功能实现,可以循环执行功能; 2、可以选择每行输出的月份数; 3、有欢迎界面; 4、客户输入错误会有提示; 5、使用了C语言的流的形式,判断闰年,提高执行速度; 6、使用I/O流控制头文件iomanip.h控制月份日历的输出,更加整齐;(5)创意的技术实现

Excel中关于日期的计算公式的运用

Excel中关于日期的计算公式的运用 方法1:在A1单元格输入前面的日期,比如“2004-10-10”,在A2单元格输入后面的日期,如“2005-6-7”。接着单击A3单元格,输入公式 “=DATEDIF(A1,A2,"d")”。然后按下回车键,那么立刻就会得到两者的天数差“240”。 提示: 公式中的A1和A2分别代表前后两个日期,顺序是不可以颠倒的。此外,DATEDIF函数是Excel中一个隐藏函数,在函数向导中看不到它,但这并不影响我们的使用。 方法2:任意选择一个单元格,输入公式“="2004-10-10"-"2005-6-7"”,然后按下回车键,我们可以立即计算出结果。 计算工作时间——工龄—— 假如日期数据在D2单元格。 =DATEDIF(D2,TODAY(),"y")+1 注意: 工龄两头算,所以加“1”。 如果精确到“天”—— =DATEDIF(D2,TODAY(),"y")&"年"&DATEDIF(D2,TODAY(),"ym")&"月 "&DATEDIF(D2,TODAY(),"md")&"日" 二、计算2003-7-617:05到2006-7-713:50分之间相差了多少天、多少个小时多少分钟 假定原数据分别在A1和B1单元格,将计算结果分别放在C 1、"D1和E1单元格。

C1单元格公式如下: =ROUND(B1-A1,0) D1单元格公式如下: =(B1-A1)*24 E1单元格公式如下: =(B1-A1)*24*60 注意: A1和B1单元格格式要设为日期,C 1、"D1和E1单元格格式要设为常规. 三、计算生日,假设b2为生日 =datedif(B2,today(),"y") DATEDIF函数,除Excel2000中在帮助文档有描述外,其他版本的Excel在帮助文档中都没有说明,并且在所有版本的函数向导中也都找不到此函数。但该函数在电子表格中确实存在,并且用来计算两个日期之间的天数、月数或年数很方便。微软称,提供此函数是为了与Lotus1-2-3兼容。 该函数的用法为“DATEDIF(Start_date,End_date,Unit)”,其中Start_date为一个日期,它代表时间段内的第一个日期或起始日期。End_date为一个日期,它代表时间段内的最后一个日期或结束日期。Unit为所需信息的返回类型。 “Y”为时间段中的整年数,“M”为时间段中的整月数,“D”时间段中的天数。“MD”为Start_date与End_date日期中天数的差,可忽略日期中的月和年。“YM”为Start_date与End_date日期中月数的差,可忽略日期中的日和年。“YD”为Start_date与End_date日期中天数的差,可忽略日期中的年。比如,B2单元格中存放的是出生日期(输入____年__月__日时,用斜线或短横线隔开),在C2单元格中输入“=datedif(B2,today(),"y")”(C2单元格的格式为常规),按回车键

闽南风格老黄历的设计

龙源期刊网 https://www.wendangku.net/doc/fc3079581.html, 闽南风格老黄历的设计 作者:龙少婷丘天 来源:《青年时代》2018年第04期 摘要:随着时代的变迁,信息技术越来越好,纸质的老黄历渐渐退出了人们的生活。当 前人们过度依赖手机上的日历,由于手机界面有限,大部分只会显示万年历,往往会忽略掉很多细节。闽南老黄历以怀旧的风格为主题,用插图的形式呈现,让每个画面具有特色,让消费者在浏览中感悟闽南的文化魅力。 关键词:老黄历;闽南;闽南文化 老黄历,又称黄历、皇历,是中国农历基础上产生出来的,带有每日吉凶宜忌的一种万年历。黄历相传是又轩辕黄帝创制,故称为黄历。黄历主要内容为二十四节气,每天的宜忌、干支、值神、星宿、月相、吉神凶煞等。二十四节气中每一个节气都有其特定的含义,气节的名称便已说明这段时间的气象条件及万物之变化。 老黄历是古时帝王遵循的一个行为规范的书籍,并由钦天监计算颁订,因此也成皇历。这里面不但包括了天文气象、时令季节,而且还包含了人民在日常生活中要遵守的一些晋级,其内容指导中国劳动农民耕种时机,故又称农民历,中国民间俗称为通书,但因通书的“书”字跟“输”字同音,因避忌故又名通胜。不论富人还是穷人,不管你是高官还是黎民百姓,都不可避免七灾八难。我国有句俗语:“官问刑,富问灾,平民百姓问发财。”在古人的思想观念中,人们的富贵贫贱、吉凶祸福,以及生老病死、穷富得失乃至经商营利,无不取决于冥冥之中的非人类自身所能把握的命运。 闽南,即指福建的南部,从地域和文化等多方面来说,闽南是指包括厦门、漳州、泉州在内的福建东南沿海地区。说起闽南的特色,第一个便是闽南的建筑,它独特的建筑结构和装饰风格具有极强的地域特色。闽南建筑的屋顶多用红色的筒瓦、板瓦;寺观、祠堂的彩瓷剪粘装饰五彩缤纷,耀眼夺目。我国传统民居通常都使用青砖青瓦,只有闽南沿海地区使用大量红砖红瓦,特别是装饰及色彩纹样在中国建筑史上有它的独特之处,形成了独特的“红砖红瓦文化区”。其建筑从表现形式的角度来说,并没有一种极张扬的、类型化的形式,但它在砖石墙的装饰及美化上有着较为特殊的表现,从审美的角度来看,红砖墙反映着其他地域的风格特征,外墙造型独特,多形成了所謂的闽南风格。在谈到颜色时,红砖白石形成红白相间的墙面视觉效果,而且这种凹凸建立在光线的基础上,并形成一种微妙的韵律。 然而,作为一本合格的老黄历,应做到独特的设计,简单复古的传统日历风格,真正的简约掩盖不住出众的内涵,不需要花枝招展的万紫千红,一样绽放独特的风格。选用耐磨纤维PU材质,日历表皮是纤维PU,耐水耐磨,结实耐用,韧性和透气性、耐磨俱佳。巧妙的设计,封面翻转到后面成为支架,背面附有小磁铁,采用三角形原理,可以形成稳当的桌面立架,装订采用封面翻转就能成为桌面立架,让财富与时间一起“立”足于生活。方便更好安排,

嵌入式系统课程设计题目

嵌入式系统课程设计题目 2016.5 共同要求:在LCD上显示设计题目、设计者名字(主设计者在前) 常用外设引脚: LED:LED0(上边)~LED3(下边)分别接PF5~PF9引脚,低电平点亮 按钮:K0(上边)~K3(下边)分别接PA0、PC13、PA8、PD3引脚,另一端均接地,按下为低电平。 蜂鸣器:蜂鸣器BEEP接PB10引脚,为有源蜂鸣器,PB10输出低电平发声 1、频率计设计 所谓频率计,就是每秒的计数值。使用2个通用定时器,一个计时,另一个对外部信号计数,在LCD 上显示出计数值和频率值。 2、用DAC设计低频信号发生器——硬键盘 使用DAC的模拟输出功能,模拟输出正弦波、方波、三角波信号。 用实验板上的4个按钮(K0~K3)控制输出:K3用于循环选择输出的信号类型,K0、K1、K2用于设置输出的频率,K2用于循环选择输出频率的某个位(个十百千万),K0按钮用于对选中的位加1,K1用于对选中的位减1。 在LCD上显示出频率值和输出信号的波形(曲线)。 3、用DAC设计低频信号发生器——软键盘 使用DAC的模拟输出功能,模拟输出正弦波、方波、三角波信号。 在LCD上设计4个触摸屏按钮(K0~K3)控制输出:K3用于循环选择输出的信号类型,K0、K1、K2用于设置输出的频率,K2用于循环选择输出频率的某个位(个十百千万),K0按钮用于对选中的位加1,K1用于对选中的位减1。 在LCD上显示出频率值和输出信号的波形(曲线)。 4、直流电机控制器设计——硬键盘 直流电机控制原理:理论上转速与电压成正比,用PWM控制则与占空比成正比;旋转方向与绕组电流的方向有关,改变绕组接电源的极性,便可改变电机的转向。 使用通用定时器的比较输出引脚,接直流电机的绕组,改变比较寄存器的值,即改变了占空比,便可调速(可以使用ARM实验箱上的直流电机(有驱动),只需把时钟信号和地线接到直流电机上即可)。 用4个按钮分别控制启动、停止、加速、减速;在LCD上显示出电机的转速等级。 5、直流电机控制器设计——软键盘

电子万年历实验1

电子万年历实验 实验要求: 在LCD (12864或者1602)上显示: 年月日 星期 时间 可以 自由修改显示的 年月日 星期 时间 实验需求: 硬件需求: 1.需要按键做初始化等需求 2.需要LED 作为显示输出。 2需要一款硬件作为实时时钟 器件选型 DS1302 实时时钟芯片,三线接口,带涓流充电。 DS1307 实时时钟芯片,I2C 接口。 DS1337 实时时钟芯片,I2C 接口,带两个日历闹钟。 PCF8563 实时时钟芯片,I2C 接口,带中断输出。 PCF8583 实时时钟芯片,I2C 接口,带中断输出,内置的32.768KHz 振荡器,256个字节RAM ,但性价比较差。

选型结论: LCD:12864 键盘:4*4矩阵键盘 实时时钟芯片:DS1302 结构框图 DS1302 DS1302 是DALLAS 公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31 字节静态RAM 可通过简单的串行接口与单片机进行通信 可提供: --秒分时日日期月年的信息 --每月的天数和闰年的天数可自动调整 --可通过AM/PM 指示决定采用24 或12 小时格式

--保持数据和时钟信息时功率小于1mW

DS1302引脚 X1 X2 32.768KHz 晶振管脚 GND 地 CE 复位脚 I/O 数据输入/输出引脚 SCLK 串行时钟 Vcc1,Vcc2 电源供电管脚 各引脚的功能为: Vcc1:主电源;Vcc2:备份电源。当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。SCLK:串行时钟,输入,控制数据的输入与输出; I/O:三线接口时的双向数据线; CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次, CE提供结束单字节或多字节数据传输的方法。

一个计算万年历的简单程序

一个计算万年历的简单程序 通常我们只知道生活当天的前后几天是星期几,即便是翻日历,也只能知道有限日期的星期数。那么有没有一种方法可以让我们知道任何一天是星期几呢?有,下面我将向大家介绍一种方法,用以编写万年历的程序。 首先我们必须约定一些法则,我们用Y、M、D分别表示年、月、日,用数字0-6分别表示星期日-星期六,这样我们就可以开始推导我们的公式了。 我们知道2002年9月1号为星期日,如果我们要想知道2002年9月10号为星期几,可以这样算:(0+(10-1))%7=(0+9)%7=2,即星期二。同样可算得2002年9月20号为:(0+(20-1))%7=(0+19)%7=5,即星期五。但是这样算需要把日期减1,不太方便,为了解决这个问题,我们可以假设每个月有一个0号,由于2002年9月1号为星期日,那么2002年9月0号为星期六,这样算9月10号,只需代入10既(6+10)%7=2。事实上,9月0号也就是8月31号,每个月0号的星期数实际上就是每个月1号的前一天的星期数。我把这个星期数称之为每个月的代码。有了这个代码,要算这个月任一天的星期数都好办了。 以上讨论的是一年中每个月的代码,事实上对于每年也有一个代码,这个代码就是每年1月0号(即1月1号的前一天)的星期数,也就是一月份的代码。如果我们能够找到每年的代码之间的关系,那么要计算万年历就易如反掌了。 (一)推算年的代码公式 我们都知道,平年一年有365天,即52周多1天。闰年为366天即52周多2天。我们先只考虑平年的情况。 假设第N年的代码为W,则第N+1年的代码为(W+1)%7,而第N+K年的代码则为(W+K)%7。这是因为从第N年到第N+K年共经过了K年,每过一年也就是过了52周余1天,经过K年也就是过了52*K周余K天,将多余的天数K加上第N年的代码W再对7取模,所得也就是第N+K年的代码了。 下面我们把闰年也考虑进来。判断闰年的规则是,能被4整除,并能被100和400同时整除的年份就是闰年。所以从第N年到第N+K年间共有K/4 -K/100+K/400个闰年,而每个闰年有52周余2天,要比平年多余了1天,即共多余了K/4-K/100+K/400天。我们应该把这些天也加进去,所以第N+K年的代码应为(W+K+K/4-K/100+K/400)%7。 这样子是不是就考虑完全了呢?并非如此,我们还有两点没考虑到。第一点是第N年是不是闰年。如果第N年是闰年的话,它本身就是52周余2天,而我们在上面却是把它当作平年来计算的,少算了1天,应加上。所以在第N年为闰年的时候上式应为 (W+(K+1)+K/4-K/100+K/400)%7。第二点是第N+K年是不是闰年。如果第N+K年是闰年,虽然它有52周余2天,但只有在算第N+(K+1)年的时候,才需要多加它那一天,而在算第N+K年的时候不需要多加这1天,因此我们必须将上式改为 (W+(K+1)+(K-1)/4-(K-1)/100+(K-1)/400)%7(注意千万不能改为 (W+(K+1)+(K/4-K/100+K/400-1))%7=(W+K+K/4-K/100+K/400)%7)。 由此我们可以得出当第N年为闰年时,第N+K年的代码计算式为: A=(W+(K+1)+(K-1)/4-(K-1)/100+(K-1)/400)%7 为了方便计算,我们可以取N为0,也就是假设公元元年的代码为W。因为公元元年也是闰年,符合上式,那么当我们输入的年份为Y时,此时就有K=Y,也就是说第Y年的代码为 A=(W+(Y+1)+(Y-1)/4-(Y-1)/100+(Y-1)/400)%7

基于单片机的GPS时间校准设计

[请输入学校名称] [请输入专业] 基于单片机的GPS时间校准设计 姓名: [请输入姓名] 学号: [请输入学号] 指导教师:[请输入指导教师] 2017年4月21日

摘要: (3) Abstract (4) 第一章概述 (5) 1.1实时时钟研究的背景及意义 (5) 1.2论文主要研究内容 (5) 1.2.1 系统设计实现的目标 (5) 1.2.2 系统的总体设计 (5) 第二章硬件电路设计 (7) 2.1单片机控制部分 (7) 2.2 DS1302时钟芯片部分 (10) 2.3LCD1602液晶显示部分 (12) 2.5.2 1602引脚功能说明 (12) 2.5.3 1602LCD的指令说明及时序 (13) 2.5.4 1602LCD的RAM地址映射及标准字库表 (14) 2.5.5 1602LCD的一般初始化(复位)过程 (16) 2.4.6 1602LCD的电路连接 (16) 2.4 GPS模块VK2828U7G5LF部分 (16) 第三章软件部分设计 (21) 3.1 按键程序流程图 (23) 结束语 (32) 致谢词 (33) 参考文献 (34) 附录 (35) 硬件原理图与PCB图 (35) 源程序: (36)

摘要: 本文介绍了基于STC89C52单片机的多功能电子万年历的硬件结构和软硬件设计方法。本设计由数据显示模块、GPS模块、时间处理模块和按键输入模块四个模块组成。系统以STC89C52单片机为控制器,以DS1302时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。GPS模块采用了VK2828U7G5LF,万年历采用直观的数字显示,数据显示采用1602液晶显示模块,可以在LCD1602上同时显示年、月、日、周日、时、分、秒,和GPS模块的工作模式。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。 关键字:单片机,时钟芯片, 温度传感器, 1602液晶显示器

EDA实训万年历

《EDA技术与应用》实训报告指导教师:

实训题目:数字日历 1. 系统设计 1.1 设计要求 1.1.1 设计任务: 设计一个数字日历电路 1.1.2 技术要求: ⑴用Verilog HDL 语言设计一个数字日历。 ⑵数字日历能正确显示年、月、日、时、分和秒。 ⑶通过开关分别控制对年、月、日或时、分、秒校对及自动切换、,并且运用 按钮对年、月、日或时、分、秒校对。 ⑷通过按钮对数码管全部清零。 ⑸拓展功能:添加时钟闹钟功能,并通过LED管显示。 1.2 方案比较: 由于这次实验用到的仪器是EDA实训仪,数码管个数只有八个,因此不能同时显示年、月、日、时、分、秒。但是实训仪的LED管只有12个,因 此在拓展功能时12 小时做一个周期的整点记时显示。在多次的测试和修改 后,得到此最好方案。 1.3 方案论证 1.3.1 总体思路: 通过EDA S程的学习,可知运用Verilog HDL语言设计一个数字日历 括计时器模块(jsq60、j sq24 )、年月日模块(nyr2009)、控制模块 (conr)、校时选择模块(mux_4、显示选择模块(mux_16和闹钟定时模块 (LED1)、闹钟灯模块(nzd);然后将各个模块连接起来画成原理图再下载 到实训仪上,调节开关及按钮来实现数字日历的功能。 1.3.2 设计方案: 总原理图如下:

2 ?各个模块程序的设计 (1)设计一个分频器进行20MHz分频得到实训所需的1Hz的频率 分析:这是个20MHZ寸钟的分频器,将原来EDA实训仪提供的频率为20MHZ 的时钟转换成频率1HZ的时钟,然后输出到有需要的端口,触发模块起作用。 ⑵分别设计一个能显示年月日和时分秒的程序 校准年月日和秒分时的原理图如下: 分析:①当k=0时,开关j1,j2,j3校秒时分然后将信号分别送到jsq24模块的jm(校秒)、jf (校分)、js (校时)。 ②当k=1时,开关j1,j2,j3校年月日然后将信号分别送到nyr2009模块的jr(校日)、jy (校月)、jn (校年)。 计算年月日的模块如下: FIHI Ilk m ■!:! 下町nr TUT TFT) H'j 31 , mzitc' FIH iOS H<匚; rm c 计七匚― H ?- i-im LTJ rn ?■ FIM Cl | r-NLCs' M'l t Fl处i/l FIW反

电子表格日期公式

竭诚为您提供优质文档/双击可除 电子表格日期公式 篇一:excel中几个时间计算公式 假设b2为生日 =datedif(b2,today(),"y") datediF函数,除excel2000中在帮助文档有描述外,其他版本的excel在帮助文档中都没有说明,并且在所有版本的函数向导中也都找不到此函数。但该函数在电子表格中确实存在,并且用来计算两个日期之间的天数、月数或年数很方便。微软称,提供此函数是为了与lotus1-2-3兼容。 该函数的用法为 “datediF(start_date,end_date,unit)”,其中start_date 为一个日期,它代表时间段内的第一个日期或起始日期。end_date为一个日期,它代表时间段内的最后一个日期或结束日期。unit为所需信息的返回类型。 “y”为时间段中的整年数,“m”为时间段中的整月数,“d”时间段中的天数。“md”为start_date与end_date日期中天数的差,可忽略日期中的月和年。“ym”为start_date 与end_date日期中月数的差,可忽略日期中的日和年。“yd”

为start_date与end_date日期中天数的差,可忽略日期中的年。比如,b2单元格中存放的是出生日期(输入年月日时,用斜线或短横线隔开),在c2单元格中输入 “=datedif(b2,today(),"y")”(c2单元格的格式为常规),按回车键后,c2单元格中的数值就是计算后的年龄。此函数在计算时,只有在两日期相差满12个月,才算为一年,假如生日是20xx年2月27日,今天是20xx年2月28日,用此函数计算的年龄则为0岁,这样算出的年龄其实是最公平的。 身份证号提取年龄 =datediF(--text((len(a1)=15)*19”即可获得当时的日期时间; 2、使用公式:用=now()而非=date(),=date()只有日期,然后进行菜单“工具->选项”,选择“重新计算”页,选中“人工重算”,勾不勾选“保存前自动重算”看自己的需要和想法了,如果勾选了,那日期时间那总是最后一次保存的日期时间,不勾选的话,如果你的表格中有公式记得准备存前按F9 篇二:excel函数--时间和日期函数 时间和日期函数 1.date 用途:返回代表特定日期的序列号。

二十八星宿日论命吉凶

二十八星宿日论命吉凶 论命及命诀依其星宿可断每日之行事吉凶,逢其星宿所当之日出生之人能断一生吉凶。使用万年历查询当日所属的星宿,再分析讲解即可,也可使用以下对照表。二十八星宿查对表 正月二月三月四月五月六月七月八月九月十月十一十二 初一室奎胄毕参鬼张角氐心斗虚 初二壁娄昴觜井柳翼亢房尾女危 初三奎胄毕参鬼星轸氐心箕虚室 初四娄昴觜井柳张角房尾斗危壁 初五胄毕参鬼星翼亢心箕女室奎 初六昴觜井柳张轸氐尾斗虚壁娄 初七毕参鬼星翼角房箕女危奎胄 初八觜井柳张轸亢心斗虚室娄昴 初九参鬼星翼角氐尾女危壁胄毕 初十井柳张轸亢房箕虚室奎昴觜 十一鬼星翼角氐心斗危壁娄毕参 十二柳张轸亢房尾女室奎胄觜井 十三星翼角氐心箕虚壁娄昴参鬼 十四张轸亢房尾斗危奎胄毕井柳 十五翼角氐心箕女室娄昴觜鬼星 十六轸亢房尾斗虚壁胄毕参柳张 十七角氐心箕女危奎昴觜井星翼 十八亢房尾斗虚室娄毕参鬼张轸 十九氐心箕女危壁胄觜井柳翼角

二十房尾斗虚室奎昴参鬼星轸亢 二一心箕女危壁娄毕井柳张角氐 二二尾斗虚室奎胄觜鬼星翼亢房 二三箕女危壁娄昴参柳张轸氐心 二四斗虚室奎胄毕井星翼角房尾 二五女危壁娄昴觜鬼张轸亢心箕 二六虚室奎胄毕参柳翼角氐尾斗 二七危壁娄昴觜井星轸亢房箕女 二八室奎胄毕参鬼张角氐心斗虚 二九壁娄昴觜井柳翼亢房尾女危 三十奎胄毕参鬼星轸氐心箕虚室 论命的讲解: 【虚】虚日鼠凶.名盖延。虚星造作主灾殃.男女孤眠不一双.内乱风声无礼节.儿孙媳妇伴人床. 开门放水遭灾殃.虎咬蛇伤又卒亡.三三五五连病疾.家破人亡不可当. 忌:开门放水,不论何事,小心退守则吉。 此日出生之人薄福,又好与人争而惹祸,万事要小心谨慎,要注意。 【危】危月燕凶.名坚铎。危星不可造高楼.自遭刑吊见血光.三年孩儿遭水厄.后生出外不还乡. 埋葬若还逢此日.周年百日卧高床.三年五载一悲伤.开门放水到官堂. 宜:出行、纳财。 忌:起造、埋葬、开门、放水,其它要戒慎。 此日出生之人希望可达成,但中途多挫折。 【室】室火猪吉.名耿纯。室星修造进田牛.儿孙代代近王侯.富贵荣华天上至.寿如彭祖八千秋. 开门放水招财帛.和合姻婚生贵儿.埋葬若能依此日.门庭兴旺福无休. 宜:婚礼、移徒、建造、祭祀、掘井。

简单万年历设计

信电学院 电子信息工程专业CDIO一级项目项目设计说明书(2013/2014学年第一学期) 项目名称:简单万年历的设计 专业班级:电子信息工程 学生姓名: 学号: 指导教师: 设计周数:一周 设计成绩: 2013 年12 月29 日

目录 1项目设计目的及任务--------------------------------------------------------------2 2 设计方案--------------------------------------------------------------2 3 电路仿真与分析--------------------------------------------------------------9 4项目设计心得-------------------------------------------------------------17 5参考文献-------------------------------------------------------------17

1.项目设计目的及任务 用51单片机或52单片机为主体,设计并制作一台数字万年历。基本要求有时钟显示(时/分/秒);日期、星期显示,可设定月份;上电即可显示当前系统的时间该系统的设计电路是以 AT89C51单片机为核心控制器,其外围电路主要包括时钟模块,液晶模块,和与电脑主机通信模块等。通过 PC 机在 Internet 上同步时间,整个系统使用C语言进行编程,实现其设计的各种功能。输出方式灵活、功耗低、计时准确、性能稳定、维护方便等优点。实用电子时钟是一个时间控制系统,既能作为一般的时间显示器,同时可以根据需要扩展其功能。系统上电自检后,实时实现小时、分钟、秒以及日历的显示等指示信息的显示,通过按键可实现校对时间等功能。 2 设计方案 2.1总方案设计:设计简单万年历一般有三个可行方案,方案一:纯硬件电路系统,各功能采用分离的硬件电路模块实现。用时序逻辑电路实现时钟功能,用555定时器实现闹钟的设定。但这种实现方法可靠性差、控制精度低,灵活性小、线路复杂、安装调试不方便,而且不方便实现对系统的扩展。方案二:用可编程逻辑器件(PLD)实现。这种方案与前一种相比,可靠性增加,同时可以很好的完成时钟的功能。同时这种方案只能选用数码管显示,显示的效果不够理想,无法很好的完成扩展功能的要求。同时,系统的灵活性不够。方案三:采用单片机作为系统的控制核心。随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行I/O口、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元、PWM控制输出单元、PWM输出时的死区可编程控制功能等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工业流水线控制系统、作为家用电器的主控制器、分布式控制系统的终端节点或作为其主控制节点起中继的作用、数据采集系统、自动测试系统等。我们选用的是方案三。因为单片机的出现,并在各技术领域中得到如此迅猛的发展,与单片机构成计算机应用系统所形成的下述特点有关:

万年历实验报告

篇一:电子万年历实验报告 重庆电力高等专科学校 计算机科学系 实训报告 课程名称 实验名称 班级信息0911 姓名廖林单片机应用技术电子万年历 学号 200903020243 教师任照富 日期 2010-12-28 地点一教七机房一、实训任务: 1、看实训要求,计划出自己实训所要用元件,在网上查找资料。 2、思考仿真原理图,然后画出来(具体i/o口暂时不确定)。 3、在网上找一些程序,然后自己改一些,进行编译。 4、编译无误之后,跟原理图相联系,完成最终的仿真图。 5、进行最后的改写,把程序和仿真原理图确定下来。 6、根据仿真图形,制作出实物图。 7、在实物制作过程中,进行电路检查和最后的调试。 二、实训要求: 要求:能显示阳历的年、月、日、星期、时、分、秒; 能显示阴历的年、月、日; 能进行日期、时间的调整。 扩展:能显示当前温度; 有闹钟功能(至少2个) 选择ds1302时钟芯片,温度传感器采用ds18b20数字温度传感器。 三、实训环境(软件、硬件): 软件:keil protues7.5 硬件:计算机2单片机的应用 四、实训意义:在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。因此我们需要一个定时系统来提醒这些忙碌的人,而数字化的钟表给人们带来了极大的方便。由于单片机具有灵活性强、成本低、功耗低、保密性好等特点,所以电子日历时钟一般都以单片机为核心,外加一些外围设备来实现。 电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。所以,电子万年历无论作为竞赛题目还是毕业设计题目都是很有价值。对于这个实验项目,我们还要有一些其他的基本知识掌握和意义:(1)在学习了《数字电子技术》和《单片机原理及接口技术》课程后,为了加 深对理论知识的理解,学习理论知识在实际中的运用,为了培养动手能力和解决实际问题的经验,了解专用时钟芯片ds1302,并会用ds1302芯片开发时钟模块,应用到其他系统中去。熟悉keil和protues软件调试程序和仿真. (2)通过实验提高对单片机的认识; (3)通过实验提高焊接、布局、电路检查能力; (4)通过实验提高软件调试能力; (5)进一步熟悉和掌握单片机的结构及工作原理。

带温度计的万年历

设计课题题目: 带温度计的万年历 一、设计任务与要求 1. 显示准确的北京时间(时、分、秒)及公历日期显示功能(年、月、日); 2. 可通过按键切换年、月、日及时、分、秒的显示状态; 3. 可随时可以调校年、月、日或时、分、秒; 4. 可每次增减一进行时间调节,也可快速增减进行时间调节; 5. 可显示环境温度。 二、系统设计方案 方案一、用主芯片为AT89C51的单片机控制实现,使用单片机内部的定时计数器实现时间的设定,使用按键进行时间的调整和定时,按键有蜂鸣器提示,温度传感器使用DALLAS 公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配处理器等优点。显示时间和温度使用数码管显示。 方案二、用主芯片为STC89C52的单片机控制实现,为了满足单片机系统的实时控制的需求,采用实时钟芯片DS1302,使用按键进行时间的调整和定时,温度传感器使用 DS18B20。显示时间和温度使用LCD1602显示。 方案一片内定时器会导致计时节拍的时间误差,当进行年、月、日的日历计时,定时中断误差扥积累就会很大。使用片内定时器进行计时的时候,单片机始终要处于工作状态。才能维持计时时间,一旦停机或进入待机状态,开机后,计时时间就需要重新设定。为了满足单片机系统的实时钟需求,本设计采用的是方案二,系统框图如图2-1所示。 图2-1 三、单元电路分析与设计 1. 原理分析 1.1主控制器 单片机STC89C52 具有低电压供电和体积小等特点,如图3-1所示。

1.2晶振电路 AT89S52引脚XTAL1和XTAL2与晶体振荡器及电容C1、C2按图3-2所示方式连接。晶振、电容C1/C2及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz 之间,电容C1、C2取值范围在5~30pF 之间。 根据实际情况,本设计晶振选择频率为12MHZ ,电容选择30pF 如图3-2。经计算得单片机工作的机器周期为:12×(1÷12M )=1us 。振荡器的振荡信号从XTAL2端输入到片内的时钟发生器上。时钟发生器是个二分频的触发器,它将振荡器的信号频率fosc 除以2,向CPU 提供两相时的时钟号。 1.3复位电路 时钟电路工作后, 芯片内部开始进行初始复位,如图3-3 。 1.4 LCD 显示电路 显示器是单片机常用的功能单元之一,显示器的工作是由单片机通过显示接口驱动的。本设计采用的是LCD1602显示电路图如图3-4所示。

万年历_开题报告

xxxxx 毕业论文(设计) 开题报告 题目基于年历设计 学院电气工程学院 年级 xxx级 专业电子信息工程 姓名宋飞 学号 2011588693 指导教师欧阳飞 教务处制表 2012年12月10日

一、选题依据 课题来源、选题依据和背景情况;课题研究目的、学术价值或实际应用价值时间对人们来说总是那么宝贵,工作的忙碌和繁杂容易使人忘记当前的时间。然而遇到重大事情的时候,一旦忘记时间,就会给自己和他人带来很大的麻烦。平时我们要求上班准时,约会或召开会议必然要提及时间:火车要准点到达,航班要准点起飞;工业生产中,很多环节都需要用时间来确定工序替换时刻。所以说能随时准确的知道时间并利用时间,是我们生活和工作中必不可少的。 想知道时间,手表当然是一个很好的选择,但是,在忙碌当中,我们还需要个“助理”及时的给我们提醒时间。所以,计时器最好能够拥有个定时系统,随时提醒容易忘记时间的人。最早能够定时、报时的时钟属于机械式钟农,但这种时钟受到机械结构、动力和体积的限制,在功能、性能以及造价上都没办法与电子时钟相比。 电子万年历是采用电子电路实现对时、分、秒进行数字显示的计时装置,广泛应用于个人家庭、车站、码头办公室等公共场所,成为人们日常生活中不可少的必须品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时报警、按时自动打铃、定时广播、自动启闭灯箱、通断动力设备、甚至各种定时电气的自动启动等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。在国内:单片机的学习呈上升趋势,但很多人学习是无头绪,不知道从何入手,行业发展迅速,国内生产技术不断提升。国内企业为了获得更大的投资收益,在生产规模和产品质量上不断提升,开发单片机呈必然趋势。我国生产的电子万年历有很多,总体上来说是研究多功能电子万年历为主,使万年历除了具有原来的时间、日期等基本功能外,还具有闹钟,报警等功能,商家生产的电子万年历更从质量、价格、实用上考虑不断改变电子万年历的设计,使其更有市场。在科技发达的今天,智能化必将是以后的发展趋势,所以开发活和学习单片机是社会发展的必然需求。

万年历课程设计实验报告

百度文库- 让每个人平等地提升自我 黄淮学院 JAVA 课程设计报告 题目:《万年历》课程设计 学院:信息工程学院 专业:计算机科学与技术 班级:计科1101班 指导老师: 二0一三年六月

目录 前言 (2) 1需求分析 (2) 1.1需求分析 (2) 1.2功能设计 (3) 2.概要设计 (3) 2.1程序设计思路 (3) 3.流程图 (5) 4.程序的主要类,和说明: (6) C (17) F (18) G (18) I (19) M (19) S (19) U (20) 类分层结构 (20) 接口分层结构 (21) 前言 Java的前身是Oak,它一开始只是被应用于消费性电子产品中。后来它的开发者们发现它还可以被用于更大范围的Internet上。1995年,Java语言的名字从Oak编程了Java。1997年J2SE1.1发布。1998年J2SE1.2发布,标志Java2的诞生。十多年来,Java编程语言及平台成功地运用在网络计算及移动等各个领域。Java的体系结构由Java语言、Java class、Java API、

Java虚拟机组成。它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。Java支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。Java的平台标准有Java ME,Java SE和Java EE。Java发展到今天,它的卓越成就及在业界的地位毋庸置疑。目前在众多的支持Java的开发工具中主要的7有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。其中Java Development Kit 简称JDK是大多开发工具的基础。以上的每种开发工具都 有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具。 1需求分析 1.1需求分析 本程序的要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查询。 1.2功能设计 本程序要构建的万年历程序,其功能有以下几个方面: (1)实现图形界面,通过简单的单击按钮能实现查询日期操作。 (2)能以月历形式显示日期与星期。 (3)提供月份的下拉形式菜单来选择月份。 2.概要设计 2.1程序设计思路 (1)日期类的设计: 设定日期年的方法 public void changeYear(String year){ cal.set(Calendar.YEAR,Integer.parseInt(year)) ; updateCalendar();//每次修改年后,更新日期

万年历生产工艺实训报告

“电子产品综合设计”课程 基于单片机带温度的液晶万年历 设计报告书 \ 目录 1 绪论....................................................................................错误!未定义书签。 2 设计要求及设计框图 (3) 2.1 设计要求 (3) 2.2 设计框图 (3)

3 知识要点..........................................................................错误!未定义书签。 3.1 LMO16L液晶模块 (3) 3.2 基于Proteus ISIS 7的液晶模块仿真 (4) 3.3 时钟芯片DS1302 (10) 3.3.1 DS1302的控制字节 (4) 3.3.2 数据输入输出(I/O) (11) 3.3.3 DS1302的寄存器 (4) 3.4 DS18B20数字温度传感器 (12) 3.4.1技术性能描述 (12) 3.4.2 DS18B20主要的数据部件 (13) 3.4.4 DS18B20的主要特性...............................................错误!未定义书签。 4 生产技术文件 (5) 4.1设计电路图 (5) 4.2技术说明 (6) 4.3技术说明 (7) 4.4元器件明细表 (8) 4.5PCB板工艺流程图 (9) 4.6工艺流程图 (10) 4.7印制板装配图 (11) 4.8印制板工艺说明 (12) 4.9制造工艺 (13) 4.10焊接工艺说明 (14) 4.11工具明细表 (15) 5作业指导书 (16) 5.1人员分配 (17) 5.2岗位操作指导书 (18) 5.3安全职责规程 (19) 5.4附 (20) 6设计总结 (20) 1、绪论 1.1课题背景 现在电子产品制造业的发展日新月异,产品的电路、功能设计和生产工艺在不断提升。电子产品生产的指导思想是按照发展要有新思路、改革要有新突破、开放要有新局面、工

万年历时钟实验报告

万年历时钟设计报告 专业: 年级: 姓名: 学号: 指导老师:

万年历的设计与仿真 一、实验目的; 电子时间显示器现在在任何地方都有涉及到,例如电子表和商场、车站的时间显示等等,所以它是一种既方便又实用的技术,而我们所做的万年历则是在它的基础上做出来的,通过万年历的制作,我们可以进一步了解计数器的使用,了解各个进制之间的转换,以及他的任意进制计数器的构成方法等,并且进一步了解74LS160以及74ls90的性质,以及门电路的使用等。 二、实验要求: A. 设计一个能显示“年月日”、“星期”、“时分秒“的十进制万年历时钟显示器; B. 要求要满足一天24小时,一小时60分,一分60秒; C. 关于显示星期天时,要用8来代替; D. 年月日显示时,要满足大月31天,小月30天,闰年二月29天,平年二月28天; 三、实验器材: ISIS 仿真软件、一些常用逻辑门(与门、非门,或门等); 本实验要用到得芯片有:74ls160 74ls161 74ls160 74ls160: 74ls160是一块十进制上升沿触发计数器如右下图: 其中MR 是异步清零端,LOAD 是同步置数端 CLK 是时钟脉冲输入端;D0、D1、D2、D3是 置数输入端,Q0、Q1、Q2、Q3是计数输出端, RCO 是进位端; 74ls161与74ls160的功能基本相同,74ls160是十进制的,而74ls161是十六进制的。 异步清零端 进位端 同步置数端

置九端 74ls90: 74ls90是一块二—五—十进制计数器其图如下: 其中 2、3端为置零端,6、7端为置九端, CKB 为五进制脉冲输入端,CKA 二进制脉冲输入端, ,Q0、Q1、Q2、Q3是计数输出端; LED 七段显示器: 其功能是将BCD 码以十进制形式显示出来,其图如下: 四、万年历时钟构架图: 万年历时钟显示器需要有显示“年”、“月”、“日”、“星期”、“时”、“分” “秒”的功能,又根据它们之间的进位和置位关系 可知,它们主要有以下各部分组成,其整个电路的 框架图如下图所示: 五进制脉冲输入端 置零端 二进制脉冲输入端

流年流月流日飞星算法和日九星算法

]流年流月流日飞星算法和日九星算法 在我的《电脑医生万年历》里的日九星是和香港出版的《李宪章通胜日历》同;但是我看到好多书上的关于流年流月流日飞星算法;其中日飞星算法有争论。不知那个才是正确的?希望知情者能来帮一下。下面是我从一本书看到的。不知对不对、如大家认为正确我就把它加到《电脑医生万年历》里。 一、流年紫白星起例 歌诀:年上吉星论甲子,逐年星逆中宫取,上中下作三元汇,一上四中七下使; 推法:上元从坎宫起甲子 中元从巽宫起甲子 下元从兑宫起甲子 六十甲子的顺序依宫逆行找出该年的紫白星,然后把该星入中顺行排山掌就可以找出八卦方位的紫白星,以下元甲子为例:下元从兑宫起甲子,即是甲子年为7、乙丑年为6、丙寅年为5、丁卯年为4、戊辰年3……癸未年为6、甲申年为5、今年五黄居中,八方伏吟,五黄所到之处不宜动 二、月紫白星起例 歌诀:子午卯酉八白起 寅申巳亥二黑求 辰戌丑未五黄中 推法: 凡是子午卯酉年的正月为8、二月为7、三月为6、四月为5、……十二月为6。 寅申巳亥年的正月为2、二月为1、三月为9……十二月为9。 辰戌丑未年的正月为5、二月为4、三月为3……十二月为4, 把该月的数入中顺行排山掌即可找出该月八个方位的紫白星。 三、日家紫白星起例 歌诀:日家白法不难求,二十四气六宫周,冬至,雨水及谷雨,阳顺一七四中游,夏至、处暑、霜降后,九三六星逆行求。 求法:

冬至后的第一个甲子日为一白、乙丑日为二黑、丙寅日为三碧,依次…… 雨水后的第一个甲子日为七赤、乙丑日为八白、丙寅日为九紫,依次…… 谷雨后的第一个甲子日为四碧、乙丑日为五黄、丙寅日为六白,依次…… 夏至后的第一个甲子日为九紫、乙丑日为八白,丙寅日为七赤,依次…… 处暑后的第一个甲子日为三碧、乙丑日为2黑,丙寅日为一白,依次…… 霜降后的第一个甲子日为六白、乙丑日为五黄,丙寅日为四绿,依次…… 把该日的星入中在排山掌,按冬至后星顺行,夏至后星逆行,即可找出该日八个方位的紫白星。 四、时家紫白星起例 时家紫白星的求法分冬至后顺行,夏至后逆行。 冬至后: 子午卯酉日子时一白,丑时二黑,寅时三碧,卯时四绿; 辰戌丑未日子时七赤,丑时五黄,寅时六白,卯时七赤; 寅申巳亥日子时七赤,丑时八白,寅时九紫,卯时一白。 把该星入中顺飞九宫即可找出该时八方的紫白星。 夏至后: 子午卯酉日子时起九紫,丑时八白,寅时七赤…… 辰戌丑未日子时起六白,丑时五黄,寅时四绿…… 寅申巳亥日子时起三碧,丑时二黑,寅时一白。 把该星入中逆排即可找出该时八方的紫白星。

相关文档