单片机电子万年历(含程序)_第1页
单片机电子万年历(含程序)_第2页
单片机电子万年历(含程序)_第3页
单片机电子万年历(含程序)_第4页
单片机电子万年历(含程序)_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、研究实践项目名称:电子万年历设计摘要本设计为电子万年历。具有三种功能:可显示:年、月、日、时、分、秒、周,并具有可调日期和时间功能。电子万年历采用12MHZ晶振与单片机AT89C52连接,通过软件编程实现以24小时为周期,同时显示时、分、秒的要求。利用单片机的定时器和计数器产生定时效果,通过编程形成数字时钟效果,再用数码管动态扫描显示单片机处理后的数据。同时通过端口读取当前外控状态,改变程序的不同状态,实现不同的功能。电子万年历的设计和制作可以用数字电路或单片机来实现。如果由数字电路来完成,设计的电路相当复杂,大约需要十几个数字集成块,其功能主要是通过数字电路的各种功能模块的组合来实现的。焊接

2、工艺复杂,成本很高。如果采用单片机设计制造,其功能的实现主要通过软件编程完成,降低了硬件电路的复杂度,从而降低了其成本,更适合我国大学生自主开发.AT89C52是一款低压、高性能CMOS 8位单片机。它包含 8k 字节的可重写闪存只读程序存储器和 256 字节的随机存取数据存储器 (RAM)。该设备采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片上通用8位中央处理器和Flash存储单元,AT89C52单片机具有在电子行业有广泛的应用。关键词:单片机数显动态扫描时间日期可调目录TOC o 1-3 h u HYPERLINK l _Toc7586 第一章 设计论证

3、与要求 1 HYPERLINK l _Toc19205 1.1设计及应用意义 1 HYPERLINK l _Toc17189 1.2 设计方案演示1 HYPERLINK l _Toc16480 1.2.1 MCU片选1 HYPERLINK l _Toc9355 1. 2.2 显示模块选择1 HYPERLINK l _Toc9355 1. 2.3 时钟片选2 HYPERLINK l _Toc17189 1.3设计过程 2 HYPERLINK l _Toc32353 第二章系统硬件电路设计3 HYPERLINK l _Toc20493 2.1 CPU 时钟 3 HYPERLINK l _Toc42

4、80 2.2 主控芯片AT89C52模块3 HYPERLINK l _Toc19678 2.3 显示控制电路的设计与原理 4 HYPERLINK l _Toc19678 2.4 按键电路设计 6 HYPERLINK l _Toc31592 第 3 章 系统软件设计 7 HYPERLINK l _Toc17051 3.1 软件主流程 7 HYPERLINK l _Toc17051 3.2 初始化器和宏定义 9 HYPERLINK l _Toc12155 3.3 主程序 10 HYPERLINK l _Toc12445 3.4显示子程序 12 HYPERLINK l _Toc26722 3. 5按

5、钮子程序15 HYPERLINK l _Toc26722 3.6延时子程序16 HYPERLINK l _Toc6214 第 4 章 系统调试与分析 17 HYPERLINK l _Toc10487 HYPERLINK l _Toc25593 第 5 章 设计总结 20 HYPERLINK l _Toc16673 第 6 章 参考文献 21 HYPERLINK l _Toc16673 附件清单 22 HYPERLINK l _Toc16673 附两张仿真示意图23 HYPERLINK l _Toc16673 附录三 节目清单 24 HYPERLINK l _Toc16673 附四实物图35第一

6、章设计论证与要求1.1设计及应用意义21世纪是数字技术飞速发展的时代,单片机在数字技术飞速发展的时代发挥着极其重要的作用。电子万年历的开发和研究也是信息时代的重中之重,因为它用于学校、事业单位、企业、部队等单位的礼堂、培训场所、教学室、公共场所等场合。一个角落。因此,发展单片机是国家的需要、社会的需要、人民的需要。由于社会对信息交流的要求越来越高,高科技的逐步发展,电子万年历已经开发并投放市场,得到了广泛的应用。1.2 设计方案论证1.2.1单片机芯片选择方案一:89C以51芯片为硬件核心,使用Flash ROM,系有4KB ROM存储空间,可工作在3V超低电压,完全兼容MCS-51系列单片机

7、,但不支持在电路设计中使用时有ISP。在线烧录技术,在调试电路时,由于程序修改错误或程序的新功能需要烧录到程序中,多次拔插芯片都会对芯片造成一定的损坏。方案二:使用AT89C52,所有芯片ROM使用Flash ROM;可在3V超低压下工作;同时也完全兼容MCS-51系列单片机89C。采用可编程可擦写技术,在调试电路时,当因程序修改错误或程序新增功能需要烧录时,无需多次插拔芯片,因此芯片不会损坏。但是因为课程学习主要以AT89C51为主,所以选择AT89C52。1.2.2显示模块选择方案一:点阵数码管显示。点阵数码管由八行八列的发光二极管组成。它更适合显示文本。如果是用来显示数字的,太浪费了,而

8、且价格也比较高,所以也不用做显示器。方案二:采用LED数码管动态扫描,LED数码管价格适中,最适合显示数字,采用动态扫描方式与单片机连接时占用端口线少的单片机。因此,采用LED数码管作为显示器。1.2.3时钟片选方案一:采用DS1302时钟芯片实现时钟。 DS1302芯片是一款高性能时钟芯片,可自动计算秒、分、时、日、周、月、年、年,带闰年补偿,精度高。 RAM 用作数据暂存区,工作电压在 2.5V 到5.5V左右,2.5V 时功耗小于 300 nA 。该方案虽然时间精度高,但电路复杂,设计成本高,故未采用。方案二:直接用单片机定时器计数器提供秒信号,用程序计算年、月、日、周、时、分、秒。该方

9、案减少了芯片的使用,节省了成本。本设计采用单片机提供秒信号,采用定时器T0的方式2(8位自动重载计数初值的计数值)。1.3设计过程熟悉硬件熟悉硬件 了解各引脚功能分块设计各部分电路将分块的电路组合认真学习单片机汇编语言完成整体电路图确定变成结构和思路综合各程序完成整体程序编辑各个程序模块用Proteus画出电路图调试程序,进行修改对仿真问题进行改正画出仿真图进行仿真准备器件、搭接电路仿真成功软硬件结合,完成任务书要求验证硬件电路成功进行扩展第二章系统硬件电路设计2.1单片机时钟信号微控制器由外部电路提供时钟信号。本实验采用11.0592MHz晶振和30pF电容组成单片机的时钟电路。如图2-1所

10、示:图 2-1 时钟电路2.2 主控芯片AT89C52模块AT89C52是一款低压、高性能CMOS 8位单片机,内含8k字节可重写Flash只读程序存储器和256字节随机存取数据存储器( RAM) 。设备采用ATMEL高密度、非易失性易失性存储技术生产,兼容标准MCS - 51指令系统,片上通用8位中央处理器和闪存单元,功能强大的AT89C52单片机可为您提供与许多更复杂的系统控制应用程序。图 2-2 AT89C5 2 脚示意图AT89C52有40个引脚, 32个外部双向输入/输出( I/O )端口,包含2个外部中断端口。 3个16位可编程定时器计数器, 2个全双工串行通讯口, 2条读写口线,

11、 AT89C52可按常规方法编程,也可在线编程。它结合了通用微处理器和Flash存储器,尤其是可重复擦除的Flash存储器,可有效降低开发成本。2.3 显示电路设计及原理就时钟而言,通常可以使用液晶显示器或数码管显示器。由于一般的段式液晶屏,需要专门的驱动电路,而且作为无源显示器,液晶显示器的可视性比较差;对于带有驱动电路和微处理器接口的液晶显示模块(字符或点阵),一般多采用并行接口,对微处理器接口要求较高,占用资源较多。另外, 89C52本身并没有专门的LCD驱动接口。因此,本设计采用点阵数码管进行显示。点阵数码管由八行八列的发光二极管组成,更适合显示文字。初始化时,软件编写的指令集中在显示

12、功能的设置上。数码管管脚如图 2-3 所示。图2-3 数码管管脚定义本设计采用动态扫描方式,单片机P1.7控制第一个数码管,P1.6控制第二个,P1.5控制第三个,P1.4控制第四个,P1.3控制第五个。 P1.2控制第6位,P0口控制8位数据,依次选择6个数码管,先打开一个数码管,其余关闭,让P0显示数据,一定时间后关闭数码管延迟。设计如图 2-4 所示。图 2-4 显示了电路设计实物选用六位八段数码管LG3661AH,其引脚排列如图2-5所示。图 2-5 6 位共阴数字管脚示意图2.4 按键电路设计由于我设计的是电子万年历,所以要实现各种功能的显示,并且能够切换显示和调整年月日。因此,按键

13、的设计在设计过程中显得尤为重要。在设计过程中,按键选择了P2口的前4位,一共使用了4个按键,尽可能在很小的空间内实现最多的功能。 MODE键为年、月、日、时间显示切换键,按一次可改变显示位置。在调整显示环境中,年/时、月/分、日/秒键为显示调整位加1键,每按一次显示数字加1。设计如图 2-5 所示。图 2-5 按键电路其中,P2.0为年/时键,P2.1为月/分键,P2.2为日/秒/周键,P2.3为模式键。第三章软件设计3.1软件主要流程开始时开始时=24?秒=0;分+1月份=13?秒+1分=0;时+1分=60?秒=60?时=0;日+1日本月天数?日=1,;月份+1有T0中断?年=9999?月份

14、=1;年+1年=00根据平润年与大小月查出本月天数YYYYYYNNNNNNN初始化启动定时器T0,设置工作模式,装入计数初值允许T0中断调键盘扫描N调用显示子程序返回调用延时子程序返回3.2 初始化器和宏定义#include#include#define uchar 无符号字符#define uint 无符号整数位 P1_2=P12;位 P1_3=P13;位 P1_4=P14;位 P1_5=P15;位 P1_6=P16;位 P1_7=P17;sbit key_y_h=P20;sbit key_m_m=P21;sbit key_d_s=P22;sbit key_set=P23;uint tcnt

15、;单位年h = 20;放标志,标志1,秒;uint 周 = 1 ;最小单位=30;单位小时=15;单位日=16;uint 月 = 12 ;单位标志2 =0 ;uint year=13;类型 sec_l,sec_h,min_l,min_h,hour_l,hour_h;类型 day_l,day_h,month_l,month_h,year_l,year_h;输入代码 tab=0 x3F, /*0*/0 x06, /*1*/0 x5B, /*2*/0 x4F, /*3*/0 x66, /*4*/0 x6D, /*5*/0 x7D, /*6*/0 x07, /*7*/0 x7F, /*8*/0 x6F

16、, /*9*/;3.3主程序_无效的主要()TMOD=0 x02; /设置定时器T0的模式为模式2(8位自动重载计数初值的计数值)TH0=0 x06; /设置计数器的初始值,通过TH0存储重新加载的计数值 X0=256-250=6TL0=0 x06;TR0=1; /开始T0ET0=1; /使能定时器T0中断使能EA=1;而(1)键扫描();void t0(void)interrupt 1 using 0 /t0的中断程序tcnt+;if(tcnt=4000)/定时器计时计数,4000次250us为1秒tcnt=0;秒+;如果(秒=60)秒=0;分钟+;如果(分钟=60)最小=0;小时+;如果(

17、小时=24)小时=0;天+;周+;if(month=2&(year=0&yearh%4=0)|(year!=0&year%4=0)&day=30)day=1;否则如果(月=2&天=29)日=1;else if(月=4|月=6|月=9|月=11)&日=31)日=1;否则如果(天=32)天=1;如果(天=1)月+;如果(月=13)月=1;年+;如果(年=100)年=0;年h+;如果(年h=100)年h=20;3.4显示子程序无效显示()sec_h=sec/10; /时分秒数码管显示,类似年月日sec_l=sec%10;min_h=min/10;min_l=min%10;hour_h=小时/10;小

18、时_l=小时%10;day_h=天/10;天_l=天%10;月_h=月/10;月_l=月%10;year_h=年/10;年_l=年%10;P1_2=0;如果(标志 2=1)P0=tabday_l;否则如果(标志 2=0)P0=tabsec_l;否则如果(标志 2=2)P0=标签周;延迟(1);P1_2=1;P1_3=0;如果(标志 2=1)P0=tabday_h;如果(标志2=0)P0=tabsec_h;否则 P0=tab0;延迟(1);P1_3=1;P1_4=0;如果(标志 2=1)P0=tab月_l|0 x80;否则如果(标志 2=0)P0=tabmin_l|0 x80;否则如果(标志 2

19、=2)P0=标签0;延迟(1);P1_4=1;P1_5=0;如果(标志 2=1)P0=tab月_h;否则如果(标志 2=0)P0=tabmin_h;否则如果(标志 2=2)P0=标签0;延迟(1);P1_5=1;P1_6=0;如果(标志 2=1)P0=tabyear_l|0 x80;否则如果(标志 2=0)P0=tabhour_l|0 x80;否则如果(标志 2=2)P0=标签0;延迟(1);P1_6=1;P1_7=0;如果(标志 2=1)P0=tabyear_h;否则如果(标志 2=0)P0=tabhour_h;否则如果(标志 2=2)P0=标签0;延迟(1);P1_7=1;;3.5 关键子

20、程序无效键扫描()显示();while(!key_set) /日期/时间键显示();如果(键集)标志2=!标志2;while(!key_y_h) /年/小时键显示();如果(key_y_h)if(flag2=1) /调整年份年_l+;如果(年_l=10)年_l=0;年_h+;年=年_l+年_h*10;else if(flag2=0) /调整小时小时_l+;如果(小时_l=10)小时_l=0;小时_h+;如果(小时_l=4&小时_h=2)小时_l=0;小时_h=0;小时=小时_h*10+小时_l;月/分和日/秒键的编程与年/小时的编程类似,最后一天和秒键可以在模式2中调整星期。3.6延时子程序无

21、效延迟(单位毫秒)uchar我;而(毫秒-)for(i=0;i123;i+); 第四章系统调试与分析软硬件调试使用 Proteus 模拟软件调试。电子日历是一种多功能的数字类型,可以看到当前的日期和时间。电子年历功能多,程序也比较复杂,编程调试问题也比较多。调试发现年键不能调,其他键可以正常工作,于是仔细对比了键子程序的三个调键,发现年调程序的括号不是一一对应的-一。修改,一步一步完成,模拟完美。仿真结果如图 4-1、4-2 和 4-3 所示。图 4-1 时间显示图 4-2 日期显示图 4-3 周显示硬件调试和焊接不能掉以轻心。庞大的电路系统中只要有一个错误,就会给检测带来很大的不便,而且电路

22、中的交叉点很多,所以要注意各种尖针。 ,否则会刺穿护套线,造成电路短路。调试时发现按键按下时间没有调整,显示的数字没有变化。仔细检查后发现,单片机的P2口是从下往上排列的。调整。将时间调整为23:59:59,一秒后时间显示为00:00:00,日期增加一天。第五章设计总结这种科学研究实践的意义非凡。它把我从单一的深入理论编程带到了一个用过的电路的综合硬件和软件实现。通过这次科研实践,我知道了单片机在实际应用中的重要作用,也了解了单片机本身通过编程控制的功能,以及单片机的一些扩展功能。芯片微型计算机。我对单片机的使用原理有了更深的了解。设计的时候,看到同组的同学们都很努力很认真,不敢懈怠。虽然时间

23、有点赶,但老师和同学们都在夜以继日地解决问题。我在电子万年历的设计上也遇到了一些问题,但是通过别人的指导和阅读很多有价值的书籍,我从他们身上学到了很多。它还增强了他们识别和解决问题的能力。还有,编程时要小心,综合考虑,实现一个完整的功能,在测试程序时要善于发现错误,可能是一些小问题,很常见。设计已经顺利完成。经过自己的努力和同学们的帮助,我终于取得了成绩。尤其离不开辅导老师沉铭的悉心教导。我受益匪浅。我相信他的工作作风和知识积累是我们的榜样。伟大的灵感。感受老师不怕辛苦,热情细心指导。在这里跟他说,你辛苦了。第 6 章 参考文献1 齐。朱宁熙,单片机应用系统设计技术基于C51的Proteus仿

24、真(第二版)。 米。电子行业。 20112齐“单片机应用系统设计技术基于C51的Proteus仿真实验及解题指导”。 米。电子行业。 20113 辛. 单片机原理与应用。 米。电子行业。 2008年4 楼然淼光飞。 单芯片课程设计指南。 米。航空航天大学。 2007年5 常宏润.秀英。 单片机应用设计200例(上下)。 米。航空航天大学。 2006年6 易纲 “新MCS - 51 单芯片应用设计(第 3版)”。 M 科技大学。 2008年7 马静. 单片机原理与应用。 M 中国计量实践教学指导手册 2003年附上组件清单:序列号姓名型号及参数评论价格数量1中央处理器STC89C52DIP40

25、封装4.412管座DIP-400.313晶体振荡器11.0592MHZ492型0.614整流桥2W102A圆桥0.515稳压器集成电路LM7805TO-2200.816原装贴片电容30pf0.0527电解电容器1000uf/16V0.318电解电容器470uf/16V0.219电解电容器10uf/16V0.1110独石电容器0.47uf0.2211按钮6mm*6mm0.1112反抗10K/0.25W金属膜1/4W0.01113排除A10-103直插头0.25114单排直插头1*400.3115自锁开关0.3716终端0.0411 7数码管LG3661AH14针8118按钮0.1419杜邦线20

26、31总消耗20.90元附两张仿真示意图:附上三个程序的清单:#include#include#define uchar 无符号字符#define uint 无符号整数位 P1_2=P12;位 P1_3=P13;位 P1_4=P14;位 P1_5=P15;位 P1_6=P16;位 P1_7=P17;sbit key_y_h=P20;sbit key_m_m=P21;sbit key_d_s=P22;sbit key_set=P23;uint tcnt;单位年h = 20;uchar 标志,标志 1,秒;单位周=1;最小单位=30;单位小时=15;单位日=16;单位月=12;单位年=13;ucha

27、r sec_l,sec_h,min_l,min_h,hour_l,hour_h;uchar day_l,day_h,month_l,month_h,year_l,year_h;uchar 代码 tab=0 x3F,/*0*/0 x06,/*1*/0 x5B,/*2*/0 x4F,/*3*/0 x66,/*4*/0 x6D,/*5*/0 x7D,/*6*/0 x07,/*7*/0 x7F,/*8*/0 x6F,/*9*/;uint flag2=0;无效键扫描();无效的显示();无效延迟(单位毫秒);无效延迟(单位毫秒)uchar我;而(毫秒-)for(i=0;i123;i+);无效的主要()T

28、MOD=0 x02; /设置定时器T0的模式为模式2(8位自动重载计数初值的计数值)TH0=0 x06; /设置计数器的初始值,通过TH0存储重新加载的计数值 X0=256-250=6TL0=0 x06;TR0=1; /开始T0ET0=1; /使能定时器T0中断使能EA=1;而(1)键扫描();void t0(void)interrupt 1 using 0 /t0的中断程序tcnt+;if(tcnt=4000)/定时器计时计数,4000次250us为1秒tcnt=0;秒+;如果(秒=60)秒=0;分钟+;如果(分钟=60)最小=0;小时+;如果(小时=24)小时=0;天+;周+;if(mon

29、th=2&(year=0&yearh%4=0)|(year!=0&year%4=0)&day=30)day=1;否则如果(月=2&天=29)日=1;else if(月=4|月=6|月=9|月=11)&日=31)日=1;否则如果(天=32)天=1;如果(天=1)月+;如果(月=13)月=1;年+;如果(年=100)年=0;年h+;如果(年h=100)年h=20;无效显示()sec_h=sec/10;sec_l=sec%10;min_h=min/10;min_l=min%10;hour_h=小时/10;小时_l=小时%10;day_h=天/10;天_l=天%10;月_h=月/10;月_l=月%10

30、;year_h=年/10;年_l=年%10;P1_2=0;如果(标志 2=1)P0=tabday_l;否则如果(标志 2=0)P0=tabsec_l;否则如果(标志 2=2)P0=标签周;延迟(1);P1_2=1;P1_3=0;如果(标志 2=1)P0=tabday_h;如果(标志2=0)P0=tabsec_h;如果(标志2=2)P0=标签0;延迟(1);P1_3=1;P1_4=0;如果(标志 2=1)P0=tab月_l|0 x80;否则如果(标志 2=0)P0=tabmin_l|0 x80;否则如果(标志 2=2)P0=标签0;延迟(1);P1_4=1;P1_5=0;如果(标志 2=1)P0

31、=tab月_h;否则如果(标志 2=0)P0=tabmin_h;否则如果(标志 2=2)P0=标签0;延迟(1);P1_5=1;P1_6=0;如果(标志 2=1)P0=tabyear_l|0 x80;否则如果(标志 2=0)P0=tabhour_l|0 x80;否则如果(标志 2=2)P0=标签0;延迟(1);P1_6=1;P1_7=0;如果(标志 2=1)P0=tabyear_h;否则如果(标志 2=0)P0=tabhour_h;否则如果(标志 2=2)P0=标签0;延迟(1);P1_7=1;无效键扫描()显示();while(!key_set) /日期/时间键显示();如果(键集)标志2+;如果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论