日历C++课程设计报告

日历C++课程设计报告
日历C++课程设计报告

C++课程设计

--日历的设计(良好组)

专业:计算机科学与技术

完成时间:2014年3月27日

目录

前言 (3)

正文 (3)

2.1 设计程序的目的和思想 (3)

2.1.1设计程序的目的: (3)

2.1.2设计程序的思想: (3)

2.2 设计环境 (3)

2.3 设计目的 (4)

2.4 设计流程 (4)

2.5设计内容和设计思想 (4)

2.5.1大月和小月的定义 (5)

2.5.2闰年与非闰年二月的定义 (6)

2.5.3日历表的输出...................................... 错误!未定义书签。

2.6关键技术 (10)

总结 (10)

效果图 (10)

致谢 (11)

参考文献 (12)

附录A .................................................. 错误!未定义书签。

前言

C++是美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)博士在20世纪80年代初期发明并实现了C++(最初这种语言被称作“C with Classes”)。一开始C++是作为C 语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、名字空间(name space)逐渐被加入标准。

日历在古代是为皇历。日历在日常生活中有着非常重要的作用。有了它,我们的生活更有节奏,有规律。认这个高级动物与低级动物的最大差别在于,认识会思考,会计划的。他们有着有规律的计划。而日历无疑是他们规律计划的媒介。现全世界都在用日历。而在中国,又分为国历和农历。

我国始有历法大约在四千多年以前。根据甲骨文中的一页甲骨历,证明殷代的历法已具有相当的水平,这一页甲骨。历是全人类最古老的历书实物,这页甲骨历也就叫日历。

但真正的日历产生,大约在一千一百多年前的唐顺宗永贞元年,皇宫中就已经使用皇历。最初一天一页,记载国家、宫廷大事和皇帝的言行。皇历分为十二册,每册的页数和每月的天数一样,每一页都注明了天数和日期。发展到后来,就把月日、于支、节令等内容事先写在上面,下部空白处留待记事,和现在的“台历”相似。那时,服侍皇帝的太监在日历空白处记下皇帝的言行,到了月终,皇帝审查证明无误后,送交史官存档,这在当时叫日历,这些日.历以后就作为史官编写《国史》的依据。后来,朝廷大臣们纷纷仿效,编制自家使用的日历。至于月历以后又发展成挂历、台历等各种形式,只是近一个世纪的事。随着时代的发展,尽管日历的品种增多、花样也不断翻新,但仍旧保持着古老日历的格局。日历在当今社会的影响也是毋庸置疑的!

正文

2.1 设计程序的目的和思想

2.1.1 设计程序的目的:

(1)加深对讲授内容的理解,尤其是一些语法规定。通过课程设计,自然地、熟练地掌握。(2)熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。

(3)学会上机调试程序。

2.1.2 设计程序的思想:

程序设计语言类课程的指导思想是:既能使学生通过学习高级编程语言的知识、编程技术和基本算法,又能掌握程序设计的思想和方法,更具备利用计算机求解实际问题的能力,能灵活运用高级语言进行程序设计。

其实认真学习一门语言并不困难,关键要所追求的学习的方法和途径。一条好的途径便于快速掌握,熟悉运用语言。学习的目的在于应用,理论来源于实践,如果在学习中能够通过有效的途径如自己动手设计一个功能比较前大的开发系统,借鉴于各种工具书,善于总结。定可以很好的效果。正是如此,使我们在这几年中对语言学习有了很大提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C++,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便

好地学好计算机。

2.2 设计环境

对于本次设计的软硬件要求如下:

操作系统 Win9x/Me/NT/2000/XP/2003

内存容量 512MB

显卡要求 集成MX200以上

交互工具 鼠标

CPU 要求 AMD2200+(赛扬2.4GHz )以上

硬盘空间 40GB

显示器 VGA 以上显示器

开发软件 Microsoft Visual C++ 6.0

2.3 设计目的

掌握一种编程工具和面向对象程序设计的基本思想和方法,培养我们学生综合利用某种语言进行程序设计的能力,培养我们学生利用系统提供的功能进行创新设计的能力,培养我们学生充分利用计算机的功能和特点分析实际问题及解决实际问题的能力。

为我们提供一个综合运用所学知识解决实际问题的机会,增强我们学生的实践动手能力和工程实践能力,并培养和锻炼我们学生的自学创新能力。

为了能更好地了解C++语言,因此开设了此次课程设计,程序设计教学课程的目的不是为了单独的课堂学习,而是要让我们学生掌握程序设计的基本思想及方法。一方面,在课程设计过程中,可以明确的指导为什么而学,还能对所学知识得到应用,更重要的是可以让我们学生掌握一些基本函数的用法,从而不在对编程序感到茫然,经过设计,可以让我们熟悉简单程序的设计方法和编写,对程序设计及该门课程设计语言的应用得到理解。

2.4 设计流程 主要设计算法流程

开始

输入year 判断闰年 二月29天

二月28天 判断大小月

判断大小月 1,3,5,7,8,10,12大月,31天 1,3,5,7,8,10,12大月,31天 4,6,9,11小月30天 4,6,9,11小月30天

计算输入的年份和几点

年份之间相差的天数

计算输入年份的1月

1号是星期几

依次递增,按照每月的

天数按照要求排列

用两种方式

输出日历

居中竖向输出横向输出,每三

月为一行

主菜单选择,整

合程序

结束

2.5设计内容

2.5.1大月和小月的定义

int monthday(int i)

{

if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) //1,3,5,7,810,12有31天为大月,4,6,9,11为小月30天,2月要判断是否为闰年

return 31;

else if (i==2)

{if(isleapyear()) //判断闰年

return 29; //是的话返回29天

else return 28;//不是闰年返回28天

}

else return 30;

}

运用简单的if语句来设定大小月。

If语句是c++中常用且简单的判断语句,用途相当广泛,使用起来简单易懂,易操作。

2.5.2 闰年与非闰年二月的定义

int isleapyear()

{

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

return 1;

else

return 0;

}

构造闰月的判断函数,用返回值1和0来表示是否为闰年,对于后来的函数调用起来简单不容易出错,如果出现bug,修改起来也简单。

2.5.3两种不同的输出方法

1.居中输出

void display2(){

int n=judgeweek();

for(int i=1;i<=12;i++) //总共12个月份

{ int t=1;

cout<

cout<

cout<

for(int j=0;j<7;j++)

cout<

cout<

cout<

for(int k=1;k

cout<

{ cout<

if(t==7)

{

cout<

t=0; //控制一行输出到星期日,如果到星期日则重新计数

}

}

n=t%7;

if(n==0) //输出完一个月后,记录这个月的最后一天在哪里,寻找下个月第一天的起始位置n=7;

cout<

}

}

设计这种输出方法主要运用for语句,多重循环,以每个月为单位循环,将一个月划分为7列,控制每行不超过7个数字,月头和月尾分别用空格补齐,如此循环而得。

2.横向输出方法

void display1(){

cout<

print(1);

print(2);

print(3);

print(4);

}

横向输出相对居中输出有难度,所以在设计横向输出时将其划分为两个函数,display1为横向总的输出函数,它的作用主要是输出日历的头和调用下面的print函数。

void print(int x){

char *a,*b,*c;

int fm,sm,tm,modf,mods,modt,dof,dos,dot,i,j;

int total=0;

total=(year-2000)*365+(year-2001)/4-(year-2001)/100+(year-2001)/400;

swtich(x){

case 1:a=”一月”,b=”二月”,c=”三月”;

fm=31,tm=31;

if(islearpyear())

sm=29;

else

sm=28;

modf=total%7;

mods=(modf+31)%7;

if(islearpyear())

modt=(mods+29)%7;

else

modt=(mods+28)%7;

break;

case 2:a=”四月”,b=”五月”,c=”六月”;

fm=30,sm=31,tm=30;

if(islearpyear())

modf=(total+91)%7;

else

modf=(total+90)%7;

mods=(modf+30)%7;

modt=(mods+31)%7;

break;

case 3:a=”七月”,b=”八月”,c=”九月”;

fm=31,sm=31,tm=30;

if(islearpyear())

modf=(total+182)%7; fm和tm和sm分别代表一组中三个月依次的天数,modf等代表每个月依次的第一天的位置,dof等分别用来表示每个月从第一天到最后一天.

else

modf=(total+181)%7;

mods=(modf+31)%7;

modt=(mods+31)%7;

break;

case 4:a=”十月”,b=”十一月”,c=”十二月”;

fm=31,sm=30,tm=31;

if(islearpyear())

modf=(total+274)%7;

else

modf=(total+273)%7;

mods=(modf+31)%7;

modt=(mods+30)%7;

break;

default:cout<<”数据溢出”;

break;

}

cout<

cout << setw(3) <<"三" << setw(3) <<"四" << setw(3) <<"五" ;

cout << setw(3) <<"六";

cout << setw(3) <<"日" << setw(3) <<"一" << setw(3) <<"二" ;

cout << setw(3) <<"三" << setw(3) <<"四" << setw(3) <<"五" ;

cout << setw(3) <<"六" ;

cout << setw(3) <<"日" << setw(3) <<"一" << setw(3) <<"二" ;

cout << setw(3) <<"三" << setw(3) <<"四" << setw(3) <<"五" ;

cout << setw(3) <<"六" << endl;

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

{cout<

}

for(dof=1;dof<=7-modf;dof++){

cout<

}

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

{cout<

}

for(dos=1;dos<=7-mods;dos++){

cout<

}

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

{cout<

}

for(dot=1;dot<=7-modt;dot++){

cout<

}

cout<

for(j=1;j<=5;j++)

{

for(i=1;i<=7;i++){

if(dof>fm)cout<

else

cout<

dof++;

}

for(i=1;i<=7;i++){

if(dos>sm)cout<

else {

cout<

dos++;

}

}

for(i=1;i<=7;i++){

if(dot>tm)cout<

else {

cout<

dot++;

}

}

cout<

}

cout<

}

从写的程序来看横向输出要难的多,但主要思想不变,还是依赖多重循环,因为最终要求三个月为一组输出,所以在设计时便将每三月作为一个整体,最后有四组,因为每个月按7列最多可排列5行,所以在一组中仅计算天数又有7列五行,如以上所标注的那样。

3.主函数的设计int main()

{

Date a;

cout<

cout<<"****************************************"<

int choose;

w:while(choose!=0)

{cout<<"1 以横向模式显示该年万年历"<

cout<<”2以竖向模式显示该年万年历“<

cout<<"3 查询某天对应的星期数"<

cout<<"4 退出系统"<

cout<<"请选择1-4进行操作:";

cin>>choose;

switch(choose) //功能选择

{case 1:a.getyear();a.display1();break;

case 2:a.getyear();a.display2();break;

case 3:a.getday();a.searchday();break;

case 4:cout<<"谢谢使用万年历系统,请关闭!!!!!"<

default:cout<<"您输入有误,请重新输入"<

}

}

return 0;

}

主函数主要包括,日历的主界面,主菜单,上面各种函数的调用,其中选择使用while和switc 函数两者结合,主函数是一个总结过程,将程序从头到尾整理依次运行。

2.6关键技术

就本程序使用的技术有方面。都是使用的是简单的如if语句,switch语句,for循环语句,输入和输出,变量的定义,等。

总结

通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C++,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。

效果图

刚运行时如:图1

图 1

输入2012时,如:图2

图 2

横向输出图3

图3

程序结束图4

致谢

经过两周的不懈努力,很高兴能完成一个C++编程,紧张的心终于可以平静了。从中体会到以及学习到很多关于C++的很大方面的只是,是我更加了解了C++,并更加熟练了C++。

在此次设计中我也遇到了很多的问题,都是经过查看老师所给的关于课程设计书和图书馆借的书才明白所用函数的用法,更重要的是上课时老师的细心教学,使我们学会了许多关于C++的基础知识,为本次的课程设计打好了很好的基础。从而使我能够顺利完成这次课程设计。

在本次做课程设计过程中,要感谢陆建锋老师的悉心关照,一直陪伴我们,并为大家讲解不懂的地方,很是辛苦,也很是忙碌。还要感谢学院为我们此次课程设计提供机房,让我们有了良好的学习环境可以利用所学做课程设计,从很大的程度上增强了我们对于C++学习的兴趣。和小组成员一块讨论,多听听别人的想法,想办法改进自己,这是我受益匪浅。只有比较才知道自己的不足。我们一定要好好的改正自己的不足之处,完善自己。不做最好,只做更好!努力在老师规定的时间内完成老师所规定的任务。

结束课设的时侯,心里就有一种很渴望但又很害怕的感觉,明白了自己与实际所需的距离,因为现在毕业求职难,特别是对于像自己一般的人,更多的时侯是社会,职业选择自己,而不是更多的自己去选择职业,所以更应该把所学的知识灵活地用于实践,这次课设就是对自己一个很好的锻炼机会,无论任何的偿试,都是自己以后很宝贵的经验,更是对自己的一种充实。

参考文献

[1]谭浩强著.《C++面向程序程序设计》.北京:清华大学出版社,2006.7

[2]吴乃陵,况迎辉,李海文著.《VC++程序设计》.北京:高等教育出版社,2003.8

[3]邓宗明,张睿哲,张晓竞,等编著.《Visual C++ 6.0 编程实用技术与案例》.北京:清华大学出版社,2001.5

[4]李海文,吴乃陵等编《C++程序设计及实践教程》北京:高等教育出版社,2003.9

附录1:

#include

#include

#include

#include

#include

using namespace std;

class Date

{public:

void getyear(); //输入想要查询的年份

void getday(); //输入想要查询的日期

int isleapyear(); //判断该年是否为闰年

int judgeweek(); //判断该年的1月1日是星期几

int monthday(int i);//判断该年每个月的天数

void display1(); //以横向模式输出结果

void display2(); //以居中模式输出结果

void print(int x); //横向输出的计算

void putfile(); //结果存入文件

void searchday(); //判断具体某天为星期几

private:

int year;

int month;

int day;

};

string weekday[7]={ "一","二","三","四","五","六",”日”}; //记录星期一到星期日

void Date::getyear()

{cout<<"请输入要查询的年份:";

cin>>year;

}

void Date::getday()

{cout<<"请输入日期:";

cin>>year;

cin>>month;

cin>>day;

}

int Date::isleapyear()

{

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

return 1;

else

return 0;

}

int Date::judgeweek()

{

int total=0; //以01年1月1日(星期一)为基点

int n;

total=(year-1)*365+(year-1)/4+(year-1)/400-(year-1)/100; //计算基点到输入年份的天数n=total%7;

if(n==0)

return 0;

else

return n+1; //返回该年的1月1日为星期几

}

int Date::monthday(int i)

{

if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)

return 31;

else if (i==2)

{if(isleapyear())

return 29;

else return 28;

}

else return 30;

}

void Date::display1(){

cout<

print(1);

print(2);

print(3);

print(4);

}

void Date::print(int x){

char *a,*b,*c;

int fm,sm,tm,modf,mods,modt,dof,dos,dot,i,j;

int total=0;

total=(year-2000)*365+(year-2001)/4-(year-2001)/100+(year-2001)/400; swtich(x){

case 1:a=”一月”,b=”二月”,c=”三月”;

fm=31,tm=31;

if(islearpyear())

sm=29;

else

sm=28;

modf=total%7;

mods=(modf+31)%7;

if(islearpyear())

modt=(mods+29)%7;

else

modt=(mods+28)%7;

break;

case 2:a=”四月”,b=”五月”,c=”六月”;

fm=30,sm=31,tm=30;

if(islearpyear())

modf=(total+91)%7;

else

modf=(total+90)%7;

mods=(modf+30)%7;

modt=(mods+31)%7;

break;

case 3:a=”七月”,b=”八月”,c=”九月”;

fm=31,sm=31,tm=30;

if(islearpyear())

modf=(total+182)%7;

else

modf=(total+181)%7;

mods=(modf+31)%7;

modt=(mods+31)%7;

break;

case 4:a=”十月”,b=”十一月”,c=”十二月”;

fm=31,sm=30,tm=31;

if(islearpyear())

modf=(total+274)%7;

else

modf=(total+273)%7;

mods=(modf+31)%7;

modt=(mods+30)%7;

break;

default:cout<<”数据溢出”;

break;

}

cout<

cout << setw(3) <<"三" << setw(3) <<"四" << setw(3) <<"五" ;

cout << setw(3) <<"六";

cout << setw(3) <<"日" << setw(3) <<"一" << setw(3) <<"二" ;

cout << setw(3) <<"三" << setw(3) <<"四" << setw(3) <<"五" ;

cout << setw(3) <<"六" ;

cout << setw(3) <<"日" << setw(3) <<"一" << setw(3) <<"二" ;

cout << setw(3) <<"三" << setw(3) <<"四" << setw(3) <<"五" ;

cout << setw(3) <<"六" << endl;

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

{cout<

}

for(dof=1;dof<=7-modf;dof++){

cout<

}

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

{cout<

}

for(dos=1;dos<=7-mods;dos++){

cout<

}

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

{cout<

}

for(dot=1;dot<=7-modt;dot++){

cout<

}

cout<

for(j=1;j<=5;j++)

{

for(i=1;i<=7;i++){

else

cout<

dof++;

}

for(i=1;i<=7;i++){

if(dos>sm)cout<

else {

cout<

dos++;

}

}

for(i=1;i<=7;i++){

if(dot>tm)cout<

else {

cout<

dot++;

}

}

cout<

}

cout<

}

void Date::display1(){

cout<

print(1);

print(2);

print(3);

print(4);

}

void Date::display2(){

int n=judgeweek();

for(int i=1;i<=12;i++) //总共12个月份

{ int t=1;

cout<

cout<

cout<

for(int j=0;j<7;j++)

cout<

cout<

cout<

for(int k=1;k

cout<

if(t==7)

{

cout<

t=0; //控制一行输出到星期日,如果到星期日则重新计数

}

}

n=t%7;

if(n==0) //输出完一个月后,记录这个月的最后一天在哪里,寻找下个月第一天的起始位置n=7;

cout<

}

}

void Date::searchday()

{

int total=0;

int n;

total=(year-1)*365+(year-1)/4+(year-1)/400-(year-1)/100;

for(int j=1;j

total+=monthday(j);

total+=day;

n=(total-1)%7;

if(n==0)

cout<<"星期一" <

else

cout<<"星期"<

}

int main()

{

Date a;

cout<

cout<<"****************************************"<

int choose;

w:while(choose!=0)

{cout<<"1 以横向模式显示该年万年历"<

cout<<”2以竖向模式显示该年万年历“<

cout<<"3 查询某天对应的星期数"<

cout<<"4 退出系统"<

cout<<"请选择1-4进行操作:";

cin>>choose;

switch(choose) //功能选择

{case 1:a.getyear();a.display1();break;

case 2:a.getyear();a.display2();break;

case 3:a.getday();a.searchday();break;

case 4:cout<<"谢谢使用万年历系统,请关闭!!!!!"<

default:cout<<"您输入有误,请重新输入"<

}

}

return 0;

}

数电EDA课程设计电子日历

燕山大学 EDA课程设计报告书 电子日历 姓名:王斌 班级:05级电子信息工程3班 学号:050104020064 日期:2007/11/05——2007/11/14 一、设计题目:电子日历 二、设计要求:

1.能显示年,月,日,星期; 2.例如: 01.11.08. 6,星期日显示8; 3.年月日,星期可调; 4.不考虑闰年 三.设计思路: 为实现本电路得功能,采取模块电路设计方法,本电路系统主要包括以下三三大模块:. 1: 电子日历记数模块 2: 中间控制模块 3: 译码器显示模块 由于不同的月份,决定了不同的天数,因此须设计反馈电路,协调月日的关系,通过不同的月选择相应的天数:比如二月二十八天,十二月三十一天,……..这是利用真值表列出逻辑表达式,从而画出电路图如图1: 仿真图如下: 四、设计过程: 一、电子日历记数模块 1、实现星期计时: 为实现星期计时模块,计到星期日时,显示“8”,采用一般的计数器难以实现,

即可通过四个jk触发器设计而成。其电路图如下: 仿真图如下: 2、实现天数计时: 由于不同的月份,决定了不同的天数,因此须设计三个独立完成计数的计数器电路,如日计数器周期性的(28,30或31)向月计数器进位调月日的关系,即通过三个选择端(c28,c30,c31),同一时刻只能有一个有效,由其中的任一个有效端来控制相应日计数器。其电路原理图

3、实现月份及年份计时: 由用两个74160采用整体同步置数分别构成100进制和12进制计数器,分别完成年,月的计数功能。然后将两者依次异步连接,每隔12个月,月计数器向年计数器进一位,从而实现年月的周期性计数。 月份计数器电路原理图如下: 年份计数器电路图如下:

单片机课程设计-万年历、数字时钟

单片机课程设计-万年历、数字时钟 采用MAX7221可以极大的节省I/O口线,同时DS1302时钟芯片可以提供精确的时间信息 汇编语言程序编写 DSRST BIT P1.0 DSCLK BIT P1.1 DSIO BIT P2.2 DIN BIT P2.5 CS BIT P2.6 CLK BIT P2.7 D158 EQU 30H D70 EQU 31H ADDRESS EQU 32h CONTENT EQU 33h COMMAND EQU 34h SECOND equ 35h MINITE equ 36h HOUR equ 37h ORG 0000H LJMP MAIN ORG 0030H MAIN: LCALL INTI7221 LCALL INTI1302

LOOP: LCALL READ1302 LCALL CONVERT LCALL DELAY LCALL DISPLAY LCALL DELAY SJMP LOOP ;DS1302初始化 INTI1302:MOV ADDRESS, #8EH MOV CONTENT, #00H LCALL SENT_BYTE MOV ADDRESS, #90H MOV CONTENT, #0A7H ;慢充电寄存器LCALL SENT_BYTE READ1302: MOV ADDRESS, #81h LCALL REV_BYTE MOV SECOND, A MOV ADDRESS, #83h LCALL REV_BYTE MOV MINITE, A MOV ADDRESS, #85h LCALL REV_BYTE MOV HOUR, A RET SENT_BYTE: CLR DSRST CLR C NOP CLR DSCLK NOP SETB DSRST MOV A, ADDRESS MOV R3, #2 MOV R2, #8 LOOP0: RRC A MOV DSIO, C SETB DSCLK NOP CLR DSCLK DJNZ R2, LOOP0 MOV A, CONTENT MOV R2, #8 DJNZ R3, LOOP0 CLR DSRST RET

单片机课程设计 电子日历时钟显示器设计

目录 1.题目设计要求 (1) 2.开发平台简介 (1) 3.系统硬件设计 (2) 3.1设计原理 (2) 3.2器件的功能与作用 (2) 3.2.1 MCS51单片机AT89C51 (2) 3.2.2复位电路 (3) 3.2.3晶振电路 (4) 3.2.4 DS1302时钟模块 (4) 3.2.5 引脚功能及结构 (4) 3.2.6 DS1302的控制字节 (5) 3.2.7 数据输入输出(I/O) (5) 3.2.8 DS1302的寄存器 (6) 3.2.9 液晶显示LCD1602 (6) 3.2.10 串行时钟日历片DS1302 (8) 4.系统软件设计 (10) 4.1程序流程 (10) 4.2程序代码 (10) 5.系统仿真调试 (20) 5.1仿真原理图设计 (20) 5.2仿真运行过程 (21) 5.3仿真运行结果 (21) 6.总结 (21) 7.参考文献 (22)

1.题目设计要求 通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。要求LCD上显示的日期和时间与当前系统时间保持一致。 2.开发平台简介 2.1系统仿真平台Proteus Proteus软件是由英国Labcenter Electronics公司开发的EDA工具软件,已有近20年的历史,在全球得到了广泛应用。Proteus软件的功能强大,它集电路设计、制版及仿真等多种功能于一身,不仅能够对电工、电子技术学科涉及的电路进行设计,还能够对微处理器进行设计和仿真,并且功能齐全,界面多彩。和我们手头其他的电路设计仿真软件,他最大的不同即它的功能不是单一的。另外,它独特的单片机仿真功能是任何其他仿真软件都不具备的。 2.2软件开发平台Keil C Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。Keil C51生成的目标代码效率之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

电子日历时钟设计

目录 1题目设计的要求 (1) 2 系统硬件设计 (1) 2.1设计原理 (1) 2.2器件的功能与作用 (1) 2.2.1 MCS51单片机AT89C51 (1) 2.2.2 串行时钟日历片DS1302 (2) 2.2.3 液晶显示LCD1602 (3) 3 系统软件设计 (4) 3.1程序流程 (4) 3.2程序代码 (5) 4 系统仿真调试 (12) 4.1仿真原理图设计 (12) 4.2仿真运行过程 (12) 4.3仿真运行结果 (13) 5 总结 (13) 6 参考文献 (13)

1题目设计的要求 通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。要求LCD上显示的日期和时间与当前系统时间保持一致。 2 系统硬件设计 2.1 设计原理 图3.1 电路原理图 2.2 器件的功能与作用 2.2.1 MCS51单片机AT89C51 XX AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件

采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。 由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。 AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 2.2.2 串行时钟日历片DS1302 系统的组成与工作原理: 系统由单片机AT89C52,串行日历时钟片DS1302,液晶显示模组LCD1602。 DS1302的CLOCK与AT89C52的P1.6相连,RST与P1.5相连,IO与P1.7相连。 LCD1602的D0~D7与AT89C51的P0.0~P.7相连,并接上拉电阻,RS与P2.0相连,RW与P2.1相连,E与P2.2相连。 DS1302是DALLAS公司拖出的涓流充电时钟芯片,内含有一个实时时钟/日历和31个季节静态RAM,通过简单地串行接口与单片机进行通信,实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24小时或12小时格式,DS1302与单片机之间能简单地采用同步串行方式进行通信,仅需用到RES复位、I/O 数据线、SCLK串行时钟3个口线。对时钟、RAM的读/写,可以改用单字节方式或多达31个字节的字符组方式。DS1302工作时功耗很低,保持数据和时钟信息是功率小于1mW。DS1302广泛应用于电话传真、便携式仪器及电池供电的仪器仪表等产品领域中。 RT-1602 字符型液晶模块是以两行16个子的5*7点阵吐信来显示字符的液晶显示器。 DS1302有8个引脚: X1、X2:32.768kHz晶振介入引脚。 GND:地。 RST:复位引脚,低电平有效。 I/O:数据输入/输出引脚,具有三态功能。 SCLK:串行时钟输入引脚。 Vcc1:工作电源引脚。 Vcc2:备用电源引脚。 DS1302有一个控制寄存器,12个日历,时钟寄存器和31个RAM。 控制寄存器 控制寄存器用于存放DS1302的控制命令字,DS1302的RST引脚回到高电平后写入的第一个字就为控制命令。它用于对DS1302读写过程进行控制,它的格式如下:

电子日历单片机课程设计报告

湖南科技大学 信息与电气工程学院《单片机原理与应用课程设计报告》 题目:电子日历 专业:电子信息工程 班级: 姓名: 学号: 指导教师: 2016年 07月13日

单片机原理与应用课程设计评阅书

信息与电气工程学院 课程设计任务书 2015-2016学年第2学期 专业:电子信息工程学号:姓名: 课程设计名称: 设计题目: 完成期限:自 2016 年 7 月 4 日至 2015 年 7 月 15 日共 2 周 设计依据、要求及主要内容(可另加附页): 设计依据:STC15F2K60S2单片机的定时/计数器,74HC59芯片的串并输出,数码管显示。 实验要求: (1)、利用STC15F2K60S2单片机作为主控器组成一个电子日历和电子钟。 (2)、利用LED分别显示当前时间和日历。 (3)、利用尽可能少的开关实现:校正日历和时间 (4)、定制闹钟(时、分、表)。 主要内容: 本系统是用STC15F2K60S2单片机的T0定时器的16位自动重装来产生1ms节拍,程序运行于这个节拍下,通过计数1000次从而自动定时于1s,以实现时钟的仿真。另外通过STC15F2K60S2单片机的IO方式控制74HC595驱动8位数码管。数码管可以实时显示秒,分,小时,日期,月份和年等信息,并且实现闹铃功能时,数码管闪烁显示。矩阵式键盘采用编程扫描方式,可以实现秒,分,小时,日期,月份和年信息的校准。同时通过STC15F2K60S2单片机的外部中断INT0实现年月日与时分秒显示的切换。 指导教师(签字): 批准日期:年月日

本设计是基于51系列的单片机进行的实时日历和时钟显示设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。实时日历和时钟显示的设计过程在硬件与软件方面进行同步设计。硬件部分主要由STC15F2K60S2单片机,LED显示电路,以及调时按键电路等组成,系统通过74HC595驱动8位数码管现实数据,所以具有人性化的操作和直观的显示效果。软件方面主要包括时钟程序、键盘程序,显示程序等。本系统以单片机的汇编语言进行软件设计,为了便于扩展和更改,软件的设计 采用模块化结构,使程序设计的逻辑关系更加简洁明了,以便更简单地实现调整时间及日期显示功能。所有程序编写完成后,在wave软件中进行调试,确定没有问题后,在Protel99se 软件中嵌入单片机内进行仿真。 关键词:STC15F2K60S2;Protel99se;74HC595

最全最好的课程设计-51单片机电子日历时钟( 含源程序)

LED日历时钟课程设计 院系: 班级: 姓名: 学号: 指导教师: 2012 年06 月16 日

目录

摘要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。 第一章前言 数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。虽然现在市场上已有现成的电子钟集成电路芯片,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示期、农历、以及星期等,给人们的生活带来了方便。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。 AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k B ytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

Java日历记事本课程设计报告

Java日历记事本课程设计报告 在设计日历记事本时,需要编写6个JAVA源文件:、、、、和 效果图如下 . CalendarWindow类 import .*; import .*; import .*; import .*; public class CalendarWindow extends JFrame implements ActionListener,MouseListener,FocusListener{ int year,month,day; CalendarMessage calendarMessage; CalendarPad calendarPad; NotePad notePad;

JTextField showYear,showMonth; JTextField[] showDay; CalendarImage calendarImage; String picturename; Clock clock; JButton nextYear,previousYear,nextMonth,previousMonth; JButton saveDailyRecord,deleteDailyRecord,readDailyRecord; JButton getPicture; File dir; Color backColor= ; public CalendarWindow(){ dir=new File("./dailyRecord"); (); showDay=new JTextField[42]; for(int i=0;i<;i++){ showDay[i]=new JTextField(); showDay[i].setBackground(backColor); showDay[i].setLayout(new GridLayout(3,3)); showDay[i].addMouseListener(this); showDay[i].addFocusListener(this); } calendarMessage=new CalendarMessage(); calendarPad=new CalendarPad(); notePad=new NotePad(); Calendar calendar=(); (new Date()); year=; month=+1; day=; (year); (month); (day); (calendarMessage); (showDay); (year,month,day); (); doMark(); calendarImage=new CalendarImage(); (new File("")); clock=new Clock(); JSplitPane splitV1=new JSplitPane,calendarPad,calendarImage); JSplitPane splitV2=new JSplitPane,notePad,clock); JSplitPane splitH=new JSplitPane,splitV1,splitV2);

数电课程设计数字日历电路

题目:数字日历电路 班级: 姓名: 数字日历电路

一、设计任务及要求: 1、用5个数码管分别显示月、日、星期; 2、月、日的计数器显示均从1开始,每月按30天算; 3、对星期的计数显示从1到6再到日(日用8代替)。 二、方案设计与论证: 日历是一种日常使用的出版物,用于记载日期等相关信息。每页显示一日信息的叫日历,每页显示一个月信息的叫月历,每页显示全年信息的叫年历。有多种形式,如挂历、座台历、年历卡等,如今又有电子日历。逢年过节,往往会送亲友日历已显亲情友情可日历在现代社会中是很重要的。而纸制日历对森林保护不利,因此设计电子日历意义重大。在设计日历倒计时器时,采用了模块化的思想,将日历分为三个部分:日期、月份及年份,使得设计简单、易懂。本设计能进行月、日、星期的的计数,在社会生活中具有实际的应用价值。下面就是我们组设计电子日历的主要思路: 本数字日历电路计数显示电路和控制电路组成,计数显示电路主要由同步十进制计数器74LS160构成日期、月份和星期计数器,然后通过译码器数码管显示出来控制调节电路则用了组合控制逻辑电路去控制日期计数器及月计数器的置数端和使能端,从而实现日期和月份的调节功能。星期显示在脉冲作用下,从星期一到星期日循环计数,从而形成星期随着日期循环显示。综上,该方案是具体可行的。 三、设计原理及框图: 本数字日历电路主要由五个加计数器160、五个48译码器、显示器、控制开关构成。它们的工作原理是:用两片十进制计数器74LS160同步预置数(高位置入0000,低位置入0001)构成日期计数器,使其每次从一开始计数,从日期计数器的输出三十这个信号使其同时给月计数器的CP端信号使其计数,最后给日计数器的低位以信号源使其计数,同时在脉冲的作用下,使星期循环计数,随着日期的变化而变化。74LS48译码器将信号传给显示器显示数据。

课程设计万年历的设计52503328

课程设计万年历的设计52503328

兰州理工大学 计算机与通信学院 2014年秋季学期 面向对象课程设计 题目:万年历的设计

序言 《面向对象的程序设计》是计算机专业一门重要的专业基础课。此次课程设计的目的是以面向对象程序设计语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的能力。通过课程设计,学生在下述各方面的能力应该得到锻炼: (1)进一步巩固、加深学生所学专业课程《C++语言程序设计》的基本理论知识,理论联系实际,进一步培养学生综合分析问题、解决问题的能力。 (2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。 (3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。 (4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)掌握面向对象的程序设计方法。 (6)进一步掌握在集成环境下如何调试程序、修改程序和程序的测试。

目录 摘要 (2) 第一章系统总体设计 (3) 一.理论说明 (3) 二.流程图说明 (4) 1.总体流程说明图 (4) 2.部分流程说明图 (4) 第二章系统详细设计 (7) 一.主要组成部分 (7) 二.源程序 (9) 第三章系统测试 (34) 四软件使用说明书 (40) 一.系统运行环境 (40) 二.系统操作提示 (40) 总结 (41) 参考文献 (42) 致谢 (42)

dsp时钟日历课程设计

课程设计说明书(本科) 题目: 时钟日历 姓名: 专业: 电子信息工程 班级: 09级一班 2012年 6 月

目录 摘要 (1) 一、硬件设计 (1) 1、硬件方案设计 (1) 2、单元电路设计 (2) 3、电路原理图 (5) 4、硬件调试 (6) 二、软件设计 (6) 1、系统分析 (6) 2、软件系统设计 (7) 3、软件代码实现 (9) 4、软件调试 (24) 四、课程设计体会总结 (24) 五、参考文献 (24)

时钟日历 摘要:课程设计的主要目的是用tms320f2812芯片为核心控制部件,设计一个能用LCD液 晶显示屏显示当前年,月,日,时,分,秒以及星期的具有电子时钟功能的万年历。 ⑴学习并了解ICETEK-F2812-A板及教学实验箱的使用; ⑵学习DSP芯片的I/O端口的控制方法; ⑶熟悉字模的简单构建和使用; ⑷熟悉Emulator方式下的程序调试规程,并最终能够熟练掌握在DSP软硬件环境下 的程序开发流程;能够对现有器件进行简单地编程,实现各种简单地显示控制。 关键词:dsp 时钟日历 一、硬件设计 1、硬件方案设计 本系统以TMS2812为核心控制部件,利用软件编程,通过DS1302进行时钟控制,使用12864 LCD液晶显示器进行时钟显示,能实现题目的基本要求,尽量做到硬件电路简单稳定,减小电磁干扰和其他环境干扰,充分发挥软件编程的优点,减小因元器件精度不够引起的误差。由于时间有限和本身知识水平的发挥,我们认为本系统还有需要改进和提高的地方,例如选用更高精度的元器件,硬件电路更加精确稳定,软件测量算法进一步的改进与完善等。总体框图如图1所示。 GND +5V ADD PWM4 PWM3 VSS PWM2 V0 IOPA7 IOPA6 IOPA5 REST IOPA4 IOPA3 OSCBYP TXAL1 TXAL2 IOPB0- IOPB7 E CS1 CS2 R/W RS DB0-DB7 RST I/O SCLK VCC1/VCC2 X1/X2 GND 复位电路 OSCBYP为高电平。采 用内部振荡 双电源 32768hz 10K DS1302

课程设计(数字日历钟表的设计)

课程设计说明书(论文) 课程名称:课程设计1 设计题目:数字日历钟表的设计 院系: 班级: 设计者: 学号: 设计时间:2013-6-19

哈尔滨工业大学 哈尔滨工业大学课程设计任务书 姓名:院(系): 专业:班号: 任务起至日期:2013 年 5 月日至2013 年 6 月19 日 课程设计题目:数字日历钟的设计 已知技术参数和设计要求: 1.数码管显示:秒、分、时(可同时显示,也可轮换显示) 2.能够设置时间,“设置按键”数量不限,以简单合理易用为好。 3.误差:1 秒/天(报告中要论述分析是否满足要求) 扩展(优秀必作) 1.设置校准键:当数字钟显示在“整点±30 秒”范围时,按动“校准键”,数字钟即刻被调整到整点,消除了±30 秒的误差。 2.加上“星期”显示(可以预置),并可以对其进行设置。 其他要求: 1.按动员老师的要求、课程设计报告规范进行设计 2.不允许使用时数字钟表、日历专用IC 电路。 3.可以使用通用器件:模拟、数字、单片机、EPLD、模块电路等。 4.设计方法不限。

工作量: 1. 查找资料 2. 设计论证方案 3. 具体各个电路选择、元器件选择和数值计算 4. 具体说明各部分电路图的工作原理 5. 绘制电路原理图 6. 绘制印刷电路图 7. 元器件列表 8. 编写调试操作 9. 打印论文 工作计划安排: 1. 查阅资料: 2. 方案论证 3. 设计、分析、计算、模拟调试、仿真、设计原理 4. 撰写报告:课程设计要求、方案论证、原理论述(原理框图、原理图)、分析、计算、仿真, PCB 图的设计,误差分析、总结,参考文献等 5. 上交课程设计论文2013-6-19 同组设计者及分工:

数字电路课程设计 电子日历

数字电路综合设计报告 电子日历 一、 设计要求 1.能显示年、月、日,星期; 2.年月日,星期可调; 3.不考虑闰年。 二、 题目分析 题目可概括如下:通过一个时钟信号计时,电路需要按照历法规则准确计数,并将年月日星期显示出来,此外还要求可以人工调整日期。为了实现功能,主要需搭设出一个可靠的时钟信号发生器,用于计数的计数模块,用于显示计数结果的模块。 三、 设计过程 A. 设计思路 此设计主要分为三个模块:时钟信号发生模块、时分秒计数模块、年月日计数模块。其中,时钟信号发生模块通过晶振发生一定频率的时钟信号,再通过分频,将晶振发出的信号分频成1hz 的秒脉冲信号,最后将秒脉冲信号送入。时分秒计数模块。时分秒计数模块在秒脉冲信号的控制下按规则计数,在满24小时时进位,并将进位信号送入年月日计数模块。年月日模块在时分秒模块进位信号的控制下计数,每收到一个进位信号就加一,并把每一时刻的计数结果通过数码管显示出来。各模块的关系如图一所示: B. 各 框 架 设 计 a) 时钟信号发生模块 此模块采用晶振电路产生时钟信号,再通过390、161以及D 触发器分频最后得到频率为1Hz 的秒脉冲输出信号。 基本框架如下:

仿真电路如下: b) 时分秒计数模块 在此模块中,利用390、 161构成两个六十进制和一个二十四进制计数器,分别对应秒、分、时。在时钟信号发生模块的输出信号控制下进行逐级计数, 最后将二十四进制计数器的进位信号作为输出信号。 基本框架如下:

c)年月日计数模块 此模块中利用一块161、160,分别构成七进制,二十八进制、三十进制、三十一进制、十二进制、100进制计数器。为了实现大小月功能,使用了151数据选择器,将不同触发条件作为输入数据,将12进制的触发信号作为地址输入,因此可根据“月” 的状态选择“日”的清零触发条件。为了实现年月日星期设置功能,采用四个单刀双掷开关,一边连时钟模块,一边连接按键式单脉冲。当需要设置时,将开关拨去按键式单脉冲那端,利用脉冲手动调节。 基本框架如下:

电子日历记事本--Java课程设计

《面向对象程序设计》课程设计报告 题目:电子日历记事本的设计 院(系):信息科学与工程学院 专业班级:计算机科学与技术1201班 学生姓名:程伟 学号: 20121183011 指导教师:吴奕 20 14 年 12 月 29 日至20 15 年 1 月 9 日 华中科技大学武昌分校制 面向对象程序设计课程设计任务书

目录 1需求与总体设计 1 1.1需求分析 1 1.2总体设计思路 1 1.2.1功能图 1 1.2.2类图 2 2详细设计 (3) 2.1 CalendarPad类说明 3 2.2 Year类说明 3 2.3 Month 类模块 4 2.4 NotePad类说明 4 3编码实现 6 3.1 CalendarPad模块 6

3.2 Year模块 11 3.3 Month 模块 14 3.4 NotePad模块 16 4系统运行与测试 23 4.1程序主界面 23 4.2日志查看——无日志 23 4.3建立日志 24 4.4日志查看——有日志 24 4.5删除日志 26 总结 27 1需求与总体设计 1.1需求分析 根据题目要求,将日历与记事本功能相结合,实现对某日期的事件进行记录的功能,设计出简洁方便美观的GUI界面。 将本程序主界面可以分为四个部分:日历日期信息展示、年份、月份、记事本内容、记事本下方的时钟,用四个类来实现其“日历”和“记事本”这两大功能。通过主类CalendarPad创建动日历记事本软件的主界面,且该类中含有main

方法,程序从该类开始执行。再用余下的year、mouth、NotePad类来显示并改变日期和实现记事本的功能。 1.2总体设计思路 1. 可以编辑日历的日期 2. 可以判断当前日期是否存在日志记录 3. 对有日志记录的日期,可以对该日期的日志记录进行修改和删除 4. 对没有日志记录的日期,可以创建并保存新建的日志记录 5. 对保存的日志加密,查看时得输入密码 1.2.1功能图

日历时钟单片机课程设计

单片机课程设计 ——日历时钟与键盘显示程序设计 姓名:管曌 学号:3081109003 班级:J通信0801 指导老师:熊书明

日历时钟与键盘显示程序设计 一、设计目的 (1)能在LED显示器上实现正常的时分秒计时 (2)能通过键盘输入当前时间,并从该时间开始计时 (3)有校时、校分功能 (4)有报时功能,通过指示灯表示 (5)有闹时功能,闹时时间可以设定,通过指示灯表示 二、设计内容 该课程设计是利用MCS-51单片机内部的定时/计数器、中断系统、以及行列键盘和LED显示器等部件,设计一个单片机电子时钟。设计的电子时钟通过数码管显示,并能通过按键实现设置时间和暂停、启动控制等。 三、MCS-51单片机系统简介 单片机应用系统由硬件系统和软件系统两部分组成。硬件系统是指单片机以及扩展的存储器、I\O接口、外围扩展的功能芯片以及接口电路。软件系统包括监控程序和各种应用程序。 在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。与单片机配套的有相应的复位电路、时钟电路以及扩展的存储器和I\O接口,使单片机应用系统能够运行。 在一个单片机应用系统中,往往都会输入信息和显示信息,这就涉及键盘和显示器。在单片机应用系统中,一般都根据系统的要求配置相应的键盘和显示器。配置键盘和显示器一般都没有统一的规定,有的系统功能复杂,需输入的信息和显示的信息量大,配置的键盘和显示器功能相对强大,而有些系统输入/输出的信息少,这时可能用几个按键和几个LED指示灯就可以进行处理了。在单片机应用系统在中配置的键盘可以是独立键盘,也可能是矩阵键盘。显示器可以是LED指示灯,也可以是LED数码管,也可以是LCD显示器,还可以使用CRT显示器。单片机应用系统中键盘一般用的比较多的是矩阵键盘,显示器用的比较多的是LED数码管还LCD显示器。 四、设计方案

电子万年历课程设计

烟台南山学院单片机课程设计题目电子万年历 姓名: 所在学院:烟台南山学院 所学专业:自动化 班级: 学号: 指导教师: 完成时间:

摘要 单片机作为当今领域应用广泛的电子器件,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。以AT89C51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由5V直流电源供电,通过数码管能够准确显示时间,日期,调整时间,日期,从而到达学习、设计、开发软、硬件的能力。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。本设计由单片机AT89C51芯片和LED数码管为核心,运用DS1302时钟芯片,辅以必要的电路,构成了一个单片机电子时钟。

1 绪论 (1) 2 总体方案设计与论证 (2) 2.1数字时钟方案 (2) 2.2显示方案 (3) 3 硬件系统的方案设计 (4) 3.1 系统框图 (4) 3.2 单片机的选择 (4) 3.3 时钟电路DS1302 (7) 3.4 时钟电路及复位电路 (9) 3.5 驱动电路 (9) 3.6 显示电路 (10) 3.7 按键接口 (11) 4 软件系统设计 (12) 4.1 时间信息获取程序 (12) 4.2 显示程序 (12) 5 系统调试 (13) 5.1 系统调试 (13) 5.2 时钟显示 (13) 5.3 DS1302的调试 (13) 5.4 按键电路调试 (13) 6 总结 (14) 参考文献 (15) 附录:系统程序 (16)

Java日历记事本课程设计报告

Java 日历记事本课程设计报告 在设计日历记事本时,需要编写6个JAVA源文件:、、、、和 效果图如下 . CalendarWindow 类 import .*; import .*; import .*; import .*; public class CalendarWindow extends JFrame implements ActionListener,MouseListener,FocusListener{ int year,month,day; CalendarMessage calendarMessage; CalendarPad calendarPad; NotePad notePad; JTextField showYear,showMonth; JTextField[] showDay; CalendarImage calendarImage;

String picturename; Clock clock; JButton nextYear,previousYear,nextMonth,previousMonth; JButton saveDailyRecord,deleteDailyRecord,readDailyRecord; JButton getPicture; File dir; Color backColor= ; public CalendarWindow(){ dir=new File("./dailyRecord"); (); showDay=new JTextField[42]; for(int i=0;i<;i++){ showDay[i]=new JTextField(); showDay[i].setBackground(backColor); showDay[i].setLayout(new GridLayout(3,3)); showDay[i].addMouseListener(this); showDay[i].addFocusListener(this); } calendarMessage=new CalendarMessage(); calendarPad=new CalendarPad(); notePad=new NotePad(); Calendar calendar=(); (new Date()); year=; month=+1; day=; (year); (month); (day);

日历时钟单片机课程设计(附汇编程序+方案图+模块图+ddb模拟图)

;山东科技大学信电通信07-1 lfj 作品lifaji@https://www.360docs.net/doc/505576978.html, 方案一:

方案二:

采用方案二。模块图

; ------------------------- 按键说明-------------------------;--------------------------1键——进入可调状态-------------------------; -------------------------2键——结束返回-------------------------; -------------------------3键——秒加1/日加1 -------------------------; -------------------------4键——分加1/月加1 -------------------------; -------------------------5键——显示24小时制/时加1/年加1-------------------------; -------------------------6键——显示12小时制-------------------------; -------------------------7键——可调时间-------------------------; -------------------------8键——可调日期-------------------------CLK BIT P1.6 ;时钟信号端 DISP BIT P1.7 ;串出锁存端 DBUF EQU 30H ;秒的最低位地址 LED BIT P1.1 CHANGE2 BIT 21H ;加12的标志位 AD1 EQU 40H ;秒 AD2 EQU 41H ;分 AD3 EQU 42H ;时 AD4 EQU 43H ;天 AD5 EQU 44H ;月 AD6 EQU 45H ;年 ; 初始化存储单元结束 ORG 0000H LJMP MAIN ORG 000BH ;T0中断入口 LJMP INT ORG 0030H MAIN: MOV R0,#AD1 MOV R7,#06H LOOP0: MOV A,#00H MOV @R0,A INC R0 DJNZ R7,LOOP0 ;R0~R7清零 MOV AD1,#37H MOV AD2,#22H MOV AD3,#0CH MOV AD4,#08H MOV AD5,#08H MOV AD6,#08H ;初始化时间为12:34:56,日期为08年08月08日 MOV IE,#82H ;允许T0中断

单片机电子万年历课程设计报告书

单片机课程设计 姓名:吕长明 学号:04040804021 专业班级:机电四班

一、单片机原理及应用简介 随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术 的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机(Single-Chip Microcomputer)。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工 业控制系统、数据采集系统、自动测试系统、万年历电子表等。 二、系统硬件设计 8052 是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图图1: 图1 8052引脚 P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。 P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。 P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。 P3.0~P3.7 P2口8位双向口线(在引脚的10~17号端子)。 8052芯片管脚说明: VCC:供电电压。 GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用

于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如表1所示: 表1 特殊功能口 P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

相关文档
最新文档