多功能电子万年历.doc_第1页
多功能电子万年历.doc_第2页
多功能电子万年历.doc_第3页
多功能电子万年历.doc_第4页
多功能电子万年历.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

多功能电子万年历摘要:以AT89S52单片机微处理芯片为核心,辅以DS1302实时时钟芯片,采用软、硬件结合的方法,设计一款多功能电子万年历。整个设计分为主控模块、时钟模块、键盘输入模块、显示模块、电源模块等部分,可以显示年、月、日、时、分、秒等信息,与此同时通过内部程序指令还具有修改和查询等功能。关键词:万年历;单片机;数码管动态显示 Multi-functional electronic calendar design Student majoring in electronic information science and technology Chen Xiao dong Tutor Wang xiu xiaAbstract:Based on AT89S52 SCM micro processing chip in the core, and with the DS1302 clock chip with hardware and software of the method of combining, design of a multi-function electronic calendar. The whole design is divided into control module, clock module, keyboard input module, display modules, power module part. And it can display the date , time, points, years and other information. Meanwhile through the internal program instructions it has modification and query function.Key words: calendar microcontroller digital tube dynamic show引言 目前单片机及其应用渗透到我们生活的各个领域,单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化、使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、频率、湿度、温度、速度、硬度、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。AT89S52单片机完全兼容51系列单片机,有独到之处,抗干扰性能强,超低功耗,可以远程升级,内部有专用复位电路,价格也较便宜。基于这些特点,本设计以AT89S52单片机为核心设计一款多功能电子万年历,系统不但接口设计简单,读取方便、显示直观、功能多样、电路简洁、便于控制,而且可以进行调整。1 系统基本方案1.1 系统整体框图采用单片机设计应用系统时,应考虑到在满足设计要求的情况下,硬件电路应尽可能精简,最大限度地用程序设计完成系统的各项功能。这样做的目的主要是为了:一是节省硬件成本;二是缩短设计周期,便于系统今后的维护与升级。鉴于此,该电子万年历主要采用单片机AT89S52、实时时钟芯片DS1302及LED数码管实现。系统由5部分组成,如图1所示: 主控模 块显 示 模 块键盘输入模块 直流稳压电源模块时钟电路模块图1 系统整体框图1.2 应用模块:电源模块:采用5V的直流稳压电源供电给整个系统工作。单片机控制模块:采用支持ISP在线编程技术的单片机AT89S52便于写程序。键盘输入模块: 采用轻触式开关做键盘输入。时钟电路模块:采用DS1302时钟芯片。显示模块:采用数码管来显示。1.3 各模块方案选择和论证单片机的选择方案一:AT89C51单片机采用AT89C51单片机,它可以与其它51系列的单片机兼容、内部ROM全部采用FLASH ROM、最高时钟频率可达24MHz且能以3V超低压工作。但不支持ISP在线编程技术、内部ROM仅为4KB不利于功能扩展。方案二:AT89S52单片机采用AT89S52单片机,它是一种高性能,低功耗的8位CMOS微处理芯片,除具备AT98C51的功能外,还支持ISP在线编程技术且内部ROM为8KB,有利于功能扩展。它采用电源控制模式:时钟可停止和恢复,空闲模式,掉电模式。还包括6个中断优先级,4个8位I/O口,三个16位定时/计数器。比较以上两种方案,我们采用方案二AT89S52单片机。显示模块的选择方案一:数码管静态显示采用LED数码管静态显示方法,电路容易理解,驱动程序简单,但需要每个数码管都要一块74LS47来驱动显示,增高了成本,浪费系统硬件资源,而需要占用单片机多个I/O口。方案二:数码管动态显示采用LED数码管动态扫显示方法,只需三块数码管驱动器74LS47芯片和一块译码器芯片74LS138就可以驱动多个数码管,并且只需要2个P口就可以同时驱动多个数码管显示。动态显示的效果和静态显示是一样的,但却能够节省大量的I/O端口,而且功耗更低,硬件利用效率高,驱动程序容易理解和编程。比较以上两种方案,我们采用方案二数码管动态显示。1.4 系统各模块的最终方案结合整个系统的功能、成本、美观度等综合考虑,用AT89S52单片机为主控模块、轻触式按键为键盘输入模块、用三块74LS47、一块74LS138和8个三极管来驱动数码管做显示模块。2 系统的硬件设计与实现2.1 系统硬件概述 本系统采用AT89S52单片机作为主控制模块,以DS1302时钟芯片为基础,由单片机将DS1302芯片的数据读出后进行处理,最后将处理后的数据输出给数码管来显示出年、月、日、时、分等信息。2.2 单片机控制模块电路的设计图2 单片机控制模块 如图2所示,AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。23 时钟电路的设计图3 时钟电路与主电路的连接如图3所示,DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302的工作电压在2.5V到5.5V范围内,2.5V耗电小于300nA 。2.4 键盘输入的设计按键输入部分主要用于时间的调整与设置,最终确定有四个按键来实现上述功能。由于按键比较少,所以普通按钮接在I/O,启用I/O口德内部上拉电阻,用查询法完成读键功能。2.5数码管显示数码显示原理是采用的七段数码管的实现原理,LED数码管动态扫显示方法,需三块数码管驱动器74LS47芯片和一块译码器74LS138芯片驱动,并需要2个P口就可以驱动多个数码管显示。硬件利用效率高,驱动程序容易理解和编程。原理图见图4:图4 七段数码管原理3 系统的软件设计31 软件系统分析程序流程图如图5:图5 程序流程图3.2 程序编写 主程序说明:单片机复位后进入初始化,把年、月、日、时、分、秒、星期等信息写入DS1302后时钟芯片开始工作,单片机通过DS1302的I/O口读取信息进行处理后把数据送给数码管显示出来。 因为使用了时钟芯片DS1302,日历程序只需从各个寄存器中读出年、月、日、周、时、分等数据,再加以处理即可。在首次对DS1302进行操作前,必须对他尽心初始化,然后从中读出数据,经过处理后,送到显示缓冲单元。 计数和进位功能设计思想如下:(1)计秒模块:以秒脉冲作为计秒电路的计数时钟信号,待计数至60瞬间进位,计分电路加1,而计秒电路则清零并重新计秒。(2)计分模块、计时模块:其设计思想与计秒模块类似。(3)计星期模块:将计时电路产生的进位脉冲信号作为计星期模块的计数时钟信号,待计数至6瞬间,计星期模块返回0重新开始计数。(4)计日模块:将计时模块产生的进位脉冲信号作为计日模块的计数时钟信号,通过系统辨认,确定本月总天数X(包括28、29、30、31四种情况),待计数至X+1瞬间,进位,计月模块加1,而计日模块返回1重新开始计数。(5)计月模块:将计日模块产生的进位脉冲信号作为计月模块的计数时钟信号,待计数至12瞬间,进位,计年模块加1,而计月模块返回1重新开始计数。(6)计年模块:将计月模块产生的进位脉冲信号作为计年模块的计数时钟信号,待计数至365瞬间,计年模块返回0重新开始计数。主程序如下: TEMPH EQU 51H TEMPL EQU 50H REG2 EQU 52H REG3 EQU 53H REG4 EQU 54H DAT EQU P0.7 CONFIG12 EQU 1FH ORG 0000H LJMP MIANMIAN: MOV 30H,#50H ; 秒 MOV 31H,#10H ; 分 MOV 32H,#19H ; 时 MOV 33H,#22H ; 日 MOV 34H,#11H ; 月 MOV 35H,#04H ; 星期 MOV 36H,#07H ; 年底 MOV 37H,#20H ; 年高 MOV 38H,#04H ; 日 MOV 39H,#10H ; 月 MOV 3AH,#20H ; MOV 56H,#00H ; 数码管选择标志 MOV 57H,#00H ; 闪烁标志 MOV 58H,#00H CLR P0.5 CLR P0.6 LCALL ZIJIAN ; 调用自检子程序 LCALL XIEDS1302 ; 调用写操作子程序START: LCALL DUDS1302 ; 调用读取DS1302数据子程序 MOV A,31H ANL A,#0FH JNZ ST LCALL SXKEST: LCALL WENDU ; LCALL XIAOMIAO ; 调用扫描子程序 MOV A,32H CJNE A,#00H,ST4 ; LCALL DANGQIANG ; 调用计算当前是一年中的第几天子程序 LCALL DUIZHANG ; ST4: ; MOV A,56H JZ ST5 LCALL DANGQIANG ; 调用计算当前是一年中的第几天子程序 LCALL DUIZHANG ; 调用农历处理子程序ST5: LCALL CHULI ; 调用显示处理子程序 LCALL SHANSHUO ; LCALL XIANSHI ; 调用显示子程序 MOV A,56H CJNE A,#20,ST1 ; 等于20时说明修改完成,把修改后的数据写入DS1302 LCALL XIEDS1302 ; 写操作子程序ST1: MOV A,56H CJNE A,#0,ST2 ; 不等于0,说明有开关按下,则不再读取DS1302的数据 LJMP START ; 等于0,说明没有开关按下,则一直读取DS1302的数据ST2: LJMP ST 程序编写完毕。 4 系统测试与仿真4.1 测试仪器仪器数量仪器数量可提供+5V的直流稳压电源一台数字万用表一台电脑一台ISP下载线一条4.2 指标测试1 年、月、日、时、分、秒可关联进位。2 可修改年、月、时信息。3 当在查询完,时间可以正常计时。4.3测试结果分析与结论1. 能够用数码管来显示年、月、日。2. 能够用数码来显示时、分、秒。4.4 仿真结果仿真是对一个系统的虚拟描述,可以很直观的看到所设计系统的实验结果,本设计采用Proteus软件进行仿真。Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。Proteus软件具有其它EDA工具软件的功能:原理布图、PCB自动或人工布线、SPICE电路仿真,除此外还有革命性的特点:(1)互动的电路仿真:用户甚至可以实时采用诸如RAM,ROM,键盘, LED,LCD,AD/DA,部分SPI器件,部分IIC器件。(2)仿真处理器及其外围电路:可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。仿真图如图6:图6 年月日的显示5 总结在老师和同学的帮助与支持下,经历了多次修改,完成了此次的设计.我设计的万年历使用了单片机DS1302,其工作电压低,功耗小。此设计具备年、月、日的显示、星期的显示、24小时循环计时,时间校准等功能,操也比较简便。此外 通过本次的设计过程,我对单片机有了更深的了解和认识,也从实践的例子中感受到了单片机设计给我们设计带来的改变与进步。在此过程中,我学习了单片机的编程与接口的设计,对课件的而设计有了初步概念,了解了电路的设计步骤,熟悉了他们之间的配合使用以及部分仪器的使用,受益匪浅。这为我今后进一步的深化学习积累了一定的宝贵经验,是我在运用专业课知识解决问题时更加得心应手,得到了能力的锻炼。参考文献:1 刘 勇. 数字电路M.1版.北京:电子工业出版社,2004:63-722 王法能. 单片机原理及应用M.2版.北京:科学出版社,2001:36-55 3 赵伟军. PROTEL 99 SE 教程M.3版.北京:人民邮电出版社,2004:92-1544 黄 强. 模拟电子技术M.3版.北京:科学出版社,2003:89-1065 阎 石. 数字电子技术基础M.5版.北京:高等教育出版社, 2006:64-936 周明德. 微型计算机系统原理与应用M.1版.北京:清华大学出版社,2007,128-2077 张洪润. 单片机原理及应用M.2版.北京 :清华大学出版社,2008:35-688 张洪润. 单片机应用技术教程M.1版.北京:清华大学出版社,1977:208-3079 付家才. 单片机控制工程实践技术M.3版.北京:化学工业出版社,2004:207-34710 李 华. MCS-51系列单片机使用接口技术M.2版.北京:北京航空航天大学出版社, 1993:137-228附录A:模块应用程序1 自检程序 ZIJIAN: ; 自检子程序 MOV 3BH,#255 CLR P0.4ZJ1: MOV 3CH,#8 MOV A,#08HZJ: MOV P1,#88H MOV P2,A LCALL DEL ADD A,#10H DJNZ 3CH,ZJ DJNZ 3BH,ZJ1 SETB P0.4 RETDEL: MOV 3DH,#255 DJNZ 3DH,$ RET2 时钟芯片程序2.1 写操作 XIEDS1302: ; 写操作子程序 MOV R1,#80H MOV R0,#55H MOV 55H,#80H ; 停止振荡 LCALL XIE MOV R1,#8EH MOV R0,#55H MOV 55H,#00H ; 允许写 LCALL XIE MOV R0,#30H MOV R1,#80H MOV R3,#7 XD2: LCALL XIE INC R1 INC R1 INC R0 DJNZ R3,XD2 MOV R1,#8EH MOV R0,#55H MOV 55H,#80H ;禁止写 LCALL XIE MOV R1,#90H MOV R0,#55H MOV 55H,#0A6H LCALL XIE MOV R1,#80H MOV R0,#55H MOV 55H,#00H ;开始振荡 LCALL XIE RETXIE: ; 对DS1302进行写操作 CLR P3.2 NOP SETB P3.4 NOP MOV R2,#8 MOV A,R1XD: RRC A NOP NOP CLR P3.2 NOP NOP NOP MOV P3.3,C NOP NOP NOP SETB P3.2 NOP NOP DJNZ R2,XD CLR P3.2 NOP MOV R2,#8 MOV A,R0XD1: RRC A NOP CLR P3.2 NOP NOP NOP MOV P3.3,C NOP NOP NOP SETB P3.2 NOP NOP NOP DJNZ R2,XD1 CLR P3.4 RET2.2 读操作 DUDS1302: ; 读取DS1302的数据 MOV R0,#30H MOV R1,#81H MOV R3,#7DD2: CLR P3.2 NOP NOP SETB P3.4 NOP MOV R2,#8 MOV A,R1DD: RRC A NOP MOV P3.3,C NOP NOP NOP SETB P3.2 NOP NOP NOP CLR P3.2 NOP NOP DJNZ R2,DD MOV R2,#8DD1: CLR P3.2 NOP NOP NOP MOV C,P3.3 NOP NOP NOP NOP NOP RRC A NOP NOP NOP NOP SETB P3.2 NOP DJNZ R2,DD1 MOV R0,A CLR P3.4 INC R1 INC R1 INC R0 DJNZ R3,DD2 RET3显示处理程序 CHULI: ; 第1列数码管显示处理 MOV A,37H ANL A,#0F0H ; 取出年高位的十位 MOV 40H,A MOV A,35H ANL A,#0FH ; ADD A,40H ; 把年高位的十位合并在一个单元 MOV 40H,A ; 第2列数码管显示处理 MOV A,37H ANL A,#0FH ; 取出年高位的个位 SWAP A MOV 41H,A ; 第3列数码管显示处理 MOV A,36H ; ANL A,#0F0H ; 取出年低位的十位 MOV 42H,A MOV A,39H ANL A,#0F0H SWAP A ; 取出农历月的十位,并把它放到低四位 ADD A,42H ; 把年低位的十位和农历的十位合并在一个单元 MOV 42H,A MOV A,32H ANL A,#0F0H ; 取出小时的十位,并把它放到低四位 SWAP A ADD A,#20H ; 把小时的十位和显示位码合并 MOV 43H,A ; 第4列数码管显示处理 MOV A,36H ANL A,#0FH ; 取出年低位的个位,并把它放到高四位 SWAP A MOV 44H,A MOV A,39H ANL A,#0FH ; 取出农历月的个位 ADD A,44H ; 把年低位的个位和农历的个位合并在一个单元 MOV 44H,A MOV A,32H ANL A,#0FH ; 取出小时的个位 ADD A,#30H ; 把小时的个位和显示位码合并 MOV 45H,A ; 第5列数码管显示处理 MOV A,34H ; ANL A,#0F0H ; 取出月份的十位 MOV 46H,A MOV A,38H ANL A,#0F0H ; 取出农历日的十位,并把它放到低四位 SWAP A ADD A,46H ; 把月份的十位和农历日的十位合并在一个单元 MOV 46H,A MOV A,31H ANL A,#0F0H ; 取出分的十位,并把它放到低四位 SWAP A ADD A,#40H ; 把分的十位和显示位码合并 MOV 47H,A ; 第6列数码管显示处理 MOV A,34H ANL A,#0FH ; 取出月份的个位,并把它放到高四位 SWAP A MOV 48H,A MOV A,38H ANL A,#0FH ; 取出农历日的个位, ADD A,48H ; 把月份的个位和农历日的个位合并在一个单元 MOV 48H,A MOV A,31H ANL A,#0FH ; 取出分的个位, ADD A,#50H ; 把分的个位和显示位码合并 MOV 49H,A ; 第7列数码管显示处理 MOV A,33H ANL A,#0F0H ; 取出日的十位 MOV 4AH,A MOV A,3AH ANL A,#0F0H ; 取出温度的十位,并把它放到低四位 SWAP A ADD A,4AH ; 把日的十位和温度的十位合并在一个单元 MOV 4AH,A MOV A,30H ANL A,#0F0H ; 取出秒的十位,并把它放到低四位 SWAP A ADD A,#60H ; 把秒的十位和显示位码合并 MOV 4BH,A ; 第8列数码管显示处理 MOV A,33H ANL A,#0FH ; 取出日的个位,并把它放到高四位 SWAP A MOV 4CH,A MOV A,3AH ANL A,#0FH ; 取出温度的个位 ADD A,4CH ; 把日的个位和温度的个位合并在一个单元 MOV 4CH,A MOV A,30H ANL A,#0FH ; 取出秒的个位, ADD A,#70H ; 把秒的个位和显示位码合并 MOV 4DH,A RET4 显示程序 XIANSHI: MOV 4EH,#3 ; 显示子程序 XS: MOV P1,40H MOV P2,#00H ; 输出显示位码 LCALL DEL MOV P1,41H MOV P2,#10H ; 输出显示位码 LCALL DEL MOV P1,42H MOV P2,43H LCALL DEL MOV P1,44H MOV P2,45H LCALL DEL MOV P1,46H MOV P2,47H LCALL DEL MOV P1,48H MOV P2,49H LCALL DEL MOV P1,4AH MOV P2,4BH LCALL DEL MOV P1,4CH MOV P2,4DH LCALL DEL DJNZ 4EH,XS MOV P1,#0FFH MOV P2,#0FFH INC 57H MOV A,57H CJNE A,#9,XS1 MOV 57H,#00HXS1: RET5 农历处理程序DUIZHANG: ; 农历处理子程序 MOV 60H,#00H MOV 61H,#00H MOV 62H,#00H MOV 63H,#00H MOV 64H,#00H MOV 65H,#00H MOV 66H,#4 MOV 68H,#00H MOV A,36H ANL A,#0F0H ; 取出年低的十位 SWAP A MOV B,#10 MUL AB MOV 60H,A MOV A,36H ANL A,#0FH ; 取出年低的个位 ADD A,60H ; 把年低转换为十六进制 MOV B,#4 ; 把十六进制的年低乘以4,即可得出对照表的地址 MUL AB MOV 65H,A ; 把地址暂存65H MOV R0,#61HDZ: MOV A,65H ; 把所要查的地址给A MOV DPTR,#NONGLI MOVC A,A+DPTR MOV R0,A ; 把查到的数据分别存放到61H到64H四个单元中 INC 65H INC R0 DJNZ 66H,DZ LCALL YUEYI ; 农历月份信息处理子程序 MOV A,5AH ; 天数取出 CLR C SUBB A,61H ; 用天数减去相差天数 JZ DZ0 ; A为0,说明5AH的相差天数相等 JC DZ1 ; 有借位说明还没有到春节 MOV 5AH,A ; 减去相差天数后存回5AHLLL1: LCALL GUEJIE ; 春节已过处理子程序 RETDZ0: ; 判断5BH是否为0 MOV A,5BH ; JZ XXX1 ; 为0,则今天是除夕 MOV A,61H ; 不为0,说明当前总天数大于255天 CLR C SUBB A,5AH MOV 5AH,A MOV A,#255 MOV 5BH,#00H CLR C SUBB A,5AH MOV 5AH,A ADD A,#01H MOV 5AH,A JNC LLL2 INC 5BHLLL2: LJMP LLL1XXX1: ; 今天是除夕 LCALL QUNIANYUE ; 去年月份查找子程 RRC A ; 把去年农历12月的大小信息送给C JC QN ; 去年农历12月为小月 MOV 39H,#12H MOV 38H,#30H RETQN: MOV 39H,#12H MOV 38H,#29H RETDZ1: MOV A,5BH ; JZ XXX8 ; MOV A,61H CLR C SUBB A,5AH MOV 5AH,A MOV A,#255 MOV 5BH,#00H CLR CSUBB A,5AHMOV 5AH,AADD A,#01HMOV 5AH,AJNC LLL3INC 5BHLLL3:LJMP LLL1XXX8:MOV A,61H ; 把相差天数送给ACLR CSUBB A,5AH ; 用相差天数减去当前总天数MOV 5AH,ALCALL YOUJIE ; RETQUNIANYUE: ; 去年月份查找子程MOV A,36HDEC A ; 当前年减1为去年MOV 6CH,A ; 把BCD码的去年转换为十六进制ANL A,#0F0HMOV B,#10MUL ABMOV 60H,AMOV A,6CHANL A,#0FHADD A,60H ; 完成十六进制转换MOV B,#4MUL ABINC AINC A ; 找到去年农历7到12月大小信息的存放地址MOV DPTR,#NONGLIMOVC A,A+DPTR ; 找到去年农历7到12月大小信息RET6 日历对照表NONGLI: ; 农历对照表 ;相差天数;月份大,小; 闰月DB 23H,15H,51H,00H, 17H,11H,52H,41H, 2AH,12H,65H,00H, ; 1DB 1FH,11H,32H,00H, 15H,42H,52H,2

温馨提示

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

评论

0/150

提交评论