基于AT89S52的电子万年历设计报告参考模板.docx
《基于AT89S52的电子万年历设计报告参考模板.docx》由会员分享,可在线阅读,更多相关《基于AT89S52的电子万年历设计报告参考模板.docx(40页珍藏版)》请在冰豆网上搜索。
基于AT89S52的电子万年历设计报告参考模板
摘要………………………………………………………………………………3
关键词………………………………………………………………………………3
一、设计任务与要求………………………………………………………………3
二、方案设计与论证………………………………………………………………3
方案一…………………………………………………………………………3
方案二…………………………………………………………………………4
方案三…………………………………………………………………………4
三、硬件单元电路设计与参数计算………………………………………………5
1.主控制系统…………………………………………………………………5
2.时钟振荡电路………………………………………………………………5
3.复位电路……………………………………………………………………6
4.DS1302时钟电路…………………………………………………………7
5.按键电路……………………………………………………………………8
6.显示电路……………………………………………………………………8
7.蜂鸣器电路…………………………………………………………………9
四、软件设计与流程图……………………………………………………………9
五、总原电路及元器件清单……………………………………………………13
1.总原理图……………………………………………………………………13
2.PCB制板图…………………………………………………………………13
3.整体电路仿真图以及仿真结果分析……………………………………14
4.元件清单……………………………………………………………………14
六、安装与调试…………………………………………………………………15
1.电路安装……………………………………………………………………15
2.电路调试……………………………………………………………………15
3.软件调试……………………………………………………………………16
七、性能测试与分析……………………………………………………………16
八、结论与心得…………………………………………………………………16
九、参考文献……………………………………………………………………16
十、致谢…………………………………………………………………………16
十一、程序清单…………………………………………………………………17
摘要:
随着社会的快速发展,时间的流逝,从观察太阳、摆钟到现在的单片机电子钟,人类不断研究,不断创造新纪录,单片机电子万年历已成为当今人类准确、快速获取时间信息的重要工具之一。
本设计的电子万年历以AT89S52单片机为控制核心,采用Dallas公司的DS1302实时时钟构成时钟电路,能够实现时间和日期的显示,还增加了闹钟报时的功能。
设计详细地分析设计原理和制作的全过程。
关键词:
单片机;实时时钟;DS1302
一、设计任务与要求:
基本要求:
1、能够显示年、月、日、时、分。
2、可以人为校正年、月、日、时、分。
3、第一次开机显示:
2000010112.00。
4、掉电信息不丢失。
创新扩展:
5、具有闹钟功能。
二、方案设计与论证
方案一:
按照系统设计的功能的要求,初步确定系统由主控模块、时钟模块、显示模块各键盘接口模块共4个模块组成,电路系统构成框图如图1所示。
主控芯片使用52系列AT89S52单片机,时钟芯片使用美国DALLAS公司推出的一款高性能、低功耗、带RAM的实时时钟DS1302。
采用DS1302作为计时芯片,可以做到计时准确。
更重要的是,DS1302可以在很小电流的后备电源(2.5V--5.5V电源,在2。
5V时耗电小于300nA)下继续计时,而且DS1302可以编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本功不耗电。
显示模块采用普通的共阳LED数码管,键输入采用查询法实现功能调整。
图1电子万年历电路系统构成框图
方案二:
按照系统设计的要求和功能,将系统分为主控模块、时钟电路模块、按键扫描模块,LCD显示模块,电源电路、复位电路、晶振电路几个模块,系统框图如图2所示。
主控模块采用AT89S52单片机,按键模块用四个按键,用于调整时间和设定闹钟,显示模块采用LCD1602,时钟电路模块采用DS1302实时时钟实现对时间,日期的操作。
图2 基于AT89S52单片机的电子万年历系统框图
方案三:
按照系统设计的要求和功能,将系统分为主控制器模块、显示模块、按键开关模块、蜂鸣器电路模块。
系统框图如图3所示,主控制模块采用AT89S52单片机为控制中心,显示模块采用液晶LCD1602显示,计时使用AT89S52单片机自带的定时器功能,实现对时间、日期的操作,通过按键盘开关实现对时间、日期的调整。
图3 基于AT89S52单片机的电子万年历总体设计框图
方案论证:
上面提到的三个方案中,在电路原理方面大致相同,都能够达到设计任务与要求,在方案一款方案二中使用外部的时钟芯片DS1302来实现日期和时间的操作,方案三中则利用了单片机自身的定时器功能;在方案二和方案三在显示模块上都使用液晶显示屏LCD1602作为显示,方案一则使用LED数码管作为显示,采用LED数码管动态扫描,数码管的价格适中,对于显示数字较好,而且使用单片机的端口也较少;采用LCD1602液晶显示屏,液晶显示屏的显示功能强大,可以显示大量文字、图形,显示多样性,清晰可见,价格相对LED数码管来说要昂贵些,但是基于本设计显示的东西较多,若采用LED数码管的话,所需数码管较多,价格也相应的会提高,而且不利于控制,对于LCD1602,随着现在制造的发展,价格也在下降,同时它所使用的端口也不很多,能够清晰的显示,比较适合显示大量的数字,因此选择LCD1602作为显示模块。
DS1302是一款高性能的实时时钟芯片,以计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到广泛的应用,同时可以对秒、时、分、日、月、年以及润年补偿的年进行计数,而且在掉电时能够在外部纽扣电池的供电下继续工作,不会因为掉电后,其时间就要重新设置,方案三中使用定时器的功能,当在掉电的时候就会使时间和日期回到原来设定的初始值,同时直接采用单片机定时计数提供秒信号,使用程序实现年时间和日期,采用此种方案,节约成本,但是实现的时间误差较大,所以不采用这种方案。
通过对上述方案的论证分析,本次设计选择方案二,采用AT89S52作为主控制系统,DS1302提供时钟,LCD1602液晶作为显示模块
三、硬件单元电路设计与参数计算
1、主控制系统
单片机中央处理系统的方案设计,我们选用具有ATMEL公司的AT89C52单片机作为中央处理器,如图4所示。
该单片机除了拥有MCS-51系列单片机的所有优点外,内部还具有8K的在系统可编程FLASH存储器,低功耗的空闲和掉电模式,极大的降低了电路的功耗,还包含了定时器、程序存储器、数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统。
整个系统结构紧凑,抗干扰能力强,性价比高。
是比较合适的方案。
图4 AT89S52主控制系统
2、时钟振荡电路
时钟振荡电路图5所示,时钟振荡电路用于产生单片机正常工作时所需要的时钟信号,电路由两个30pF的瓷片电容和一个12MHz的晶振组成,并接入到单片机的XTAL1和XTAL2引脚处,使单片机工作于内部振荡模式。
此电路在加电后延迟大约10ms振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率决定。
电路中两个电容C1、C2的作用使电路快速起振,提高电路的运行速度,对于AT89S52其工作频率为0至33MHz,在这个范围内单片机能够正常的工作。
图5 AT89S52时钟振荡电路
3、复位电路
复位电路由电阻和极性电容组成,如图6所示,通过高电平使单片机复位,在时钟电路开始工作后,当高电平的时间超过大约2us时,即可实现复位。
此复位电路同时具备了上电复位和手动复位的功能,上电复位发生在开机加电时,由系统自动完成,手动复位通过一个按键来实现,在程序运行时,若遇到死机,死循环或程序“跑飞”等情况,通过手动复位就可以实现重新启动的操作。
手动按钮复位需要人为在复位输入端RST上加入高电平。
一般采用的办法是在RST端和正电源Vcc之间接一个按钮和一个电阻,如图所示,当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端,由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。
上电复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间,由图可知充电时间为:
T=2.3RC=2.3*10*10-6*5.1*103=0.1173s,保证系统能够可靠地复位。
图6 AT89S52复位电路
4、DS1302时钟电路
时钟电路主要由时钟芯片DS1302、备用电池、晶振等几部分组成,如图7所示。
DS1302采用3线串行接口,占用引脚少,内部集成了可编程日历时钟,用户可以根据需要通过单片机的控制来自行设置,支持双电源供电,可以使用外部主电源和备用电源,备份电源能够使时钟芯片继续工作。
图7 DS1302时钟电路
5、按键电路
按键电路由四个轻触开关组成,如图8所示。
按键用来调整时间和设定闹钟,其一端直接接到单片机的端口,另一端接地,当按下按键时,相应的端口变为低电平,通过检测这一低电平就可以判断是哪个键按下,从而作相应的操作。
图8 按键电路
6、显示电路
显示电路采用LCD1602液晶显示,图中只画出了其相应的接口,如图9所示。
3脚用于调节LCD1602的背光,4、5、6为LCD1602的控制口,用于控制其写入或是读出指令,7至14脚为LCD1602的数据口,将数传送到LCD1602中。
图9 LCD1602接口电路
7、蜂鸣器电路
蜂鸣器电路由一个220欧的电阻,三极管8550,及蜂鸣器组成,如图10所示。
通过控制三极管的导通和截止来实现蜂鸣器的响与不响。
图10 蜂鸣器电路
四、软件设计与流程图
1、程序流程图
主程序首先初始化定时器、LCD1602及DS1302,然后就开始查询按键,有键按下则开始调整时间和设置闹钟,若没有按下,则执行下面的时间、日期及闹钟时间的显示,最后依次循环这些相同的操作,相应流程图如图11所示:
图11 程序主流程图
按键的检测主要是通过查询的办法来实现,利用按键进行间调整及闹钟设置,首先检测K1键是否按下,当K1键按下时,并且K2键按下时,则设置初始的默认时间;当K1按下,并且K4按下时,则是开启闹钟功能;若只是K3按下则开始设置时间及日期,同时被选择的时间和日期开始闪烁,第一次按下K3时,设置年份,若按下K1,则是减1操作,按下K2是加1操作,设置好年后,第二次按下K3时,则是设置月份,按K1减,按K2则加1,依次循环下去,则可以将时间和日期设置完毕;而当按下K4时,则是设置闹钟时间,第一次按下K4,设置时,按K1时减1,按K2时加1,第二次按下时,设置分,同样的操作,按K1分减1,按K2分加1,程序流程图12所示:
图12 时间调整及闹钟设置程序流程图
2、软件设计
2.1软件总设计
主程序首先对系统环境初始化,设置定时器T0工作模式为16位定时/计数器模式,置位总中断允许位EA,并对键盘端口置位,再对LCD1602初始化,DS1302初始化。
接着扫描键盘,在键盘程序里面是对时间、日期及闹钟的调整,最下面是时间的显示及闹钟比较时间。
2.2子程序设计
读写DS1302子程序:
读DS1302子程序:
ucharread_ds1302(ucharaddr)
{
ucharbackdata;
sclk=0;
reset=1;
write_byte(addr);//先写地址
backdata=read_byte();//然后读数据
sclk=0;
reset=0;
return(backdata);
}
写DS1302子程序:
ucharread_ds1302(ucharaddr)
{
ucharbackdata;
sclk=0;
reset=1;
write_byte(addr);//先写地址
backdata=read_byte();//然后读数据
sclk=0;
reset=0;
return(backdata);
}
读写LCD1602子程序:
写指令数据到LCD子程序
voidlcd_wcmd(ucharcmd)
{
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P0=cmd;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
写显示数据到LCD子程序
voidlcd_wdat(uchardat)
{
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
五、总原电路及元器件清单
1、总原理图
基于AT89S52单片机的电子万年历硬件电路图如图13所示,系统由AT89S52单片机,按键扫描电路、显示电路、时钟电路、晶振电路、复位电路、电源指示电路及蜂鸣器输出电路。
图13基于AT89S52的电子万年历电路原理图
2、PCB制板图
基于AT89S52单片机的电子万年历制板如图14所示:
图14基于AT89S52的电子万年历PCB制板图
3、整体电路仿真图以及仿真结果分析
3.1整体电路仿真图如图15所示所示。
图15电子万年历仿真图
3.2仿真结果分析
仿真正确显示了时间,在LCD1602中正确显示了当前日期、时间并可以显示闹钟时间,通过按按键K3,就可以开始设置时间,依次按K3依次在年、月、日、时、分之间切换,并且相应的调整的位会闪烁,按K2键用于加1操作,K1键用于减1操作。
按K4键则可以设置闹钟时间,依次按K4可以在时和分之间切换,按K2键,可以增加值,按K1键,可以减小值。
闹钟开启设置:
先按住K1,然后再按K4就可以开启闹钟功能,当设置好闹钟后并开启闹钟功能后,就可以有闹钟功能,闹钟时间为1分钟。
仿真正确显示了我们需要达到的要求,符合了我们设计的要求。
4、元件清单
基于AT89S52单片机的电子万年历元件清单如表1所示。
表1基于AT89S52单片机的电子万年历元件清单
元件名称
型号
数量/个
用途
单片机
AT89S52
1
控制核心
时钟芯片
DS1302
1
实时时钟
晶振
12MHz
1
晶振电路
晶振
32.768kHz
1
时钟电路
电容
30pF
2
晶振电路
电解电容
10uF/25V
1
复位电路
按键开关
6*6*6
5
按键/复位电路
电阻
1K
1
电源指示电路
电阻
5.1K
1
复位电路
电阻
220
2
限流/复位电路
滑动变阻器
1M
1
LCD1602背光调节
三极管
S8550
1
蜂鸣器电路
发光二极管
红色
1
电源指示电路
蜂鸣器
有源蜂鸣器
1
蜂鸣器电路
纽扣电池
CR2025/3V
1
时钟电路
纽扣电池座
CR2025
1
时钟电路
排座
间距2.54mm
16
显示电路
LCD
LCD1602
1
显示电路
排针
间距2.54mm
2
电源接口
独石电容
104
1
电源接口
电源Vcc
+5V
1
提供+5V电源
六、安装与调试
1、电路安装
用Protel99se画好PCB后,并做出相应的电路板,测试过电路板没有短路和断路后,对照Protel99se中的PCB板图将相应的元件插到电路板上,首先将矮的电子元件先插上,然后将其焊在电路板上,依照高矮,将剩余的元件安装在电路板上,并依次焊接好.当焊接完成后.剪去引脚,并测试电路焊接后是否有短路.
2、电路调试
在测试中遇到LCD1602不能够显示出时间和日期,经过检查才发现是LCD1602的背光没有调好,通过调节接在LCD1602上3脚上的滑动变阻器,改变所给的电压,可以清晰地看见了LCD能够显示。
对于DS1302在测试过程中发其上电不久就发热,在检查电路过程中,不是因为发现芯片短路,最终检查发现原来是DS1302的引脚接法不正确,给+5V的应该是芯片的脚,给后备电池的是1脚,当换过来之后,芯片就不发热了,而且可以正常显示出我们要显示的时间和日期,显示效果如图16所示:
图16调试显示效果图
3、软件调试
在软件调试过程中,当按下按键调节时间和日期后,时间不能继续在加,后来分析了程序才发现,是在设置好时间和日期时我们暂停了时钟,在设置完后没有启动时钟,所以时间和日期就不能够继续走,在那里停止了,发现这个原因后,我在设置完时间后就开启时钟,时间和日期就能够正确显示了。
七、性能测试与分析
上电测试,LCD1602能够正确显示时间和日期,第一次K3按钮,开始设置年,再按K1,年减1,按K2,年加1,按二次K3,设置月,按K1,月减1,按K2,月加1,按三次K3,设置日,按K1,日减1,按K2,日加1,按四次K3,设置时,按K1,时减1,按K2,时加1,按五次K3,设置分,按K1,分减1,按K2,分加1,按第五次,设置时间完成。
闹钟设置,按下K4,开始设置闹钟,按第一次,设置分,按K1,时减1,按K2,时加1,按第二次设置分,按K1,分减1,按K2,分加1,设置好闹钟后,按组合键K1+K4开启闹钟功能,当到闹钟时间后,蜂鸣器响,闹钟时间为1分钟,
在对电路测试后,电路达到了所需的功能。
通过对电路的多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力及对电路的分析能力,同时在软件的编程方面得到了更高的提高,对编程能力得到加强,同时对所学的知识得到了大的提高与巩固。
八、结论与心得
在这学期的课程序设计中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手制作的能力,在各种其它能力上也都有了提高。
更重要的是,在课程序设计里,我们学会了很多学习的方法。
而这是以后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
同时在与老师和同学的交流过程中,互动学习,将知识融会贯通,提高自己与人交流的能力,提高自己的团队意思。
老师给我们提出了许多革新非常的好,让我们能够有更多的发挥空间,提高了自己开发创新的能力。
九、参考文献
[1]李广弟兄朱月秀冷祖祁,单片机基础(第3版):
北京航航天大学出版社
[2]华成英童诗白,模拟电子技术基础(第四版):
高等教育出版社
[3]康华光,电子技术基础数字部分(第五版):
高等教育出版社
[4]赵建领薛园园,零基础学单片机C语言程序设计:
机械工业出版社
[5]楼然苗李光飞.单片机课程设计指导:
北京航航天大学出版社
[6]李凤霞.C语言程序设计教程(第二版):
北京理工大学出版社
[7]赵亮侯国锐.单片机C语言编程与实例:
人民邮电出版社
[8]张义和王敏男许宏昌余春长.例说5单片机(C语言版):
人民邮电出版社
十、致谢
感谢学院给我们提供了一个展现自己的舞台,给我们一次难得煅炼的机会,使得我们的动手能力和专业技能都有了很大的提高,对本专业的东西有了更进一步的了解。
同时,在做作品的日子里得了彭老师的悉心指导,在此向我们的指导教师致以诚挚的谢意,感谢提供相关技术帮助的老师和同学,你们的支持和鼓励使我们对这次的作品完全有了信心和动力,也给了我们很多无私的帮助和支持,我们在此深表谢意。
十一、程序清单
程序清单如下:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitLCD_RS=P2^5;//LCD1602指令,数据控制端口
sbitLCD_RW=P2^6;//LCD1602读、写控制端口
sbitLCD_EN=P2^7;//LCD1602使能
sbitK1=P1^0;//K1键
sbitK2=P1^1;//K2键
sbitK3=P1^2;//K3键
sbitK4=P1^3;//K4键
sbitreset=P2^2;//5脚复位
sbitio=P2^1;//6脚IO
sbitsclk=P2^0;//7脚时钟
sbitBEEP=P3^7;//蜂鸣器端口
bitflag=1,hour=0,min=0;
bityear=0,month=0,day=0;
bitbj_flag=0;//报警标志位
uchartimecount=0,count=0;
ucharstr[]="Alarm:
";
ucharinit[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};
ucharinit1[]={0x00,0x00};
ucharinit2[]={0x00,0x00,0x12,0x01,0x01,0x01,0x00};
//秒,分,时,日,月,星期,年,默认时间设置
ucharbj_time[]={0x00,0x00,0x00};
//秒,分,时
ucharcodemytab[8]={0x01,0x1b,0x1d,0x19,0x1d,0x1b,0x01,0x00};//小喇叭形状定义
#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};
voidSet_W1302(ucharaddr);
voidSet_Flash(ucharrow,ucharcol);
voidSet_place(ucharrow,ucharcol);
voidPlay_nowtime();
voidkey_set(ucharnum,ucharrow,ucharcol);
voidalarm_time();
voidPlay_alarmtime();
voidTime_compare();
/******************************************************************/
/********************************