单片机最小系统拓展实时日历时钟显示设计Word文档下载推荐.doc
《单片机最小系统拓展实时日历时钟显示设计Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《单片机最小系统拓展实时日历时钟显示设计Word文档下载推荐.doc(22页珍藏版)》请在冰豆网上搜索。
项目设计方案论证内容记录于课程设计报告书第三项中,项目设计方案论证主要考核设计方案的正确性、可行性和创新性,考核成绩占30%左右。
4.项目设计结果分析主要包括项目设计与制作结果的工艺水平,项目测试性能指标的正确性和完整性,项目测试中出现故障或错误原因的分析和处理方法。
项目设计结果分析记录于课程设计报告书第四项中,考核成绩占25%左右。
5.学生在课程设计过程中应认真阅读与本课程设计项目相关的文献,培养自己的阅读兴趣和习惯,借以启发自己的思维,提高综合分和理解能力。
文献阅读摘要记录于课程设计报告书第五项中,考核成绩占10%左右。
6.答辩是课程设计中十分重要的环节,由课程设计指导教师向答辩学生提出2~3个问题,通过答辩可进一步了解学生对课程设计中理论知识和实际技能掌握的程度,以及对问题的理解、分析和判断能力。
答辩考核成绩占25%左右。
7.学生应在课程设计周内认真参加项目设计的各个环节,按时完成课程设计报告书交给课程设计指导教师评阅。
课程设计指导教师应认真指导学生课程设计全过程,认真评阅学生的每一份课程设计报告,给出课程设计综合评阅意见和每一个环节的评分成绩(百分制),最后将百分制评分成绩转换为五级分制(优秀、良好、中等、及格、不及格)总评成绩。
8.课程设计报告书是实践教学水平评估的重要资料,应按课程、班级集成存档交实验室统一管理。
一、课程设计项目名称
单片机最小系统拓展实时日历时钟显示设计
二、项目设计目的及技术要求
设计目的:
学会运用51单片机设计实施日历时钟显示系统。
技术要求:
1.在51单片机系统中设置、获取、记录实时的日历时钟信息并通过LED显示或LCD显示。
2.能够进行长时间的记录,并且存储的时间信息在掉电情况下能长期保存。
3.初始的时间信息要求用户用键盘输入或通过PC机和单片机的串口通信来设置。
4.利用已有设备进行安装调试。
三、项目设计方案论证(可行性方案、最佳方案、软件程序、硬件电路原理图和PCB图 )
1.可行性方案
1.1单片机芯片的选择方案和论证
方案一:
采用AT89C52,片内ROM全都采用FlashROM:
能以3V超低压工作;
同时也与MCS-51系列单片机完全兼容,该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片的多次拔插,所以不会对芯片造成一定的损坏。
方案二:
采用AT89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。
1.2显示模块选择方案和论证
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。
采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。
所以采用了LED数码管作为显示。
1.3时钟芯片的选择方案和论证
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒,分,时,日,周,月,年以及闰年补偿的年进行计数,而且精度高,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA.
直接采用单片机定时计数器提供秒信号,使用程序实现时,分,秒计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。
所以不采用此方案。
1.4电路设计最佳方案确定
综上各方案所述,对此次课程设计的方案选定:
以单片机AT89C52为主控制器,
时间数据是通过时钟芯片DS1302来读取,并通过LED数码管显示出来,并用键盘来完成对当前时间的调整。
2.硬件设计
2.1电路设计框图
图1电路设计
2.2系统概述
本电路是有AT89C52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;
时钟电路由DS1302提供,他是一种高性能,低功耗,带RAM的实时时钟电路,它可以对年,月,日,周日,时,分,秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据,DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。
可产生年,月,日,周日,时,分,秒,具有使用寿命长,精度高和低功耗等特点。
具有掉电自动保存功能;
显示部分由15个数码管,74HS138,74LS244构成。
使用动态扫描显示方式对数字的显示。
2.3单片机最小系统设计
单片机AT89C52的最小系统电路如图2所示:
图2AT89C52单片机最小系统
2.4外接电源接口电路
图3外接电源接口电路
2.5显示电路
图4为显示电路的电路图,采用了LED驱动芯片MAX7219。
使用两片MAX7219,实现16为数码管显示。
因为本设计要实现显示年(4位数字)、月(2位数字)、日(2位数字)、星期(1位数字)、小时(2位数字)、分钟(2位数字),总共需要13位数码管,而一片MAX7219最多只能支持8位数码管的显示,所以,我们需要单片机分别连接两片MAX7219来实现13位数码管显示。
图4显示电路电路图
2.6外接晶体引脚
图5外接晶振
2.7复位电路
图6手动复位电路
在系统运行的过程中,有时可能对系统需要进行复位,为了避免对硬件系统经常加电和断电造成的损害,设计了手动的复位电路。
如图6所示。
这种电路的设计,在系统的运行过程中需要复位时,只需使开关闭合,在RST端就会出现一定时间的高电平信号,从而使单片机实现复位。
2.8DS1302时钟电路图
图7DS1302时钟电路
3.软件设计
软件的设计是设计控制系统的应用程序。
其任务是在整体设计和硬件设计的基础上,确定程序结构,分配内RAM资源,划分功能模块,然后进行主程序和各模块程序的设计,最后连接起来成为一个完整应用程序,与硬件相结合完成相应功能。
3.1日历时钟子程序设计
DS1302与CPU的连接需要三条线,即SCLK(7),I/O(6),RST(5)。
日历时钟DS1302的读写需要初始化时序,读时序,写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机启动写时序开始,如果要求但总线器件回送是低位在先。
读写都是16位数据高8位是地址低8位是数据,在读写时要严格遵从起读写时序,否则读写将会失效。
图8日历时钟的写和读
3.2实验程序
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[]={~0xC0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,
~0x90,~0x88,~0x83,~0xc6,~0xa1,~0x86,~0x8e,~0xff,~0x0c,~0xbf};
/*0-F、灭(16)、P.-*/
uchart0,t1,sec,min,hour,function,a0,a1,a2,a3,a4,a5,a6,a7;
bitshan;
voiddelay(uintcount);
ucharkeychuli();
ucharkey();
voiddisplay(uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar);
voidsend();
voidini();
voidchuli();
//***************主函数**********************************************
voidmain()
{ini();
while
(1)
{ display(16,16,16,16,16,16,16,17);
//没有键按下是侠士P.
if(key()==1) //当k1按下后则定时器驱动时钟开始走
{TR0=1;
function=1;
shan=0;
while
(1)
{ send();
//送数
display(a0,a1,a2,a3,a4,a5,a6,a7);
//显示
chuli();
//处理}}}}
//*************初始化程序******************************************
void ini()
{
TMOD=0x01,
TH0=0x3c,TL0=0xb0;
TH1=0x3c,TL1=0xb0;
//定时50ms中断一次
EA=1,ET0=1,TR0=0;
ET1=1;
TR1=0;
}
//**************键值处理程序*************************
voidchuli()
{ switch(key())
{
case0:
break;
case1:
//当按键k1按下后
{function++;
//判断按下的次数
switch(function)
{case1:
TR0=1;
break;
//一次条秒同时闪烁
case2:
//两次调分同时闪烁
case3:
//三次调分同时闪烁
case4:
TR0=0;
TR1=1;
shan=1;
//四次跳出调整状态时钟继续走时
case5:
function=1;
TR0