C语言课程设计实验报告(万年历)

C语言课程设计实验报告(万年历)
C语言课程设计实验报告(万年历)

C语言课程设计

一、题目及功能描述

题目:万年历的设计

利用C语言设计出万年历,使其实现如下要求

1、输入一个年份,在屏幕上输出该年的年历(包括每月的天数和所对应的星期几),并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合年历显示规范。假定输入的年份在1-9999年之间。

2、输入年月,输出该月的月历。

3、输入年月日,输出距今天还有多少天,是星期几,是否是公历节日。:

4、指定键盘的某些键,用于控制变换不同年、月、日的显示。即:当前若正在显示2011年的年历,按下键盘“←”方向键后,年历变为2010年的。

二、使用的所有变量的说明

变量说明:(以下均为整型变量)

year 表示年份的变量

month 表示月份的变量

day 表示日期的变量

select 表示菜单选择的变量

i 表示月份的变量

j 表示一个月中的某一天的变量

sum 判断某天是一年中的第几天的变量

number判断某天离公元1年1月1日还有几天的变量

a[] 表示每月天数的数组变量

year1 系统时间年份的变量

month1 系统时间月份的变量

day1 系统时间日期的变量

三、程序清单及其说明

#include "time.h" /*包含的头文件*/

#include "stdio.h"

#include "math.h"

#include "windows.h"

#include "conio.h"

#define KEYNUMUp 0x48 /*宏定义*/

#define KEYNUMDown 0x50

#define KEYNUMLeft 0x4b

#define KEYNUMRight 0x4d

#define KEYNUMPageUp 0x49

#define KEYNUMPageDown 0x51

int eachyeartotal(int year,int month,int day); /*函数声明*/

int counterdays(int year,int month,int day);

int nowtime(int year,int month,int day);

int week(int year,int month,int day);

int maxDay(int year,int month);

int isleap(int year);

void whatweek(int year,int month,int day);

void display(int year ,int month);

void display2(int year,int month);

void display3(int year,int month,int day) ;

void setDay1(int year,int month,int day);

void setDay2(int year,int month,int day);

void setDay3(int year,int month,int day);

void jieri(int month,int day);

void display1(int year);

void getmenu();

void main() /*主函数*/

{

int year,month,day,select;

while(1)

{

getmenu();

printf(" 请输入相应数字:"); /*菜单选择*/

scanf("%d",&select);

system("cls");

switch(select)

{

case 1: /*当选择为1时显示年历*/ printf(" 年历显示:输入年(如2011):");

scanf("%d",&year);

if(year>0&&year<10000) /*显示年份从0-10000 */

{

display1(year); /*调用函数*/

printf(" 提示按↑:上一年按↓:下一年按其他键:返回菜单\n\n");

setDay1( year,month, day);

}

else

system("cls");

printf(" 输入无效,重新输入!\n");

break;

case 2: /*当选择为2显示月历*/

printf(" 月历显示:输入年月(如2011,6):");

scanf("%d,%d",&year,&month);

if(year>0&&year<10000&&month>=1&&month<=12)

{

display2(year,month);

printf(" 提示按←:上个月按→:下个月按其他键:返回菜单\n\n");

setDay2( year,month, day);

}

else

system("cls");

printf(" 输入无效,重新输入!\n");

break;

case 3: /*当选择为3时显示日期*/

printf(" 日期显示:输入年月日(比如2011,6,23):");

scanf("%d,%d,%d",&year,&month,&day);

if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay( year,month))

{

display3(year,month,day);

printf(" 提示按PageUp:前一天按PageDown:后一天按其他键:返回菜单\n\n");

setDay3( year,month, day);

}

else

system("cls");

printf(" 输入无效,重新输入!\n");

break;

case 4:

exit(0);

default: /*当输入其他数字时,输入无效,重新输入*/ system("cls");

printf(" 输入无效,重新输入!\n");

}

}

}

int isleap(int year) /*判断是否为闰年*/

{

if(year%4==0&&year%100!=0||year%400==0)

return 1;

else

return 0;

}

int maxDay(int year,int month) /*每月的天数*/

{

int a[]={31,28,31,30,31,30,31,31,30,31,30,31}; /*每个月中的天数*/ if(isleap( year))

a[1]=29; /*闰年2月份有29天*/ return a[month-1];

}

int eachyeartotal(int year,int month,int day) /*判断某天是一年中的第几天*/ {

int i,sum=0;

for(i=1;i

sum+=maxDay(year,i);

sum+=day;

return sum;

}

int week(int year,int month,int day) /*对天数进行判断确定是星期几*/ {

int number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400

+eachyeartotal(year,month,day);

number=number%7 ;

return number;

}

void display(int year ,int month) /*输出年月*/

{

int max,number,i,j=1;

max=maxDay(year,month);

number=week(year,month,1);

printf(" %4s %4s %4s %4s %4s %4s %4s\n","Sun","Mon","Tue","Wed", "Thu","Fri","sat");

for(i=0;i

printf(" "); /*1号前的星期补空格*/ while(j<=max)

{

printf("%6d",j);

if (i%7==6)

printf("\n"); /* 每7格换一行*/

i++;

j++;

}

printf("\n\n");

}

void display1(int year) /*输出年历*/ {

int i;

printf("\n");

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

{

printf("%d 年%d 月\n\n ",year,i);

display(year,i);

}

}

void display2(int year,int month) /*输出月历*/ {

printf("\n%d 年%d 月\n ",year,month);

display(year,month);

}

void display3(int year,int month,int day) /*输出日历*/ {

whatweek( year,month,day);

jieri(month,day);

counterdays(year,month, day);

}

int counterdays(int year,int month,int day) /*判断今天距特定日期的天数*/ {

int year1, days0,days1,month1,days, day1;

time_t timep;

struct tm *p;

time(&timep);

p=gmtime(&timep);

year1=(1900+p->tm_year) ;

month1=(1+p->tm_mon) ;

day1=(p->tm_mday); /*获取系统时间year1、month1、day1分别为年、月、日*/

days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month, day);

days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1, month1,day1);

days=days0-days1; /*计算出两个日期之间的时间差*/

printf("\n 今天距%d年%d月%d日还有%d天\n\n",year,month,day,days);

return days;

}

void whatweek(int year,int month,int day) /*判断是星期几*/ {

int number;

number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,da y);

number=number%7 ;

switch( number)

{

case 0:

printf( "\n %d年%d月%d日是星期日",year,month,day);break;

case 1:

printf( "\n %d年%d月%d日是星期一",year,month,day);break;

case 2:

printf( "\n %d年%d月%d日是星期二",year,month,day);break;

case 3:

printf( "\n %d年%d月%d日是星期三",year,month,day);break;

case 4:

printf( "\n %d年%d月%d日是星期四",year,month,day);break;

case 5:

printf( "\n %d年%d月%d日是星期五",year,month,day);break;

case 6:

printf( "\n %d年%d月%d日是星期六",year,month,day);break;

default:

system("cls");

printf(" 出现错误!\n" );

}

}

void jieri(int month,int day) /*判断是否公历节日*/ {

if(month==1)

switch(day)

{

case 1:

printf(",这天是元旦");

}

if(month==2)

switch(day)

{

case 14:

printf(",这天是情人节");

}

if(month==3)

switch(day)

{

case 8:

printf(",这天是妇女节");

break;

case 12:

printf(",这天是植树节");

}

if(month==4)

switch(day)

{

case 1:

printf(",这天是愚人节");

}

if(month==5)

switch(day)

{

case 1:

printf(",这天是劳动节");

break;

case 4:

printf(",这天是青年节");

}

if(month==6)

switch(day)

{

case 1:

printf(",这天是儿童节");

}

if(month==7)

switch(day)

{

case 1:

printf(",这天是建党节");

}

if(month==8)

switch(day)

{

case 1:

printf(",这天是建军节");

}

if(month==9)

switch(day)

{

case 10:

printf(",这天是教师节");

}

if(month==10)

switch(day)

{

case 1:

printf(",这天是国庆节");

}

}

void setDay1(int year,int month,int day) /*通过键盘“↑”“↓”控制年历的变换*/ { char k;

getch();

k=getch();

switch(k)

{

case KEYNUMUp: /*“↑”年份减小*/ if(year<2)

{

system("cls");

printf(" 警告!超出范围!\n");

break;

}

year--;

display1(year);

setDay1(year,month,day);

break;

case KEYNUMDown:/*“↓”年份变大*/ year++;

display1(year);

setDay1(year,month,day);

break;

default:

system("cls");

}

}

void setDay2(int year,int month,int day) /*通过键盘“←”“→”控制月历的变换*/ {

char k;

getch();

k=getch();

switch(k)

{

case KEYNUMLeft: /*“←”月份变小*/ if(month<2)

{

month+=12;

year--;

}

if(year<1)

{

system("cls");

printf(" 警告!超出范围!\n");

break;

}

month--;

display2(year , month);

setDay2(year,month,day);

break;

case KEYNUMRight:/*“→”月份变小*/

if(month>11)

{

month-=12;

year++;

}

if(year<9999);

month++;

display2(year , month);

setDay2(year,month,day);

break;

default:

system("cls");

;

}

}

void setDay3(int year,int month,int day) /*通过键盘“PageUp”“PageDown”控制日期的变换*/

{

char k;

getch();

k=getch();

switch(k)

{

case KEYNUMPageUp: /*“PageUp”日期变小*/ if(day<2)

{

month--;

day=maxDay(year,month);

}

if(month<1)

{

month+=12;

year--;

}

if(year<1)

{

system("cls");

printf(" 警告!超出范围!\n");

break;

}

day--;

display3(year , month,day);

setDay3(year,month,day);

break;

case KEYNUMPageDown: /*“PageDown”日期变大*/ day++;

if(day>maxDay(year,month))

{

day=1;

month++;

}

if(month>12)

{

month-=12;

year++;

}

if(year<10000);

display3(year , month,day);

setDay3(year,month,day);

break;

default:

system("cls");

;

}

}

void getmenu() /* 显示菜单选择*/

{

printf(" ************主菜单************\n\n");

printf(" * 欢迎进入万年历系统*\n\n");

printf(" * 1、年历显示*\n\n");

printf(" * 2、月历查询*\n\n");

printf(" * 3、日期查询*\n\n");

printf(" * 4、退出系统*\n\n");

printf(" ******************************\n\n"); }

四、运行结果清单

打开软件,进入如下菜单界面,输入数字进行选择

1年历的显示

(1)输入数字1进入年历的显示

(2)输入年份2011,显示2011年的年历如下

(3)按↑键盘显示上一年(2010年)的年历,显示如下

(4)按↓键盘显示上一年(2012年)的年历,显示如下

2、月历的显示

(1)在菜单中选择2,进入月历的显示,输入2011,6,显示2011年6月份的月历,显示效果如下

(2)按←键盘显示上一个月(5月)的月历,显示效果如下

(3)按→键盘显示上上个月(7月)的月历,显示效果如下

3、日历的显示

(1)输入选择3进入日历的显示,如图输入2011,10,1显示这天的星期,是否为公历节日,距离现在还有多少天

(2)按PagDown显示前一天的日历,显示如下

(3)按PagUp显示后一天的日历,显示如下

4 退出程序

输入选择4,显示如下界面,按任意键退出程序

五、总结和体会。

本次用C语言编写的万年历系统主要实现了年历、月历、日历的显示,并且可通过键盘来变换相应的年月日,最终的设计结果达到的这些要求,是一次成功的课程设计。

在设计初期,首先温习了课本内容,再次熟熟悉了C程序,然后广泛的查找有关万年历的资料,并结合查找到的资料,整理出设计的主要思路,画出流程图,最终写出了源程序,并编译成功,在实验中,碰到了不少问题,其中包括如何获取系统时间,如何计算任意时间的时间差,这些困难,都通过查阅资料和问同学得到了解决。当然,由于时间和能力的原因,选作部分农历的显示没有实现。

通过这次课程设计,使我对C语言了解不在停留在书面的了解,而是有了更深的理解,培养了自己的分析能力和设计能力,受益匪浅。

附:参考文件

[1] 谭浩强. C程序设计(第三版).北京:清华大学出版社.2005

[2] 谭浩强. C程序设计题解与上机指导(第三版).北京:清华大学出版社.2005

[3] 徐慧林锐 C语言实例解析精粹 .武汉:华中理工大学出版社.1996

[4] 戴建鹏译 C语言大全(第三版) .北京:电子工业大学出版社.1994

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)创意的技术实现

万年历实验报告

篇一:电子万年历实验报告 重庆电力高等专科学校 计算机科学系 实训报告 课程名称 实验名称 班级信息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)进一步熟悉和掌握单片机的结构及工作原理。

万年历组装实训报告

—實訓報告—(单片机实训报告)学院系别:机电工程学院 专业班级:电信BK31901 设计学生:张欢 指导老师:陈老师、阎老师 设计时间:2012年10月19日

万年历组装与调试及单片机实训报告 2012-10-219| 电信BK31901班张欢 一、实习时间:2012年10月15日至2012年10月19日 二、实习地点:机电实训楼 三、实习目的与要求: 1熟练C语言中if语句、for语句、while语句的使用。 2.掌握万年历的基本原理,学会分析基本的电路原理图。 3.学会利用Keil软件和proteus软件进行设计。 四、实习内容: 1.利用Keil软件对数码管(秒表)液晶(时钟)编程,并进行编译和链接。 2.掌握AT89C51芯片I/O口的功能及作用。 3.灵活运用C语言对中断、定时计数器及数码管进行编程设计。 4认真掌握proteus仿真软件,并用proteus画出电路图软件进行仿真。 5.掌握万年历的工作原理,学会贴片电容,贴片电阻,晶振集成块的识别与测试,进一步掌握和熟练焊接技术。 五、运用Keil软件对数码管及液晶进行编程设计并用proteus仿真 1.用数码管显示0—60的源程序: #include #define uint unsigned char #define uchar unsigned int sbit K1=P3^7; uchar i,Second_Counts,Key_Flag_Idx; bit Key_State; uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<500;t++);} void Key_Byent_Handle()

C语言万年历设计报告

C语言课程 设计报告题目:编写万年历系统 年级: 专业: 班级: 姓名: 学号:

目录 第1章设计目的 第2章需求分析 第3章概要设计 第4章源程序清单 第5章执行结果 1)登陆界面 2)显示当前日月历 3)显示具体日期信息 第6章程序问题调试与课程设计心得

第1章设计目的 设计目的(实验要求): 1.模仿现实生活中的挂历. 2.当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几). 3.当系统日期变到下一月时,系统自动翻页到下一月. 第2章需求分析 (1)程序运行时,首先给出菜单选项和输入提示: (2)用户可以通过主菜单选择不同选项。输入1,通过输入当前日期可显示当前月的日历;输入2,通过输入具体日期(中间以空格分开)可显示该日具体信息;输入3,则退出查询系统。

第3章概要设计 1.菜单选择界面可通过下面所示函数时现; 主要思路: 通过while语句与swich…case以及if条件语句实现菜单的循环功能和不同选 项的功能实现。 闰年与平年的判断: 代码如下: void main() { int year,month,day,a,b; while(1) { printf("\n\n\n\n"); printf(" **********************************************************\n\n"); printf(" * * \n");

printf(" Welcome to enter calendar system \n"); printf(" * * \n\n"); printf(" **********************************************************\n\n\n" ); printf(" 1 The month of current date 2 Date 3 Exit\n"); printf(" please import your choose<1~3>,press Enter to define: "); scanf("%d",&b); switch(b) { case 1: printf("\n Please import the year,month and day which you want to check,the year,month and day separation by blank space: "); scanf("%d%d%d",&year,&month,&day); a=x3(year,month,1); if(a==0) { printf("Error!Please import again.\n"); break;} yueli(year,month,day); break; case 2: printf("\n Please import the year,month and day which you want to check, the year,month and day separation by blank space: "); scanf("%d%d%d",&year,&month,&day); a=x3(year,month,day); if(a==0) { printf("Error!Please import again.\n"); break;} rili(year,month,day); break; case 3: exit(0); default: printf("Error!Please import again.\n\n"); } }

万年历课程设计实验报告

百度文库- 让每个人平等地提升自我 黄淮学院 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();//每次修改年后,更新日期

基于单片机的万年历实习报告

基于单片机的万年历实习报告

————————————————————————————————作者: ————————————————————————————————日期:

桂林理工大学信息科学与工程学院“电子系统设计创新与实践” 课程设计(实习)报告 题目: 具有温湿度测量功能的万年历设计专业(方向):电子信息工程 班级:电信二班 指导老师:蒋存波

2016年3月27日 目次 1. 绪论----------------------------------------------- 1 2. 总体设计方案--------------------------------------- 2 2.1 技术方案比较----------------------------------- -- 2 2.2总体技术方案------------------------------------- 3 3.硬件系统设计---------------------------------------- 4 3.1 硬件总体原理框图--------------------------------- 4

3.2关键元件介绍-------------------------------------- 4 3.2.1 LCD602显示屏-------------------------------- 4 3.2.3 DS1302时钟芯片------------------------------ 7 3.2.2 SHT10温湿度感应器--------------------------- 9 3.3 硬件设计------------------------------------------ 10 3.3.1 复位电路设计-------------------------------- 10 3.3.2晶振电路设计-------------------------------- 10 3.3.3 时钟芯片电路设计---------------------------- 10 3.3.4 温湿度感应器模块电路设计-------------------- 11 3.3.5按键模块电路设计---------------------------- 11 3.3.6 LCD1602显示模块电路设计--------------------- 11 3.3.7 电量检测报警电路设计------------------------- 12 3.3.8 蜂鸣器报警电路设计--------------------------12 3.3.6 总体电路原理图------------------------------- 12 4. 软件系统设计------------------------------------------13 4.1 软件功能设计-------------------------------------- 13 4.2 程序设计总体方案----------------------------------13 4.2.1 总体设计思路--------------------------------- 13

c语言课程设计报告--万年历,最详细

C语言课程设计报告 -----万年历 设计人:贾伟涛 学号:2013010912 班级:13电信应电班 指导老师:张伟 日期:2014年6月9日

内容提要 通过大一下学期对C语言的学习,了解到了很多C语言的相关知识。学习的过程虽然有很多困惑,但是当自己能够独立的看懂和独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。我虽然可以看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对c语言的兴趣。 C语言是近年在国内外得到迅速推广应用的一种机器语言。C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。因此,C语言特别适合于编写各种软件。 在这次的课程设计中我将把日常生活中最经常接触的——日历的查询,利用C语言的程序编成一个简单的万年历查询系统。通过这个小小的系统可以实现很多功能。在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。在不断的调试中最终才获得最为完整的程序。接下来就是我的C语言课程设计的具体内容来了,大家拭目以待吧!

目录 一、系统功能和数据说明----------------------- 二、问题分析--------------------------------- 三、程序总体设计及功能结构框图--------------- 四、程序流程图------------------------------- 五、源程序代码------------------------------- 六、使用说明--------------------------------- 七、个人心得--------------------------------- 八、参考文献---------------------------------

万年历时钟实验报告

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

万年历的设计与仿真 一、实验目的; 电子时间显示器现在在任何地方都有涉及到,例如电子表和商场、车站的时间显示等等,所以它是一种既方便又实用的技术,而我们所做的万年历则是在它的基础上做出来的,通过万年历的制作,我们可以进一步了解计数器的使用,了解各个进制之间的转换,以及他的任意进制计数器的构成方法等,并且进一步了解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 码以十进制形式显示出来,其图如下: 四、万年历时钟构架图: 万年历时钟显示器需要有显示“年”、“月”、“日”、“星期”、“时”、“分” “秒”的功能,又根据它们之间的进位和置位关系 可知,它们主要有以下各部分组成,其整个电路的 框架图如下图所示: 五进制脉冲输入端 置零端 二进制脉冲输入端

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反

接口实验报告

接口实验课程结课报告 学号、专业:控制工程 1508202024 姓名:** 报告题目:基于STM32的实时时钟设计 指导教师:潘明 所属学院:电子工程与自动化学院 成绩评定 教师签名 桂林电子科技大学研究生院 2016年6月4日

摘要 本设计以STM32F103芯片为控制核心,利用其内部的RTC设计了一个实时时钟。本系统主要由以下几个部分组成:微处理器,实时时钟模块,显示模块,调节模块。其中MCU 采用STM32F103芯片,实时时钟采用RTC实时时钟,显示模块为4.3寸的TFTLCD显示屏,采用独立按键调节。另外整个系统是在系统软件控制下工作的,能实现年、月、日、时、分、秒的实时显示及闹钟功能,并增加了温度显示。 关键字:STM32F103;实时时钟(RTC);TFTLCD显示屏

Abstract This design with STM32F103 chip as the control core, using its internal RTC design a real-time clock. The system is mainly composed of the following parts: microprocessor, real-time clock module, display module, control module. MCU using STM32F103 chip, real-time clock using RTC , display module use the 4.3 inch TFTLCD display screen, using independent buttons to adjust . In addition, the whole system is under the control of the system software,and accomplish the year, month, day, hour, minute, second real-time display and alarm clock function,and added to temperature display. Key words: STM32F103;real time clock(RTC); TFTLCD display screen

基于PIC单片机电子万年历实验报告

实验报告 姓名:文可鑫学号:20072121010 专业:电子信息工程1编写一个秒表程序,使用查询方式。 list p=16f877a include"p16f877a.inc" include count equ 20h count_s equ 21h org 000h start nop call InitSPI banksel OPTION_REG movlw 04h movwf OPTION_REG banksel INTCON movlw 00h movwf INTCON movlw 06h movwf TMR0 movlw d'131' movwf count movlw 00h movwf count_s main btfss INTCON,T0IF goto $-1 movlw 06h movwf TMR0 bcf INTCON,T0IF incf count,f btfss STATUS,Z goto main movlw d'131' movwf count incf count_s,f movf count_s,w sublw d'60' btfsc STATUS,Z clrf count_s movf count_s,w call Bin2BCD movf DIS_TEMP2,w call CHAR_CODE1

movwf DIS_TEMP2 movf DIS_TEMP1,w call CHAR_CODE1 movwf DIS_TEMP1 call LEDlight nop goto main CHAR_CODE1;共阴极字符表 ADDWF PCL,F RETLW 3fh ;0 RETLW 06h ;1 RETLW 5bh ;2 RETLW 4fh ;3 RETLW 66h ;4 RETLW 6dh ;5 RETLW 7dh ;6 RETLW 07h ;7 RETLW 7fh ;8 RETLW 6fh ;9 Bin2BCD CLRF DIS_TEMP1 MOVWF DIS_TEMP2 Ttenth MOVLW .10 SUBWF DIS_TEMP2,W BTFSS STATUS,C GOTO OUT MOVWF DIS_TEMP2 INCF DIS_TEMP1,F GOTO Ttenth OUT RETURN end 2编写一个秒表程序,使用中断方式。list p=16f877a include"p16f877a.inc" include count equ 20h count_s equ 21h W_temp equ 23H STA_temp equ 24H org 000h goto start org 004h

万年历生产工艺实训报告

“电子产品综合设计”课程 基于单片机带温度的液晶万年历 设计报告书 \ 目录 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课题背景 现在电子产品制造业的发展日新月异,产品的电路、功能设计和生产工艺在不断提升。电子产品生产的指导思想是按照发展要有新思路、改革要有新突破、开放要有新局面、工

数码管万年历实习报告..

河南机电高等专科学校综合实训报告 系部: 专业: 班级: 学生姓名: 学号: 2013年 6月 28日

实训任务书 1.时间:2013年6月15日~2013年6月28日 2. 实训单位:河南机电高等专科学校 3. 实训目的:深入学习电子产品设计制作的全过程 4. 实训任务: ①加深学习电路图绘制软件的相关常识及其特点; ②以51单片机为核心设计出一个LED万年历; ③万年历具有年份、月、日、时、分、秒、周、温度、整点报时等功能; ④自己独立完成设计电路图,生成PCB,转印、腐蚀电路板,焊接等硬件制作工作; ⑤会使用keil软件编写程序,并完成烧写过程; ⑥学会调试程序,敢于发现问题,解决问题; ⑦参考相关的的书籍、资料,认真完成实训报告。

综合实训报告 前言: 万年历是我们经常见到和使用的计时工具,使用方便,功能多。但自己做一个让人满意的万年历,就不一定有那么轻而易举了,本次实训的任务就是自己亲手做一个万年历。利用本学期学过的单片机知识,设计出具有显示年、月、日、时、分、秒、周、温度功能,同时有整点报时的功能的万年历。 一、实训器件 1.温度传感器DS18B20 采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以避免A/D模数转换模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量范围广等优点。因此,本设计DS18B20温度传感器作为温度采集模块。 2.时钟芯片DS1302 采用DS1302时钟芯片实现时钟,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。具有主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。因此,本设计中采用DS1302提供时钟。 3.74LS154 74LS154 为 4 线-16 线译码器,其主要电特性的典型值如下: 当选通端(G1、G2)均为低电平时,可将地址端(ABCD)的二进制编码在一个对应的输出端,以低电平译出。若将G1和G2中的一个作为数据输入端,由ABCD对输出寻址,54/74154 还可作4线-16线数据分配器。 引出端符号: A、B、C、D 译码地址输入端(低电平有效) G1、G2 选通端(低电平有效) 0-15 输出端(低电平有效) 可用此种芯片作为数码管的选址芯片。 4.74HC573 74HC573是八进制3态非反转透明锁存器,是高性能硅门CMOS器件。当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。输出能直接接到CMOS,NMOS和 TTL接口上操作电压范围:2.0V~6.0V×低输入电流: 1.0uA 。本实训采用此芯片作为数码管的驱动芯片。 5.数码管 本实训使用共阴极数码管作为显示器件,采用 LED 数码管动态扫描,LED 数

软件工程-万年历实验报告

《软件工程》实验报告 学号:099074069 姓名:朱霄 班级:计092 指导教师:周兵

实验题目:编写一个万年历程序 要求: 输入一个年份(1-3000),然后显示12个月的月历,如屏幕显示不下,则应提供翻页功能。 一:实验目的 1、能按照软件工程的思想,采用面向对象过程的方法开发出一个小型的软件系统 2、在软件系统开发过程中,能综合利用一门编程语言和软件工程等多门课程知识 3、培养良好的软件开发习惯,了解软件企业文化 4、掌握结构话数据流分析技术 5、掌握结构化程序设计的基本概念与技术,并且养成良好的编码风格 6、掌握单元测试的一般步骤及技术 7、掌握集成测试的一般步骤和技术 二:实验内容 1、功能需求分析 ·能列出公元元年到3000年所有月历 ·能解决闰年和平年问题 ·能输出显示结果 2、运行需求分析 ·运行于window xp 及更高版本操作系统上 3、数据流图

4、软件设计与编码 ·检查输入 ·输入数据是否超出程序处理范围 ·输入数据是否非法字符机器处理

while(iserror){ printf("Enter the year:"); scanf("%d",&year); if(year<1||year>3000) printf("input error!\n"); else break; getch(); } ·确定闰年 if((year%4==0)&&(year%100!=0)||year%400==0) ·显示表头 ·计算一月一日 ·程序代码: #include #include #include int isleapyear(int year){ if((year%4==0)&&(year%100!=0)||year%400==0) return 1; else return 0; } void main(){ int isleapyear(int); int i,day,year,temp,temp_i,year_start=1,per_year_days,iserror=1; int month_days[]={31,28,31,30,31,30,31,31,30,31,30,31,29}; long int year_days=0; while(iserror){ printf("Enter the year:"); scanf("%d",&year); if(year<1||year>3000) printf("input error!\n"); else break; getch(); } while(year_start

C语言课程设计报告-万年历1

课程设计题目:万年历 实验题目:万年历程序的编写 实验目的:综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体和文件等相关内容的综合应用, 使同学们能进一步熟悉掌握C语言的基本语法,进一步提升自 己的编程能力并逐步培养编程思维,进而不断提高同学们解决问 题的能力,并为以后的语言学习打下良好的基础。 实验要求:万年历设计 主要功能包括: 1、查询某年某月每一天对应星期几。 2、可以查询某年某月的上个月或是下个月的日历情况。 3、查询某年某月某日是这一年的第几天,并查询改天 是星期几。 4、判断该年是闰年还是平年,判断这一年的生肖。 实现思路(要求有文字描述,并画出流程图):

实现过程(要求有文字说明实现的过程,并对相应的代码添加注释):见程序(程序见后)后的解析。。。运行时只要你输入年月日,你要的星系都会显示出来;如果想继续输入日期的话,只需按y就可以,祥结束按n就可以结束。 实验总结(分析程序的得与失): 得:通过这次程序设计,更使我了解了编程序的严谨性,每个问题,每个不走都得有依据,不得盲目乱造,同时也让我获得了一点 编写简单程序的能力,使自己平时在理论课中很多部明白的东 西明白了好多,学会了好多语句的用法,比如会用‘y’ or‘ n’ 来决定程序是否要继续;怎么控制输出格式等等。总之在这次 程序设计中我学到了很多。 失:在编程序过程中有些函数的用法不怎么会用,偶尔会落下写简单的东西。如‘,’‘;’等;同时在编写输出上下个情况及判断 程序是否要继续的程序上花费了好多时间;函数的声明、调用 既然不清楚,感到很惭愧。实验的过失就是成功的阶梯,在过 失中我也学到很多。 心得体会:我体会到了编程序的严谨性,也觉得如果我们要是熟悉课本所讲的内容,不怕麻烦,坚持不懈,我们一定可以将它实现的。 要有耐心,有时候很多的错误就是一个地方引起的,只要认真 检查,一定能突破的,所以在以后的编程序是要细心,有耐心, 人不断调试程序,直至最后成功。 #include struct //定义包含年月日数组结构体 {int year; int month; int day;

EDA万年历实训报告

《EDA技术及其应用》 实 训 报 告 班级 11241 姓名苏合信,张明伟,朱迎新,王亚坤学号 22,11,28,29 指导教师薛瑞 2013年05月26 日 北华航天工业学院 11级电子工程系

目录 一设计要求 (2) 1.0 设计目的及意义 (2) 1.1 设计要求 (2) 二设计流程: (2) 2.0 原理框图 (2) 2.1 VHDL设计思路 (3) 三 VHDL程序 (3) 3.0 天计数模块 (6) 3.1 月计数模块 (7) 3.2 年计数模块 (9) 3.3 调时控制模块 (11) 3.4 译码模块 (12) 3.5 扫描模块 (12) 四心得体会 (14) 4.0 (14) 五附录 (15) 5.0 顶层文件 (15) 一、设计目的及意义

1.0 设计目的及意义 在掌握EDA理论知识的基础上进一步了解EDA开发软件QuartusII的使用,掌握VHDL编程的技巧及方法,学会并熟练掌握PC机与实验箱的连接下载及使用,进一步提高自己的动手操作能力。 1.1 设计要求 利用QuartusII编写程序在实验箱上实现万年历的年月日的显示,要求能够区分闰年与平年;年月日,时分秒可以自由调整并能随意切换;能够清楚地分辨出年月日,时分秒的显示状态。 二、设计流程 2.0 原理框图 2.1 VHDL设计思路 编写年月日模块,年模块要有一个反馈端口控制月;月也要有一个反馈端口控制日;最后编写调时模块和扫描模块,以及译码模块,可以用k1,k2调节年月,用对应的LED等的亮灭来表示调节状态。 三、VHDL程序 3.0 天计数模块

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity tian is port(clk:in std_logic; pan:in std_logic_vector(1 downto 0); T1:out std_logic_vector(6 downto 0); cout:out std_logic); end tian; architecture one of tian is signal q1:std_logic_vector(3 downto 0); signal q2:std_logic_vector(2 downto 0); signal ab:std_logic_vector(1 downto 0); begin process(clk,pan) begin if clk'event and clk='1' then q1<=q1+1; if q1=9 then q1<="0000"; q2<=q2+1; end if; case pan is when "00"=> if q2=3 and q1=1 then q2<="000" ;q1<="0001";cout<='1'; else cout<='0'; end if; when "01"=> if q2=3 and q1=0 then q2<="000" ;q1<="0001";cout<='1'; else cout<='0'; end if; when "10"=> if q2=2 and q1=8 then q2<="000" ;q1<="0001";cout<='1'; else cout<='0'; end if; when "11"=> if q2=2 and q1=9 then q2<="000" ;q1<="0001";cout<='1'; else cout<='0'; end if; when others=>null; end case; end if; end process;

电子万年历实验报告

实验报告 电子万年历: 一、需求分析: 电子万年历系统主要实现以下单个查询功能: 1、查询某一年的日历。要求从键盘输入年份,输出该年12个月份的日历 2、查询某一天某一个月的日历。要求从键盘输入年份和月份,输出该月的日历。 3、查询某一天是星期几。要求从键盘输入年、月、日,输出这一天是星期几。 二、总体设计: 1、功能模块图 计算模块:用于计算天数,判断闰年 输出模块:用于菜单输出和日历输出 查询模块:实现查询某一年的日历。查询某一天某一个月的日历。查询某一天是星期几。 三、详细设计: 1、计算模块: 计算模块主要包含3个函数:LeapYear()、CountYearDays()、CountMonthDays 函数 CountYearDays()功能是计算从公元元年1月1日到某年12月31日一共有多少 天。 CountYearDays()功能是几双当年1月1日到输入日期的前一个月的天数 2、输出模块包含2个函数:Menu()和ListMonth()函数。 Menu()函数用来输出系统提供的功能选项。 ListMonth()函数用来按规定格式输出一个月的日历。 3、查询模块针对系统要实现三个查询功能定义了3个函数:Search1()、 Search2() 和 Search3()函数。 函数Search1()用来显示一年12个月的日历,输入年份后,计算该年1月1日是星期几,然后从1月份开始一次输出每个月的日历,其中调用了函数LeapYear ()、CountYearDays()和CountMonthDays()。 函数Search2()用来显示某年某月的日历,输入年份和月份后,计算出该年该月1日是星期几,然后输出这个月的日历,其中调用了函数LeapYear()和 CountYearDays()、CountMonthDays()和ListMonth()。 函数Search3()用来显示某天是星期几,通过调用函数LeapYear()、CountYearDays()和CountMonthDays()计算出从公元元年1月1日到这一天总 共过去了多少天,用这个总天数除以7得到的余数即为答案。 4、调试与测试:

相关文档
最新文档