日历时钟项目实训报告.docx
《日历时钟项目实训报告.docx》由会员分享,可在线阅读,更多相关《日历时钟项目实训报告.docx(11页珍藏版)》请在冰豆网上搜索。
日历时钟项目实训报告
日历时钟项目实训报告
班级:
电子1001班
组员:
陶涛张辉辉高晓军郑军
赵胜强张含卞修杰季必云
指导教师:
朱孝立
日期:
2012-6-19
目录
日历时钟项目实训报告I
目录II
1.项目概述-2-
2.硬件工作原理-2-
2.1电路图-2-
2.2主要元件与模块-3-
2.2.1模块组成-3-
2.2.2单片机主控制模块电路设计-3-
2.2.4键盘输入部分-4-
2.3主要元件-4-
3.软件流程与说明-4-
3.1软件框图-4-
3.2重点函数编程-6-
3.2.1主函数-6-
3.2.2初始化函数-8-
3.2.3对1602编程-9-
3.2.4对秒控制-10-
4.调试过程与实验结果-11-
结束语-12-
学习心得-12-
参考文献-12-
1.项目概述
1.功能特性:
液晶屏显示当前时间,并可通过按键调整
2.技术指标参数:
DS1302是51单片机系统常用的日历时钟,该芯片提供了秒、分、时、日、月、星期和年的信息。
DS1302的读写操作要在严格的复位信号和时钟信号的配合下完成。
3.开发器材:
AT89S52单片机、日历时钟DS1302及SMC1602LCM液晶显示屏
4.环境:
SZ51单片机开发板
2.硬件工作原理
2.1电路图
2.2主要元件与模块
2.2.1模块组成
本程序采用模块化设计的方法,主要由主函数,显示模块,日期模块组成。
2.2.2单片机主控制模块电路设计
在这里我们们要了解一下关于AT89S52单片机的相关的资料从而使我们们对AT89S51有一个深入理解和印象。
AT89S52单片机具有在线调试的功能,可以很方面的用于实时的时钟连接调试,在本系统中单片机的工作与复位电路图。
所采用的12M的晶振用于单片机的工作,采用上电的方式进行复位。
DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟日历芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。
工作电压宽达2.5~5.5V。
采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。
有主电源和备份电源双引脚,而且备份电源可由大容量电容(>1F)来替代。
需要强调的是,DS1302需要使用32.768KHz的晶振。
数字时钟芯片的详细的介绍,通过单片机可以很方便的控制时钟芯片的工作,下面看一下时钟芯片DS1302与系统的连接图如图2-3所示。
2.2.4键盘输入部分
键盘在单片机系统中是一个很重要的部件。
为了输入数据、查询和控制系统的工作状态,都要用到键盘,键盘是人工干预计算机的主要手段。
在键盘的设计过程中,一般采用非编码键盘,在此的使用的过程中要注意消抖的问题,键盘的抖动对系统正常的工作影响很大,所以一定要消抖。
在本系统的设计过程中,共有四个键分别是功能移位键、时间的“+”键、时间的“—”键、特殊时间转换键:
与系统的连线图如图2-5下。
2.3主要元件
AT89S52单片机、日历时钟DS1302及SMC1602LCM液晶显示屏
3.软件流程与说明
3.1软件框图
3.2重点函数编程
3.2.1主函数
voidmain()//主函数
{
ucharn;
init();
while(num[n]!
='\0')//写液晶的第一行显示
{
writedat(num[n]);
n++;
}
writecom(0x80+0x40);
n=0;
while(num1[n]!
='\0')//液晶的第二行显示
{
writedat(num1[n]);
n++;
}
while
(1)//对时间的不断刷新
{
if(flag==0)
readtime1302();
writecom(0x80+0x44);
writedat(0x30+shi/16);
writedat(0x30+shi%16);
writecom(0x80+0x47);
writedat(0x30+fen/16);
writedat(0x30+fen%16);
writecom(0x80+0x4a);
writedat(0x30+miao/16);
writedat(0x30+miao%16);
writecom(0x83);
writedat(0x30+nian/16);
writedat(0x30+nian%16);
writecom(0x86);
writedat(0x30+month/16);
writedat(0x30+month%16);
writecom(0x89);
writedat(0x30+day/16);
writedat(0x30+day%16);
writecom(0x8d);
writedat(xingqi[week][0]);
writedat(xingqi[week][1]);
writedat(xingqi[week][2]);
}
}
3.2.2初始化函数
voidinit()//初始化
{
EA=1;
EX1=1;
IT1=1;
miao=50;
fen=50;
shi=20;
writebyte1302(0x8e,0x00);
writebyte1302(0x80,00);
writebyte1302(0x82,0x00);
writebyte1302(0x84,0x00);
writebyte1302(0x8c,0x12);
writebyte1302(0x88,0x06);
writebyte1302(0x86,0x21);
writebyte1302(0x8a,0x04);
writebyte1302(0x8e,0x80);
writecom(0x38);delay();
writecom(0x0c);delay();
writecom(0x06);delay();
writecom(0x01);delay();
writecom(0x80);delay();
}
3.2.3对1602编程
voidwritecom(ucharcom)//写指令函数
{
delay1(5);
rs=0;
rw=0;
e=0;
delay();
P0=com;
delay();delay();delay();
e=1;
delay();delay();delay();
e=0;
}
voidwritedat(uchardat)//写数据函数
{
delay1(5);
rs=1;
rw=0;
e=0;
delay();
P0=dat;
delay();delay();delay();
e=1;
delay();delay();delay();
e=0;
}
3.2.4对秒控制
switch(flag)
{
case1:
writecom(0x0f);writecom(0x80+0x4a);//秒的控制让光标在秒的位置上闪烁
if(k2==0)
{
delay1(10);
if(k2==0)
{
miao=miao/16*10+miao%16;
miao++;
if(miao==60)
miao=0;
}
while(!
k2);
writedat(0x30+miao/10);//刷新秒的显示
writedat(0x30+miao%10);
writecom(0x80+0x4a);
miao=miao/10*16+miao%10;
writebyte1302(0x8e,0x00);
writebyte1302(0x80,miao);
writebyte1302(0x8e,0x80);
}
if(k3==0)
{
delay1(10);
if(k3==0)
{
miao=miao/16*10+miao%16;
miao--;
if(miao==-1)
miao=59;
}
while(!
k3);
writedat(0x30+miao/10);
writedat(0x30+miao%10);
writecom(0x80+0x4a);
miao=miao/10*16+miao%10;
writebyte1302(0x8e,0x00);
writebyte1302(0x80,miao);
writebyte1302(0x8e,0x80);
}
break;
4.调试过程与实验结果
刚开始我们只写了初步的程序,只能控制秒、分、时、并进行调整,接着经过我们共同的探讨和努力又在原有程序上加上了对年月日的按键调整,后来我们又对液晶显示屏上的星期进行了调整,利用的是DS1302芯片内部程序。
最终我们实验结果是可调整到当前时间,并且可以通过按键调整。
结果是:
2012-06-21 THU
00:
00:
00
结束语
学习心得
这次硬件部件设计与调试实践,使我们学习了很多的东西。
通过近一周的学习和实践,使我们对所学的知识进行了系统的复习和巩固,同时,通过课设,培养和锻炼了我们的动手能力,这一点非常重要,不仅对我们以后的学习有帮助,还可以为以后的工作打下一定的基础。
这一次的实训对我们的帮助很大,使我们真正的认识到了理论与实际的区别,这将成为我们的学习目标和动力,更进一步的挖掘自己的能力,使自己获得进一步的提高。
这段时间的学习,使我们了解到了理论和实际之间的差别,第一次真正接触到了实际中的问题,并通过和老师、同学交流,加强了自身的分析问题、解决问题的能力。
同时,我们也发现了自己在某些方面的不足,这是我们以后要加以改进的方面。
在组织电路图的过程中使我们也学会了如何搭建单片机的硬件电路,如何根据硬件电路图来编制相关的程序,使我们对硬件课程的学习有了更浓的兴趣,使我们对我们所学的这个方向有了更浓的兴趣。
经过这次的练习,我们会更加严格要求自己,认真对待每一个课时,认真学好单片机这门课,争取有一个新的提高。
参考文献
白炽贵,余明飞,罗永.单片机C语言案例教程[M].电子工业出版社,2011.1